Source code of Windows XP (NT5)
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.

729 lines
22 KiB

  1. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name :
  4. ndrtoken.h
  5. Abtract :
  6. Format character definitions, type flags, and other such stuff.
  7. Mainly from rpc\midl\inc\ndrtypes.h
  8. Revision History :
  9. John Doty johndoty May 2000 (Assembled from other ndr headers)
  10. --------------------------------------------------------------------*/
  11. #ifndef __NDRTOKEN_H__
  12. #define __NDRTOKEN_H__
  13. #ifdef __cplusplus
  14. extern "C"
  15. {
  16. #endif
  17. //
  18. // Format character definitions.
  19. //
  20. // !!! WARNING WARNING WARNING !!!
  21. //
  22. // All of the format character values up to FC_PAD can no longer be changed,
  23. // in order to preserve NT 3.5 compatability (excluding those marked as
  24. // FC_UNUSED*, these were unused format characters in NDR library version 1.1).
  25. // Their ordinal number, as well as semantics, must remain.
  26. //
  27. // When additional format characters are added (at the end), changes must
  28. // be made in ndr20 as well as codegen\frmtstr.cxx to handle the new type.
  29. // In particular, there is a pFormatCharNames table and a pNdrRoutineNames table
  30. // that should be kept in ssync.
  31. //
  32. // !!! WARNING WARNING WARNING !!!
  33. //
  34. typedef enum {
  35. //
  36. // This might catch some errors, probably can be removed after debugging.
  37. //
  38. FC_ZERO,
  39. //
  40. // Simple integer and floating point types.
  41. //
  42. FC_BYTE, // 0x01
  43. FC_CHAR, // 0x02
  44. FC_SMALL, // 0x03
  45. FC_USMALL, // 0x04
  46. FC_WCHAR, // 0x05
  47. FC_SHORT, // 0x06
  48. FC_USHORT, // 0x07
  49. FC_LONG, // 0x08
  50. FC_ULONG, // 0x09
  51. FC_FLOAT, // 0x0a
  52. FC_HYPER, // 0x0b
  53. FC_DOUBLE, // 0x0c
  54. //
  55. // Enums.
  56. //
  57. FC_ENUM16, // 0x0d
  58. FC_ENUM32, // 0x0e
  59. //
  60. // !!!IMPORTANT!!!
  61. // All format charaters which appear before this comment must have an
  62. // enum value which will fit in 4 bits.
  63. //
  64. //
  65. // Special.
  66. //
  67. FC_IGNORE, // 0x0f
  68. FC_ERROR_STATUS_T, // 0x10
  69. //
  70. // Pointer types :
  71. // RP - reference pointer
  72. // UP - unique pointer
  73. // OP - OLE unique pointer
  74. // FP - full pointer
  75. //
  76. FC_RP, // 0x11
  77. FC_UP, // 0x12
  78. FC_OP, // 0x13
  79. FC_FP, // 0x14
  80. //
  81. // Structures
  82. //
  83. //
  84. // Structure containing only simple types and fixed arrays.
  85. //
  86. FC_STRUCT, // 0x15
  87. //
  88. // Structure containing only simple types, pointers and fixed arrays.
  89. //
  90. FC_PSTRUCT, // 0x16
  91. //
  92. // Structure containing a conformant array plus all those types
  93. // allowed by FC_STRUCT.
  94. //
  95. FC_CSTRUCT, // 0x17
  96. //
  97. // Struct containing a conformant array plus all those types allowed by
  98. // FC_PSTRUCT.
  99. //
  100. FC_CPSTRUCT, // 0x18
  101. //
  102. // Struct containing either a conformant varying array or a conformant
  103. // string, plus all those types allowed by FC_PSTRUCT.
  104. //
  105. FC_CVSTRUCT, // 0x19
  106. //
  107. // Complex struct - totally bogus!
  108. //
  109. FC_BOGUS_STRUCT, // 0x1a
  110. //
  111. // Arrays.
  112. //
  113. //
  114. // Conformant arrray.
  115. //
  116. FC_CARRAY, // 0x1b
  117. //
  118. // Conformant varying array.
  119. //
  120. FC_CVARRAY, // 0x1c
  121. //
  122. // Fixed array, small and large.
  123. //
  124. FC_SMFARRAY, // 0x1d
  125. FC_LGFARRAY, // 0x1e
  126. //
  127. // Varying array, small and large.
  128. //
  129. FC_SMVARRAY, // 0x1f
  130. FC_LGVARRAY, // 0x20
  131. //
  132. // Complex arrays - totally bogus!
  133. //
  134. FC_BOGUS_ARRAY, // 0x21
  135. //
  136. // Strings :
  137. //
  138. // The order of these should have been moved around, but it's too late
  139. // now.
  140. //
  141. // CSTRING - character string
  142. // BSTRING - byte string (Beta2 compatability only)
  143. // SSTRING - structure string
  144. // WSTRING - wide charater string
  145. //
  146. //
  147. // Conformant strings.
  148. //
  149. FC_C_CSTRING, // 0x22
  150. FC_C_BSTRING, // 0x23
  151. FC_C_SSTRING, // 0x24
  152. FC_C_WSTRING, // 0x25
  153. //
  154. // Non-conformant strings.
  155. //
  156. FC_CSTRING, // 0x26
  157. FC_BSTRING, // 0x27
  158. FC_SSTRING, // 0x28
  159. FC_WSTRING, // 0x29
  160. //
  161. // Unions
  162. //
  163. FC_ENCAPSULATED_UNION, // 0x2a
  164. FC_NON_ENCAPSULATED_UNION, // 0x2b
  165. //
  166. // Byte count pointer.
  167. //
  168. FC_BYTE_COUNT_POINTER, // 0x2c
  169. //
  170. // transmit_as and represent_as
  171. //
  172. FC_TRANSMIT_AS, // 0x2d
  173. FC_REPRESENT_AS, // 0x2e
  174. //
  175. // Cairo Interface pointer.
  176. //
  177. FC_IP, // 0x2f
  178. //
  179. // Binding handle types
  180. //
  181. FC_BIND_CONTEXT, // 0x30
  182. FC_BIND_GENERIC, // 0x31
  183. FC_BIND_PRIMITIVE, // 0x32
  184. FC_AUTO_HANDLE, // 0x33
  185. FC_CALLBACK_HANDLE, // 0x34
  186. FC_UNUSED1, // 0x35
  187. // Embedded pointer - used in complex structure layouts only.
  188. FC_POINTER, // 0x36
  189. //
  190. // Alignment directives, used in structure layouts.
  191. // No longer generated with post NT5.0 MIDL.
  192. //
  193. FC_ALIGNM2, // 0x37
  194. FC_ALIGNM4, // 0x38
  195. FC_ALIGNM8, // 0x39
  196. FC_UNUSED2, // 0x3a
  197. FC_UNUSED3, // 0x3b
  198. FC_UNUSED4, // 0x3c
  199. //
  200. // Structure padding directives, used in structure layouts only.
  201. //
  202. FC_STRUCTPAD1, // 0x3d
  203. FC_STRUCTPAD2, // 0x3e
  204. FC_STRUCTPAD3, // 0x3f
  205. FC_STRUCTPAD4, // 0x40
  206. FC_STRUCTPAD5, // 0x41
  207. FC_STRUCTPAD6, // 0x42
  208. FC_STRUCTPAD7, // 0x43
  209. //
  210. // Additional string attribute.
  211. //
  212. FC_STRING_SIZED, // 0x44
  213. FC_UNUSED5, // 0x45
  214. //
  215. // Pointer layout attributes.
  216. //
  217. FC_NO_REPEAT, // 0x46
  218. FC_FIXED_REPEAT, // 0x47
  219. FC_VARIABLE_REPEAT, // 0x48
  220. FC_FIXED_OFFSET, // 0x49
  221. FC_VARIABLE_OFFSET, // 0x4a
  222. // Pointer section delimiter.
  223. FC_PP, // 0x4b
  224. // Embedded complex type.
  225. FC_EMBEDDED_COMPLEX, // 0x4c
  226. // Parameter attributes.
  227. FC_IN_PARAM, // 0x4d
  228. FC_IN_PARAM_BASETYPE, // 0x4e
  229. FC_IN_PARAM_NO_FREE_INST, // 0x4d
  230. FC_IN_OUT_PARAM, // 0x50
  231. FC_OUT_PARAM, // 0x51
  232. FC_RETURN_PARAM, // 0x52
  233. FC_RETURN_PARAM_BASETYPE, // 0x53
  234. //
  235. // Conformance/variance attributes.
  236. //
  237. FC_DEREFERENCE, // 0x54
  238. FC_DIV_2, // 0x55
  239. FC_MULT_2, // 0x56
  240. FC_ADD_1, // 0x57
  241. FC_SUB_1, // 0x58
  242. FC_CALLBACK, // 0x59
  243. // Iid flag.
  244. FC_CONSTANT_IID, // 0x5a
  245. FC_END, // 0x5b
  246. FC_PAD, // 0x5c
  247. FC_EXPR, // 0x5d
  248. FC_PARTIAL_IGNORE_PARAM, // 0x5e
  249. //
  250. // split Conformance/variance attributes.
  251. //
  252. FC_SPLIT_DEREFERENCE = 0x74, // 0x74
  253. FC_SPLIT_DIV_2, // 0x75
  254. FC_SPLIT_MULT_2, // 0x76
  255. FC_SPLIT_ADD_1, // 0x77
  256. FC_SPLIT_SUB_1, // 0x78
  257. FC_SPLIT_CALLBACK, // 0x79
  258. //
  259. // **********************************
  260. // New Post NT 3.5 format characters.
  261. // **********************************
  262. //
  263. //
  264. // Attributes, directives, etc.
  265. //
  266. //
  267. // New types.
  268. //
  269. // These start at 0xb1 (0x31 + 0x80) so that their routines can simply be
  270. // placed sequentially in the various routine tables, while using
  271. // a new ROUTINE_INDEX() macro which strips off the most significant bit
  272. // of the format character. The value 0x31 is the next value after
  273. // FC_BIND_CONTEXT, whose routines were previously the last to appear
  274. // in the routine tables.
  275. //
  276. FC_HARD_STRUCT = 0xb1, // 0xb1
  277. FC_TRANSMIT_AS_PTR, // 0xb2
  278. FC_REPRESENT_AS_PTR, // 0xb3
  279. FC_USER_MARSHAL, // 0xb4
  280. FC_PIPE, // 0xb5
  281. FC_BLKHOLE, // 0xb6
  282. FC_RANGE, // 0xb7 NT 5 beta2 MIDL 3.3.110
  283. FC_INT3264, // 0xb8 NT 5 beta2, MIDL64, 5.1.194+
  284. FC_UINT3264, // 0xb9 NT 5 beta2, MIDL64, 5.1.194+
  285. //
  286. // Post NT 5.0 strings
  287. //
  288. //
  289. // Arrays of international characters
  290. //
  291. FC_CSARRAY, // 0xba
  292. FC_CS_TAG, // 0xbb
  293. // Replacement for alignment in structure layout.
  294. FC_STRUCTPADN, // 0xbc
  295. FC_INT128, // 0xbd
  296. FC_UINT128, // 0xbe
  297. FC_FLOAT80, // 0xbf
  298. FC_FLOAT128, // 0xc0
  299. FC_BUFFER_ALIGN, // 0xc1
  300. //
  301. // New Ndr64 codes
  302. //
  303. FC_ENCAP_UNION, // 0xc2
  304. // new arrays types
  305. FC_FIX_ARRAY, // 0xc3
  306. FC_CONF_ARRAY, // 0xc4
  307. FC_VAR_ARRAY, // 0xc5
  308. FC_CONFVAR_ARRAY, // 0xc6
  309. FC_FIX_FORCED_BOGUS_ARRAY, // 0xc7
  310. FC_FIX_BOGUS_ARRAY, // 0xc8
  311. FC_FORCED_BOGUS_ARRAY, // 0xc9
  312. FC_CHAR_STRING, // 0xca
  313. FC_WCHAR_STRING, // 0xcb
  314. FC_STRUCT_STRING, // 0xcc
  315. FC_CONF_CHAR_STRING, // 0xcd
  316. FC_CONF_WCHAR_STRING, // 0xce
  317. FC_CONF_STRUCT_STRING, // 0xcf
  318. // new structures types
  319. FC_CONF_STRUCT, // 0xd0
  320. FC_CONF_PSTRUCT, // 0xd1
  321. FC_CONFVAR_STRUCT, // 0xd2
  322. FC_CONFVAR_PSTRUCT, // 0xd3
  323. FC_FORCED_BOGUS_STRUCT, // 0xd4
  324. FC_CONF_BOGUS_STRUCT, // 0xd5
  325. FC_FORCED_CONF_BOGUS_STRUCT,// 0xd7
  326. FC_END_OF_UNIVERSE // 0xd8
  327. } FORMAT_CHARACTER;
  328. //
  329. // Conformance and variance constants
  330. //
  331. #define FC_NORMAL_CONFORMANCE (unsigned char) 0x00
  332. #define FC_POINTER_CONFORMANCE (unsigned char) 0x10
  333. #define FC_TOP_LEVEL_CONFORMANCE (unsigned char) 0x20
  334. #define FC_CONSTANT_CONFORMANCE (unsigned char) 0x40
  335. #define FC_TOP_LEVEL_MULTID_CONFORMANCE (unsigned char) 0x80
  336. #define FC_NORMAL_VARIANCE FC_NORMAL_CONFORMANCE
  337. #define FC_POINTER_VARIANCE FC_POINTER_CONFORMANCE
  338. #define FC_TOP_LEVEL_VARIANCE FC_TOP_LEVEL_CONFORMANCE
  339. #define FC_CONSTANT_VARIANCE FC_CONSTANT_CONFORMANCE
  340. #define FC_TOP_LEVEL_MULTID_VARIANCE FC_TOP_LEVEL_MULTID_CONFORMANCE
  341. #define FC_NORMAL_SWITCH_IS FC_NORMAL_CONFORMANCE
  342. #define FC_POINTER_SWITCH_IS FC_POINTER_CONFORMANCE
  343. #define FC_TOP_LEVEL_SWITCH_IS FC_TOP_LEVEL_CONFORMANCE
  344. #define FC_CONSTANT_SWITCH_IS FC_CONSTANT_CONFORMANCE
  345. //
  346. // Pointer attributes.
  347. //
  348. #define FC_ALLOCATE_ALL_NODES 0x01
  349. #define FC_DONT_FREE 0x02
  350. #define FC_ALLOCED_ON_STACK 0x04
  351. #define FC_SIMPLE_POINTER 0x08
  352. #define FC_POINTER_DEREF 0x10
  353. #define NDR_DEFAULT_CORR_CACHE_SIZE 400
  354. #if !defined(__RPC_MAC__)
  355. //
  356. // Interpreter bit flag structures.
  357. //
  358. // These are the old Oi interpreter proc flags.
  359. typedef struct
  360. {
  361. unsigned char FullPtrUsed : 1; // 0x01
  362. unsigned char RpcSsAllocUsed : 1; // 0x02
  363. unsigned char ObjectProc : 1; // 0x04
  364. unsigned char HasRpcFlags : 1; // 0x08
  365. unsigned char IgnoreObjectException : 1; // 0x10
  366. unsigned char HasCommOrFault : 1; // 0x20
  367. unsigned char UseNewInitRoutines : 1; // 0x40
  368. unsigned char Unused : 1;
  369. } INTERPRETER_FLAGS, *PINTERPRETER_FLAGS;
  370. // These are the Oi2 parameter flags.
  371. typedef struct
  372. {
  373. unsigned short MustSize : 1; // 0x0001
  374. unsigned short MustFree : 1; // 0x0002
  375. unsigned short IsPipe : 1; // 0x0004
  376. unsigned short IsIn : 1; // 0x0008
  377. unsigned short IsOut : 1; // 0x0010
  378. unsigned short IsReturn : 1; // 0x0020
  379. unsigned short IsBasetype : 1; // 0x0040
  380. unsigned short IsByValue : 1; // 0x0080
  381. unsigned short IsSimpleRef : 1; // 0x0100
  382. unsigned short IsDontCallFreeInst : 1; // 0x0200
  383. unsigned short SaveForAsyncFinish : 1; // 0x0400
  384. unsigned short IsPartialIgnore : 1; // 0x0800
  385. unsigned short IsForceAllocate : 1; // 0x1000
  386. unsigned short ServerAllocSize : 3; // 0xe000
  387. } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  388. // These are the new Oi2 proc flags.
  389. typedef struct
  390. {
  391. unsigned char ServerMustSize : 1; // 0x01
  392. unsigned char ClientMustSize : 1; // 0x02
  393. unsigned char HasReturn : 1; // 0x04
  394. unsigned char HasPipes : 1; // 0x08
  395. unsigned char Unused : 1;
  396. unsigned char HasAsyncUuid : 1; // 0x20
  397. unsigned char HasExtensions : 1; // 0x40
  398. unsigned char HasAsyncHandle : 1; // 0x80
  399. } INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
  400. // This is the proc header layout for object procs starting with MIDL 3.3.129,
  401. // introduced for the async_uuid() support in dcom but generated for ony object
  402. // interface, regardless of the compiler mode and interface being async.
  403. // Handle is always autohandle and so there never is explicit handle descriptor.
  404. // RpcFlags are always present to make the layout fixed.
  405. typedef struct _NDR_DCOM_OI2_PROC_HEADER
  406. {
  407. unsigned char HandleType; // The old Oi header
  408. INTERPRETER_FLAGS OldOiFlags; //
  409. unsigned short RpcFlagsLow; //
  410. unsigned short RpcFlagsHi; //
  411. unsigned short ProcNum; //
  412. unsigned short StackSize; //
  413. // expl handle descr is never generated //
  414. unsigned short ClientBufferSize; // The Oi2 header
  415. unsigned short ServerBufferSize; //
  416. INTERPRETER_OPT_FLAGS Oi2Flags; //
  417. unsigned char NumberParams; //
  418. } NDR_DCOM_OI2_PROC_HEADER, *PNDR_DCOM_OI2_PROC_HEADER;
  419. // These are extended Oi2 interpreter proc flags.
  420. // They have been introduced for NT5 beta2.
  421. typedef struct
  422. {
  423. unsigned char HasNewCorrDesc : 1; // 0x01
  424. unsigned char ClientCorrCheck : 1; // 0x02
  425. unsigned char ServerCorrCheck : 1; // 0x04
  426. unsigned char HasNotify : 1; // 0x08
  427. unsigned char HasNotify2 : 1; // 0x10
  428. unsigned char HasComplexReturn : 1; // 0x20
  429. unsigned char Unused : 2;
  430. } INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
  431. // This is the layout of the proc header extensions introduced for denial of
  432. // attacks for NT5 beta2, MIDL version 3.3.129.
  433. // The extensions would be announced by the HasExtensions Oi2 flag and would
  434. // follow directly after the ParameterCount field of Oi2 header.
  435. typedef struct
  436. {
  437. unsigned char Size; // size as the extension version
  438. INTERPRETER_OPT_FLAGS2 Flags2;
  439. unsigned short ClientCorrHint;
  440. unsigned short ServerCorrHint;
  441. unsigned short NotifyIndex;
  442. } NDR_PROC_HEADER_EXTS, *PNDR_PROC_HEADER_EXTS;
  443. typedef struct
  444. {
  445. unsigned char Size; // size as the extension version
  446. INTERPRETER_OPT_FLAGS2 Flags2;
  447. unsigned short ClientCorrHint;
  448. unsigned short ServerCorrHint;
  449. unsigned short NotifyIndex;
  450. unsigned short FloatArgMask;
  451. } NDR_PROC_HEADER_EXTS64, *PNDR_PROC_HEADER_EXTS64;
  452. // Context handle flags
  453. typedef struct
  454. {
  455. unsigned char CannotBeNull : 1; // 0x01
  456. unsigned char Serialize : 1; // 0x02
  457. unsigned char NoSerialize : 1; // 0x04
  458. unsigned char IsStrict : 1; // 0x08
  459. unsigned char IsReturn : 1; // 0x10
  460. unsigned char IsOut : 1; // 0x20
  461. unsigned char IsIn : 1; // 0x40
  462. unsigned char IsViaPtr : 1; // 0x80
  463. } NDR_CONTEXT_HANDLE_FLAGS, *PNDR_CONTEXT_HANDLE_FLAGS;
  464. typedef struct
  465. {
  466. unsigned char Fc;
  467. NDR_CONTEXT_HANDLE_FLAGS Flags;
  468. unsigned char RundownRtnIndex;
  469. unsigned char ParamOrdinal; // Oicf: ordinal, /Oi param num
  470. } NDR_CONTEXT_HANDLE_ARG_DESC, *PNDR_CONTEXT_HANDLE_ARG_DESC;
  471. // Type pickling flags
  472. typedef struct _MIDL_TYPE_PICKLING_FLAGS
  473. {
  474. unsigned long Oicf : 1;
  475. unsigned long HasNewCorrDesc : 1;
  476. unsigned long Unused : 30;
  477. } MIDL_TYPE_PICKLING_FLAGS, *PMIDL_TYPE_PICKLING_FLAGS;
  478. /*
  479. typedef struct
  480. {
  481. unsigned long HandleType : 3;
  482. unsigned long ProcType : 3;
  483. unsigned long IsInterpreted : 2;
  484. unsigned long IsObject : 1;
  485. unsigned long IsAsync : 1;
  486. unsigned long IsPickled : 2;
  487. unsigned long UsesFullPtrPackage : 1;
  488. unsigned long UsesRpcSmPackage : 1;
  489. unsigned long UsesPipes : 1;
  490. unsigned long HandlesExceptions : 2;
  491. unsigned long ServerMustsize : 1;
  492. unsigned long ClientMustsize : 1;
  493. unsigned long HasReturn : 1;
  494. unsigned long ClientCorrelation : 1;
  495. unsigned long ServerCorrelation : 1;
  496. unsigned long HasNotify : 1;
  497. unsigned long HasOtherExtensions : 1;
  498. unsigned long Unused : 8;
  499. } NDR64_FLAGS;
  500. typedef struct
  501. {
  502. unsigned short MustSize : 1; // 0x0001
  503. unsigned short MustFree : 1; // 0x0002
  504. unsigned short IsPipe : 1; // 0x0004
  505. unsigned short IsIn : 1; // 0x0008
  506. unsigned short IsOut : 1; // 0x0010
  507. unsigned short IsReturn : 1; // 0x0020
  508. unsigned short IsBasetype : 1; // 0x0040
  509. unsigned short IsByValue : 1; // 0x0080
  510. unsigned short IsSimpleRef : 1; // 0x0100
  511. unsigned short IsDontCallFreeInst : 1; // 0x0200
  512. unsigned short SaveForAsyncFinish : 1; // 0x0400
  513. unsigned short Unused : 5;
  514. unsigned short UseCache : 1; // new
  515. } NDR64_PARAM_ATTRIBUTES, *PNDR64_PARAM_ATTRIBUTES;
  516. typedef struct
  517. {
  518. NDR64_PARAM_ATTRIBUTES ParamAttr;
  519. union
  520. {
  521. unsigned short ParamOffset;
  522. struct
  523. {
  524. unsigned char Type;
  525. unsigned char Unused;
  526. } SimpleType;
  527. };
  528. unsigned long StackOffset;
  529. } NDR64_PARAM_DESCRIPTION, *PNDR64_PARAM_DESCRIPTION;
  530. */
  531. #else
  532. // now Mac defs: bits are flipped on Mac.
  533. typedef struct
  534. {
  535. unsigned char Unused : 3;
  536. unsigned char HasNotify2 : 1; // 0x10
  537. unsigned char HasNotify : 1; // 0x08
  538. unsigned char ServerCorrCheck : 1; // 0x04
  539. unsigned char ClientCorrCheck : 1; // 0x02
  540. unsigned char HasNewCorrDec : 1; // 0x01
  541. } INTERPRETER_OPT_FLAGS2, *PINTERPRETER_OPT_FLAGS2;
  542. typedef struct
  543. {
  544. unsigned char Unused : 1;
  545. unsigned char UseNewInitRoutines : 1; // 0x40
  546. unsigned char HasCommOrFault : 1; // 0x20
  547. unsigned char IgnoreObjectException : 1; // 0x10
  548. unsigned char HasRpcFlags : 1; // 0x08
  549. unsigned char ObjectProc : 1; // 0x04
  550. unsigned char RpcSsAllocUsed : 1; // 0x02
  551. unsigned char FullPtrUsed : 1; // 0x01
  552. } INTERPRETER_FLAGS, *PINTERPRETER_FLAGS;
  553. typedef struct
  554. {
  555. unsigned char HasAsyncHandle : 1; // 0x80
  556. unsigned char HasExtensions : 1; // 0x40
  557. unsigned char Unused : 2;
  558. unsigned char HasPipes : 1; // 0x08
  559. unsigned char HasReturn : 1; // 0x04
  560. unsigned char ClientMustSize : 1; // 0x02
  561. unsigned char ServerMustSize : 1; // 0x01
  562. } INTERPRETER_OPT_FLAGS, *PINTERPRETER_OPT_FLAGS;
  563. typedef struct
  564. {
  565. unsigned short ServerAllocSize : 3; // 0xe000
  566. unsigned short Unused : 2;
  567. unsigned short SaveForAsyncFinish : 1; // 0x0400
  568. unsigned short IsDontCallFreeInst : 1; // 0x0200
  569. unsigned short IsSimpleRef : 1; // 0x0100
  570. //
  571. unsigned short IsByValue : 1; // 0x0080
  572. unsigned short IsBasetype : 1; // 0x0040
  573. unsigned short IsReturn : 1; // 0x0020
  574. unsigned short IsOut : 1; // 0x0010
  575. unsigned short IsIn : 1; // 0x0008
  576. unsigned short IsPipe : 1; // 0x0004
  577. unsigned short MustFree : 1; // 0x0002
  578. unsigned short MustSize : 1; // 0x0001
  579. } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  580. #endif
  581. #pragma pack(2)
  582. typedef struct
  583. {
  584. PARAM_ATTRIBUTES ParamAttr;
  585. unsigned short StackOffset;
  586. union
  587. {
  588. unsigned short TypeOffset;
  589. struct
  590. {
  591. unsigned char Type;
  592. unsigned char Unused;
  593. } SimpleType;
  594. };
  595. } PARAM_DESCRIPTION, *PPARAM_DESCRIPTION;
  596. #pragma pack()
  597. #ifdef __cplusplus
  598. }
  599. #endif
  600. #endif