Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
5.3 KiB

4 years ago
  1. /*++
  2. Copyright (c) 1992 Microsoft Corporation
  3. Module Name:
  4. wmsgpack.hxx
  5. Abstract:
  6. This file contains the definitions of the packet formats used by
  7. RPC on LPC.
  8. Author:
  9. Steven Zeck (stevez) 11/12/91
  10. Revision History:
  11. 15-Dec-1992 mikemon
  12. Rewrote the majority of the code.
  13. ... implemented WMSG protocol
  14. 05-15-96 merged LRPC / WMSG into a single protocol
  15. --*/
  16. #ifndef __WMSGPACK_HXX__
  17. #define __WMSGPACK_HXX__
  18. #define WMSG_DIRECTORY_NAME L##"\\RPC Control\\"
  19. #define MINIMUM_PARTIAL_BUFFLEN 10240
  20. #define PORT_NAME_LEN 64
  21. #define WMSG_TIMEOUT 100
  22. #define WMSG_MAGIC_VALUE 0xBABE
  23. typedef struct _WMSG_BIND_EXCHANGE
  24. {
  25. INT ConnectType ;
  26. PVOID pAssoc ;
  27. char szPortName[PORT_NAME_LEN] ;
  28. RPC_SYNTAX_IDENTIFIER InterfaceId;
  29. RPC_SYNTAX_IDENTIFIER TransferSyntax;
  30. RPC_STATUS RpcStatus;
  31. unsigned char PresentationContext;
  32. unsigned char fBindBack ;
  33. unsigned char Pad[2];
  34. } WMSG_BIND_EXCHANGE;
  35. // message types
  36. #define WMSG_MSG_BIND 0
  37. #define WMSG_MSG_REQUEST 1
  38. #define WMSG_MSG_RESPONSE 2
  39. #define WMSG_MSG_CALLBACK 3
  40. #define WMSG_MSG_FAULT 4
  41. #define WMSG_MSG_CLOSE 5
  42. #define WMSG_MSG_ACK 6
  43. #define WMSG_BIND_ACK 7
  44. #define WMSG_MSG_COPY 8
  45. #define WMSG_MSG_PUSH 9
  46. #define WMSG_MSG_BIND_BACK 11
  47. #define WMSG_LRPC_REQUEST 12
  48. #define WMSG_PARTIAL_REQUEST 13
  49. #define WMSG_PARTIAL_OUT 14
  50. #define MAX_WMSG_MSG 15
  51. // connect types
  52. #define WMSG_CONNECT_REQUEST 0
  53. #define WMSG_CONNECT_RESPONSE 1
  54. // flags
  55. #define MESSAGE_SOURCE_SERVER 0x01
  56. #define MESSAGE_SOURCE_CLIENT 0x02
  57. typedef struct _WMSG_BIND_MESSAGE
  58. {
  59. PORT_MESSAGE LpcHeader;
  60. unsigned char MessageType;
  61. unsigned char Pad[3];
  62. WMSG_BIND_EXCHANGE BindExchange;
  63. } WMSG_BIND_MESSAGE;
  64. typedef struct _WMSG_BIND_BACK_MESSAGE
  65. {
  66. PORT_MESSAGE LpcHeader;
  67. unsigned char MessageType;
  68. unsigned char Pad[3];
  69. PVOID pAssoc ;
  70. char szPortName[PORT_NAME_LEN] ;
  71. } WMSG_BIND_BACK_MESSAGE;
  72. // buffer flags
  73. #define WMSG_BUFFER_IMMEDIATE 0x01
  74. #define WMSG_BUFFER_REQUEST 0x02
  75. #define WMSG_BUFFER_SERVER 0x04
  76. // dispatch flags
  77. #define DISPATCH_INPUT_SYNC 0x08
  78. #define DISPATCH_SYNC 0x10
  79. #define DISPATCH_ASYNC 0x20
  80. // misc flags
  81. #define WMSG_SYNC_CLIENT 0x40
  82. #define WMSG_BUFFER_PARTIAL 0x80
  83. typedef struct _WMSG_RPC_HEADER
  84. {
  85. unsigned char MessageType;
  86. unsigned char Flags ;
  87. unsigned char PresentationContext;
  88. unsigned char ObjectUuidFlag;
  89. unsigned short ProcedureNumber;
  90. unsigned short ConnectionKey ;
  91. UUID ObjectUuid;
  92. } WMSG_RPC_HEADER;
  93. typedef struct _WMSG_SERVER_BUFFER
  94. {
  95. unsigned int Length;
  96. unsigned int Buffer;
  97. } WMSG_SERVER_BUFFER;
  98. #define MAXIMUM_MESSAGE_BUFFER \
  99. (PORT_MAXIMUM_MESSAGE_LENGTH - sizeof(PORT_MESSAGE) \
  100. - sizeof(WMSG_RPC_HEADER))
  101. typedef struct _WMSG_CONNECT_MESSAGE
  102. {
  103. PORT_MESSAGE LpcHeader;
  104. WMSG_BIND_EXCHANGE BindExchange;
  105. } WMSG_CONNECT_MESSAGE;
  106. typedef struct _WMSG_RPC_MESSAGE
  107. {
  108. PORT_MESSAGE LpcHeader;
  109. WMSG_RPC_HEADER RpcHeader;
  110. union
  111. {
  112. unsigned char Buffer[MAXIMUM_MESSAGE_BUFFER];
  113. PORT_DATA_INFORMATION Request;
  114. WMSG_SERVER_BUFFER Server;
  115. };
  116. } WMSG_RPC_MESSAGE;
  117. typedef struct _WMSG_FAULT_MESSAGE
  118. {
  119. PORT_MESSAGE LpcHeader;
  120. WMSG_RPC_HEADER RpcHeader ;
  121. RPC_STATUS RpcStatus;
  122. } WMSG_FAULT_MESSAGE;
  123. typedef struct _WMSG_CLOSE_MESSAGE
  124. {
  125. PORT_MESSAGE LpcHeader;
  126. unsigned char MessageType;
  127. unsigned char Pad[3];
  128. } WMSG_CLOSE_MESSAGE;
  129. typedef struct _WMSG_PUSH_MESSAGE
  130. {
  131. PORT_MESSAGE LpcHeader;
  132. WMSG_RPC_HEADER RpcHeader;
  133. PORT_DATA_INFORMATION Response;
  134. RPC_STATUS RpcStatus;
  135. } WMSG_PUSH_MESSAGE;
  136. typedef struct _WMSG_RESPONSE_MESSAGE
  137. {
  138. PORT_MESSAGE LpcHeader;
  139. WMSG_RPC_HEADER RpcHeader;
  140. PORT_DATA_INFORMATION Response;
  141. } WMSG_RESPONSE_MESSAGE ;
  142. #define ACK_BUFFER_COMPLETE 0x01
  143. typedef struct _WMSG_ACK_MESSAGE
  144. {
  145. PORT_MESSAGE LpcHeader;
  146. unsigned char MessageType;
  147. unsigned char Pad ;
  148. short ConnectionKey ;
  149. RPC_STATUS RpcStatus;
  150. int ValidDataSize ;
  151. int Flags ;
  152. } WMSG_ACK_MESSAGE;
  153. typedef struct _WMSG_COPY_MESSAGE
  154. {
  155. PORT_MESSAGE LpcHeader;
  156. WMSG_RPC_HEADER RpcHeader ;
  157. PORT_DATA_INFORMATION Request;
  158. WMSG_SERVER_BUFFER Server;
  159. RPC_STATUS RpcStatus;
  160. int IsPartial ;
  161. } WMSG_COPY_MESSAGE;
  162. typedef struct _WMSG_PARTIAL_MESSAGE
  163. {
  164. PORT_MESSAGE LpcHeader;
  165. WMSG_RPC_HEADER RpcHeader ;
  166. PORT_DATA_INFORMATION Request;
  167. RPC_STATUS RpcStatus;
  168. int IsPartial ;
  169. } WMSG_PARTIAL_MESSAGE;
  170. typedef union _WMSG_MESSAGE
  171. {
  172. WMSG_CONNECT_MESSAGE Connect;
  173. WMSG_BIND_MESSAGE Bind;
  174. WMSG_RPC_MESSAGE Rpc;
  175. WMSG_FAULT_MESSAGE Fault;
  176. WMSG_CLOSE_MESSAGE Close;
  177. PORT_MESSAGE LpcHeader;
  178. WMSG_RESPONSE_MESSAGE Response ;
  179. WMSG_ACK_MESSAGE Ack ;
  180. WMSG_PUSH_MESSAGE Push ;
  181. WMSG_BIND_BACK_MESSAGE BindBack ;
  182. WMSG_PARTIAL_MESSAGE Partial ;
  183. } WMSG_MESSAGE;
  184. RPC_STATUS
  185. WMSGMapRpcStatus (
  186. IN RPC_STATUS RpcStatus
  187. );
  188. void
  189. ShutdownLrpcClient (
  190. ) ;
  191. #endif // __WMSGPACK_HXX__