|
|
1.1.1.2 root 1: /*++
2:
3: Copyright (c) 1992 Microsoft Corporation
4:
5: Module Name:
6:
1.1.1.4 ! root 7: rpcndr.h
1.1.1.2 root 8:
9: Abstract:
10:
11: Float and double conversion routines.
12:
13: Author:
14:
1.1.1.4 ! root 15: DonnaLi (01-01-91)
1.1.1.2 root 16:
17: Environment:
18:
19: This code should execute in all environments supported by RPC
20: (DOS, Win 3.X, and Win/NT as well as OS2).
21:
22: Revision History:
23:
24: DONNALI 08-29-91 Start recording history
25: donnali 09-11-91 change conversion macros
26: donnali 09-18-91 check in files for moving
27: STEVEZ 10-15-91 Merge with NT tree
28: donnali 10-28-91 add prototype
29: donnali 11-19-91 bugfix for strings
30: MIKEMON 12-17-91 DCE runtime API conversion
31: donnali 03-24-92 change rpc public header f
32: STEVEZ 04-04-92 add nsi include
33: mikemon 04-18-92 security support and misc
34: DovhH 04-24-24 Changed signature of <int>_from_ndr
35: (to unsigned <int>)
36: Added <base_type>_array_from_ndr routines
37:
38: --*/
1.1 root 39:
40: #ifndef __RPCNDR_H__
41: #define __RPCNDR_H__
42:
1.1.1.4 ! root 43: // Set the packing level for RPC structures for Dos and Windows.
! 44:
! 45: #if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
! 46: #pragma pack(2)
! 47: #endif
! 48:
1.1.1.2 root 49: #include "rpcnsip.h"
50:
51: #ifdef __cplusplus
52: extern "C" {
53: #endif
54:
55: /*
56:
57: Network Computing Architecture (NCA) definition:
58:
59: Network Data Representation: (NDR) Label format:
60: An unsigned long (32 bits) with the following layout:
61:
62: 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
63: 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
64: +---------------+---------------+---------------+-------+-------+
65: | Reserved | Reserved |Floating point | Int | Char |
66: | | |Representation | Rep. | Rep. |
67: +---------------+---------------+---------------+-------+-------+
68:
69: Where
70:
71: Reserved:
72:
73: Must be zero (0) for NCA 1.5 and NCA 2.0.
74:
75: Floating point Representation is:
76:
77: 0 - IEEE
78: 1 - VAX
79: 2 - Cray
80: 3 - IBM
81:
82: Int Rep. is Integer Representation:
83:
84: 0 - Big Endian
85: 1 - Little Endian
86:
87: Char Rep. is Character Representation:
88:
89: 0 - ASCII
90: 1 - EBCDIC
91:
92: The Microsoft Local Data Representation (for all platforms which are
93: of interest currently is edefined below:
94:
1.1 root 95: */
96:
1.1.1.2 root 97: #define NDR_CHAR_REP_MASK (unsigned long)0X0000000FL
98: #define NDR_INT_REP_MASK (unsigned long)0X000000F0L
99: #define NDR_FLOAT_REP_MASK (unsigned long)0X0000FF00L
100:
101: #define NDR_LITTLE_ENDIAN (unsigned long)0X00000010L
102: #define NDR_BIG_ENDIAN (unsigned long)0X00000000L
103:
104: #define NDR_IEEE_FLOAT (unsigned long)0X00000000L
105: #define NDR_VAX_FLOAT (unsigned long)0X00000100L
106:
107: #define NDR_ASCII_CHAR (unsigned long)0X00000000L
108: #define NDR_EBCDIC_CHAR (unsigned long)0X00000001L
109:
110: #define NDR_LOCAL_DATA_REPRESENTATION (unsigned long)0X00000010L
111:
112: /*
1.1.1.4 ! root 113: * Other MIDL base types / predefined types:
! 114: */
! 115:
! 116: typedef unsigned char byte;
! 117: typedef unsigned char boolean;
! 118:
! 119: #ifndef _WCHAR_T_DEFINED
! 120: typedef unsigned short wchar_t;
! 121: #define _WCHAR_T_DEFINED
! 122: #endif
! 123:
! 124: #ifndef _SIZE_T_DEFINED
! 125: typedef unsigned int size_t;
! 126: #define _SIZE_T_DEFINED
! 127: #endif
! 128:
! 129: #ifdef __RPC_DOS__
! 130: #define __RPC_CALLEE __far __pascal
! 131: #endif
! 132:
! 133: #ifdef __RPC_WIN16__
! 134: #define __RPC_CALLEE __far __pascal __export
! 135: #endif
! 136:
! 137: #ifdef __RPC_WIN32__
! 138: #if (_MSC_VER >= 800)
! 139: #define __RPC_CALLEE __stdcall
! 140: #else
! 141: #define __RPC_CALLEE
! 142: #endif
! 143: #endif
! 144:
! 145: #ifdef __RPC_OS2_1X__
! 146: #define __RPC_CALLEE_STUB __far __pascal __loadds
! 147: #endif
! 148:
! 149: #ifndef __MIDL_USER_DEFINED
! 150: #define midl_user_allocate MIDL_user_allocate
! 151: #define midl_user_free MIDL_user_free
! 152: #define __MIDL_USER_DEFINED
! 153: #endif
! 154:
! 155:
! 156: /*
1.1.1.2 root 157: * Context related definitions:
158: *
159: * Client and Server Contexts. Just enough of the structure is exposed
160: * to allow access to some public fields
161: *
162: */
163:
1.1.1.4 ! root 164: typedef void __RPC_FAR * NDR_CCONTEXT;
1.1 root 165: typedef struct {void * pad[2]; void * userContext; } * NDR_SCONTEXT;
166:
167: #define NDRSContextValue(hContext) (&(hContext)->userContext)
168:
169: #define cbNDRContext 20 /* size of context on WIRE */
170:
1.1.1.4 ! root 171: typedef void (__RPC_USER __RPC_FAR * NDR_RUNDOWN)(void __RPC_FAR * context);
1.1 root 172:
1.1.1.3 root 173: RPC_BINDING_HANDLE RPC_ENTRY
174: NDRCContextBinding (
175: IN NDR_CCONTEXT CContext
176: );
177:
1.1 root 178: void RPC_ENTRY
179: NDRCContextMarshall (
180: IN NDR_CCONTEXT CContext,
1.1.1.4 ! root 181: OUT void __RPC_FAR *pBuff
1.1 root 182: );
183:
184: void RPC_ENTRY
185: NDRCContextUnmarshall (
1.1.1.4 ! root 186: OUT NDR_CCONTEXT __RPC_FAR *pCContext,
1.1.1.2 root 187: IN RPC_BINDING_HANDLE hBinding,
1.1.1.4 ! root 188: IN void __RPC_FAR *pBuff,
1.1.1.2 root 189: IN unsigned long DataRepresentation
1.1 root 190: );
191:
192: void RPC_ENTRY
193: NDRSContextMarshall (
194: IN NDR_SCONTEXT CContext,
1.1.1.4 ! root 195: OUT void __RPC_FAR *pBuff,
1.1 root 196: IN NDR_RUNDOWN userRunDownIn
197: );
198:
199: NDR_SCONTEXT RPC_ENTRY
200: NDRSContextUnmarshall (
1.1.1.4 ! root 201: IN void __RPC_FAR *pBuff,
1.1.1.2 root 202: IN unsigned long DataRepresentation
203: );
1.1 root 204:
205: void RPC_ENTRY
206: NDRcopy (
1.1.1.4 ! root 207: IN void __RPC_FAR *pTarget,
! 208: IN void __RPC_FAR *pSource,
1.1.1.2 root 209: IN unsigned int size
210: );
211:
212:
213: /*
214: *
215: * Base type conversion macros:
216: *
217: */
218:
219: #define byte_from_ndr(source, target) \
220: { \
1.1.1.4 ! root 221: *target = *(*(char __RPC_FAR * __RPC_FAR *)&source->Buffer)++; \
1.1.1.2 root 222: }
223:
1.1.1.3 root 224: #define byte_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
225: { \
226: NDRcopy ( \
1.1.1.4 ! root 227: (((char __RPC_FAR *)Target)+LowerIndex), \
1.1.1.3 root 228: Source->Buffer, \
229: (unsigned int)(UpperIndex-LowerIndex)); \
1.1.1.4 ! root 230: *(unsigned long __RPC_FAR *)&Source->Buffer += (UpperIndex-LowerIndex); \
1.1.1.3 root 231: }
232:
1.1.1.2 root 233: #define boolean_from_ndr(source, target) \
234: { \
1.1.1.4 ! root 235: *target = *(*(char __RPC_FAR * __RPC_FAR *)&source->Buffer)++; \
1.1.1.2 root 236: }
237:
1.1.1.3 root 238: #define boolean_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
239: { \
240: NDRcopy ( \
1.1.1.4 ! root 241: (((char __RPC_FAR *)Target)+LowerIndex), \
1.1.1.3 root 242: Source->Buffer, \
243: (unsigned int)(UpperIndex-LowerIndex)); \
1.1.1.4 ! root 244: *(unsigned long __RPC_FAR *)&Source->Buffer += (UpperIndex-LowerIndex); \
1.1.1.3 root 245: }
246:
1.1.1.2 root 247: #define small_from_ndr(source, target) \
248: { \
1.1.1.4 ! root 249: *target = *(*(char __RPC_FAR * __RPC_FAR *)&source->Buffer)++; \
! 250: }
! 251:
! 252: #define small_from_ndr_temp(source, target, format) \
! 253: { \
! 254: *target = *(*(char __RPC_FAR * __RPC_FAR *)source)++; \
1.1.1.2 root 255: }
256:
1.1.1.3 root 257: #define small_array_from_ndr(Source, LowerIndex, UpperIndex, Target) \
258: { \
259: NDRcopy ( \
1.1.1.4 ! root 260: (((char __RPC_FAR *)Target)+LowerIndex), \
1.1.1.3 root 261: Source->Buffer, \
262: (unsigned int)(UpperIndex-LowerIndex)); \
1.1.1.4 ! root 263: *(unsigned long __RPC_FAR *)&Source->Buffer += (UpperIndex-LowerIndex); \
1.1.1.3 root 264: }
265:
1.1.1.2 root 266: /*
267: *
268: * Character and string support routines:
269: *
270: */
271:
1.1.1.4 ! root 272: size_t RPC_ENTRY
1.1.1.2 root 273: MIDL_wchar_strlen (
1.1.1.4 ! root 274: IN wchar_t __RPC_FAR * s
1.1.1.2 root 275: );
276:
277: void RPC_ENTRY
278: MIDL_wchar_strcpy (
1.1.1.4 ! root 279: OUT void __RPC_FAR * t,
! 280: IN wchar_t __RPC_FAR * s
1.1.1.2 root 281: );
282:
283: /*
284: *
285: * Base type conversion routines:
286: *
287: */
288:
289: void RPC_ENTRY
290: char_from_ndr (
1.1.1.4 ! root 291: IN OUT PRPC_MESSAGE SourceMessage,
! 292: OUT unsigned char __RPC_FAR * Target
1.1.1.2 root 293: );
294:
295: void RPC_ENTRY
296: char_array_from_ndr (
1.1.1.4 ! root 297: IN OUT PRPC_MESSAGE SourceMessage,
! 298: IN unsigned long LowerIndex,
! 299: IN unsigned long UpperIndex,
! 300: OUT unsigned char __RPC_FAR * Target
1.1.1.2 root 301: );
302:
303: void RPC_ENTRY
304: short_from_ndr (
1.1.1.4 ! root 305: IN OUT PRPC_MESSAGE source,
! 306: OUT unsigned short __RPC_FAR * target
1.1.1.2 root 307: );
308:
309: void RPC_ENTRY
310: short_array_from_ndr(
1.1.1.4 ! root 311: IN OUT PRPC_MESSAGE SourceMessage,
! 312: IN unsigned long LowerIndex,
! 313: IN unsigned long UpperIndex,
! 314: OUT unsigned short __RPC_FAR * Target
1.1.1.2 root 315: );
316:
317: void RPC_ENTRY
318: short_from_ndr_temp (
1.1.1.4 ! root 319: IN OUT unsigned char __RPC_FAR * __RPC_FAR * source,
! 320: OUT unsigned short __RPC_FAR * target,
! 321: IN unsigned long format
1.1.1.2 root 322: );
323:
324: void RPC_ENTRY
325: long_from_ndr (
1.1.1.4 ! root 326: IN OUT PRPC_MESSAGE source,
! 327: OUT unsigned long __RPC_FAR * target
1.1.1.2 root 328: );
329:
330: void RPC_ENTRY
331: long_array_from_ndr(
1.1.1.4 ! root 332: IN OUT PRPC_MESSAGE SourceMessage,
! 333: IN unsigned long LowerIndex,
! 334: IN unsigned long UpperIndex,
! 335: OUT unsigned long __RPC_FAR * Target
1.1.1.2 root 336: );
337:
338: void RPC_ENTRY
339: long_from_ndr_temp (
1.1.1.4 ! root 340: IN OUT unsigned char __RPC_FAR * __RPC_FAR * source,
! 341: OUT unsigned long __RPC_FAR * target,
! 342: IN unsigned long format
1.1.1.2 root 343: );
344:
345: void RPC_ENTRY
346: enum_from_ndr(
1.1.1.4 ! root 347: IN OUT PRPC_MESSAGE SourceMessage,
! 348: OUT unsigned int __RPC_FAR * Target
1.1.1.2 root 349: );
350:
351: void RPC_ENTRY
352: float_from_ndr (
1.1.1.4 ! root 353: IN OUT PRPC_MESSAGE SourceMessage,
! 354: OUT void __RPC_FAR * Target
1.1.1.2 root 355: );
356:
357: void RPC_ENTRY
358: float_array_from_ndr (
1.1.1.4 ! root 359: IN OUT PRPC_MESSAGE SourceMessage,
! 360: IN unsigned long LowerIndex,
! 361: IN unsigned long UpperIndex,
! 362: OUT void __RPC_FAR * Target
1.1.1.2 root 363: );
364:
365: void RPC_ENTRY
366: double_from_ndr (
1.1.1.4 ! root 367: IN OUT PRPC_MESSAGE SourceMessage,
! 368: OUT void __RPC_FAR * Target
1.1.1.2 root 369: );
370:
371: void RPC_ENTRY
372: double_array_from_ndr (
1.1.1.4 ! root 373: IN OUT PRPC_MESSAGE SourceMessage,
! 374: IN unsigned long LowerIndex,
! 375: IN unsigned long UpperIndex,
! 376: OUT void __RPC_FAR * Target
1.1.1.2 root 377: );
378:
379: /*
380: *
381: * Other data conversion / unmarshalling routines:
382: *
383: */
384:
385: void RPC_ENTRY
386: data_from_ndr (
1.1.1.4 ! root 387: PRPC_MESSAGE source,
! 388: void __RPC_FAR * target,
! 389: char __RPC_FAR * format,
! 390: unsigned char MscPak
1.1.1.2 root 391: );
392:
393: void RPC_ENTRY
1.1.1.3 root 394: data_into_ndr (
1.1.1.4 ! root 395: void __RPC_FAR * source,
! 396: PRPC_MESSAGE target,
! 397: char __RPC_FAR * format,
! 398: unsigned char MscPak
1.1.1.3 root 399: );
400:
401: void RPC_ENTRY
1.1.1.2 root 402: tree_into_ndr (
1.1.1.4 ! root 403: void __RPC_FAR * source,
! 404: PRPC_MESSAGE target,
! 405: char __RPC_FAR * format,
! 406: unsigned char MscPak
1.1.1.2 root 407: );
408:
409: void RPC_ENTRY
1.1.1.3 root 410: data_size_ndr (
1.1.1.4 ! root 411: void __RPC_FAR * source,
! 412: PRPC_MESSAGE target,
! 413: char __RPC_FAR * format,
! 414: unsigned char MscPak
1.1.1.3 root 415: );
416:
417: void RPC_ENTRY
1.1.1.2 root 418: tree_size_ndr (
1.1.1.4 ! root 419: void __RPC_FAR * source,
! 420: PRPC_MESSAGE target,
! 421: char __RPC_FAR * format,
! 422: unsigned char MscPak
1.1.1.2 root 423: );
424:
425: void RPC_ENTRY
426: tree_peek_ndr (
1.1.1.4 ! root 427: PRPC_MESSAGE source,
! 428: unsigned char __RPC_FAR * __RPC_FAR * buffer,
! 429: char __RPC_FAR * format,
! 430: unsigned char MscPak
1.1.1.2 root 431: );
432:
1.1.1.4 ! root 433: void __RPC_FAR * RPC_ENTRY
1.1.1.2 root 434: midl_allocate (
435: size_t size
436: );
437:
1.1.1.4 ! root 438: #ifdef __RPC_DOS__
! 439: #define MIDL_ascii_strlen(string) \
! 440: _fstrlen(string)
! 441: #define MIDL_ascii_strcpy(target,source) \
! 442: _fstrcpy(target,source)
! 443: #define MIDL_memset(s,c,n) \
! 444: _fmemset(s,c,n)
! 445: #endif
! 446:
! 447: #ifdef __RPC_WIN16__
! 448: #define MIDL_ascii_strlen(string) \
! 449: _fstrlen(string)
! 450: #define MIDL_ascii_strcpy(target,source) \
! 451: _fstrcpy(target,source)
! 452: #define MIDL_memset(s,c,n) \
! 453: _fmemset(s,c,n)
! 454: #endif
! 455:
! 456: #ifdef __RPC_WIN32__
! 457: #define MIDL_ascii_strlen(string) \
! 458: strlen(string)
! 459: #define MIDL_ascii_strcpy(target,source) \
! 460: strcpy(target,source)
! 461: #define MIDL_memset(s,c,n) \
! 462: memset(s,c,n)
! 463: #endif
! 464:
! 465: #ifdef __RPC_OS2_1X__
! 466: #define MIDL_ascii_strlen(string) \
! 467: _fstrlen(string)
! 468: #define MIDL_ascii_strcpy(target,source) \
! 469: _fstrcpy(target,source)
! 470: #define MIDL_memset(s,c,n) \
! 471: _fmemset(s,c,n)
! 472: #endif
! 473:
! 474:
! 475: void RPC_ENTRY
! 476: RpcSsDestroyClientContext (
! 477: IN void __RPC_FAR * __RPC_FAR * ContextHandle
! 478: );
! 479:
1.1.1.2 root 480: #ifdef __cplusplus
481: }
482: #endif
1.1 root 483:
1.1.1.4 ! root 484: // Reset the packing level for DOS and Windows.
! 485:
! 486: #if defined(__RPC_DOS__) || defined(__RPC_WIN16__)
! 487: #pragma pack()
! 488: #endif
! 489:
1.1.1.2 root 490: #endif /* __RPCNDR_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.