rpcdcep.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifndef __RPCDCEP_H__
  7. #define __RPCDCEP_H__
  8. #include <_mingw_unicode.h>
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. typedef struct _RPC_VERSION {
  13. unsigned short MajorVersion;
  14. unsigned short MinorVersion;
  15. } RPC_VERSION;
  16. typedef struct _RPC_SYNTAX_IDENTIFIER {
  17. GUID SyntaxGUID;
  18. RPC_VERSION SyntaxVersion;
  19. } RPC_SYNTAX_IDENTIFIER,*PRPC_SYNTAX_IDENTIFIER;
  20. typedef struct _RPC_MESSAGE {
  21. RPC_BINDING_HANDLE Handle;
  22. unsigned __LONG32 DataRepresentation;
  23. void *Buffer;
  24. unsigned int BufferLength;
  25. unsigned int ProcNum;
  26. PRPC_SYNTAX_IDENTIFIER TransferSyntax;
  27. void *RpcInterfaceInformation;
  28. void *ReservedForRuntime;
  29. RPC_MGR_EPV *ManagerEpv;
  30. void *ImportContext;
  31. unsigned __LONG32 RpcFlags;
  32. } RPC_MESSAGE,*PRPC_MESSAGE;
  33. typedef RPC_STATUS RPC_ENTRY RPC_FORWARD_FUNCTION(UUID *InterfaceId,RPC_VERSION *InterfaceVersion,UUID *ObjectId,unsigned char *Rpcpro,void **ppDestEndpoint);
  34. enum RPC_ADDRESS_CHANGE_TYPE {
  35. PROTOCOL_NOT_LOADED = 1,PROTOCOL_LOADED,PROTOCOL_ADDRESS_CHANGE
  36. };
  37. typedef void RPC_ENTRY RPC_ADDRESS_CHANGE_FN(void *arg);
  38. #define RPC_CONTEXT_HANDLE_DEFAULT_GUARD ((void *) -4083)
  39. #define RPC_CONTEXT_HANDLE_DEFAULT_FLAGS __MSABI_LONG(0x00000000U)
  40. #define RPC_CONTEXT_HANDLE_FLAGS __MSABI_LONG(0x30000000U)
  41. #define RPC_CONTEXT_HANDLE_SERIALIZE __MSABI_LONG(0x10000000U)
  42. #define RPC_CONTEXT_HANDLE_DONT_SERIALIZE __MSABI_LONG(0x20000000U)
  43. #define RPC_NCA_FLAGS_DEFAULT 0x00000000
  44. #define RPC_NCA_FLAGS_IDEMPOTENT 0x00000001
  45. #define RPC_NCA_FLAGS_BROADCAST 0x00000002
  46. #define RPC_NCA_FLAGS_MAYBE 0x00000004
  47. #define RPC_BUFFER_COMPLETE 0x00001000
  48. #define RPC_BUFFER_PARTIAL 0x00002000
  49. #define RPC_BUFFER_EXTRA 0x00004000
  50. #define RPC_BUFFER_ASYNC 0x00008000
  51. #define RPC_BUFFER_NONOTIFY 0x00010000
  52. #define RPCFLG_MESSAGE __MSABI_LONG(0x01000000U)
  53. #define RPCFLG_AUTO_COMPLETE __MSABI_LONG(0x08000000U)
  54. #define RPCFLG_LOCAL_CALL __MSABI_LONG(0x10000000U)
  55. #define RPCFLG_INPUT_SYNCHRONOUS __MSABI_LONG(0x20000000U)
  56. #define RPCFLG_ASYNCHRONOUS __MSABI_LONG(0x40000000U)
  57. #define RPCFLG_NON_NDR __MSABI_LONG(0x80000000U)
  58. #define RPCFLG_HAS_MULTI_SYNTAXES __MSABI_LONG(0x02000000U)
  59. #define RPCFLG_HAS_CALLBACK __MSABI_LONG(0x04000000U)
  60. #define RPC_FLAGS_VALID_BIT 0x00008000
  61. typedef void (__RPC_STUB *RPC_DISPATCH_FUNCTION)(PRPC_MESSAGE Message);
  62. typedef struct {
  63. unsigned int DispatchTableCount;
  64. RPC_DISPATCH_FUNCTION *DispatchTable;
  65. LONG_PTR Reserved;
  66. } RPC_DISPATCH_TABLE,*PRPC_DISPATCH_TABLE;
  67. typedef struct _RPC_PROTSEQ_ENDPOINT {
  68. unsigned char *RpcProtocolSequence;
  69. unsigned char *Endpoint;
  70. } RPC_PROTSEQ_ENDPOINT,*PRPC_PROTSEQ_ENDPOINT;
  71. #define NT351_INTERFACE_SIZE 0x40
  72. #define RPC_INTERFACE_HAS_PIPES 0x0001
  73. typedef struct _RPC_SERVER_INTERFACE {
  74. unsigned int Length;
  75. RPC_SYNTAX_IDENTIFIER InterfaceId;
  76. RPC_SYNTAX_IDENTIFIER TransferSyntax;
  77. PRPC_DISPATCH_TABLE DispatchTable;
  78. unsigned int RpcProtseqEndpointCount;
  79. PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
  80. RPC_MGR_EPV *DefaultManagerEpv;
  81. void const *InterpreterInfo;
  82. unsigned int Flags;
  83. } RPC_SERVER_INTERFACE,*PRPC_SERVER_INTERFACE;
  84. typedef struct _RPC_CLIENT_INTERFACE {
  85. unsigned int Length;
  86. RPC_SYNTAX_IDENTIFIER InterfaceId;
  87. RPC_SYNTAX_IDENTIFIER TransferSyntax;
  88. PRPC_DISPATCH_TABLE DispatchTable;
  89. unsigned int RpcProtseqEndpointCount;
  90. PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
  91. ULONG_PTR Reserved;
  92. void const *InterpreterInfo;
  93. unsigned int Flags;
  94. } RPC_CLIENT_INTERFACE,*PRPC_CLIENT_INTERFACE;
  95. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNegotiateTransferSyntax(RPC_MESSAGE *Message);
  96. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBuffer(RPC_MESSAGE *Message);
  97. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetBufferWithObject(RPC_MESSAGE *Message,UUID *ObjectUuid);
  98. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSendReceive(RPC_MESSAGE *Message);
  99. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcFreeBuffer(RPC_MESSAGE *Message);
  100. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSend(PRPC_MESSAGE Message);
  101. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcReceive(PRPC_MESSAGE Message,unsigned int Size);
  102. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcFreePipeBuffer(RPC_MESSAGE *Message);
  103. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcReallocPipeBuffer(PRPC_MESSAGE Message,unsigned int NewSize);
  104. typedef void *I_RPC_MUTEX;
  105. #define I_RpcNsBindingSetEntryName __MINGW_NAME_AW(I_RpcNsBindingSetEntryName)
  106. #define I_RpcServerUseProtseqEp2 __MINGW_NAME_AW(I_RpcServerUseProtseqEp2)
  107. #define I_RpcServerUseProtseq2 __MINGW_NAME_AW(I_RpcServerUseProtseq2)
  108. #define I_RpcBindingInqDynamicEndpoint __MINGW_NAME_AW(I_RpcBindingInqDynamicEndpoint)
  109. RPCRTAPI void RPC_ENTRY I_RpcRequestMutex(I_RPC_MUTEX *Mutex);
  110. RPCRTAPI void RPC_ENTRY I_RpcClearMutex(I_RPC_MUTEX Mutex);
  111. RPCRTAPI void RPC_ENTRY I_RpcDeleteMutex(I_RPC_MUTEX Mutex);
  112. RPCRTAPI void *RPC_ENTRY I_RpcAllocate(unsigned int Size);
  113. RPCRTAPI void RPC_ENTRY I_RpcFree(void *Object);
  114. RPCRTAPI void RPC_ENTRY I_RpcPauseExecution(unsigned __LONG32 Milliseconds);
  115. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetExtendedError(void);
  116. typedef void (__RPC_API *PRPC_RUNDOWN)(void *AssociationContext);
  117. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcMonitorAssociation(RPC_BINDING_HANDLE Handle,PRPC_RUNDOWN RundownRoutine,void *Context);
  118. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcStopMonitorAssociation(RPC_BINDING_HANDLE Handle);
  119. RPCRTAPI RPC_BINDING_HANDLE RPC_ENTRY I_RpcGetCurrentCallHandle(void);
  120. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcGetAssociationContext(RPC_BINDING_HANDLE BindingHandle,void **AssociationContext);
  121. RPCRTAPI void *RPC_ENTRY I_RpcGetServerContextList(RPC_BINDING_HANDLE BindingHandle);
  122. RPCRTAPI void RPC_ENTRY I_RpcSetServerContextList(RPC_BINDING_HANDLE BindingHandle,void *ServerContextList);
  123. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsInterfaceExported(unsigned __LONG32 EntryNameSyntax,unsigned short *EntryName,RPC_SERVER_INTERFACE *RpcInterfaceInformation);
  124. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsInterfaceUnexported(unsigned __LONG32 EntryNameSyntax,unsigned short *EntryName,RPC_SERVER_INTERFACE *RpcInterfaceInformation);
  125. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingToStaticStringBindingW(RPC_BINDING_HANDLE Binding,unsigned short **StringBinding);
  126. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqSecurityContext(RPC_BINDING_HANDLE Binding,void **SecurityContextHandle);
  127. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqWireIdForSnego(RPC_BINDING_HANDLE Binding,RPC_CSTR WireId);
  128. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqMarshalledTargetInfo (RPC_BINDING_HANDLE Binding,unsigned __LONG32 *MarshalledTargetInfoLength,RPC_CSTR *MarshalledTargetInfo);
  129. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqLocalClientPID(RPC_BINDING_HANDLE Binding,unsigned __LONG32 *Pid);
  130. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingHandleToAsyncHandle(RPC_BINDING_HANDLE Binding,void **AsyncHandle);
  131. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsBindingSetEntryNameW(RPC_BINDING_HANDLE Binding,unsigned __LONG32 EntryNameSyntax,RPC_WSTR EntryName);
  132. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcNsBindingSetEntryNameA(RPC_BINDING_HANDLE Binding,unsigned __LONG32 EntryNameSyntax,RPC_CSTR EntryName);
  133. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseqEp2A(RPC_CSTR NetworkAddress,RPC_CSTR Protseq,unsigned int MaxCalls,RPC_CSTR Endpoint,void *SecurityDescriptor,void *Policy);
  134. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseqEp2W(RPC_WSTR NetworkAddress,RPC_WSTR Protseq,unsigned int MaxCalls,RPC_WSTR Endpoint,void *SecurityDescriptor,void *Policy);
  135. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseq2W(RPC_WSTR NetworkAddress,RPC_WSTR Protseq,unsigned int MaxCalls,void *SecurityDescriptor,void *Policy);
  136. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUseProtseq2A(RPC_CSTR NetworkAddress,RPC_CSTR Protseq,unsigned int MaxCalls,void *SecurityDescriptor,void *Policy);
  137. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqDynamicEndpointW(RPC_BINDING_HANDLE Binding,RPC_WSTR *DynamicEndpoint);
  138. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqDynamicEndpointA(RPC_BINDING_HANDLE Binding,RPC_CSTR *DynamicEndpoint);
  139. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerCheckClientRestriction(RPC_BINDING_HANDLE Context);
  140. #define TRANSPORT_TYPE_CN 0x01
  141. #define TRANSPORT_TYPE_DG 0x02
  142. #define TRANSPORT_TYPE_LPC 0x04
  143. #define TRANSPORT_TYPE_WMSG 0x08
  144. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqTransportType(RPC_BINDING_HANDLE Binding,unsigned int *Type);
  145. typedef struct _RPC_TRANSFER_SYNTAX {
  146. UUID Uuid;
  147. unsigned short VersMajor;
  148. unsigned short VersMinor;
  149. } RPC_TRANSFER_SYNTAX;
  150. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcIfInqTransferSyntaxes(RPC_IF_HANDLE RpcIfHandle,RPC_TRANSFER_SYNTAX *TransferSyntaxes,unsigned int TransferSyntaxSize,unsigned int *TransferSyntaxCount);
  151. RPCRTAPI RPC_STATUS RPC_ENTRY I_UuidCreate(UUID *Uuid);
  152. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingCopy(RPC_BINDING_HANDLE SourceBinding,RPC_BINDING_HANDLE *DestinationBinding);
  153. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingIsClientLocal(RPC_BINDING_HANDLE BindingHandle,unsigned int *ClientLocalFlag);
  154. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingInqConnId(RPC_BINDING_HANDLE Binding,void **ConnId,int *pfFirstCall);
  155. RPCRTAPI void RPC_ENTRY I_RpcSsDontSerializeContext(void);
  156. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcLaunchDatagramReceiveThread(void *pAddress);
  157. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerRegisterForwardFunction(RPC_FORWARD_FUNCTION *pForwardFunction);
  158. RPC_ADDRESS_CHANGE_FN *RPC_ENTRY I_RpcServerInqAddressChangeFn(void);
  159. RPC_STATUS RPC_ENTRY I_RpcServerSetAddressChangeFn(RPC_ADDRESS_CHANGE_FN *pAddressChangeFn);
  160. #define RPC_P_ADDR_FORMAT_TCP_IPV4 1
  161. #define RPC_P_ADDR_FORMAT_TCP_IPV6 2
  162. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerInqLocalConnAddress(RPC_BINDING_HANDLE Binding,void *Buffer,unsigned __LONG32 *BufferSize,unsigned __LONG32 *AddressFormat);
  163. RPCRTAPI void RPC_ENTRY I_RpcSessionStrictContextHandle(void);
  164. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcTurnOnEEInfoPropagation(void);
  165. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcConnectionInqSockBuffSize(unsigned __LONG32 *RecvBuffSize,unsigned __LONG32 *SendBuffSize);
  166. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcConnectionSetSockBuffSize(unsigned __LONG32 RecvBuffSize,unsigned __LONG32 SendBuffSize);
  167. typedef void (*RPCLT_PDU_FILTER_FUNC)(void *Buffer,unsigned int BufferLength,int fDatagram);
  168. typedef void (__cdecl *RPC_SETFILTER_FUNC)(RPCLT_PDU_FILTER_FUNC pfnFilter);
  169. #ifndef WINNT
  170. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStartListening(void *hWnd);
  171. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerStopListening(void);
  172. typedef RPC_STATUS (*RPC_BLOCKING_FN)(void *hWnd,void *Context,void *hSyncEvent);
  173. #define I_RpcServerUnregisterEndpoint __MINGW_NAME_AW(I_RpcServerUnregisterEndpoint)
  174. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcBindingSetAsync(RPC_BINDING_HANDLE Binding,RPC_BLOCKING_FN BlockingFn,unsigned __LONG32 ServerTid);
  175. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcSetThreadParams(int fClientFree,void *Context,void *hWndClient);
  176. RPCRTAPI unsigned int RPC_ENTRY I_RpcWindowProc(void *hWnd,unsigned int Message,unsigned int wParam,unsigned __LONG32 lParam);
  177. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUnregisterEndpointA(RPC_CSTR Protseq,RPC_CSTR Endpoint);
  178. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerUnregisterEndpointW(RPC_WSTR Protseq,RPC_WSTR Endpoint);
  179. #endif
  180. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcServerInqTransportType(unsigned int *Type);
  181. RPCRTAPI __LONG32 RPC_ENTRY I_RpcMapWin32Status(RPC_STATUS Status);
  182. typedef struct _RPC_C_OPT_METADATA_DESCRIPTOR {
  183. unsigned __LONG32 BufferSize;
  184. char *Buffer;
  185. } RPC_C_OPT_METADATA_DESCRIPTOR;
  186. typedef struct _RDR_CALLOUT_STATE {
  187. RPC_STATUS LastError;
  188. void *LastEEInfo;
  189. RPC_HTTP_REDIRECTOR_STAGE LastCalledStage;
  190. unsigned short *ServerName;
  191. unsigned short *ServerPort;
  192. unsigned short *RemoteUser;
  193. unsigned short *AuthType;
  194. unsigned char ResourceTypePresent;
  195. unsigned char MetadataPresent;
  196. unsigned char SessionIdPresent;
  197. unsigned char InterfacePresent;
  198. UUID ResourceType;
  199. RPC_C_OPT_METADATA_DESCRIPTOR Metadata;
  200. UUID SessionId;
  201. RPC_SYNTAX_IDENTIFIER Interface;
  202. void *CertContext;
  203. } RDR_CALLOUT_STATE;
  204. typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyIsValidMachineFn)(char *pszMachine,char *pszDotMachine,unsigned __LONG32 dwPortNumber);
  205. typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyGetClientAddressFn)(void *Context,char *Buffer,unsigned __LONG32 *BufferLength);
  206. typedef RPC_STATUS (RPC_ENTRY *I_RpcProxyGetConnectionTimeoutFn)(unsigned __LONG32 *ConnectionTimeout);
  207. typedef RPC_STATUS (RPC_ENTRY *I_RpcPerformCalloutFn)(void *Context,RDR_CALLOUT_STATE *CallOutState,RPC_HTTP_REDIRECTOR_STAGE Stage);
  208. typedef void (RPC_ENTRY *I_RpcFreeCalloutStateFn)(RDR_CALLOUT_STATE *CallOutState);
  209. typedef struct tagI_RpcProxyCallbackInterface {
  210. I_RpcProxyIsValidMachineFn IsValidMachineFn;
  211. I_RpcProxyGetClientAddressFn GetClientAddressFn;
  212. I_RpcProxyGetConnectionTimeoutFn GetConnectionTimeoutFn;
  213. I_RpcPerformCalloutFn PerformCalloutFn;
  214. I_RpcFreeCalloutStateFn FreeCalloutStateFn;
  215. } I_RpcProxyCallbackInterface;
  216. #define RPC_PROXY_CONNECTION_TYPE_IN_PROXY 0
  217. #define RPC_PROXY_CONNECTION_TYPE_OUT_PROXY 1
  218. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcProxyNewConnection(unsigned __LONG32 ConnectionType,unsigned short *ServerAddress,unsigned short *ServerPort,unsigned short *MinConnTimeout,void *ConnectionParameter,RDR_CALLOUT_STATE *CallOutState,I_RpcProxyCallbackInterface *ProxyCallbackInterface);
  219. RPCRTAPI RPC_STATUS RPC_ENTRY I_RpcReplyToClientWithStatus(void *ConnectionParameter,RPC_STATUS RpcStatus);
  220. RPCRTAPI void RPC_ENTRY I_RpcRecordCalloutFailure(RPC_STATUS RpcStatus,RDR_CALLOUT_STATE *CallOutState,unsigned short *DllName);
  221. #ifdef __cplusplus
  222. }
  223. #endif
  224. #endif