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.

400 lines
8.4 KiB

  1. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. Copyright <c> 1993 Microsoft Corporation
  3. Module Name :
  4. global.c
  5. Abtract :
  6. Contains some global variable declarations for the NDR library.
  7. Author :
  8. David Kays dkays October 1993
  9. Revision History :
  10. --------------------------------------------------------------------*/
  11. #include "ndrp.h"
  12. //
  13. // Simple type buffer alignment masks.
  14. //
  15. extern const unsigned char SimpleTypeAlignment[] =
  16. {
  17. 0, // FC_ZERO
  18. 0, // FC_BYTE
  19. 0, // FC_CHAR
  20. 0, // FC_SMALL
  21. 0, // FC_USMALL
  22. 1, // FC_WCHAR
  23. 1, // FC_SHORT
  24. 1, // FC_USHORT
  25. 3, // FC_LONG
  26. 3, // FC_ULONG
  27. 3, // FC_FLOAT
  28. 7, // FC_HYPER
  29. 7, // FC_DOUBLE
  30. 1, // FC_ENUM16
  31. 3, // FC_ENUM32
  32. 3, // FC_IGNORE
  33. 3, // FC_ERROR_STATUS_T
  34. 0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x11 .. 1f
  35. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 .. 2f
  36. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x30 .. 3f
  37. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x40 .. 4f
  38. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 .. 5f
  39. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 .. 6f
  40. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x70 .. 7f
  41. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 .. 8f
  42. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 .. 9f
  43. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 .. af
  44. 0,0,0,0, 0,0,0,0, // 0xb0 .. b7
  45. 3, // FC_INT3264
  46. 3, // FC_UINT3264
  47. 0, // 0xbb (FC_CSARRAY)
  48. 3, // 0xbc (FC_CS_TAG)
  49. };
  50. #if !defined(NDR_GLOBAL_TABLES_ONLY)
  51. RPCRTAPI
  52. unsigned char
  53. RPC_ENTRY
  54. NdrGetSimpleTypeBufferAlignment( unsigned char FormatChar )
  55. {
  56. return SimpleTypeAlignment[FormatChar];
  57. }
  58. #endif
  59. //
  60. // Simple type buffer sizes.
  61. //
  62. extern const unsigned char SimpleTypeBufferSize[] =
  63. {
  64. 0, // FC_ZERO
  65. 1, // FC_BYTE
  66. 1, // FC_CHAR
  67. 1, // FC_SMALL
  68. 1, // FC_USMALL
  69. 2, // FC_WCHAR
  70. 2, // FC_SHORT
  71. 2, // FC_USHORT
  72. 4, // FC_LONG
  73. 4, // FC_ULONG
  74. 4, // FC_FLOAT
  75. 8, // FC_HYPER
  76. 8, // FC_DOUBLE
  77. 2, // FC_ENUM16
  78. 4, // FC_ENUM32
  79. 4, // FC_IGNORE
  80. 4, // FC_ERROR_STATUS_T
  81. 0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x11 .. 1f
  82. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 .. 2f
  83. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x30 .. 3f
  84. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x40 .. 4f
  85. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 .. 5f
  86. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 .. 6f
  87. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x70 .. 7f
  88. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 .. 8f
  89. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 .. 9f
  90. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 .. af
  91. 0,0,0,0, 0,0,0,0, // 0xb0 .. b7
  92. 4, // FC_INT3264
  93. 4, // FC_UINT3264
  94. 0, // 0xbb (FC_CSARRAY)
  95. 4 // 0xbc (FC_CS_TAG)
  96. };
  97. #if !defined(NDR_GLOBAL_TABLES_ONLY)
  98. RPCRTAPI
  99. unsigned char
  100. RPC_ENTRY
  101. NdrGetSimpleTypeBufferSize( unsigned char FormatChar )
  102. {
  103. return SimpleTypeBufferSize[FormatChar];
  104. }
  105. #endif
  106. //
  107. // Simple type memory sizes.
  108. //
  109. extern const unsigned char SimpleTypeMemorySize[] =
  110. {
  111. 0, // FC_ZERO
  112. 1, // FC_BYTE
  113. 1, // FC_CHAR
  114. 1, // FC_SMALL
  115. 1, // FC_USMALL
  116. 2, // FC_WCHAR
  117. 2, // FC_SHORT
  118. 2, // FC_USHORT
  119. 4, // FC_LONG
  120. 4, // FC_ULONG
  121. 4, // FC_FLOAT
  122. 8, // FC_HYPER
  123. 8, // FC_DOUBLE
  124. sizeof(int), // FC_ENUM16
  125. sizeof(int), // FC_ENUM32
  126. PTR_MEM_SIZE, // FC_IGNORE
  127. 4, // FC_ERROR_STATUS_T
  128. 0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x11 .. 1f
  129. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x20 .. 2f
  130. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x30 .. 3f
  131. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x40 .. 4f
  132. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x50 .. 5f
  133. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x60 .. 6f
  134. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x70 .. 7f
  135. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x80 .. 8f
  136. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0x90 .. 9f
  137. 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, // 0xa0 .. af
  138. 0,0,0,0, 0,0,0,0, // 0xb0 .. b7
  139. PTR_MEM_SIZE, // FC_INT3264 : 4 for 32b, 8 for 64b
  140. PTR_MEM_SIZE, // FC_UINT3264: 4 for 32b, 8 for 64b
  141. 0, // 0xbb (FC_CSARRAY)
  142. 4 // 0xbc (FC_CS_TAG)
  143. };
  144. #if !defined(NDR_GLOBAL_TABLES_ONLY)
  145. RPCRTAPI
  146. unsigned char
  147. RPC_ENTRY
  148. NdrGetSimpleTypeMemorySize( unsigned char FormatChar )
  149. {
  150. return SimpleTypeMemorySize[ FormatChar ];
  151. }
  152. #endif
  153. //
  154. // Contains information about individual ndr types defined in ndrtypes.h.
  155. // Currently is used only by the interpreter. A set entry indicates that
  156. // the type is a by-value type. This may be expanded in the future to
  157. // contain additional attributes.
  158. //
  159. extern const unsigned long NdrTypeFlags[] =
  160. {
  161. 0,
  162. //
  163. // Simple types
  164. //
  165. _SIMPLE_TYPE_,
  166. _SIMPLE_TYPE_,
  167. _SIMPLE_TYPE_,
  168. _SIMPLE_TYPE_,
  169. _SIMPLE_TYPE_,
  170. _SIMPLE_TYPE_,
  171. _SIMPLE_TYPE_,
  172. _SIMPLE_TYPE_,
  173. _SIMPLE_TYPE_,
  174. _SIMPLE_TYPE_,
  175. _SIMPLE_TYPE_,
  176. _SIMPLE_TYPE_,
  177. _SIMPLE_TYPE_,
  178. _SIMPLE_TYPE_,
  179. _SIMPLE_TYPE_,
  180. _SIMPLE_TYPE_,
  181. //
  182. // Pointer types
  183. //
  184. _BASIC_POINTER_ | _POINTER_,
  185. _BASIC_POINTER_ | _POINTER_,
  186. _BASIC_POINTER_ | _POINTER_,
  187. _BASIC_POINTER_ | _POINTER_,
  188. //
  189. // Structures
  190. //
  191. _STRUCT_ | _BY_VALUE_,
  192. _STRUCT_ | _BY_VALUE_,
  193. _STRUCT_ | _BY_VALUE_,
  194. _STRUCT_ | _BY_VALUE_,
  195. _STRUCT_ | _BY_VALUE_,
  196. _STRUCT_ | _BY_VALUE_,
  197. //
  198. // Arrays
  199. //
  200. _ARRAY_,
  201. _ARRAY_,
  202. _ARRAY_,
  203. _ARRAY_,
  204. _ARRAY_,
  205. _ARRAY_,
  206. _ARRAY_,
  207. //
  208. // Conformant Strings
  209. //
  210. _STRING_,
  211. _STRING_,
  212. _STRING_,
  213. _STRING_,
  214. //
  215. // Non-conformant String.
  216. //
  217. _STRING_,
  218. _STRING_,
  219. _STRING_,
  220. _STRING_,
  221. // Encapsulated Union
  222. _UNION_ | _BY_VALUE_,
  223. // Non-encapsulated Union
  224. _UNION_ | _BY_VALUE_,
  225. // Byte count pointer (does NOT get _POINTER_ attribute)
  226. 0,
  227. // Transmit as
  228. _XMIT_AS_ | _BY_VALUE_,
  229. // Represent as
  230. _XMIT_AS_ | _BY_VALUE_,
  231. // Interface pointer
  232. _POINTER_,
  233. // Handles (only explicit handles get the _HANDLE_ attribute)
  234. _HANDLE_,
  235. _HANDLE_,
  236. _HANDLE_,
  237. 0,
  238. 0,
  239. 0,
  240. // ** Unused section ***
  241. 0,
  242. 0,
  243. 0,
  244. 0,
  245. 0,
  246. 0,
  247. 0,
  248. 0,
  249. 0,
  250. 0,
  251. 0,
  252. 0,
  253. 0,
  254. 0,
  255. 0,
  256. 0,
  257. 0,
  258. 0,
  259. 0,
  260. 0,
  261. 0,
  262. 0,
  263. 0,
  264. 0,
  265. 0,
  266. 0,
  267. 0,
  268. 0,
  269. 0,
  270. 0,
  271. 0,
  272. 0,
  273. 0,
  274. 0,
  275. 0,
  276. 0,
  277. 0,
  278. 0, // FC_END
  279. 0, // FC_PAD
  280. // ** Unused section end ***
  281. // ** Gap before new format string types **
  282. 0, 0, 0,
  283. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  284. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  285. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  286. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  287. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  288. 0,
  289. // ** Gap before new format string types end **
  290. //
  291. // Post NT 3.5 format characters.
  292. //
  293. // Hard struct
  294. _STRUCT_ | _BY_VALUE_,
  295. // Transmit_as and Represent_as via poiner
  296. _XMIT_AS_ | _BY_VALUE_,
  297. _XMIT_AS_ | _BY_VALUE_,
  298. // User_marshal
  299. _XMIT_AS_ | _BY_VALUE_,
  300. 0, // FC_PIPE
  301. 0, // FC_BLKHOLE
  302. 0, // RANGE
  303. _SIMPLE_TYPE_, // FC_INT3264
  304. _SIMPLE_TYPE_, // FC_UINT3264
  305. 0, // FC_CSARRAY
  306. 0 // FC_CS_TAG
  307. };
  308. #if !defined(NDR_GLOBAL_TABLES_ONLY)
  309. RPCRTAPI
  310. unsigned long
  311. RPC_ENTRY
  312. NdrGetTypeFlags( unsigned char FormatChar )
  313. {
  314. return NdrTypeFlags[ FormatChar ];
  315. }
  316. #endif