windows-nt/Source/XPSP1/NT/com/rpc/runtime/epmap/mqcommon.h
2020-09-26 16:20:57 +08:00

271 lines
8.6 KiB
C

//----------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// Module Name: mqcommon.h
//
//
// Abstract:
//
// This is the Message Queue (Falcon) datagram client dll.
//
// Author:
//
// Edward Reus (edwardr) 17-Jun-1996
//
// Revision History:
//
//----------------------------------------------------------------
#ifndef MQCOMMON_H
#define MQCOMMON_H
#define UNICODE // Use unicode API
// Use the following define to turn on verbose debug messages:
// #define MAJOR_DEBUG
//----------------------------------------------------------------
// Constants:
//----------------------------------------------------------------
#define DG_MQ_TRANSPORT_VERSION 1 // Not used.
#define MAX_PATHNAME_LEN 256
#define MAX_FORMAT_LEN 128
#define MAX_COMPUTERNAME_LEN 32
#define MAX_VAR 20
#define MAX_SEND_VAR 20
#define MAX_RECV_VAR 20
#define MAX_SID_SIZE 256 // A typical SID is 20-30 bytes...
#define MAX_USERNAME_SIZE 256
#define MAX_DOMAIN_SIZE 256
#define UUID_LEN 40
#define TRANSPORTID 0x1D // Not official yet...
#define TRANSPORTHOSTID 0x1E
#define PROTSEQ "ncadg_mq"
#define ENDPOINT_MAPPER_EP "EpMapper"
#define WS_SEPARATOR TEXT("\\")
#define WS_PRIVATE_DOLLAR TEXT("\\PRIVATE$\\")
// These constants are use for temporary queue management:
#define Q_SVC_PROTSEQ TEXT("ncalrpc")
#define Q_SVC_ENDPOINT TEXT("epmapper")
// These are the MQ Queue Type UUIDs for RPC:
#define SVR_QTYPE_UUID_STR TEXT("bbd97de0-cb4f-11cf-8e62-00aa006b4f2f")
#define CLNT_QTYPE_UUID_STR TEXT("8e482920-cead-11cf-8e68-00aa006b4f2f")
#define CLNT_ADMIN_QTYPE_UUID_STR TEXT("c87ca5c0-ff67-11cf-8ebd-00aa006b4f2f")
// Packet sizes:
#define BASELINE_PDU_SIZE 65535
#define PREFERRED_PDU_SIZE 65535
#define MAX_PDU_SIZE 65535
#define MAX_PACKET_SIZE 65535
// was: 0x7fffffff
#define DEFAULT_BUFFER_SIZE 0
#define DEFAULT_PRIORITY 3
//----------------------------------------------------------------
// Types:
//----------------------------------------------------------------
typedef struct _MQ_INFO
{
WCHAR wsMachine[MAX_COMPUTERNAME_LEN];
WCHAR wsQName[MQ_MAX_Q_NAME_LEN];
WCHAR wsQPathName[MAX_PATHNAME_LEN];
WCHAR wsQFormat[MAX_FORMAT_LEN];
WCHAR wsAdminQFormat[MAX_FORMAT_LEN];
UUID uuidQType;
QUEUEHANDLE hQueue;
QUEUEHANDLE hAdminQueue; // Sometimes used by the client.
DWORD dwBufferSize;
DWORD cThreads; // Used by server.
BOOL fInitialized;
// How to send this call message:
BOOL fAck;
ULONG ulDelivery;
ULONG ulPriority;
ULONG ulJournaling;
ULONG ulTimeToReachQueue; // Seconds.
ULONG ulTimeToReceive; // Seconds.
BOOL fAuthenticate;
BOOL fEncrypt;
} MQ_INFO;
typedef struct _MQ_ADDRESS
{
WCHAR wsMachine[MAX_COMPUTERNAME_LEN];
WCHAR wsQName[MQ_MAX_Q_NAME_LEN];
WCHAR wsQFormat[MAX_FORMAT_LEN];
QUEUEHANDLE hQueue;
BOOL fConnectionFailed;
BOOL fAuthenticated; // Server security tracking.
ULONG ulPrivacyLevel; // Server security tracking.
ULONG ulAuthenticationLevel; // Server security tracking.
UCHAR aSidBuffer[MAX_SID_SIZE]; // Server security tracking.
} MQ_ADDRESS;
typedef struct _MQ_OPTIONS
{
BOOL fAck;
ULONG ulDelivery;
ULONG ulPriority;
ULONG ulJournaling;
ULONG ulTimeToReachQueue;
ULONG ulTimeToReceive;
BOOL fAuthenticate;
BOOL fEncrypt;
} MQ_OPTIONS;
//----------------------------------------------------------------
// Prototypes:
//----------------------------------------------------------------
extern HRESULT CreateQueue( IN UUID *pQueueUuid,
IN WCHAR *pwsPathName,
IN WCHAR *pwsQueueLabel,
IN ULONG ulQueueFlags,
OUT WCHAR *pwsFormat,
IN OUT DWORD *pdwFormatSize );
extern BOOL ConstructQueuePathName( IN WCHAR *pwsMachineName,
IN WCHAR *pwsQueueName,
OUT WCHAR *pwsPathName,
IN OUT DWORD *pdwSize );
extern BOOL ConstructPrivateQueuePathName( IN WCHAR *pwsMachineName,
IN WCHAR *pwsQueueName,
OUT WCHAR *pwsPathName,
IN OUT DWORD *pdwSize );
extern HRESULT ClearQueue( QUEUEHANDLE hQueue );
extern BOOL ParseQueuePathName(
IN WCHAR *pwsPathName,
OUT WCHAR wsMachineName[MAX_COMPUTERNAME_LEN],
OUT WCHAR wsQueueName[MQ_MAX_Q_NAME_LEN] );
#ifdef MAJOR_DEBUG
extern void DbgPrintPacket( unsigned char *pPacket );
#endif
//
// The Svr... functions are defined in ..\falcons\mqsvr.c
extern HRESULT SvrSetupQueue( IN MQ_INFO *pEP,
IN WCHAR *pwsSvrMachine,
IN WCHAR *pwsEndpoint,
IN unsigned long ulEndpointFlags );
extern HRESULT SvrPeekQueue( IN MQ_INFO *pInfo,
IN DWORD timeoutMsec,
OUT ULONG *pdwBufferSize );
extern HRESULT SvrReceiveFromQueue( IN MQ_INFO *pInfo,
IN DWORD timeoutMsec,
OUT MQ_ADDRESS *pAddress,
OUT UCHAR *pBuffer,
IN OUT DWORD *pdwBufferSize );
extern HRESULT SvrSendToQueue( IN MQ_INFO *pInfo,
IN MQ_ADDRESS *pAddress,
IN UCHAR *pBuffer,
IN DWORD dwBufferSize );
extern HRESULT SvrShutdownQueue( IN MQ_INFO *pInfo );
extern HRESULT SvrInitializeHandleMap();
extern HRESULT SvrCloseAllHandles();
//
// The Clnt... functions are defined in mqclnt.c
extern HRESULT ClntSetupQueue( MQ_INFO *pEP,
WCHAR *pwsSvrMachine,
WCHAR *pwsEndpoint );
extern HRESULT ClntSetupAdminQueue( MQ_INFO *pEP );
extern HRESULT ClntReceiveFromQueue( IN MQ_INFO *pInfo,
IN DWORD timeoutMsec,
OUT MQ_ADDRESS *pAddress,
OUT UCHAR *pBuffer,
IN OUT DWORD *pdwBufferSize );
extern HRESULT ClntPeekQueue( IN MQ_INFO *pInfo,
IN DWORD timeoutMsec,
OUT DWORD *pdwBufferSize );
extern HRESULT ClntSendToQueue( IN MQ_INFO *pInfo,
IN MQ_ADDRESS *pAddress,
IN UCHAR *pBuffer,
IN DWORD dwBufferSize );
extern HRESULT ClntShutdownQueue( IN MQ_INFO *pInfo );
extern RPC_STATUS MQ_MapStatusCode( IN HRESULT hr,
IN RPC_STATUS defStatus );
#if FALSE
NOTE: These functions are not currently being used...
extern HRESULT LocateQueueViaQType( IN UUID *pQueueUuid,
OUT WCHAR *pwsFormat,
IN OUT DWORD *pdwFormatSize );
extern HRESULT LocateQueueViaQTypeAndMachine( IN UUID *pQueueUuid,
IN WCHAR *pwsMachine,
OUT WCHAR *pwsFormat,
IN OUT DWORD *pdwFormatSize );
extern HRESULT LocateQueueViaQName( IN WCHAR *pwsQueueName,
OUT WCHAR *pwsFormat,
IN OUT DWORD *pdwFormatSize );
extern HRESULT LocateQueueViaQNameAndMachine( IN WCHAR *pwsQName,
IN WCHAR *pwsMachine,
OUT WCHAR *pwsFormat,
IN OUT DWORD *pdwFormatSize );
extern BOOL FormatNameDirect( IN WCHAR *pwsMachineName,
IN WCHAR *pwsQueueName,
OUT WCHAR *pwsFormatName,
IN OUT DWORD *pdwSize );
#endif
#endif