home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / rpcdcep.h < prev    next >
C/C++ Source or Header  |  1998-04-25  |  13KB  |  614 lines

  1. /*++
  2.  
  3. Copyright 1991-1998 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     rpcdcep.h
  8.  
  9. Abstract:
  10.  
  11.     This module contains the private RPC runtime APIs for use by the
  12.     stubs and by support libraries.  Applications must not call these
  13.     routines.
  14.  
  15. --*/
  16.  
  17. #ifndef __RPCDCEP_H__
  18. #define __RPCDCEP_H__
  19.  
  20. // Set the packing level for RPC structures for Dos and Windows.
  21.  
  22. #if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
  23. #pragma pack(2)
  24. #endif
  25.  
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29.  
  30. typedef struct _RPC_VERSION {
  31.     unsigned short MajorVersion;
  32.     unsigned short MinorVersion;
  33. } RPC_VERSION;
  34.  
  35. typedef struct _RPC_SYNTAX_IDENTIFIER {
  36.     GUID SyntaxGUID;
  37.     RPC_VERSION SyntaxVersion;
  38. } RPC_SYNTAX_IDENTIFIER, __RPC_FAR * PRPC_SYNTAX_IDENTIFIER;
  39.  
  40. typedef struct _RPC_MESSAGE
  41. {
  42.     RPC_BINDING_HANDLE Handle;
  43.     unsigned long DataRepresentation;
  44.     void __RPC_FAR * Buffer;
  45.     unsigned int BufferLength;
  46.     unsigned int ProcNum;
  47.     PRPC_SYNTAX_IDENTIFIER TransferSyntax;
  48.     void __RPC_FAR * RpcInterfaceInformation;
  49.     void __RPC_FAR * ReservedForRuntime;
  50.     RPC_MGR_EPV __RPC_FAR * ManagerEpv;
  51.     void __RPC_FAR * ImportContext;
  52.     unsigned long RpcFlags;
  53. } RPC_MESSAGE, __RPC_FAR * PRPC_MESSAGE;
  54.  
  55.  
  56. typedef RPC_STATUS
  57. RPC_ENTRY RPC_FORWARD_FUNCTION(
  58.                        IN UUID             __RPC_FAR * InterfaceId,
  59.                        IN RPC_VERSION      __RPC_FAR * InterfaceVersion,
  60.                        IN UUID             __RPC_FAR * ObjectId,
  61.                        IN unsigned char         __RPC_FAR * Rpcpro,
  62.                        IN void __RPC_FAR * __RPC_FAR * ppDestEndpoint);
  63.  
  64. /*
  65.  * Types of function calls for datagram rpc
  66.  */
  67.  
  68. #define RPC_NCA_FLAGS_DEFAULT       0x00000000  /* 0b000...000 */
  69. #define RPC_NCA_FLAGS_IDEMPOTENT    0x00000001  /* 0b000...001 */
  70. #define RPC_NCA_FLAGS_BROADCAST     0x00000002  /* 0b000...010 */
  71. #define RPC_NCA_FLAGS_MAYBE         0x00000004  /* 0b000...100 */
  72.  
  73. #define RPC_BUFFER_COMPLETE         0x00001000 /* used by pipes */
  74. #define RPC_BUFFER_PARTIAL          0x00002000 /* used by pipes */
  75. #define RPC_BUFFER_EXTRA            0x00004000 /* used by pipes */
  76. #define RPC_BUFFER_ASYNC            0x00008000 /* used by async rpc */
  77. #define RPC_BUFFER_NONOTIFY         0x00010000 /* used by async pipes */
  78.  
  79. #define RPCFLG_MESSAGE              0x01000000UL
  80. #define RPCFLG_AUTO_COMPLETE        0x08000000UL
  81. #define RPCFLG_LOCAL_CALL           0x10000000UL
  82. #define RPCFLG_INPUT_SYNCHRONOUS    0x20000000UL
  83. #define RPCFLG_ASYNCHRONOUS         0x40000000UL
  84. #define RPCFLG_NON_NDR              0x80000000UL
  85.  
  86.  
  87. #if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
  88. #define RPC_FLAGS_VALID_BIT 0x8000
  89. #endif
  90.  
  91. #if defined(__RPC_WIN32__) || defined(__RPC_MAC__)
  92. #define RPC_FLAGS_VALID_BIT 0x00008000
  93. #endif
  94.  
  95. typedef
  96. void
  97. (__RPC_STUB __RPC_FAR * RPC_DISPATCH_FUNCTION) (
  98.     IN OUT PRPC_MESSAGE Message
  99.     );
  100.  
  101. typedef struct {
  102.     unsigned int DispatchTableCount;
  103.     RPC_DISPATCH_FUNCTION __RPC_FAR * DispatchTable;
  104.     int Reserved;
  105. } RPC_DISPATCH_TABLE, __RPC_FAR * PRPC_DISPATCH_TABLE;
  106.  
  107. typedef struct _RPC_PROTSEQ_ENDPOINT
  108. {
  109.     unsigned char __RPC_FAR * RpcProtocolSequence;
  110.     unsigned char __RPC_FAR * Endpoint;
  111. } RPC_PROTSEQ_ENDPOINT, __RPC_FAR * PRPC_PROTSEQ_ENDPOINT;
  112.  
  113. /*
  114. Both of these types MUST start with the InterfaceId and TransferSyntax.
  115. Look at RpcIfInqId and I_RpcIfInqTransferSyntaxes to see why.
  116. */
  117. #define NT351_INTERFACE_SIZE 0x40
  118. #define RPC_INTERFACE_HAS_PIPES           0x0001
  119.  
  120. typedef struct _RPC_SERVER_INTERFACE
  121. {
  122.     unsigned int Length;
  123.     RPC_SYNTAX_IDENTIFIER InterfaceId;
  124.     RPC_SYNTAX_IDENTIFIER TransferSyntax;
  125.     PRPC_DISPATCH_TABLE DispatchTable;
  126.     unsigned int RpcProtseqEndpointCount;
  127.     PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
  128.     RPC_MGR_EPV __RPC_FAR *DefaultManagerEpv;
  129.     void const __RPC_FAR *InterpreterInfo;
  130.     unsigned int Flags ;
  131. } RPC_SERVER_INTERFACE, __RPC_FAR * PRPC_SERVER_INTERFACE;
  132.  
  133. typedef struct _RPC_CLIENT_INTERFACE
  134. {
  135.     unsigned int Length;
  136.     RPC_SYNTAX_IDENTIFIER InterfaceId;
  137.     RPC_SYNTAX_IDENTIFIER TransferSyntax;
  138.     PRPC_DISPATCH_TABLE DispatchTable;
  139.     unsigned int RpcProtseqEndpointCount;
  140.     PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint;
  141.     unsigned long Reserved;
  142.     void const __RPC_FAR * InterpreterInfo;
  143.     unsigned int Flags ;
  144. } RPC_CLIENT_INTERFACE, __RPC_FAR * PRPC_CLIENT_INTERFACE;
  145.  
  146. RPCRTAPI
  147. RPC_STATUS
  148. RPC_ENTRY
  149. I_RpcGetBuffer (
  150.     IN OUT RPC_MESSAGE __RPC_FAR * Message
  151.     );
  152.  
  153. RPCRTAPI
  154. RPC_STATUS
  155. RPC_ENTRY
  156. I_RpcSendReceive (
  157.     IN OUT RPC_MESSAGE __RPC_FAR * Message
  158.     );
  159.  
  160. RPCRTAPI
  161. RPC_STATUS
  162. RPC_ENTRY
  163. I_RpcFreeBuffer (
  164.     IN OUT RPC_MESSAGE __RPC_FAR * Message
  165.     );
  166.  
  167. RPCRTAPI
  168. RPC_STATUS
  169. RPC_ENTRY
  170. I_RpcSend (
  171.     IN OUT PRPC_MESSAGE Message
  172.     ) ;
  173.  
  174. RPCRTAPI
  175. RPC_STATUS
  176. RPC_ENTRY
  177. I_RpcReceive (
  178.     IN OUT PRPC_MESSAGE Message,
  179.     IN unsigned int Size
  180.     ) ;
  181.  
  182. RPCRTAPI
  183. RPC_STATUS
  184. RPC_ENTRY
  185. I_RpcFreePipeBuffer (
  186.     IN OUT RPC_MESSAGE __RPC_FAR * Message
  187.     ) ;
  188.  
  189. RPCRTAPI
  190. RPC_STATUS
  191. RPC_ENTRY
  192. I_RpcReallocPipeBuffer (
  193.     IN PRPC_MESSAGE Message,
  194.     IN unsigned int NewSize
  195.     ) ;
  196.  
  197. typedef void * I_RPC_MUTEX;
  198.  
  199. RPCRTAPI
  200. void
  201. RPC_ENTRY
  202. I_RpcRequestMutex (
  203.     IN OUT I_RPC_MUTEX * Mutex
  204.     );
  205.  
  206. RPCRTAPI
  207. void
  208. RPC_ENTRY
  209. I_RpcClearMutex (
  210.     IN I_RPC_MUTEX Mutex
  211.     );
  212.  
  213. RPCRTAPI
  214. void
  215. RPC_ENTRY
  216. I_RpcDeleteMutex (
  217.     IN I_RPC_MUTEX Mutex
  218.     );
  219.  
  220. RPCRTAPI
  221. void __RPC_FAR *
  222. RPC_ENTRY
  223. I_RpcAllocate (
  224.     IN unsigned int Size
  225.     );
  226.  
  227. RPCRTAPI
  228. void
  229. RPC_ENTRY
  230. I_RpcFree (
  231.     IN void __RPC_FAR * Object
  232.     );
  233.  
  234. RPCRTAPI
  235. void
  236. RPC_ENTRY
  237. I_RpcPauseExecution (
  238.     IN unsigned long Milliseconds
  239.     );
  240.  
  241. typedef
  242. void
  243. (__RPC_USER __RPC_FAR * PRPC_RUNDOWN) (
  244.     void __RPC_FAR * AssociationContext
  245.     );
  246.  
  247. RPCRTAPI
  248. RPC_STATUS
  249. RPC_ENTRY
  250. I_RpcMonitorAssociation (
  251.     IN RPC_BINDING_HANDLE Handle,
  252.     IN PRPC_RUNDOWN RundownRoutine,
  253.     IN void * Context
  254.     );
  255.  
  256. RPCRTAPI
  257. RPC_STATUS
  258. RPC_ENTRY
  259. I_RpcStopMonitorAssociation (
  260.     IN RPC_BINDING_HANDLE Handle
  261.     );
  262.  
  263. RPCRTAPI
  264. RPC_BINDING_HANDLE
  265. RPC_ENTRY
  266. I_RpcGetCurrentCallHandle(
  267.     void
  268.     );
  269.  
  270. RPCRTAPI
  271. RPC_STATUS
  272. RPC_ENTRY
  273. I_RpcGetAssociationContext (
  274.     IN RPC_BINDING_HANDLE BindingHandle,
  275.     OUT void __RPC_FAR * __RPC_FAR * AssociationContext
  276.     );
  277.  
  278. RPCRTAPI
  279. void *
  280. RPC_ENTRY
  281. I_RpcGetServerContextList (
  282.     IN RPC_BINDING_HANDLE BindingHandle
  283.     );
  284.  
  285. RPCRTAPI
  286. void
  287. RPC_ENTRY
  288. I_RpcSetServerContextList (
  289.     IN RPC_BINDING_HANDLE BindingHandle,
  290.     OUT void * ServerContextList
  291.     );
  292.  
  293. #ifdef RPC_UNICODE_SUPPORTED
  294.  
  295. RPCRTAPI
  296. RPC_STATUS
  297. RPC_ENTRY
  298. I_RpcNsBindingSetEntryNameW (
  299.     IN RPC_BINDING_HANDLE Binding,
  300.     IN unsigned long EntryNameSyntax,
  301.     IN unsigned short __RPC_FAR * EntryName
  302.     );
  303.  
  304. RPCRTAPI
  305. RPC_STATUS
  306. RPC_ENTRY
  307. I_RpcNsBindingSetEntryNameA (
  308.     IN RPC_BINDING_HANDLE Binding,
  309.     IN unsigned long EntryNameSyntax,
  310.     IN unsigned char __RPC_FAR * EntryName
  311.     );
  312.  
  313. #ifdef UNICODE
  314. #define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameW
  315. #else
  316. #define I_RpcNsBindingSetEntryName I_RpcNsBindingSetEntryNameA
  317. #endif
  318.  
  319. #else
  320.  
  321. RPCRTAPI
  322. RPC_STATUS
  323. RPC_ENTRY
  324. I_RpcNsBindingSetEntryName (
  325.     IN RPC_BINDING_HANDLE Binding,
  326.     IN unsigned long EntryNameSyntax,
  327.     IN unsigned char __RPC_FAR * EntryName
  328.     );
  329.  
  330. #endif
  331.  
  332. #ifdef RPC_UNICODE_SUPPORTED
  333.  
  334. RPCRTAPI
  335. RPC_STATUS
  336. RPC_ENTRY
  337. I_RpcBindingInqDynamicEndpointW (
  338.     IN RPC_BINDING_HANDLE Binding,
  339.     OUT unsigned short __RPC_FAR * __RPC_FAR * DynamicEndpoint
  340.     );
  341.  
  342. RPCRTAPI
  343. RPC_STATUS
  344. RPC_ENTRY
  345. I_RpcBindingInqDynamicEndpointA (
  346.     IN RPC_BINDING_HANDLE Binding,
  347.     OUT unsigned char __RPC_FAR * __RPC_FAR * DynamicEndpoint
  348.     );
  349.  
  350. #ifdef UNICODE
  351. #define I_RpcBindingInqDynamicEndpoint I_RpcBindingInqDynamicEndpointW
  352. #else
  353. #define I_RpcBindingInqDynamicEndpoint I_RpcBindingInqDynamicEndpointA
  354. #endif
  355.  
  356. #else
  357.  
  358. RPCRTAPI
  359. RPC_STATUS
  360. RPC_ENTRY
  361. I_RpcBindingInqDynamicEndpoint (
  362.     IN RPC_BINDING_HANDLE Binding,
  363.     OUT unsigned char __RPC_FAR * __RPC_FAR * DynamicEndpoint
  364.     );
  365.  
  366. #endif
  367.  
  368. #define TRANSPORT_TYPE_CN        0x01
  369. #define TRANSPORT_TYPE_DG        0x02
  370. #define TRANSPORT_TYPE_LPC       0x04
  371. #define TRANSPORT_TYPE_WMSG      0x08
  372.  
  373. RPCRTAPI
  374. RPC_STATUS
  375. RPC_ENTRY
  376. I_RpcBindingInqTransportType (
  377.     IN RPC_BINDING_HANDLE Binding,
  378.     OUT unsigned int __RPC_FAR * Type
  379.     );
  380.  
  381. typedef struct _RPC_TRANSFER_SYNTAX
  382. {
  383.     UUID Uuid;
  384.     unsigned short VersMajor;
  385.     unsigned short VersMinor;
  386. } RPC_TRANSFER_SYNTAX;
  387.  
  388. RPCRTAPI
  389. RPC_STATUS
  390. RPC_ENTRY
  391. I_RpcIfInqTransferSyntaxes (
  392.     IN RPC_IF_HANDLE RpcIfHandle,
  393.     OUT RPC_TRANSFER_SYNTAX __RPC_FAR * TransferSyntaxes,
  394.     IN unsigned int TransferSyntaxSize,
  395.     OUT unsigned int __RPC_FAR * TransferSyntaxCount
  396.     );
  397.  
  398. RPCRTAPI
  399. RPC_STATUS
  400. RPC_ENTRY
  401. I_UuidCreate (
  402.     OUT UUID __RPC_FAR * Uuid
  403.     );
  404.  
  405. RPCRTAPI
  406. RPC_STATUS
  407. RPC_ENTRY
  408. I_RpcBindingCopy (
  409.     IN RPC_BINDING_HANDLE SourceBinding,
  410.     OUT RPC_BINDING_HANDLE __RPC_FAR * DestinationBinding
  411.     );
  412.  
  413. RPCRTAPI
  414. RPC_STATUS
  415. RPC_ENTRY
  416. I_RpcBindingIsClientLocal (
  417.     IN RPC_BINDING_HANDLE BindingHandle OPTIONAL,
  418.     OUT unsigned int __RPC_FAR * ClientLocalFlag
  419.     );
  420.  
  421. RPCRTAPI
  422. void
  423. RPC_ENTRY
  424. I_RpcSsDontSerializeContext (
  425.     void
  426.     );
  427.  
  428. RPCRTAPI
  429. RPC_STATUS
  430. RPC_ENTRY
  431. I_RpcLaunchDatagramReceiveThread(
  432.     void __RPC_FAR * pAddress
  433.     );
  434.  
  435. RPCRTAPI
  436. RPC_STATUS
  437. RPC_ENTRY
  438. I_RpcServerRegisterForwardFunction (
  439.     IN RPC_FORWARD_FUNCTION __RPC_FAR * pForwardFunction
  440.     );
  441.  
  442.  
  443. RPCRTAPI
  444. RPC_STATUS
  445. RPC_ENTRY
  446. I_RpcConnectionInqSockBuffSize(
  447.   OUT unsigned long __RPC_FAR * RecvBuffSize,
  448.   OUT unsigned long __RPC_FAR * SendBuffSize
  449.   );
  450.  
  451. RPCRTAPI
  452. RPC_STATUS
  453. RPC_ENTRY
  454. I_RpcConnectionSetSockBuffSize(
  455.    IN unsigned long RecvBuffSize,
  456.    IN unsigned long SendBuffSize
  457.    );
  458.  
  459. #ifdef WINNT
  460. #ifdef MSWMSG
  461. RPCRTAPI
  462. RPC_STATUS
  463. RPC_ENTRY
  464. I_RpcServerStartListening(
  465.     HWND hWnd
  466.     ) ;
  467.  
  468. RPCRTAPI
  469. RPC_STATUS
  470. RPC_ENTRY
  471. I_RpcServerStopListening(
  472.     ) ;
  473.  
  474. RPCRTAPI
  475. RPC_STATUS
  476. RPC_ENTRY
  477. I_RpcGetThreadWindowHandle(
  478.     OUT HWND *WindowHandle
  479.     ) ;
  480.  
  481. typedef RPC_STATUS (*RPC_BLOCKING_FN) (
  482.     IN void *wnd,
  483.     IN void *Context,
  484.     IN HANDLE hSyncEvent
  485.     ) ;
  486.  
  487. RPCRTAPI
  488. RPC_STATUS
  489. RPC_ENTRY
  490. I_RpcAsyncSendReceive(
  491.     IN OUT PRPC_MESSAGE pRpcMessage,
  492.     IN OPTIONAL void *Context,
  493.     HWND hWnd
  494.     ) ;
  495.  
  496. RPCRTAPI
  497. RPC_STATUS
  498. RPC_ENTRY
  499. I_RpcBindingSetAsync(
  500.     IN RPC_BINDING_HANDLE Binding,
  501.     IN RPC_BLOCKING_FN BlockingFn
  502.     ) ;
  503.  
  504. RPCRTAPI
  505. LONG
  506. RPC_ENTRY
  507. I_RpcWindowProc(
  508.     IN HWND hWnd,
  509.     IN UINT Message,
  510.     IN WPARAM wParam,
  511.     IN LPARAM lParam
  512.     ) ;
  513.  
  514. RPCRTAPI
  515. RPC_STATUS
  516. RPC_ENTRY
  517. I_RpcSetWMsgEndpoint (
  518.     IN WCHAR __RPC_FAR * Endpoint
  519.     ) ;
  520. #endif
  521.  
  522. #else
  523.  
  524. RPCRTAPI
  525. RPC_STATUS
  526. RPC_ENTRY
  527. I_RpcServerStartListening(
  528.     void * hWnd
  529.     ) ;
  530.  
  531. RPCRTAPI
  532. RPC_STATUS
  533. RPC_ENTRY
  534. I_RpcServerStopListening(
  535.     ) ;
  536.  
  537. typedef RPC_STATUS (*RPC_BLOCKING_FN) (
  538.     IN void * hWnd,
  539.     IN void * Context,
  540.     IN OPTIONAL void * hSyncEvent
  541.     ) ;
  542.  
  543. RPCRTAPI
  544. RPC_STATUS
  545. RPC_ENTRY
  546. I_RpcBindingSetAsync(
  547.     IN RPC_BINDING_HANDLE Binding,
  548.     IN RPC_BLOCKING_FN BlockingFn,
  549.     IN unsigned long ServerTid
  550.     ) ;
  551.  
  552. RPCRTAPI
  553. RPC_STATUS
  554. RPC_ENTRY
  555. I_RpcSetThreadParams(
  556.     IN int fClientFree,
  557.     IN OPTIONAL void *Context,
  558.     IN OPTIONAL void * hWndClient
  559.     );
  560.  
  561. RPCRTAPI
  562. unsigned int
  563. RPC_ENTRY
  564. I_RpcWindowProc(
  565.     IN void * hWnd,
  566.     IN unsigned int Message,
  567.     IN unsigned int wParam,
  568.     IN unsigned long lParam
  569.     ) ;
  570. #endif
  571.  
  572. #ifndef WINNT
  573. RPCRTAPI
  574. RPC_STATUS
  575. RPC_ENTRY
  576. I_RpcServerUnregisterEndpointA (
  577.     IN unsigned char * Protseq,
  578.     IN unsigned char * Endpoint
  579.     );
  580.  
  581. RPCRTAPI
  582. RPC_STATUS
  583. RPC_ENTRY
  584. I_RpcServerUnregisterEndpointW (
  585.     IN unsigned short * Protseq,
  586.     IN unsigned short * Endpoint
  587.     );
  588.  
  589. #ifdef UNICODE
  590. #define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointW
  591. #else
  592. #define I_RpcServerUnregisterEndpoint I_RpcServerUnregisterEndpointA
  593. #endif
  594. #endif // WINNT
  595.  
  596. RPCRTAPI
  597. RPC_STATUS
  598. RPC_ENTRY
  599. I_RpcServerInqTransportType(
  600.     OUT unsigned int __RPC_FAR * Type
  601.     ) ;
  602.  
  603. #ifdef __cplusplus
  604. }
  605. #endif
  606.  
  607. // Reset the packing level for Dos and Windows.
  608.  
  609. #if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
  610. #pragma pack()
  611. #endif
  612.  
  613. #endif /* __RPCDCEP_H__ */
  614.