|
|
/*++
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__ */
|