|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
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__
#if _MSC_VER > 1000 #pragma once #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);
enum RPC_ADDRESS_CHANGE_TYPE { PROTOCOL_NOT_LOADED = 1, PROTOCOL_LOADED, PROTOCOL_ADDRESS_CHANGE };
typedef void RPC_ENTRY RPC_ADDRESS_CHANGE_FN( IN void * arg );
/* * New context handle flavors. */
#define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *) -4083) /* FFFFF00D */
#define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS 0x00000000UL #define RPC_CONTEXT_HANDLE_FLAGS 0x30000000UL #define RPC_CONTEXT_HANDLE_SERIALIZE 0x10000000UL #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE 0x20000000UL
/* * 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
#define RPCFLG_HAS_MULTI_SYNTAXES 0x02000000UL #define RPCFLG_HAS_CALLBACK 0x04000000UL
#define RPC_FLAGS_VALID_BIT 0x00008000
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; LONG_PTR 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; ULONG_PTR Reserved; void const __RPC_FAR * InterpreterInfo; unsigned int Flags ; } RPC_CLIENT_INTERFACE, __RPC_FAR * PRPC_CLIENT_INTERFACE;
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNegotiateTransferSyntax ( IN OUT RPC_MESSAGE __RPC_FAR * Message );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBuffer ( IN OUT RPC_MESSAGE __RPC_FAR * Message );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBufferWithObject ( IN OUT RPC_MESSAGE __RPC_FAR * Message, IN UUID * ObjectUuid );
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 );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetExtendedError ( );
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 );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsInterfaceExported ( IN unsigned long EntryNameSyntax, IN unsigned short *EntryName, IN RPC_SERVER_INTERFACE * RpcInterfaceInformation );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsInterfaceUnexported ( IN unsigned long EntryNameSyntax, IN unsigned short *EntryName, IN RPC_SERVER_INTERFACE * RpcInterfaceInformation );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingToStaticStringBindingW ( IN RPC_BINDING_HANDLE Binding, OUT unsigned short **StringBinding );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqSecurityContext ( IN RPC_BINDING_HANDLE Binding, OUT void **SecurityContextHandle );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqWireIdForSnego ( IN RPC_BINDING_HANDLE Binding, OUT unsigned char *WireId );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqMarshalledTargetInfo ( IN RPC_BINDING_HANDLE Binding, OUT unsigned long *MarshalledTargetInfoLength, OUT unsigned char **MarshalledTargetInfo );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqLocalClientPID ( IN RPC_BINDING_HANDLE Binding, OUT unsigned long *Pid );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingHandleToAsyncHandle ( IN RPC_BINDING_HANDLE Binding, OUT void **AsyncHandle );
#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 );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseqEp2A ( IN unsigned char __RPC_FAR * NetworkAddress, IN unsigned char __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN unsigned char __RPC_FAR * Endpoint, IN void __RPC_FAR * SecurityDescriptor, IN void *Policy );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseqEp2W ( IN unsigned short __RPC_FAR * NetworkAddress, IN unsigned short __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN unsigned short __RPC_FAR * Endpoint, IN void __RPC_FAR * SecurityDescriptor, IN void * Policy );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseq2W ( IN unsigned short __RPC_FAR * NetworkAddress, IN unsigned short __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN void __RPC_FAR * SecurityDescriptor, IN void * Policy );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseq2A ( IN unsigned char __RPC_FAR * NetworkAddress, IN unsigned char __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN void __RPC_FAR * SecurityDescriptor, IN void * Policy );
#ifdef UNICODE #define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameW #define I_RpcServerUseProtseqEp2 I_RpcServerUseProtseqEp2W #define I_RpcServerUseProtseq2 I_RpcServerUseProtseq2W #else #define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameA #define I_RpcServerUseProtseqEp2 I_RpcServerUseProtseqEp2A #define I_RpcServerUseProtseq2 I_RpcServerUseProtseq2A #endif
#else
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsBindingSetEntryName ( IN RPC_BINDING_HANDLE Binding, IN unsigned long EntryNameSyntax, IN unsigned char __RPC_FAR * EntryName );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseq2 ( IN unsigned char __RPC_FAR * NetworkAddress, IN unsigned char __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN void __RPC_FAR * SecurityDescriptor, IN void * Policy );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseqEp2 ( IN unsigned char __RPC_FAR * NetworkAddress, IN unsigned char __RPC_FAR * Protseq, IN unsigned int MaxCalls, IN unsigned char __RPC_FAR * Endpoint, IN void __RPC_FAR * SecurityDescriptor, IN void * Policy ); #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 RPC_STATUS RPC_ENTRY I_RpcBindingInqConnId ( IN RPC_BINDING_HANDLE Binding, OUT void **ConnId, OUT int *pfFirstCall );
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 * pForwardFunction );
RPC_ADDRESS_CHANGE_FN * RPC_ENTRY I_RpcServerInqAddressChangeFn();
RPC_STATUS RPC_ENTRY I_RpcServerSetAddressChangeFn( IN RPC_ADDRESS_CHANGE_FN * pAddressChangeFn );
/* The return buffer will contain SOCKADDR_IN for IPv4 */ #define RPC_P_ADDR_FORMAT_TCP_IPV4 1
/* The return buffer will contain SOCKADDR_STORAGE for IPv6 */ #define RPC_P_ADDR_FORMAT_TCP_IPV6 2
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerInqLocalConnAddress ( IN RPC_BINDING_HANDLE Binding, IN OUT void *Buffer, IN OUT unsigned long *BufferSize, OUT unsigned long *AddressFormat );
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcTurnOnEEInfoPropagation ( void );
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 );
typedef void (*RPCLT_PDU_FILTER_FUNC) ( IN void *Buffer, IN unsigned int BufferLength, IN int fDatagram );
typedef void (__cdecl *RPC_SETFILTER_FUNC) ( IN RPCLT_PDU_FILTER_FUNC pfnFilter );
#ifndef WINNT 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 ) ;
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 ) ;
RPCRTAPI long RPC_ENTRY I_RpcMapWin32Status ( IN RPC_STATUS Status );
typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyIsValidMachineFn) ( IN char *pszMachine, IN char *pszDotMachine, IN unsigned long dwPortNumber );
typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyGetClientAddressFn) ( IN void *Context, OUT char *Buffer, OUT unsigned long *BufferLength );
typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyGetConnectionTimeoutFn) ( OUT unsigned long *ConnectionTimeout );
typedef struct tagI_RpcProxyCallbackInterface { I_RpcProxyIsValidMachineFn IsValidMachineFn; I_RpcProxyGetClientAddressFn GetClientAddressFn; I_RpcProxyGetConnectionTimeoutFn GetConnectionTimeoutFn; } I_RpcProxyCallbackInterface;
#define RPC_PROXY_CONNECTION_TYPE_IN_PROXY 0 #define RPC_PROXY_CONNECTION_TYPE_OUT_PROXY 1
RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcProxyNewConnection ( IN unsigned long ConnectionType, IN unsigned short *ServerAddress, IN unsigned short *ServerPort, IN void *ConnectionParameter, IN I_RpcProxyCallbackInterface *ProxyCallbackInterface );
#ifdef __cplusplus } #endif
#endif /* __RPCDCEP_H__ */
|