Leaked source code of windows server 2003
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.

575 lines
19 KiB

  1. /*++
  2. Copyright (c) 1998-2002 Microsoft Corporation
  3. Module Name:
  4. HttpIoctl.h
  5. Abstract:
  6. Contains structures and declarations shared between
  7. HTTP.SYS and HTTPAPI.DLL. Users of the HTTP API should include
  8. HttpP.h and not this file.
  9. --*/
  10. #ifndef __HTTP_IOCTL_H__
  11. #define __HTTP_IOCTL_H__
  12. #include <httpp.h>
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif // __cplusplus
  16. //
  17. // Names of the object directory, devices, driver, and service.
  18. //
  19. #define HTTP_DIRECTORY_NAME L"\\Device\\Http"
  20. #define HTTP_CONTROL_DEVICE_NAME L"\\Device\\Http\\Control"
  21. #define HTTP_APP_POOL_DEVICE_NAME L"\\Device\\Http\\AppPool"
  22. #define HTTP_FILTER_DEVICE_NAME L"\\Device\\Http\\Filter"
  23. #define HTTP_SERVER_DEVICE_NAME L"\\Device\\Http\\Server"
  24. //
  25. #define HTTP_DRIVER_NAME L"HTTP.SYS"
  26. #define HTTP_SERVICE_NAME L"HTTP"
  27. #define HTTP_FILTER_SERVICE_NAME L"HTTPFilter"
  28. //
  29. // The current interface version number. This version number must be
  30. // updated after any significant changes to the interface (especially
  31. // structure changes).
  32. //
  33. #define HTTP_INTERFACE_VERSION_MAJOR 0x0001
  34. #define HTTP_INTERFACE_VERSION_MINOR 0x0001
  35. //
  36. // The name of the EA (Extended Attribute) passed to NtCreateFile(). This
  37. // allows us to pass version information at the time the driver is opened,
  38. // allowing HTTP.SYS to immediately fail open requests with invalid version
  39. // numbers.
  40. //
  41. // N.B. The EA name (including the terminator) must be a multiple of eight
  42. // to ensure natural alignment of the HTTP_OPEN_PACKET structure used as
  43. // the EA value.
  44. //
  45. // 7654321076543210
  46. #define HTTP_OPEN_PACKET_NAME "UlOpenPacket000"
  47. #define HTTP_OPEN_PACKET_NAME_LENGTH (sizeof(HTTP_OPEN_PACKET_NAME) - 1)
  48. C_ASSERT( ((HTTP_OPEN_PACKET_NAME_LENGTH + 1) & 7) == 0 );
  49. //
  50. // The following structure is used as the value for the EA named above.
  51. //
  52. typedef struct HTTP_OPEN_PACKET
  53. {
  54. USHORT MajorVersion;
  55. USHORT MinorVersion;
  56. USHORT ServerNameLength;
  57. PWCHAR pServerName;
  58. USHORT ProxyNameLength;
  59. PWCHAR pProxyName;
  60. USHORT TransportAddressLength;
  61. PTRANSPORT_ADDRESS pTransportAddress;
  62. } HTTP_OPEN_PACKET, *PHTTP_OPEN_PACKET;
  63. //
  64. // Structures for IOCTL_HTTP_QUERY_CONTROL_CHANNEL and
  65. // IOCTL_HTTP_SET_CONTROL_CHANNEL.
  66. //
  67. typedef struct _HTTP_CONTROL_CHANNEL_INFO
  68. {
  69. HTTP_CONTROL_CHANNEL_INFORMATION_CLASS InformationClass;
  70. } HTTP_CONTROL_CHANNEL_INFO, *PHTTP_CONTROL_CHANNEL_INFO;
  71. //
  72. // Structures for IOCTL_HTTP_CREATE_CONFIG_GROUP,
  73. // IOCTL_HTTP_DELETE_CONFIG_GROUP, IOCTL_HTTP_QUERY_CONFIG_GROUP,
  74. // and IOCTL_HTTP_SET_CONFIG_GROUP.
  75. //
  76. typedef struct _HTTP_CONFIG_GROUP_INFO
  77. {
  78. HTTP_CONFIG_GROUP_ID ConfigGroupId;
  79. HTTP_CONFIG_GROUP_INFORMATION_CLASS InformationClass;
  80. } HTTP_CONFIG_GROUP_INFO, *PHTTP_CONFIG_GROUP_INFO;
  81. //
  82. // Structures for IOCTL_HTTP_ADD_URL_TO_CONFIG_GROUP and
  83. // IOCTL_HTTP_REMOVE_URL_FROM_CONFIG_GROUP.
  84. //
  85. typedef enum _HTTP_URL_OPERATOR_TYPE
  86. {
  87. HttpUrlOperatorTypeReservation,
  88. HttpUrlOperatorTypeRegistration,
  89. HttpUrlOperatorTypeMax
  90. } HTTP_URL_OPERATOR_TYPE, *PHTTP_URL_OPERATOR_TYPE;
  91. typedef struct _HTTP_CONFIG_GROUP_URL_INFO
  92. {
  93. HTTP_URL_OPERATOR_TYPE UrlType;
  94. HTTP_CONFIG_GROUP_ID ConfigGroupId;
  95. HTTP_URL_CONTEXT UrlContext;
  96. PSECURITY_DESCRIPTOR pSecurityDescriptor;
  97. ULONG SecurityDescriptorLength;
  98. UNICODE_STRING FullyQualifiedUrl;
  99. } HTTP_CONFIG_GROUP_URL_INFO, *PHTTP_CONFIG_GROUP_URL_INFO;
  100. //
  101. // Structures for IOCTL_HTTP_REMOVE_ALL_URLS_FROM_CONFIG_GROUP.
  102. //
  103. typedef struct _HTTP_REMOVE_ALL_URLS_INFO
  104. {
  105. HTTP_CONFIG_GROUP_ID ConfigGroupId;
  106. } HTTP_REMOVE_ALL_URLS_INFO, *PHTTP_REMOVE_ALL_URLS_INFO;
  107. //
  108. // Structures for IOCTL_HTTP_CREATE_APP_POOL.
  109. //
  110. typedef struct _HTTP_CREATE_APP_POOL_INFO
  111. {
  112. UNICODE_STRING AppPoolName;
  113. } HTTP_CREATE_APP_POOL_INFO, *PHTTP_CREATE_APP_POOL_INFO;
  114. //
  115. // Structures for IOCTL_HTTP_QUERY_APP_POOL_INFORMATION and
  116. // IOCTL_HTTP_SET_APP_POOL_INFORMATION.
  117. //
  118. typedef struct _HTTP_APP_POOL_INFO
  119. {
  120. HTTP_APP_POOL_INFORMATION_CLASS InformationClass;
  121. } HTTP_APP_POOL_INFO, *PHTTP_APP_POOL_INFO;
  122. //
  123. // Structures for IOCTL_HTTP_RECEIVE_HTTP_REQUEST and
  124. // IOCTL_HTTP_RECEIVE_ENTITY_BODY.
  125. //
  126. typedef struct _HTTP_RECEIVE_REQUEST_INFO
  127. {
  128. HTTP_REQUEST_ID RequestId;
  129. ULONG Flags;
  130. } HTTP_RECEIVE_REQUEST_INFO, *PHTTP_RECEIVE_REQUEST_INFO;
  131. //
  132. // Structures for IOCTL_HTTP_SEND_HTTP_RESPONSE.
  133. //
  134. typedef struct _HTTP_SEND_HTTP_RESPONSE_INFO
  135. {
  136. PHTTP_RESPONSE pHttpResponse;
  137. USHORT EntityChunkCount;
  138. PHTTP_DATA_CHUNK pEntityChunks;
  139. HTTP_CACHE_POLICY CachePolicy;
  140. HTTP_REQUEST_ID RequestId;
  141. ULONG Flags;
  142. PHTTP_LOG_FIELDS_DATA pLogData;
  143. } HTTP_SEND_HTTP_RESPONSE_INFO, *PHTTP_SEND_HTTP_RESPONSE_INFO;
  144. //
  145. // Structures for IOCTL_HTTP_FLUSH_RESPONSE_CACHE.
  146. //
  147. typedef struct _HTTP_FLUSH_RESPONSE_CACHE_INFO
  148. {
  149. UNICODE_STRING FullyQualifiedUrl;
  150. ULONG Flags;
  151. } HTTP_FLUSH_RESPONSE_CACHE_INFO, *PHTTP_FLUSH_RESPONSE_CACHE_INFO;
  152. //
  153. // Structures for IOCTL_HTTP_WAIT_FOR_DISCONNECT.
  154. //
  155. typedef struct _HTTP_WAIT_FOR_DISCONNECT_INFO
  156. {
  157. HTTP_CONNECTION_ID ConnectionId;
  158. } HTTP_WAIT_FOR_DISCONNECT_INFO, *PHTTP_WAIT_FOR_DISCONNECT_INFO;
  159. //
  160. // Structures for IOCTL_HTTP_FILTER_RECEIVE_CLIENT_CERT
  161. //
  162. typedef struct _HTTP_FILTER_RECEIVE_CLIENT_CERT_INFO
  163. {
  164. HTTP_CONNECTION_ID ConnectionId;
  165. ULONG Flags;
  166. } HTTP_FILTER_RECEIVE_CLIENT_CERT_INFO, *PHTTP_FILTER_RECEIVE_CLIENT_CERT_INFO;
  167. //
  168. // Structure for IOCTL_HTTP_SEND_REQUEST (Input).
  169. //
  170. typedef struct _HTTP_SEND_REQUEST_INPUT_INFO
  171. {
  172. PHTTP_REQUEST_ID pHttpRequestId;
  173. PHTTP_REQUEST pHttpRequest;
  174. PULONG pBytesTaken;
  175. ULONG HttpRequestFlags;
  176. USHORT RequestConfigCount;
  177. PHTTP_REQUEST_CONFIG pRequestConfig;
  178. } HTTP_SEND_REQUEST_INPUT_INFO, *PHTTP_SEND_REQUEST_INPUT_INFO;
  179. //
  180. // Structure for IOCTL_HTTP_SEND_REQUEST_ENTITY_BODY_INFO.
  181. //
  182. typedef struct _HTTP_SEND_REQUEST_ENTITY_BODY_INFO
  183. {
  184. HTTP_REQUEST_ID RequestID;
  185. ULONG Flags;
  186. USHORT EntityChunkCount;
  187. PHTTP_DATA_CHUNK pHttpEntityChunk;
  188. } HTTP_SEND_REQUEST_ENTITY_BODY_INFO, *PHTTP_SEND_REQUEST_ENTITY_BODY_INFO;
  189. //
  190. // Structure for IOCTL_HTTP_RECEIVE_RESPONSE (Input).
  191. //
  192. typedef struct _HTTP_RECEIVE_RESPONSE_INFO
  193. {
  194. HTTP_REQUEST_ID RequestID;
  195. PULONG pBytesTaken;
  196. ULONG Flags;
  197. } HTTP_RECEIVE_RESPONSE_INFO, *PHTTP_RECEIVE_RESPONSE_INFO;
  198. //
  199. // structure for IOCTL_HTTP_SET_SERVER_CONTEXT_INFORMATION &
  200. // IOCTL_HTTP_QUERY_SERVER_CONTEXT_INFORMATION.
  201. //
  202. typedef struct _HTTP_SERVER_CONTEXT_INFORMATION
  203. {
  204. HTTP_SERVER_CONFIG_ID ConfigID;
  205. PULONG pBytesTaken;
  206. PVOID pInputBuffer;
  207. ULONG InputBufferLength;
  208. } HTTP_SERVER_CONTEXT_INFORMATION, *PHTTP_SERVER_CONTEXT_INFORMATION;
  209. //
  210. // Structures for IOCTL_HTTP_ADD_FRAGMENT_TO_CACHE.
  211. //
  212. typedef struct _HTTP_ADD_FRAGMENT_INFO
  213. {
  214. UNICODE_STRING FragmentName;
  215. HTTP_DATA_CHUNK DataChunk;
  216. HTTP_CACHE_POLICY CachePolicy;
  217. } HTTP_ADD_FRAGMENT_INFO, *PHTTP_ADD_FRAGMENT_INFO;
  218. //
  219. // Structures for IOCTL_HTTP_READ_FRAGMENT_FROM_CACHE.
  220. //
  221. typedef struct _HTTP_READ_FRAGMENT_INFO
  222. {
  223. UNICODE_STRING FragmentName;
  224. HTTP_BYTE_RANGE ByteRange;
  225. } HTTP_READ_FRAGMENT_INFO, *PHTTP_READ_FRAGMENT_INFO;
  226. //
  227. // HTTP IOCTL code definitions.
  228. //
  229. // N.B. To ensure the efficiency of the code generated by HTTP.SYS's
  230. // IOCTL dispatcher, these IOCTL codes should be contiguous
  231. // (no gaps).
  232. //
  233. // N.B. If new IOCTLs are added here, update the lookup table in devctrl.c.
  234. //
  235. #define _HTTP_CTL_CODE(request, method, access) \
  236. CTL_CODE( FILE_DEVICE_NETWORK, request, method, access )
  237. #define _HTTP_REQUEST(ioctl) \
  238. ((((ULONG)(ioctl)) >> 2) & 0x03FF)
  239. //
  240. // Server-side IOCTLs.
  241. //
  242. #define HTTP_QUERY_CONTROL_CHANNEL 0
  243. #define HTTP_SET_CONTROL_CHANNEL 1
  244. #define HTTP_CREATE_CONFIG_GROUP 2
  245. #define HTTP_DELETE_CONFIG_GROUP 3
  246. #define HTTP_QUERY_CONFIG_GROUP 4
  247. #define HTTP_SET_CONFIG_GROUP 5
  248. #define HTTP_ADD_URL_TO_CONFIG_GROUP 6
  249. #define HTTP_REMOVE_URL_FROM_CONFIG_GROUP 7
  250. #define HTTP_REMOVE_ALL_URLS_FROM_CONFIG_GROUP 8
  251. #define HTTP_QUERY_APP_POOL_INFORMATION 9
  252. #define HTTP_SET_APP_POOL_INFORMATION 10
  253. #define HTTP_SHUTDOWN_APP_POOL 11
  254. #define HTTP_RECEIVE_HTTP_REQUEST 12
  255. #define HTTP_RECEIVE_ENTITY_BODY 13
  256. #define HTTP_SEND_HTTP_RESPONSE 14
  257. #define HTTP_SEND_ENTITY_BODY 15
  258. #define HTTP_FLUSH_RESPONSE_CACHE 16
  259. #define HTTP_WAIT_FOR_DEMAND_START 17
  260. #define HTTP_WAIT_FOR_DISCONNECT 18
  261. #define HTTP_FILTER_ACCEPT 19
  262. #define HTTP_FILTER_CLOSE 20
  263. #define HTTP_FILTER_RAW_READ 21
  264. #define HTTP_FILTER_RAW_WRITE 22
  265. #define HTTP_FILTER_APP_READ 23
  266. #define HTTP_FILTER_APP_WRITE 24
  267. #define HTTP_FILTER_RECEIVE_CLIENT_CERT 25
  268. #define HTTP_SHUTDOWN_FILTER_CHANNEL 26
  269. #define HTTP_GET_COUNTERS 27
  270. #define HTTP_ADD_FRAGMENT_TO_CACHE 28
  271. #define HTTP_READ_FRAGMENT_FROM_CACHE 29
  272. //
  273. // Client-side IOCTLs.
  274. //
  275. #define HTTP_SEND_REQUEST 30
  276. #define HTTP_SEND_REQUEST_ENTITY_BODY 31
  277. #define HTTP_RECEIVE_RESPONSE 32
  278. #define HTTP_QUERY_SERVER_CONTEXT_INFORMATION 33
  279. #define HTTP_SET_SERVER_CONTEXT_INFORMATION 34
  280. #define HTTP_CANCEL_REQUEST 35
  281. #define HTTP_NUM_IOCTLS 36
  282. #define IOCTL_HTTP_QUERY_CONTROL_CHANNEL \
  283. _HTTP_CTL_CODE( HTTP_QUERY_CONTROL_CHANNEL, \
  284. METHOD_OUT_DIRECT, \
  285. FILE_READ_ACCESS )
  286. #define IOCTL_HTTP_SET_CONTROL_CHANNEL \
  287. _HTTP_CTL_CODE( HTTP_SET_CONTROL_CHANNEL, \
  288. METHOD_IN_DIRECT, \
  289. FILE_WRITE_ACCESS )
  290. #define IOCTL_HTTP_CREATE_CONFIG_GROUP \
  291. _HTTP_CTL_CODE( HTTP_CREATE_CONFIG_GROUP, \
  292. METHOD_BUFFERED, \
  293. FILE_WRITE_ACCESS )
  294. #define IOCTL_HTTP_DELETE_CONFIG_GROUP \
  295. _HTTP_CTL_CODE( HTTP_DELETE_CONFIG_GROUP, \
  296. METHOD_BUFFERED, \
  297. FILE_WRITE_ACCESS )
  298. #define IOCTL_HTTP_QUERY_CONFIG_GROUP \
  299. _HTTP_CTL_CODE( HTTP_QUERY_CONFIG_GROUP, \
  300. METHOD_OUT_DIRECT, \
  301. FILE_READ_ACCESS )
  302. #define IOCTL_HTTP_SET_CONFIG_GROUP \
  303. _HTTP_CTL_CODE( HTTP_SET_CONFIG_GROUP, \
  304. METHOD_IN_DIRECT, \
  305. FILE_WRITE_ACCESS )
  306. #define IOCTL_HTTP_ADD_URL_TO_CONFIG_GROUP \
  307. _HTTP_CTL_CODE( HTTP_ADD_URL_TO_CONFIG_GROUP, \
  308. METHOD_BUFFERED, \
  309. FILE_WRITE_ACCESS )
  310. #define IOCTL_HTTP_REMOVE_URL_FROM_CONFIG_GROUP \
  311. _HTTP_CTL_CODE( HTTP_REMOVE_URL_FROM_CONFIG_GROUP, \
  312. METHOD_BUFFERED, \
  313. FILE_WRITE_ACCESS )
  314. #define IOCTL_HTTP_REMOVE_ALL_URLS_FROM_CONFIG_GROUP \
  315. _HTTP_CTL_CODE( HTTP_REMOVE_ALL_URLS_FROM_CONFIG_GROUP, \
  316. METHOD_BUFFERED, \
  317. FILE_WRITE_ACCESS )
  318. #define IOCTL_HTTP_QUERY_APP_POOL_INFORMATION \
  319. _HTTP_CTL_CODE( HTTP_QUERY_APP_POOL_INFORMATION, \
  320. METHOD_OUT_DIRECT, \
  321. FILE_READ_ACCESS )
  322. #define IOCTL_HTTP_SET_APP_POOL_INFORMATION \
  323. _HTTP_CTL_CODE( HTTP_SET_APP_POOL_INFORMATION, \
  324. METHOD_IN_DIRECT, \
  325. FILE_WRITE_ACCESS )
  326. #define IOCTL_HTTP_SHUTDOWN_APP_POOL \
  327. _HTTP_CTL_CODE( HTTP_SHUTDOWN_APP_POOL, \
  328. METHOD_BUFFERED, \
  329. FILE_READ_ACCESS )
  330. #define IOCTL_HTTP_RECEIVE_HTTP_REQUEST \
  331. _HTTP_CTL_CODE( HTTP_RECEIVE_HTTP_REQUEST, \
  332. METHOD_OUT_DIRECT, \
  333. FILE_READ_ACCESS )
  334. #define IOCTL_HTTP_RECEIVE_ENTITY_BODY \
  335. _HTTP_CTL_CODE( HTTP_RECEIVE_ENTITY_BODY, \
  336. METHOD_OUT_DIRECT, \
  337. FILE_READ_ACCESS )
  338. #define IOCTL_HTTP_SEND_HTTP_RESPONSE \
  339. _HTTP_CTL_CODE( HTTP_SEND_HTTP_RESPONSE, \
  340. METHOD_NEITHER, \
  341. FILE_READ_ACCESS )
  342. #define IOCTL_HTTP_SEND_ENTITY_BODY \
  343. _HTTP_CTL_CODE( HTTP_SEND_ENTITY_BODY, \
  344. METHOD_NEITHER, \
  345. FILE_READ_ACCESS )
  346. #define IOCTL_HTTP_FLUSH_RESPONSE_CACHE \
  347. _HTTP_CTL_CODE( HTTP_FLUSH_RESPONSE_CACHE, \
  348. METHOD_BUFFERED, \
  349. FILE_READ_ACCESS )
  350. #define IOCTL_HTTP_WAIT_FOR_DEMAND_START \
  351. _HTTP_CTL_CODE( HTTP_WAIT_FOR_DEMAND_START, \
  352. METHOD_BUFFERED, \
  353. FILE_WRITE_ACCESS )
  354. #define IOCTL_HTTP_WAIT_FOR_DISCONNECT \
  355. _HTTP_CTL_CODE( HTTP_WAIT_FOR_DISCONNECT, \
  356. METHOD_BUFFERED, \
  357. FILE_READ_ACCESS )
  358. #define IOCTL_HTTP_FILTER_ACCEPT \
  359. _HTTP_CTL_CODE( HTTP_FILTER_ACCEPT, \
  360. METHOD_OUT_DIRECT, \
  361. FILE_READ_ACCESS )
  362. #define IOCTL_HTTP_FILTER_CLOSE \
  363. _HTTP_CTL_CODE( HTTP_FILTER_CLOSE, \
  364. METHOD_BUFFERED, \
  365. FILE_READ_ACCESS )
  366. #define IOCTL_HTTP_FILTER_RAW_READ \
  367. _HTTP_CTL_CODE( HTTP_FILTER_RAW_READ, \
  368. METHOD_OUT_DIRECT, \
  369. FILE_READ_ACCESS )
  370. #define IOCTL_HTTP_FILTER_RAW_WRITE \
  371. _HTTP_CTL_CODE( HTTP_FILTER_RAW_WRITE, \
  372. METHOD_IN_DIRECT, \
  373. FILE_READ_ACCESS )
  374. #define IOCTL_HTTP_FILTER_APP_READ \
  375. _HTTP_CTL_CODE( HTTP_FILTER_APP_READ, \
  376. METHOD_OUT_DIRECT, \
  377. FILE_READ_ACCESS )
  378. #define IOCTL_HTTP_FILTER_APP_WRITE \
  379. _HTTP_CTL_CODE( HTTP_FILTER_APP_WRITE, \
  380. METHOD_IN_DIRECT, \
  381. FILE_READ_ACCESS )
  382. #define IOCTL_HTTP_FILTER_RECEIVE_CLIENT_CERT \
  383. _HTTP_CTL_CODE( HTTP_FILTER_RECEIVE_CLIENT_CERT, \
  384. METHOD_OUT_DIRECT, \
  385. FILE_READ_ACCESS )
  386. #define IOCTL_HTTP_SHUTDOWN_FILTER_CHANNEL \
  387. _HTTP_CTL_CODE( HTTP_SHUTDOWN_FILTER_CHANNEL, \
  388. METHOD_BUFFERED, \
  389. FILE_READ_ACCESS )
  390. #define IOCTL_HTTP_GET_COUNTERS \
  391. _HTTP_CTL_CODE( HTTP_GET_COUNTERS, \
  392. METHOD_OUT_DIRECT, \
  393. FILE_READ_ACCESS )
  394. #define IOCTL_HTTP_ADD_FRAGMENT_TO_CACHE \
  395. _HTTP_CTL_CODE( HTTP_ADD_FRAGMENT_TO_CACHE, \
  396. METHOD_BUFFERED, \
  397. FILE_READ_ACCESS )
  398. #define IOCTL_HTTP_READ_FRAGMENT_FROM_CACHE \
  399. _HTTP_CTL_CODE( HTTP_READ_FRAGMENT_FROM_CACHE, \
  400. METHOD_NEITHER, \
  401. FILE_READ_ACCESS )
  402. #define IOCTL_HTTP_SEND_REQUEST \
  403. _HTTP_CTL_CODE( HTTP_SEND_REQUEST, \
  404. METHOD_OUT_DIRECT, \
  405. FILE_READ_ACCESS )
  406. #define IOCTL_HTTP_SEND_REQUEST_ENTITY_BODY \
  407. _HTTP_CTL_CODE( HTTP_SEND_REQUEST_ENTITY_BODY, \
  408. METHOD_IN_DIRECT, \
  409. FILE_READ_ACCESS )
  410. #define IOCTL_HTTP_RECEIVE_RESPONSE \
  411. _HTTP_CTL_CODE( HTTP_RECEIVE_RESPONSE, \
  412. METHOD_OUT_DIRECT, \
  413. FILE_READ_ACCESS )
  414. #define IOCTL_HTTP_QUERY_SERVER_CONTEXT_INFORMATION \
  415. _HTTP_CTL_CODE( HTTP_QUERY_SERVER_CONTEXT_INFORMATION, \
  416. METHOD_OUT_DIRECT, \
  417. FILE_READ_ACCESS | FILE_WRITE_ACCESS )
  418. #define IOCTL_HTTP_SET_SERVER_CONTEXT_INFORMATION \
  419. _HTTP_CTL_CODE( HTTP_SET_SERVER_CONTEXT_INFORMATION, \
  420. METHOD_IN_DIRECT, \
  421. FILE_READ_ACCESS | FILE_WRITE_ACCESS )
  422. #define IOCTL_HTTP_CANCEL_REQUEST \
  423. _HTTP_CTL_CODE( HTTP_CANCEL_REQUEST, \
  424. METHOD_BUFFERED, \
  425. FILE_READ_ACCESS | FILE_WRITE_ACCESS )
  426. #ifdef __cplusplus
  427. } // extern "C"
  428. #endif // __cplusplus
  429. #endif // __HTTP_IOCTL_H__