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.

741 lines
21 KiB

  1. /*++
  2. Copyright (c) Microsoft Corporation. All rights reserved.
  3. Module Name:
  4. ndr64types.h
  5. Abstract:
  6. Definitions for NDR64 format strings.
  7. --*/
  8. #ifndef _NDR64TYPES_H
  9. #define _NDR64TYPES_H
  10. #include <pshpack8.h>
  11. #include <guiddef.h> // REVIEW: or just redefine GUID here
  12. #if _MSC_VER >= 1200
  13. #pragma warning(push)
  14. #endif
  15. #pragma warning (disable: 4201) // nameless struct/union
  16. #pragma warning (disable: 4214) // bitfield
  17. typedef const void * FormatInfoRef;
  18. #define INVALID_FRAGMENT_ID 0
  19. /*
  20. * Format string types
  21. */
  22. typedef unsigned __int8 NDR64_UINT8;
  23. typedef unsigned __int16 NDR64_UINT16;
  24. typedef unsigned __int32 NDR64_UINT32;
  25. typedef unsigned __int64 NDR64_UINT64;
  26. typedef __int8 NDR64_INT8;
  27. typedef __int16 NDR64_INT16;
  28. typedef __int32 NDR64_INT32;
  29. typedef __int64 NDR64_INT64;
  30. typedef NDR64_UINT8 NDR64_FORMAT_CHAR;
  31. typedef const void * PNDR64_FORMAT;
  32. typedef NDR64_UINT8 NDR64_ALIGNMENT;
  33. typedef NDR64_UINT32 NDR64_FORMAT_UINT32;
  34. // BUG BUG, IA64 stack offsets are actually X86
  35. // offsets when compiled in the 32bit envirnment. This
  36. // is for testing purposes and should be removed before shipping
  37. // Remove after midl 6.0.330+ propagates around.
  38. #if defined(_M_IA64)
  39. #define Ia64Axp(a, b) (a)
  40. #elif defined(_M_IX86)
  41. #define Ia64Axp(a, b) (a)
  42. #elif defined(_M_AMD64)
  43. #define Ia64Axp(a, b) (a)
  44. #else
  45. #error Invalid platform
  46. #endif
  47. #define NDR64_FC_EXPLICIT_HANDLE 0
  48. #define NDR64_FC_BIND_GENERIC 1
  49. #define NDR64_FC_BIND_PRIMITIVE 2
  50. #define NDR64_FC_AUTO_HANDLE 3
  51. #define NDR64_FC_CALLBACK_HANDLE 4
  52. #define NDR64_FC_NO_HANDLE 5
  53. #if defined(__RPC_WIN32__)
  54. typedef NDR64_INT32 NDR64_PTR_WIRE_TYPE;
  55. #else
  56. typedef NDR64_INT64 NDR64_PTR_WIRE_TYPE;
  57. #endif
  58. #define NDR64_PTR_WIRE_ALIGN (sizeof(NDR64_PTR_WIRE_TYPE)-1)
  59. typedef NDR64_UINT64 NDR64_WIRE_COUNT_TYPE;
  60. #define NDR64_WIRE_COUNT_ALIGN (sizeof(NDR64_WIRE_COUNT_TYPE)-1)
  61. //
  62. // Procedures and parameters
  63. //
  64. typedef struct _NDR64_PROC_FLAGS
  65. {
  66. NDR64_UINT32 HandleType : 3; // 0x00000000
  67. NDR64_UINT32 ProcType : 3; // 0x00000008
  68. NDR64_UINT32 IsInterpreted : 2; // 0x00000040
  69. NDR64_UINT32 IsObject : 1; // 0x00000100
  70. NDR64_UINT32 IsAsync : 1; // 0x00000200
  71. NDR64_UINT32 IsEncode : 1; // 0x00000400
  72. NDR64_UINT32 IsDecode : 1; // 0x00000800
  73. NDR64_UINT32 UsesFullPtrPackage : 1; // 0x00001000
  74. NDR64_UINT32 UsesRpcSmPackage : 1; // 0x00002000
  75. NDR64_UINT32 UsesPipes : 1; // 0x00004000
  76. NDR64_UINT32 HandlesExceptions : 2; // 0x00008000
  77. NDR64_UINT32 ServerMustSize : 1; // 0x00020000
  78. NDR64_UINT32 ClientMustSize : 1; // 0x00040000
  79. NDR64_UINT32 HasReturn : 1; // 0x00080000
  80. NDR64_UINT32 HasComplexReturn : 1; // 0x00100000
  81. NDR64_UINT32 ServerHasCorrelation : 1; // 0x00200000
  82. NDR64_UINT32 ClientHasCorrelation : 1; // 0x00400000
  83. NDR64_UINT32 HasNotify : 1; // 0x00800000
  84. NDR64_UINT32 HasOtherExtensions : 1; // 0x01000000
  85. NDR64_UINT32 Reserved : 7; // 0x02000000
  86. } NDR64_PROC_FLAGS;
  87. typedef struct _NDR64_RPC_FLAGS
  88. {
  89. NDR64_UINT16 Idempotent : 1;
  90. NDR64_UINT16 Broadcast : 1;
  91. NDR64_UINT16 Maybe : 1;
  92. NDR64_UINT16 Reserved1 : 5;
  93. NDR64_UINT16 Message : 1;
  94. NDR64_UINT16 Reserved2 : 4;
  95. NDR64_UINT16 InputSynchronous : 1;
  96. NDR64_UINT16 Asynchronous : 1;
  97. NDR64_UINT16 Reserved3 : 1;
  98. } NDR64_RPC_FLAGS;
  99. typedef struct _NDR64_PROC_FORMAT
  100. {
  101. NDR64_UINT32 Flags;
  102. NDR64_UINT32 StackSize;
  103. NDR64_UINT32 ConstantClientBufferSize;
  104. NDR64_UINT32 ConstantServerBufferSize;
  105. NDR64_UINT16 RpcFlags;
  106. NDR64_UINT16 FloatDoubleMask;
  107. NDR64_UINT16 NumberOfParams;
  108. NDR64_UINT16 ExtensionSize;
  109. } NDR64_PROC_FORMAT, *PNDR64_PROC_FORMAT;
  110. typedef struct _NDR64_PARAM_FLAGS
  111. {
  112. NDR64_UINT16 MustSize : 1;
  113. NDR64_UINT16 MustFree : 1;
  114. NDR64_UINT16 IsPipe : 1;
  115. NDR64_UINT16 IsIn : 1;
  116. NDR64_UINT16 IsOut : 1;
  117. NDR64_UINT16 IsReturn : 1;
  118. NDR64_UINT16 IsBasetype : 1;
  119. NDR64_UINT16 IsByValue : 1;
  120. NDR64_UINT16 IsSimpleRef : 1;
  121. NDR64_UINT16 IsDontCallFreeInst : 1;
  122. NDR64_UINT16 SaveForAsyncFinish : 1;
  123. NDR64_UINT16 IsPartialIgnore : 1;
  124. NDR64_UINT16 IsForceAllocate : 1;
  125. NDR64_UINT16 Reserved : 2;
  126. NDR64_UINT16 UseCache : 1;
  127. } NDR64_PARAM_FLAGS;
  128. typedef struct _NDR64_PARAM_FORMAT
  129. {
  130. PNDR64_FORMAT Type;
  131. NDR64_PARAM_FLAGS Attributes;
  132. NDR64_UINT16 Reserved;
  133. NDR64_UINT32 StackOffset;
  134. } NDR64_PARAM_FORMAT, *PNDR64_PARAM_FORMAT;
  135. //
  136. // Base types
  137. //
  138. typedef struct _NDR64_RANGE_FORMAT
  139. {
  140. NDR64_FORMAT_CHAR FormatCode;
  141. NDR64_FORMAT_CHAR RangeType;
  142. NDR64_UINT16 Reserved;
  143. NDR64_INT64 MinValue;
  144. NDR64_INT64 MaxValue;
  145. } NDR64_RANGE_FORMAT;
  146. //
  147. // Handles & bindings
  148. //
  149. typedef struct _NDR64_CONTEXT_HANDLE_FLAGS
  150. {
  151. NDR64_UINT8 CannotBeNull : 1;
  152. NDR64_UINT8 Serialize : 1;
  153. NDR64_UINT8 NoSerialize : 1;
  154. NDR64_UINT8 Strict : 1;
  155. NDR64_UINT8 IsReturn : 1;
  156. NDR64_UINT8 IsOut : 1;
  157. NDR64_UINT8 IsIn : 1;
  158. NDR64_UINT8 IsViaPointer : 1;
  159. } NDR64_CONTEXT_HANDLE_FLAGS;
  160. typedef struct _NDR64_CONTEXT_HANDLE_FORMAT
  161. {
  162. NDR64_FORMAT_CHAR FormatCode;
  163. NDR64_UINT8 ContextFlags;
  164. NDR64_UINT8 RundownRoutineIndex;
  165. NDR64_UINT8 Ordinal;
  166. } NDR64_CONTEXT_HANDLE_FORMAT;
  167. typedef struct _NDR64_BIND_PRIMITIVE
  168. {
  169. NDR64_FORMAT_CHAR HandleType;
  170. NDR64_UINT8 Flags;
  171. NDR64_UINT16 StackOffset;
  172. NDR64_UINT16 Reserved;
  173. } NDR64_BIND_PRIMITIVE;
  174. typedef struct _NDR64_BIND_GENERIC
  175. {
  176. NDR64_FORMAT_CHAR HandleType;
  177. NDR64_UINT8 Flags;
  178. NDR64_UINT16 StackOffset;
  179. NDR64_UINT8 RoutineIndex;
  180. NDR64_UINT8 Size;
  181. } NDR64_BIND_GENERIC;
  182. typedef struct _NDR64_BIND_CONTEXT
  183. {
  184. NDR64_FORMAT_CHAR HandleType;
  185. NDR64_UINT8 Flags;
  186. NDR64_UINT16 StackOffset;
  187. NDR64_UINT8 RoutineIndex;
  188. NDR64_UINT8 Ordinal;
  189. } NDR64_BIND_CONTEXT;
  190. typedef union _NDR64_BINDINGS
  191. {
  192. NDR64_BIND_PRIMITIVE Primitive;
  193. NDR64_BIND_GENERIC Generic;
  194. NDR64_BIND_CONTEXT Context;
  195. } NDR64_BINDINGS;
  196. // NOTE: The type of the Binding member below is actually NDR64_BINDINGS.
  197. // We use NDR64_BIND_CONTEXT because it has essentially the same
  198. // signature as the others and it makes static initilization clearer.
  199. typedef struct _NDR64_BIND_AND_NOTIFY_EXTENSION
  200. {
  201. NDR64_BIND_CONTEXT Binding;
  202. NDR64_UINT16 NotifyIndex;
  203. } NDR64_BIND_AND_NOTIFY_EXTENSION;
  204. //
  205. // Pointers
  206. //
  207. typedef struct _NDR64_POINTER_FORMAT
  208. {
  209. NDR64_FORMAT_CHAR FormatCode;
  210. NDR64_UINT8 Flags;
  211. NDR64_UINT16 Reserved;
  212. PNDR64_FORMAT Pointee;
  213. } NDR64_POINTER_FORMAT;
  214. typedef struct _NDR64_NO_REPEAT_FORMAT
  215. {
  216. NDR64_FORMAT_CHAR FormatCode;
  217. NDR64_UINT8 Flags;
  218. NDR64_UINT16 Reserved1;
  219. NDR64_UINT32 Reserved2;
  220. } NDR64_NO_REPEAT_FORMAT;
  221. typedef struct _NDR64_POINTER_INSTANCE_HEADER_FORMAT
  222. {
  223. NDR64_UINT32 Offset;
  224. NDR64_UINT32 Reserved;
  225. } NDR64_POINTER_INSTANCE_HEADER_FORMAT;
  226. typedef struct _NDR64_POINTER_REPEAT_FLAGS
  227. {
  228. NDR64_UINT8 SetCorrMark : 1;
  229. NDR64_UINT8 Reserved : 7;
  230. } NDR64_POINTER_REPEAT_FLAGS, *PNDR64_POINTER_REPEAT_FLAGS;
  231. typedef struct _NDR64_REPEAT_FORMAT
  232. {
  233. NDR64_FORMAT_CHAR FormatCode;
  234. NDR64_POINTER_REPEAT_FLAGS Flags;
  235. NDR64_UINT16 Reserved;
  236. NDR64_UINT32 Increment;
  237. NDR64_UINT32 OffsetToArray;
  238. NDR64_UINT32 NumberOfPointers;
  239. } NDR64_REPEAT_FORMAT, *PNDR64_REPEAT_FORMAT;
  240. typedef struct _NDR64_FIXED_REPEAT_FORMAT
  241. {
  242. NDR64_REPEAT_FORMAT RepeatFormat;
  243. NDR64_UINT32 Iterations;
  244. NDR64_UINT32 Reserved;
  245. } NDR64_FIXED_REPEAT_FORMAT, *PNDR64_FIXED_REPEAT_FORMAT;
  246. typedef struct _NDR64_IID_FLAGS
  247. {
  248. NDR64_UINT8 ConstantIID : 1;
  249. NDR64_UINT8 Reserved : 7;
  250. } NDR64_IID_FLAGS;
  251. typedef struct _NDR64_CONSTANT_IID_FORMAT
  252. {
  253. NDR64_FORMAT_CHAR FormatCode;
  254. NDR64_UINT8 Flags;
  255. NDR64_UINT16 Reserved;
  256. GUID Guid;
  257. } NDR64_CONSTANT_IID_FORMAT;
  258. typedef struct _NDR64_IID_FORMAT
  259. {
  260. NDR64_FORMAT_CHAR FormatCode;
  261. NDR64_UINT8 Flags;
  262. NDR64_UINT16 Reserved;
  263. PNDR64_FORMAT IIDDescriptor;
  264. } NDR64_IID_FORMAT;
  265. //
  266. // Structures
  267. //
  268. typedef struct _NDR64_STRUCTURE_FLAGS
  269. {
  270. NDR64_UINT8 HasPointerInfo : 1; /* 1 */
  271. NDR64_UINT8 HasMemberInfo : 1; /* 2 */
  272. NDR64_UINT8 HasConfArray : 1; /* 3 */
  273. NDR64_UINT8 HasOrigPointerInfo : 1; /* 4 */
  274. NDR64_UINT8 HasOrigMemberInfo : 1; /* 5 */
  275. NDR64_UINT8 Reserved1 : 1; /* 6 */
  276. NDR64_UINT8 Reserved2 : 1; /* 7 */
  277. NDR64_UINT8 Reserved3 : 1; /* 8 */
  278. } NDR64_STRUCTURE_FLAGS;
  279. typedef struct _NDR64_STRUCTURE_HEADER_FORMAT
  280. {
  281. NDR64_FORMAT_CHAR FormatCode;
  282. NDR64_ALIGNMENT Alignment;
  283. NDR64_STRUCTURE_FLAGS Flags;
  284. NDR64_UINT8 Reserve;
  285. NDR64_UINT32 MemorySize;
  286. } NDR64_STRUCTURE_HEADER_FORMAT;
  287. typedef struct _NDR64_CONF_STRUCTURE_HEADER_FORMAT
  288. {
  289. NDR64_FORMAT_CHAR FormatCode;
  290. NDR64_ALIGNMENT Alignment;
  291. NDR64_STRUCTURE_FLAGS Flags;
  292. NDR64_UINT8 Reserve;
  293. NDR64_UINT32 MemorySize;
  294. PNDR64_FORMAT ArrayDescription;
  295. } NDR64_CONF_STRUCTURE_HEADER_FORMAT;
  296. typedef struct _NDR64_BOGUS_STRUCTURE_HEADER_FORMAT
  297. {
  298. NDR64_FORMAT_CHAR FormatCode;
  299. NDR64_ALIGNMENT Alignment;
  300. NDR64_STRUCTURE_FLAGS Flags;
  301. NDR64_UINT8 Reserve;
  302. NDR64_UINT32 MemorySize;
  303. PNDR64_FORMAT OriginalMemberLayout;
  304. PNDR64_FORMAT OriginalPointerLayout;
  305. PNDR64_FORMAT PointerLayout;
  306. } NDR64_BOGUS_STRUCTURE_HEADER_FORMAT;
  307. typedef struct _NDR64_CONF_BOGUS_STRUCTURE_HEADER_FORMAT
  308. {
  309. NDR64_FORMAT_CHAR FormatCode;
  310. NDR64_ALIGNMENT Alignment;
  311. NDR64_STRUCTURE_FLAGS Flags;
  312. NDR64_UINT8 Dimensions;
  313. NDR64_UINT32 MemorySize;
  314. PNDR64_FORMAT OriginalMemberLayout;
  315. PNDR64_FORMAT OriginalPointerLayout;
  316. PNDR64_FORMAT PointerLayout;
  317. PNDR64_FORMAT ConfArrayDescription;
  318. } NDR64_CONF_BOGUS_STRUCTURE_HEADER_FORMAT;
  319. /*
  320. * Structure member layout components
  321. */
  322. typedef struct _NDR64_SIMPLE_MEMBER_FORMAT
  323. {
  324. NDR64_FORMAT_CHAR FormatCode;
  325. NDR64_UINT8 Reserved1;
  326. NDR64_UINT16 Reserved2;
  327. NDR64_UINT32 Reserved3;
  328. } NDR64_SIMPLE_MEMBER_FORMAT;
  329. typedef struct _NDR64_MEMPAD_FORMAT
  330. {
  331. NDR64_FORMAT_CHAR FormatCode;
  332. NDR64_UINT8 Reserve1;
  333. NDR64_UINT16 MemPad;
  334. NDR64_UINT32 Reserved2;
  335. } NDR64_MEMPAD_FORMAT;
  336. typedef struct _NDR64_EMBEDDED_COMPLEX_FORMAT
  337. {
  338. NDR64_FORMAT_CHAR FormatCode;
  339. NDR64_UINT8 Reserve1;
  340. NDR64_UINT16 Reserve2;
  341. PNDR64_FORMAT Type;
  342. } NDR64_EMBEDDED_COMPLEX_FORMAT;
  343. typedef struct _NDR64_BUFFER_ALIGN_FORMAT
  344. {
  345. NDR64_FORMAT_CHAR FormatCode;
  346. NDR64_ALIGNMENT Alignment;
  347. NDR64_UINT16 Reserved;
  348. NDR64_UINT32 Reserved2;
  349. } NDR64_BUFFER_ALIGN_FORMAT;
  350. typedef struct _NDR64_SIMPLE_REGION_FORMAT
  351. {
  352. NDR64_FORMAT_CHAR FormatCode;
  353. NDR64_ALIGNMENT Alignment;
  354. NDR64_UINT16 RegionSize;
  355. NDR64_UINT32 Reserved;
  356. } NDR64_SIMPLE_REGION_FORMAT;
  357. //
  358. // Unions
  359. //
  360. typedef struct _NDR64_ENCAPSULATED_UNION
  361. {
  362. NDR64_FORMAT_CHAR FormatCode;
  363. NDR64_UINT8 Alignment;
  364. NDR64_UINT8 Flags;
  365. NDR64_FORMAT_CHAR SwitchType;
  366. NDR64_UINT32 MemoryOffset;
  367. NDR64_UINT32 MemorySize;
  368. NDR64_UINT32 Reserved;
  369. }
  370. NDR64_ENCAPSULATED_UNION;
  371. typedef struct _NDR64_NON_ENCAPSULATED_UNION
  372. {
  373. NDR64_FORMAT_CHAR FormatCode;
  374. NDR64_UINT8 Alignment;
  375. NDR64_UINT8 Flags;
  376. NDR64_FORMAT_CHAR SwitchType;
  377. NDR64_UINT32 MemorySize;
  378. PNDR64_FORMAT Switch;
  379. NDR64_UINT32 Reserved;
  380. }
  381. NDR64_NON_ENCAPSULATED_UNION;
  382. typedef struct _NDR64_UNION_ARM_SELECTOR
  383. {
  384. NDR64_UINT8 Reserved1;
  385. NDR64_UINT8 Alignment;
  386. NDR64_UINT16 Reserved2;
  387. NDR64_UINT32 Arms;
  388. }
  389. NDR64_UNION_ARM_SELECTOR;
  390. typedef struct _NDR64_UNION_ARM
  391. {
  392. NDR64_INT64 CaseValue;
  393. PNDR64_FORMAT Type;
  394. NDR64_UINT32 Reserved;
  395. }
  396. NDR64_UNION_ARM;
  397. /*
  398. * Array related data
  399. */
  400. typedef struct _NDR64_ARRAY_FLAGS
  401. {
  402. NDR64_UINT8 HasPointerInfo : 1; /* 1 */
  403. NDR64_UINT8 HasElementInfo : 1; /* 2 */
  404. NDR64_UINT8 IsMultiDimensional : 1; /* 3 */
  405. NDR64_UINT8 IsArrayofStrings : 1; /* 4 */
  406. NDR64_UINT8 Reserved1 : 1; /* 5 */
  407. NDR64_UINT8 Reserved2 : 1; /* 6 */
  408. NDR64_UINT8 Reserved3 : 1; /* 7 */
  409. NDR64_UINT8 Reserved4 : 1; /* 8 */
  410. } NDR64_ARRAY_FLAGS;
  411. typedef struct _NDR64_ARRAY_ELEMENT_INFO
  412. {
  413. NDR64_UINT32 ElementMemSize;
  414. PNDR64_FORMAT Element;
  415. } NDR64_ARRAY_ELEMENT_INFO;
  416. typedef struct _NDR64_FIX_ARRAY_HEADER_FORMAT
  417. {
  418. NDR64_FORMAT_CHAR FormatCode;
  419. NDR64_ALIGNMENT Alignment;
  420. NDR64_ARRAY_FLAGS Flags;
  421. NDR64_UINT8 Reserved;
  422. NDR64_UINT32 TotalSize;
  423. } NDR64_FIX_ARRAY_HEADER_FORMAT;
  424. typedef struct _NDR64_CONF_ARRAY_HEADER_FORMAT
  425. {
  426. NDR64_FORMAT_CHAR FormatCode;
  427. NDR64_ALIGNMENT Alignment;
  428. NDR64_ARRAY_FLAGS Flags;
  429. NDR64_UINT8 Reserved;
  430. NDR64_UINT32 ElementSize;
  431. PNDR64_FORMAT ConfDescriptor;
  432. } NDR64_CONF_ARRAY_HEADER_FORMAT;
  433. typedef struct _NDR64_CONF_VAR_ARRAY_HEADER_FORMAT
  434. {
  435. NDR64_FORMAT_CHAR FormatCode;
  436. NDR64_ALIGNMENT Alignment;
  437. NDR64_ARRAY_FLAGS Flags;
  438. NDR64_UINT8 Reserved;
  439. NDR64_UINT32 ElementSize;
  440. PNDR64_FORMAT ConfDescriptor;
  441. PNDR64_FORMAT VarDescriptor;
  442. } NDR64_CONF_VAR_ARRAY_HEADER_FORMAT;
  443. typedef struct _NDR64_VAR_ARRAY_HEADER_FORMAT
  444. {
  445. NDR64_FORMAT_CHAR FormatCode;
  446. NDR64_ALIGNMENT Alignment;
  447. NDR64_ARRAY_FLAGS Flags;
  448. NDR64_UINT8 Reserved;
  449. NDR64_UINT32 TotalSize;
  450. NDR64_UINT32 ElementSize;
  451. PNDR64_FORMAT VarDescriptor;
  452. } NDR64_VAR_ARRAY_HEADER_FORMAT;
  453. typedef struct _NDR64_BOGUS_ARRAY_HEADER_FORMAT
  454. {
  455. NDR64_FORMAT_CHAR FormatCode;
  456. NDR64_ALIGNMENT Alignment;
  457. NDR64_ARRAY_FLAGS Flags;
  458. NDR64_UINT8 NumberDims;
  459. NDR64_UINT32 NumberElements;
  460. PNDR64_FORMAT Element;
  461. } NDR64_BOGUS_ARRAY_HEADER_FORMAT;
  462. typedef struct _NDR64_CONF_VAR_BOGUS_ARRAY_HEADER_FORMAT
  463. {
  464. NDR64_BOGUS_ARRAY_HEADER_FORMAT FixedArrayFormat;
  465. PNDR64_FORMAT ConfDescription;
  466. PNDR64_FORMAT VarDescription;
  467. PNDR64_FORMAT OffsetDescription;
  468. } NDR64_CONF_VAR_BOGUS_ARRAY_HEADER_FORMAT;
  469. /*
  470. * String related data.
  471. */
  472. typedef struct _NDR64_STRING_FLAGS
  473. {
  474. NDR64_UINT8 IsSized : 1;
  475. NDR64_UINT8 Reserved2 : 1;
  476. NDR64_UINT8 Reserved3 : 1;
  477. NDR64_UINT8 Reserved4 : 1;
  478. NDR64_UINT8 Reserved5 : 1;
  479. NDR64_UINT8 Reserved6 : 1;
  480. NDR64_UINT8 Reserved7 : 1;
  481. NDR64_UINT8 Reserved8 : 1;
  482. } NDR64_STRING_FLAGS;
  483. typedef struct NDR64_STRING_HEADER_FORMAT
  484. {
  485. NDR64_FORMAT_CHAR FormatCode;
  486. NDR64_STRING_FLAGS Flags;
  487. NDR64_UINT16 ElementSize;
  488. } NDR64_STRING_HEADER_FORMAT;
  489. typedef struct _NDR64_NON_CONFORMANT_STRING_FORMAT
  490. {
  491. NDR64_STRING_HEADER_FORMAT Header;
  492. NDR64_UINT32 TotalSize;
  493. } NDR64_NON_CONFORMANT_STRING_FORMAT;
  494. typedef struct _NDR64_CONFORMANT_STRING_FORMAT
  495. {
  496. NDR64_STRING_HEADER_FORMAT Header;
  497. } NDR64_CONFORMANT_STRING_FORMAT;
  498. typedef struct NDR64_SIZED_CONFORMANT_STRING_FORMAT
  499. {
  500. NDR64_STRING_HEADER_FORMAT Header;
  501. PNDR64_FORMAT SizeDescription;
  502. } NDR64_SIZED_CONFORMANT_STRING_FORMAT;
  503. //
  504. // Correlation expressions
  505. //
  506. typedef enum _tagEXPR_TOKEN
  507. {
  508. FC_EXPR_START = 0,
  509. FC_EXPR_ILLEGAL = FC_EXPR_START,
  510. FC_EXPR_CONST32,
  511. FC_EXPR_CONST64,
  512. FC_EXPR_VAR,
  513. FC_EXPR_OPER,
  514. FC_EXPR_NOOP, // pad up the format string buffer.
  515. FC_EXPR_END
  516. } EXPR_TOKEN;
  517. typedef struct _NDR64_EXPR_OPERATOR
  518. {
  519. NDR64_FORMAT_CHAR ExprType;
  520. NDR64_FORMAT_CHAR Operator;
  521. NDR64_FORMAT_CHAR CastType;
  522. NDR64_UINT8 Reserved;
  523. } NDR64_EXPR_OPERATOR;
  524. typedef struct _NDR64_EXPR_CONST32
  525. {
  526. NDR64_FORMAT_CHAR ExprType;
  527. NDR64_FORMAT_CHAR Reserved;
  528. NDR64_UINT16 Reserved1;
  529. NDR64_UINT32 ConstValue;
  530. } NDR64_EXPR_CONST32;
  531. typedef struct _NDR64_EXPR_CONST64
  532. {
  533. NDR64_FORMAT_CHAR ExprType;
  534. NDR64_FORMAT_CHAR Reserved;
  535. NDR64_UINT16 Reserved1;
  536. NDR64_INT64 ConstValue;
  537. } NDR64_EXPR_CONST64;
  538. typedef struct _NDR64_EXPR_VAR
  539. {
  540. NDR64_FORMAT_CHAR ExprType;
  541. NDR64_FORMAT_CHAR VarType;
  542. NDR64_UINT16 Reserved;
  543. NDR64_UINT32 Offset;
  544. } NDR64_EXPR_VAR;
  545. typedef struct _NDR64_EXPR_NOOP
  546. {
  547. NDR64_FORMAT_CHAR ExprType;
  548. NDR64_UINT8 Size;
  549. NDR64_UINT16 Reserved;
  550. } NDR64_EXPR_NOOP;
  551. //
  552. // transmit_as, represent_as
  553. //
  554. typedef struct _NDR64_TRANSMIT_AS_FLAGS
  555. {
  556. NDR64_UINT8 PresentedTypeIsArray : 1;
  557. NDR64_UINT8 PresentedTypeAlign4 : 1;
  558. NDR64_UINT8 PresentedTypeAlign8 : 1;
  559. NDR64_UINT8 Reserved : 5;
  560. } NDR64_TRANSMIT_AS_FLAGS;
  561. typedef struct _NDR64_TRANSMIT_AS_FORMAT
  562. {
  563. NDR64_FORMAT_CHAR FormatCode;
  564. NDR64_UINT8 Flags;
  565. NDR64_UINT16 RoutineIndex;
  566. NDR64_UINT16 TransmittedTypeWireAlignment;
  567. NDR64_UINT16 MemoryAlignment;
  568. NDR64_UINT32 PresentedTypeMemorySize;
  569. NDR64_UINT32 TransmittedTypeBufferSize;
  570. PNDR64_FORMAT TransmittedType;
  571. } NDR64_TRANSMIT_AS_FORMAT;
  572. typedef NDR64_TRANSMIT_AS_FORMAT NDR64_REPRESENT_AS_FORMAT;
  573. //
  574. // user_marshal
  575. //
  576. typedef struct _NDR64_USER_MARSHAL_FLAGS
  577. {
  578. NDR64_UINT8 Reserved : 5;
  579. NDR64_UINT8 IID : 1;
  580. NDR64_UINT8 RefPointer : 1;
  581. NDR64_UINT8 UniquePointer : 1;
  582. } NDR64_USER_MARSHAL_FLAGS;
  583. typedef struct _NDR64_USER_MARSHAL_FORMAT
  584. {
  585. NDR64_FORMAT_CHAR FormatCode;
  586. NDR64_UINT8 Flags;
  587. NDR64_UINT16 RoutineIndex;
  588. NDR64_UINT16 TransmittedTypeWireAlignment;
  589. NDR64_UINT16 MemoryAlignment;
  590. NDR64_UINT32 UserTypeMemorySize;
  591. NDR64_UINT32 TransmittedTypeBufferSize;
  592. PNDR64_FORMAT TransmittedType;
  593. } NDR64_USER_MARSHAL_FORMAT;
  594. //
  595. // Pipes
  596. //
  597. typedef struct NDR64_PIPE_FLAGS
  598. {
  599. NDR64_UINT8 Reserved1 : 5;
  600. NDR64_UINT8 HasRange : 1;
  601. NDR64_UINT8 BlockCopy : 1;
  602. NDR64_UINT8 Reserved2 : 1;
  603. } NDR64_PIPE_FLAGS;
  604. typedef struct _NDR64_PIPE_FORMAT
  605. {
  606. NDR64_FORMAT_CHAR FormatCode;
  607. NDR64_UINT8 Flags;
  608. NDR64_UINT8 Alignment;
  609. NDR64_UINT8 Reserved;
  610. PNDR64_FORMAT Type;
  611. NDR64_UINT32 MemorySize;
  612. NDR64_UINT32 BufferSize;
  613. } NDR64_PIPE_FORMAT;
  614. typedef struct _NDR64_RANGE_PIPE_FORMAT
  615. {
  616. NDR64_FORMAT_CHAR FormatCode;
  617. NDR64_UINT8 Flags;
  618. NDR64_UINT8 Alignment;
  619. NDR64_UINT8 Reserved;
  620. PNDR64_FORMAT Type;
  621. NDR64_UINT32 MemorySize;
  622. NDR64_UINT32 BufferSize;
  623. NDR64_UINT32 MinValue;
  624. NDR64_UINT32 MaxValue;
  625. } NDR64_RANGE_PIPE_FORMAT;
  626. #if _MSC_VER >= 1200
  627. #pragma warning(pop)
  628. #endif
  629. #include <poppack.h>
  630. #endif //_NDR64TYPES_H