467 lines
9.9 KiB
C
467 lines
9.9 KiB
C
/*++
|
||
|
||
Copyright (c) 1991-1995 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 RPCFLG_ASYNCHRONOUS 0x40000000UL
|
||
#define RPCFLG_INPUT_SYNCHRONOUS 0x20000000UL
|
||
|
||
#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;
|
||
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcGetBuffer (
|
||
IN OUT RPC_MESSAGE __RPC_FAR * Message
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcSendReceive (
|
||
IN OUT RPC_MESSAGE __RPC_FAR * Message
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcFreeBuffer (
|
||
IN OUT RPC_MESSAGE __RPC_FAR * Message
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcSend (
|
||
IN OUT PRPC_MESSAGE Message
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcReceive (
|
||
IN OUT PRPC_MESSAGE Message,
|
||
IN unsigned int Size
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcFreePipeBuffer (
|
||
IN OUT RPC_MESSAGE __RPC_FAR * Message
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcReallocPipeBuffer (
|
||
IN PRPC_MESSAGE Message,
|
||
IN unsigned int NewSize
|
||
) ;
|
||
|
||
typedef void * I_RPC_MUTEX;
|
||
|
||
void RPC_ENTRY
|
||
I_RpcRequestMutex (
|
||
IN OUT I_RPC_MUTEX * Mutex
|
||
);
|
||
|
||
void RPC_ENTRY
|
||
I_RpcClearMutex (
|
||
IN I_RPC_MUTEX Mutex
|
||
);
|
||
|
||
void RPC_ENTRY
|
||
I_RpcDeleteMutex (
|
||
IN I_RPC_MUTEX Mutex
|
||
);
|
||
|
||
void __RPC_FAR * RPC_ENTRY
|
||
I_RpcAllocate (
|
||
IN unsigned int Size
|
||
);
|
||
|
||
void RPC_ENTRY
|
||
I_RpcFree (
|
||
IN void __RPC_FAR * Object
|
||
);
|
||
|
||
void RPC_ENTRY
|
||
I_RpcPauseExecution (
|
||
IN unsigned long Milliseconds
|
||
);
|
||
|
||
typedef
|
||
void
|
||
(__RPC_USER __RPC_FAR * PRPC_RUNDOWN) (
|
||
void __RPC_FAR * AssociationContext
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcMonitorAssociation (
|
||
IN RPC_BINDING_HANDLE Handle,
|
||
IN PRPC_RUNDOWN RundownRoutine,
|
||
IN void * Context
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcStopMonitorAssociation (
|
||
IN RPC_BINDING_HANDLE Handle
|
||
);
|
||
|
||
RPC_BINDING_HANDLE RPC_ENTRY
|
||
I_RpcGetCurrentCallHandle(
|
||
void
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcGetAssociationContext (
|
||
OUT void __RPC_FAR * __RPC_FAR * AssociationContext
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcSetAssociationContext (
|
||
IN void __RPC_FAR * AssociationContext
|
||
);
|
||
|
||
#ifdef __RPC_NT__
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcNsBindingSetEntryName (
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
IN unsigned long EntryNameSyntax,
|
||
IN unsigned short __RPC_FAR * EntryName
|
||
);
|
||
|
||
#else
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcNsBindingSetEntryName (
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
IN unsigned long EntryNameSyntax,
|
||
IN unsigned char __RPC_FAR * EntryName
|
||
);
|
||
|
||
#endif
|
||
|
||
#ifdef __RPC_NT__
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingInqDynamicEndpoint (
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
OUT unsigned short __RPC_FAR * __RPC_FAR * DynamicEndpoint
|
||
);
|
||
|
||
#else
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingInqDynamicEndpoint (
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
OUT unsigned char __RPC_FAR * __RPC_FAR * DynamicEndpoint
|
||
);
|
||
|
||
#endif
|
||
|
||
#define TRANSPORT_TYPE_CN 0x1
|
||
#define TRANSPORT_TYPE_DG 0x2
|
||
#define TRANSPORT_TYPE_LPC 0x4
|
||
#define TRANSPORT_TYPE_WMSG 0x8
|
||
|
||
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;
|
||
|
||
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
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_UuidCreate (
|
||
OUT UUID __RPC_FAR * Uuid
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingCopy (
|
||
IN RPC_BINDING_HANDLE SourceBinding,
|
||
OUT RPC_BINDING_HANDLE __RPC_FAR * DestinationBinding
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingIsClientLocal (
|
||
IN RPC_BINDING_HANDLE BindingHandle OPTIONAL,
|
||
OUT unsigned int __RPC_FAR * ClientLocalFlag
|
||
);
|
||
|
||
void RPC_ENTRY
|
||
I_RpcSsDontSerializeContext (
|
||
void
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcLaunchDatagramReceiveThread(
|
||
void __RPC_FAR * pAddress
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerRegisterForwardFunction (
|
||
IN RPC_FORWARD_FUNCTION __RPC_FAR * pForwardFunction
|
||
);
|
||
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcConnectionInqSockBuffSize(
|
||
OUT unsigned long __RPC_FAR * RecvBuffSize,
|
||
OUT unsigned long __RPC_FAR * SendBuffSize
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcConnectionSetSockBuffSize(
|
||
IN unsigned long RecvBuffSize,
|
||
IN unsigned long SendBuffSize
|
||
);
|
||
|
||
|
||
#ifdef MSWMSG
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerStartListening(
|
||
HWND hWnd
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerStopListening(
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcGetThreadWindowHandle(
|
||
OUT HWND *WindowHandle
|
||
) ;
|
||
|
||
typedef RPC_STATUS (*RPC_BLOCKING_FN) (
|
||
IN void *wnd,
|
||
IN void *Context,
|
||
IN HANDLE hSyncEvent
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcAsyncSendReceive(
|
||
IN OUT PRPC_MESSAGE pRpcMessage,
|
||
IN OPTIONAL void *Context,
|
||
HWND hWnd
|
||
) ;
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingSetAsync(
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
IN RPC_BLOCKING_FN BlockingFn
|
||
) ;
|
||
|
||
LONG RPC_ENTRY
|
||
I_RpcWindowProc(
|
||
IN HWND hWnd,
|
||
IN UINT Message,
|
||
IN WPARAM wParam,
|
||
IN LPARAM lParam
|
||
) ;
|
||
|
||
#endif
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerInqTransportType(
|
||
OUT unsigned int __RPC_FAR * Type
|
||
) ;
|
||
|
||
#ifdef __cplusplus
|
||
|
||
#ifdef __RPC_WIN32__
|
||
|
||
typedef
|
||
RPC_STATUS
|
||
(__RPC_USER __RPC_FAR * RPC_BLOCKING_FUNCTION) (
|
||
IN void __RPC_FAR *RpcWindowHandle,
|
||
IN void __RPC_FAR *Context
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcBindingSetAsync(
|
||
IN RPC_BINDING_HANDLE Binding,
|
||
IN RPC_BLOCKING_FUNCTION BlockingHook
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcAsyncSendReceive(
|
||
IN OUT RPC_MESSAGE __RPC_FAR * Message,
|
||
IN void __RPC_FAR * Context
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcGetThreadWindowHandle(
|
||
OUT void __RPC_FAR * __RPC_FAR * WindowHandle
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerThreadPauseListening(
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerThreadContinueListening(
|
||
);
|
||
|
||
RPC_STATUS RPC_ENTRY
|
||
I_RpcServerUnregisterEndpointA (
|
||
IN unsigned char * Protseq,
|
||
IN unsigned char * Endpoint
|
||
);
|
||
|
||
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 // __RPC_WIN32__
|
||
|
||
|
||
}
|
||
#endif
|
||
|
||
// Reset the packing level for Dos and Windows.
|
||
|
||
#if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
|
||
#pragma pack()
|
||
#endif
|
||
|
||
#endif /* __RPCDCEP_H__ */
|
||
|