home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
include
/
rpcdcep.h
< prev
next >
Wrap
C/C++ Source or Header
|
1998-04-25
|
13KB
|
614 lines
/*++
Copyright 1991-1998 Microsoft Corporation
Module Name:
rpcdcep.h
Abstract:
This module contains the private RPC runtime APIs for use by the
stubs and by support libraries. Applications must not call these
routines.
--*/
#ifndef __RPCDCEP_H__
#define __RPCDCEP_H__
// Set the packing level for RPC structures for Dos and Windows.
#if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
#pragma pack(2)
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _RPC_VERSION {
unsigned short MajorVersion;
unsigned short MinorVersion;
} RPC_VERSION;
typedef struct _RPC_SYNTAX_IDENTIFIER {
GUID SyntaxGUID;
RPC_VERSION SyntaxVersion;
} RPC_SYNTAX_IDENTIFIER, __RPC_FAR * PRPC_SYNTAX_IDENTIFIER;
typedef struct _RPC_MESSAGE
{
RPC_BINDING_HANDLE Handle;
unsigned long DataRepresentation;
void __RPC_FAR * Buffer;
unsigned int BufferLength;
unsigned int ProcNum;
PRPC_SYNTAX_IDENTIFIER TransferSyntax;
void __RPC_FAR * RpcInterfaceInformation;
void __RPC_FAR * ReservedForRuntime;
RPC_MGR_EPV __RPC_FAR * ManagerEpv;
void __RPC_FAR * ImportContext;
unsigned long RpcFlags;
} RPC_MESSAGE, __RPC_FAR * PRPC_MESSAGE;
typedef RPC_STATUS
RPC_ENTRY RPC_FORWARD_FUNCTION(
IN UUID __RPC_FAR * InterfaceId,
IN RPC_VERSION __RPC_FAR * InterfaceVersion,
IN UUID __RPC_FAR * ObjectId,
IN unsigned char __RPC_FAR * Rpcpro,
IN void __RPC_FAR * __RPC_FAR * ppDestEndpoint);
/*
* Types of function calls for datagram rpc
*/
#define RPC_NCA_FLAGS_DEFAULT 0x00000000 /* 0b000...000 */
#define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001 /* 0b000...001 */
#define RPC_NCA_FLAGS_BROADCAST 0x00000002 /* 0b000...010 */
#define RPC_NCA_FLAGS_MAYBE 0x00000004 /* 0b000...100 */
#define RPC_BUFFER_COMPLETE 0x00001000 /* used by pipes */
#define RPC_BUFFER_PARTIAL 0x00002000 /* used by pipes */
#define RPC_BUFFER_EXTRA 0x00004000 /* used by pipes */
#define RPC_BUFFER_ASYNC 0x00008000 /* used by async rpc */
#define RPC_BUFFER_NONOTIFY 0x00010000 /* used by async pipes */
#define RPCFLG_MESSAGE 0x01000000UL
#define RPCFLG_AUTO_COMPLETE 0x08000000UL
#define RPCFLG_LOCAL_CALL 0x10000000UL
#define RPCFLG_INPUT_SYNCHRONOUS 0x20000000UL
#define RPCFLG_ASYNCHRONOUS 0x40000000UL
#define RPCFLG_NON_NDR 0x80000000UL
#if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
#define RPC_FLAGS_VALID_BIT 0x8000
#endif
#if defined(__RPC_WIN32__) || defined(__RPC_MAC__)
#define RPC_FLAGS_VALID_BIT 0x00008000
#endif
typedef
void
(__RPC_STUB __RPC_FAR * RPC_DISPATCH_FUNCTION) (
IN OUT PRPC_MESSAGE Message
);
typedef struct {
unsigned int DispatchTableCount;
RPC_DISPATCH_FUNCTION __RPC_FAR * DispatchTable;
int Reserved;
} RPC_DISPATCH_TABLE, __RPC_FAR * PRPC_DISPATCH_TABLE;
typedef struct _RPC_PROTSEQ_ENDPOINT
{
unsigned char __RPC_FAR * RpcProtocolSequence;
unsigned char __RPC_FAR * Endpoint;
} RPC_PROTSEQ_ENDPOINT, __RPC_FAR * PRPC_PROTSEQ_ENDPOINT;
/*
Both of these types MUST start with the InterfaceId and TransferSyntax.
Look at RpcIfInqId and I_RpcIfInqTransferSyntaxes to see why.
*/
#define NT351_INTERFACE_SIZE 0x40
#define RPC_INTERFACE_HAS_PIPES 0x0001
typedef struct _RPC_SERVER_INTERFACE
{
unsigned int Length;
RPC_SYNTAX_IDENTIFIER InterfaceId;
RPC_SYNTAX_IDENTIFIER TransferSyntax;
PRPC_DISPATCH_TABLE DispatchTable;
unsigned int RpcProtseqEndpointCount;
PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
RPC_MGR_EPV __RPC_FAR *DefaultManagerEpv;
void const __RPC_FAR *InterpreterInfo;
unsigned int Flags ;
} RPC_SERVER_INTERFACE, __RPC_FAR * PRPC_SERVER_INTERFACE;
typedef struct _RPC_CLIENT_INTERFACE
{
unsigned int Length;
RPC_SYNTAX_IDENTIFIER InterfaceId;
RPC_SYNTAX_IDENTIFIER TransferSyntax;
PRPC_DISPATCH_TABLE DispatchTable;
unsigned int RpcProtseqEndpointCount;
PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
unsigned long Reserved;
void const __RPC_FAR * InterpreterInfo;
unsigned int Flags ;
} RPC_CLIENT_INTERFACE, __RPC_FAR * PRPC_CLIENT_INTERFACE;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcGetBuffer (
IN OUT RPC_MESSAGE __RPC_FAR * Message
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcSendReceive (
IN OUT RPC_MESSAGE __RPC_FAR * Message
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcFreeBuffer (
IN OUT RPC_MESSAGE __RPC_FAR * Message
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcSend (
IN OUT PRPC_MESSAGE Message
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcReceive (
IN OUT PRPC_MESSAGE Message,
IN unsigned int Size
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcFreePipeBuffer (
IN OUT RPC_MESSAGE __RPC_FAR * Message
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcReallocPipeBuffer (
IN PRPC_MESSAGE Message,
IN unsigned int NewSize
) ;
typedef void * I_RPC_MUTEX;
RPCRTAPI
void
RPC_ENTRY
I_RpcRequestMutex (
IN OUT I_RPC_MUTEX * Mutex
);
RPCRTAPI
void
RPC_ENTRY
I_RpcClearMutex (
IN I_RPC_MUTEX Mutex
);
RPCRTAPI
void
RPC_ENTRY
I_RpcDeleteMutex (
IN I_RPC_MUTEX Mutex
);
RPCRTAPI
void __RPC_FAR *
RPC_ENTRY
I_RpcAllocate (
IN unsigned int Size
);
RPCRTAPI
void
RPC_ENTRY
I_RpcFree (
IN void __RPC_FAR * Object
);
RPCRTAPI
void
RPC_ENTRY
I_RpcPauseExecution (
IN unsigned long Milliseconds
);
typedef
void
(__RPC_USER __RPC_FAR * PRPC_RUNDOWN) (
void __RPC_FAR * AssociationContext
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcMonitorAssociation (
IN RPC_BINDING_HANDLE Handle,
IN PRPC_RUNDOWN RundownRoutine,
IN void * Context
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcStopMonitorAssociation (
IN RPC_BINDING_HANDLE Handle
);
RPCRTAPI
RPC_BINDING_HANDLE
RPC_ENTRY
I_RpcGetCurrentCallHandle(
void
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcGetAssociationContext (
IN RPC_BINDING_HANDLE BindingHandle,
OUT void __RPC_FAR * __RPC_FAR * AssociationContext
);
RPCRTAPI
void *
RPC_ENTRY
I_RpcGetServerContextList (
IN RPC_BINDING_HANDLE BindingHandle
);
RPCRTAPI
void
RPC_ENTRY
I_RpcSetServerContextList (
IN RPC_BINDING_HANDLE BindingHandle,
OUT void * ServerContextList
);
#ifdef RPC_UNICODE_SUPPORTED
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcNsBindingSetEntryNameW (
IN RPC_BINDING_HANDLE Binding,
IN unsigned long EntryNameSyntax,
IN unsigned short __RPC_FAR * EntryName
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcNsBindingSetEntryNameA (
IN RPC_BINDING_HANDLE Binding,
IN unsigned long EntryNameSyntax,
IN unsigned char __RPC_FAR * EntryName
);
#ifdef UNICODE
#define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameW
#else
#define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameA
#endif
#else
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcNsBindingSetEntryName (
IN RPC_BINDING_HANDLE Binding,
IN unsigned long EntryNameSyntax,
IN unsigned char __RPC_FAR * EntryName
);
#endif
#ifdef RPC_UNICODE_SUPPORTED
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingInqDynamicEndpointW (
IN RPC_BINDING_HANDLE Binding,
OUT unsigned short __RPC_FAR * __RPC_FAR * DynamicEndpoint
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingInqDynamicEndpointA (
IN RPC_BINDING_HANDLE Binding,
OUT unsigned char __RPC_FAR * __RPC_FAR * DynamicEndpoint
);
#ifdef UNICODE
#define I_RpcBindingInqDynamicEndpoint I_RpcBindingInqDynamicEndpointW
#else
#define I_RpcBindingInqDynamicEndpoint I_RpcBindingInqDynamicEndpointA
#endif
#else
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingInqDynamicEndpoint (
IN RPC_BINDING_HANDLE Binding,
OUT unsigned char __RPC_FAR * __RPC_FAR * DynamicEndpoint
);
#endif
#define TRANSPORT_TYPE_CN 0x01
#define TRANSPORT_TYPE_DG 0x02
#define TRANSPORT_TYPE_LPC 0x04
#define TRANSPORT_TYPE_WMSG 0x08
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingInqTransportType (
IN RPC_BINDING_HANDLE Binding,
OUT unsigned int __RPC_FAR * Type
);
typedef struct _RPC_TRANSFER_SYNTAX
{
UUID Uuid;
unsigned short VersMajor;
unsigned short VersMinor;
} RPC_TRANSFER_SYNTAX;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcIfInqTransferSyntaxes (
IN RPC_IF_HANDLE RpcIfHandle,
OUT RPC_TRANSFER_SYNTAX __RPC_FAR * TransferSyntaxes,
IN unsigned int TransferSyntaxSize,
OUT unsigned int __RPC_FAR * TransferSyntaxCount
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_UuidCreate (
OUT UUID __RPC_FAR * Uuid
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingCopy (
IN RPC_BINDING_HANDLE SourceBinding,
OUT RPC_BINDING_HANDLE __RPC_FAR * DestinationBinding
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingIsClientLocal (
IN RPC_BINDING_HANDLE BindingHandle OPTIONAL,
OUT unsigned int __RPC_FAR * ClientLocalFlag
);
RPCRTAPI
void
RPC_ENTRY
I_RpcSsDontSerializeContext (
void
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcLaunchDatagramReceiveThread(
void __RPC_FAR * pAddress
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerRegisterForwardFunction (
IN RPC_FORWARD_FUNCTION __RPC_FAR * pForwardFunction
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcConnectionInqSockBuffSize(
OUT unsigned long __RPC_FAR * RecvBuffSize,
OUT unsigned long __RPC_FAR * SendBuffSize
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcConnectionSetSockBuffSize(
IN unsigned long RecvBuffSize,
IN unsigned long SendBuffSize
);
#ifdef WINNT
#ifdef MSWMSG
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerStartListening(
HWND hWnd
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerStopListening(
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcGetThreadWindowHandle(
OUT HWND *WindowHandle
) ;
typedef RPC_STATUS (*RPC_BLOCKING_FN) (
IN void *wnd,
IN void *Context,
IN HANDLE hSyncEvent
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcAsyncSendReceive(
IN OUT PRPC_MESSAGE pRpcMessage,
IN OPTIONAL void *Context,
HWND hWnd
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingSetAsync(
IN RPC_BINDING_HANDLE Binding,
IN RPC_BLOCKING_FN BlockingFn
) ;
RPCRTAPI
LONG
RPC_ENTRY
I_RpcWindowProc(
IN HWND hWnd,
IN UINT Message,
IN WPARAM wParam,
IN LPARAM lParam
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcSetWMsgEndpoint (
IN WCHAR __RPC_FAR * Endpoint
) ;
#endif
#else
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerStartListening(
void * hWnd
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerStopListening(
) ;
typedef RPC_STATUS (*RPC_BLOCKING_FN) (
IN void * hWnd,
IN void * Context,
IN OPTIONAL void * hSyncEvent
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcBindingSetAsync(
IN RPC_BINDING_HANDLE Binding,
IN RPC_BLOCKING_FN BlockingFn,
IN unsigned long ServerTid
) ;
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcSetThreadParams(
IN int fClientFree,
IN OPTIONAL void *Context,
IN OPTIONAL void * hWndClient
);
RPCRTAPI
unsigned int
RPC_ENTRY
I_RpcWindowProc(
IN void * hWnd,
IN unsigned int Message,
IN unsigned int wParam,
IN unsigned long lParam
) ;
#endif
#ifndef WINNT
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerUnregisterEndpointA (
IN unsigned char * Protseq,
IN unsigned char * Endpoint
);
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerUnregisterEndpointW (
IN unsigned short * Protseq,
IN unsigned short * Endpoint
);
#ifdef UNICODE
#define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointW
#else
#define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointA
#endif
#endif // WINNT
RPCRTAPI
RPC_STATUS
RPC_ENTRY
I_RpcServerInqTransportType(
OUT unsigned int __RPC_FAR * Type
) ;
#ifdef __cplusplus
}
#endif
// Reset the packing level for Dos and Windows.
#if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
#pragma pack()
#endif
#endif /* __RPCDCEP_H__ */