FreeRDP
Loading...
Searching...
No Matches
ndr.h
Go to the documentation of this file.
1
20#ifndef WINPR_NDR_H_
21#define WINPR_NDR_H_
22
23#include <winpr/stream.h>
24
48#define WINPR_NDR_PTR_NULL (0UL)
49
62#define WINPR_NDR_SIMPLE_TYPE_DECL(PREFIX, LOWER, UPPER) \
63 WINPR_ATTR_NODISCARD \
64 WINPR_API BOOL PREFIX##_decoder_read_##LOWER(WinPrNdrDecoder* context, wStream* s, UPPER* v); \
65 WINPR_ATTR_NODISCARD \
66 WINPR_API BOOL PREFIX##_decoder_read_##LOWER##_(WinPrNdrDecoder* context, wStream* s, \
67 const void* hints, void* v); \
68 WINPR_ATTR_NODISCARD \
69 WINPR_API BOOL PREFIX##_encoder_write_##LOWER(WinPrNdrEncoder* context, wStream* s, UPPER v); \
70 WINPR_ATTR_NODISCARD \
71 WINPR_API BOOL PREFIX##_encoder_write_##LOWER##_(WinPrNdrEncoder* context, wStream* s, \
72 const void* hints, const void* v); \
73 WINPR_API extern const WinPrNdrMessageDescr PREFIX##_##LOWER##_descr_s; \
74 WINPR_ATTR_NODISCARD \
75 WINPR_API WinPrNdrMessageType PREFIX##_##LOWER##_descr(void)
76
91#define WINPR_NDR_ARRAY_OF_TYPE_DECL(PREFIX, TYPE, UPPERTYPE) \
92 WINPR_ATTR_NODISCARD \
93 WINPR_API BOOL PREFIX##_decoder_read_##TYPE##Array(WinPrNdrDecoder* context, wStream* s, \
94 const void* hints, void* v); \
95 WINPR_ATTR_NODISCARD \
96 WINPR_API BOOL PREFIX##_encoder_write_##TYPE##Array(WinPrNdrEncoder* context, wStream* s, \
97 const void* hints, const void* v); \
98 WINPR_API void PREFIX##_destroy_##TYPE##Array(const void* hints, void* obj); \
99 WINPR_API extern const WinPrNdrMessageDescr PREFIX##_##TYPE##Array_descr_s; \
100 WINPR_ATTR_NODISCARD \
101 WINPR_API WinPrNdrMessageType PREFIX##_##TYPE##Array_descr(void); \
102 \
103 WINPR_ATTR_NODISCARD \
104 WINPR_API BOOL PREFIX##_decoder_read_##TYPE##VaryingArray( \
105 WinPrNdrDecoder* context, wStream* s, const void* hints, void* v); \
106 WINPR_ATTR_NODISCARD \
107 WINPR_API BOOL PREFIX##_encoder_write_##TYPE##VaryingArray( \
108 WinPrNdrEncoder* context, wStream* s, const void* hints, const void* v); \
109 WINPR_API extern const WinPrNdrMessageDescr PREFIX##_##TYPE##VaryingArray_descr_s; \
110 WINPR_ATTR_NODISCARD \
111 WINPR_API WinPrNdrMessageType PREFIX##_##TYPE##VaryingArray_descr(void)
112
120#define WINPR_NDR_STRUCT_MESSAGE_DEFINE(PREFIX, CTYPE) \
121 static BOOL PREFIX##_read(WinPrNdrDecoder* context, wStream* s, const void* hints, void* obj) \
122 { \
123 WINPR_UNUSED(hints); \
124 return winpr_ndr_decoder_read_fromDescr(context, s, &PREFIX##_struct, obj); \
125 } \
126 static BOOL PREFIX##_write(WinPrNdrEncoder* context, wStream* s, const void* hints, \
127 const void* obj) \
128 { \
129 WINPR_UNUSED(hints); \
130 return winpr_ndr_encoder_write_fromDescr(context, s, &PREFIX##_struct, obj); \
131 } \
132 static void PREFIX##_destroy(const void* hints, void* obj) \
133 { \
134 WINPR_UNUSED(hints); \
135 winpr_ndr_struct_destroy(&PREFIX##_struct, obj); \
136 } \
137 static void PREFIX##_dump(wLog* logger, UINT32 lvl, size_t indentLevel, const void* obj) \
138 { \
139 winpr_ndr_struct_dump_fromDescr(logger, lvl, indentLevel, &PREFIX##_struct, obj); \
140 } \
141 static const WinPrNdrMessageDescr PREFIX##_descr_s = { WINPR_NDR_ARITY_SIMPLE, sizeof(CTYPE), \
142 PREFIX##_read, PREFIX##_write, \
143 PREFIX##_destroy, PREFIX##_dump }
144
151#define WINPR_NDR_ARRAY_MESSAGE_DEFINE(PREFIX, ITEMPREFIX, CTYPE) \
152 static BOOL PREFIX##_read(WinPrNdrDecoder* context, wStream* s, const void* hints, void* obj) \
153 { \
154 return winpr_ndr_decoder_read_uconformant_array(context, s, hints, &ITEMPREFIX##_descr_s, \
155 obj); \
156 } \
157 static BOOL PREFIX##_write(WinPrNdrEncoder* context, wStream* s, const void* hints, \
158 const void* obj) \
159 { \
160 WINPR_ASSERT(hints); \
161 const WinPrNdrArrayHints* ahints = hints; \
162 return winpr_ndr_encoder_write_uconformant_array(context, s, ahints->count, \
163 &ITEMPREFIX##_descr_s, obj); \
164 } \
165 static void PREFIX##_destroy(const void* hints, void* obj) \
166 { \
167 WINPR_ASSERT(hints); \
168 const WinPrNdrArrayHints* ahints = hints; \
169 CTYPE* items = obj; \
170 for (UINT32 i = 0; i < ahints->count; i++) \
171 ITEMPREFIX##_destroy(nullptr, &items[i]); \
172 } \
173 static const WinPrNdrMessageDescr PREFIX##_descr_s = { \
174 WINPR_NDR_ARITY_ARRAYOF, sizeof(CTYPE), PREFIX##_read, \
175 PREFIX##_write, PREFIX##_destroy, nullptr \
176 }
177
186#define WINPR_NDR_UNION_MESSAGE_DEFINE(PREFIX, CTYPE) \
187 static BOOL PREFIX##_read(WinPrNdrDecoder* context, wStream* s, const void* hints, void* obj) \
188 { \
189 WINPR_ASSERT(hints); \
190 return winpr_ndr_decoder_read_union(context, s, &PREFIX##_union, \
191 winpr_ndr_union_switch_value(&PREFIX##_union, hints), \
192 obj); \
193 } \
194 static BOOL PREFIX##_write(WinPrNdrEncoder* context, wStream* s, const void* hints, \
195 const void* obj) \
196 { \
197 WINPR_ASSERT(hints); \
198 return winpr_ndr_encoder_write_union(context, s, &PREFIX##_union, \
199 winpr_ndr_union_switch_value(&PREFIX##_union, hints), \
200 obj); \
201 } \
202 static void PREFIX##_destroy(const void* hints, void* obj) \
203 { \
204 if (hints) \
205 winpr_ndr_union_destroy(&PREFIX##_union, \
206 winpr_ndr_union_switch_value(&PREFIX##_union, hints), obj); \
207 } \
208 static const WinPrNdrMessageDescr PREFIX##_descr_s = { WINPR_NDR_ARITY_SIMPLE, sizeof(CTYPE), \
209 PREFIX##_read, PREFIX##_write, \
210 PREFIX##_destroy, nullptr }
211
212#ifdef __cplusplus
213extern "C"
214{
215#endif
216
220 typedef struct WinPrNdrDecoder_s WinPrNdrDecoder;
221
225 typedef struct WinPrNdrEncoder_s WinPrNdrEncoder;
226
230 typedef UINT32 winpr_ndr_refid;
231
241 typedef BOOL (*WINPR_NDR_READER_FN)(WinPrNdrDecoder* context, wStream* s, const void* hints,
242 void* target);
243
253 typedef BOOL (*WINPR_NDR_WRITER_FN)(WinPrNdrEncoder* context, wStream* s, const void* hints,
254 const void* obj);
255
262 typedef void (*WINPR_NDR_DESTROY_FN)(const void* hints, void* obj);
263
272 typedef void (*WINPR_NDR_DUMP_FN)(wLog* logger, UINT32 lvl, size_t indentLevel,
273 const void* obj);
274
289
302
307
323
338
342 typedef struct
343 {
344 const char* name;
345 size_t nfields;
347 size_t alignment;
349
359
367 typedef struct
368 {
369 const char* name;
370 size_t narms;
372 size_t switchSize;
377
392
398 WINPR_API void winpr_ndr_encoder_free(WinPrNdrEncoder* context);
399
405 static INLINE void winpr_ndr_encoder_destroy(WinPrNdrEncoder** pcontext)
406 {
407 WINPR_ASSERT(pcontext);
408 winpr_ndr_encoder_free(*pcontext);
409 *pcontext = nullptr;
410 }
411
419 WINPR_ATTR_MALLOC(winpr_ndr_encoder_free, 1)
420 WINPR_API WinPrNdrEncoder* winpr_ndr_encoder_new(BOOL bigEndianDrep, BYTE version);
421
429 WINPR_ATTR_MALLOC(winpr_ndr_encoder_free, 1)
430 WINPR_API WinPrNdrEncoder* winpr_ndr_encoder_from_decoder(const WinPrNdrDecoder* src);
431
440 WINPR_ATTR_NODISCARD
441 WINPR_API BOOL winpr_ndr_encoder_write_header(WinPrNdrEncoder* context, wStream* s);
442
443 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, uint8, UINT8);
444 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, int8, INT8);
445 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, uint16, UINT16);
446 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, int16, INT16);
447 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, int32, INT32);
448 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, uint32, UINT32);
449 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, int64, INT64);
450 WINPR_NDR_SIMPLE_TYPE_DECL(winpr_ndr, uint64, UINT64);
451
452 WINPR_NDR_ARRAY_OF_TYPE_DECL(winpr_ndr, uint8, BYTE);
453 WINPR_NDR_ARRAY_OF_TYPE_DECL(winpr_ndr, uint16, UINT16);
454
461 WINPR_API void winpr_ndr_encoder_bytes_written(WinPrNdrEncoder* context, size_t len);
462
471 WINPR_ATTR_NODISCARD
472 WINPR_API BOOL winpr_ndr_encoder_write_align(WinPrNdrEncoder* context, wStream* s, size_t sz);
473
483 WINPR_ATTR_NODISCARD
484 WINPR_API BOOL winpr_ndr_encoder_write_data(WinPrNdrEncoder* context, wStream* s,
485 const void* data, size_t sz);
486
497 WINPR_ATTR_NODISCARD
498 WINPR_API BOOL winpr_ndr_encoder_start_object(WinPrNdrEncoder* context, wStream* s);
499
509 WINPR_ATTR_NODISCARD
510 WINPR_API BOOL winpr_ndr_encoder_end_object(WinPrNdrEncoder* context, wStream* s);
511
519 WINPR_ATTR_NODISCARD
520 WINPR_API BOOL winpr_ndr_encoder_write_toplevel_refid(WinPrNdrEncoder* context, wStream* s);
521
525 typedef struct
526 {
527 UINT32 length;
528 UINT32 maxLength;
530
544 WINPR_ATTR_NODISCARD
546 WinPrNdrEncoder* context, wStream* s, const WinPrNdrVaryingArrayHints* hints,
547 WinPrNdrMessageType itemType, const void* src);
548
552 typedef struct
553 {
554 UINT32 count;
556
569 WINPR_ATTR_NODISCARD
570 WINPR_API BOOL winpr_ndr_encoder_write_uconformant_array(WinPrNdrEncoder* context, wStream* s,
571 UINT32 len,
572 WinPrNdrMessageType itemType,
573 const BYTE* ptr);
574
586 WINPR_ATTR_NODISCARD
587 WINPR_API BOOL winpr_ndr_encoder_write_fromDescr(WinPrNdrEncoder* context, wStream* s,
588 const WinPrNdrStructDescr* descr,
589 const void* src);
590
601 WINPR_ATTR_NODISCARD
602 WINPR_API BOOL winpr_ndr_encoder_write_union(WinPrNdrEncoder* context, wStream* s,
603 const WinPrNdrUnionDescr* descr,
604 UINT32 switchValue, const void* src);
605
612 WINPR_ATTR_NODISCARD
613 WINPR_API winpr_ndr_refid winpr_ndr_pointer_refid(const void* ptr);
614
627 WINPR_ATTR_NODISCARD
628 WINPR_API BOOL winpr_ndr_encoder_allocatePtr(WinPrNdrEncoder* context, const void* ptr,
629 winpr_ndr_refid* prefId, BOOL* pnewPtr);
630
638 WINPR_ATTR_NODISCARD
639 WINPR_API BOOL winpr_ndr_encoder_treat_deferreds(WinPrNdrEncoder* context, wStream* s);
640
641 /* ====================================== decoder ========================================= */
642
650 WINPR_API void winpr_ndr_decoder_free(WinPrNdrDecoder* context);
651
657 static INLINE void winpr_ndr_decoder_destroy(WinPrNdrDecoder** pcontext)
658 {
659 WINPR_ASSERT(pcontext);
660 winpr_ndr_decoder_free(*pcontext);
661 *pcontext = nullptr;
662 }
663
671 WINPR_ATTR_MALLOC(winpr_ndr_decoder_free, 1)
672 WINPR_API WinPrNdrDecoder* winpr_ndr_decoder_new(BOOL bigEndianDrep, BYTE version);
673
683 WINPR_ATTR_MALLOC(winpr_ndr_decoder_free, 1)
684 WINPR_API WinPrNdrDecoder* winpr_ndr_decoder_new_fromStream(wStream* s);
685
692 WINPR_API void winpr_ndr_decoder_bytes_read(WinPrNdrDecoder* context, size_t len);
693
706 WINPR_ATTR_NODISCARD
707 WINPR_API BOOL winpr_ndr_decoder_read_object(WinPrNdrDecoder* context, wStream* s,
708 wStream* object);
709
721 WINPR_ATTR_NODISCARD
722 WINPR_API BOOL winpr_ndr_decoder_push_deferreds(WinPrNdrDecoder* context,
723 WinPrNdrDeferredEntry* deferreds,
724 size_t ndeferred);
725
733 WINPR_ATTR_NODISCARD
734 WINPR_API BOOL winpr_ndr_decoder_treat_deferreds(WinPrNdrDecoder* context, wStream* s);
735
744 WINPR_ATTR_NODISCARD
745 WINPR_API BOOL winpr_ndr_decoder_read_refpointer(WinPrNdrDecoder* context, wStream* s,
746 UINT32* refId);
747
765 WINPR_ATTR_NODISCARD
766 WINPR_API BOOL winpr_ndr_decoder_read_pointer_ex(WinPrNdrDecoder* context, wStream* s,
767 const char* name, WinPrNdrMessageType descr,
768 void* hints, void** target);
769
778 WINPR_API void winpr_ndr_pointer_release(void* ptr);
779
795 WINPR_ATTR_MALLOC(winpr_ndr_pointer_release, 1)
796 WINPR_API void* winpr_ndr_pointer_new(WinPrNdrMessageType descr, const void* hints,
797 size_t size);
798
805 WINPR_API void* winpr_ndr_pointer_ref(void* ptr);
806
813 WINPR_ATTR_NODISCARD
814 WINPR_API size_t winpr_ndr_pointer_size(const void* ptr);
815
824 WINPR_ATTR_NODISCARD
825 WINPR_API BOOL winpr_ndr_decoder_skip_bytes(WinPrNdrDecoder* context, wStream* s,
826 size_t nbytes);
827
836 WINPR_ATTR_NODISCARD
837 WINPR_API BOOL winpr_ndr_decoder_read_align(WinPrNdrDecoder* context, wStream* s, size_t sz);
838
850 WINPR_ATTR_NODISCARD
851 WINPR_API BOOL winpr_ndr_decoder_read_wchar(WinPrNdrDecoder* context, wStream* s, WCHAR* ptr);
852
861 WINPR_ATTR_NODISCARD
862 WINPR_API BOOL winpr_ndr_encoder_write_wchar(WinPrNdrEncoder* context, wStream* s,
863 const WCHAR* ptr);
864
868 WINPR_API extern const WinPrNdrMessageDescr winpr_ndr_wchar_descr_s;
869
874 WINPR_ATTR_NODISCARD
876
881 WINPR_NDR_ARRAY_OF_TYPE_DECL(winpr_ndr, wchar, WCHAR);
882
897 WINPR_ATTR_NODISCARD
898 WINPR_API BOOL winpr_ndr_decoder_read_pointedMessageEx(WinPrNdrDecoder* context, wStream* s,
899 winpr_ndr_refid ptrId,
900 WinPrNdrMessageType descr, void* hints,
901 void** target);
902
916 WINPR_ATTR_NODISCARD
917 WINPR_API BOOL winpr_ndr_decoder_read_fromDescr(WinPrNdrDecoder* context, wStream* s,
918 const WinPrNdrStructDescr* descr, void* target);
919
931 WINPR_ATTR_NODISCARD
932 WINPR_API BOOL winpr_ndr_decoder_read_union(WinPrNdrDecoder* context, wStream* s,
933 const WinPrNdrUnionDescr* descr, UINT32 switchValue,
934 void* target);
935
950 WINPR_ATTR_NODISCARD
951 WINPR_API BOOL winpr_ndr_decoder_read_uconformant_array(WinPrNdrDecoder* context, wStream* s,
952 const WinPrNdrArrayHints* hints,
953 WinPrNdrMessageType itemType,
954 void* vtarget);
955
970 WINPR_ATTR_NODISCARD
972 WinPrNdrDecoder* context, wStream* s, const WinPrNdrVaryingArrayHints* hints,
973 WinPrNdrMessageType itemType, void* ptarget);
974
979
984 WINPR_ATTR_NODISCARD
986
992
997 WINPR_ATTR_NODISCARD
999
1005
1010 WINPR_ATTR_NODISCARD
1012
1022 WINPR_API void winpr_ndr_struct_dump_fromDescr(wLog* logger, UINT32 lvl, size_t identLevel,
1023 const WinPrNdrStructDescr* descr,
1024 const void* obj);
1025
1036 WINPR_API void winpr_ndr_struct_destroy(const WinPrNdrStructDescr* descr, void* pptr);
1037
1045 WINPR_ATTR_NODISCARD
1046 WINPR_API UINT32 winpr_ndr_union_switch_value(const WinPrNdrUnionDescr* descr,
1047 const void* switchField);
1048
1056 WINPR_API void winpr_ndr_union_destroy(const WinPrNdrUnionDescr* descr, UINT32 switchValue,
1057 void* obj);
1058
1059#ifdef __cplusplus
1060}
1061#endif
1062
1063#endif /* WINPR_NDR_H_ */
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_allocatePtr(WinPrNdrEncoder *context, const void *ptr, winpr_ndr_refid *prefId, BOOL *pnewPtr)
allocates the referent id of an embedded pointer
Definition ndr.c:1056
BOOL(* WINPR_NDR_READER_FN)(WinPrNdrDecoder *context, wStream *s, const void *hints, void *target)
reads a message
Definition ndr.h:241
WinPrNdrFieldStruct field
Definition ndr.h:356
WINPR_API void winpr_ndr_decoder_free(WinPrNdrDecoder *context)
frees a decoder
Definition ndr.c:1148
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_end_object(WinPrNdrEncoder *context, wStream *s)
ends the serialized object started with winpr_ndr_encoder_start_object()
Definition ndr.c:282
UINT32 winpr_ndr_refid
a referent id, the wire value of a pointer (WINPR_NDR_PTR_NULL for a null pointer)
Definition ndr.h:230
WinPrNdrPointerType
pointer or not and if null is accepted
Definition ndr.h:312
@ WINPR_NDR_NOT_POINTER
Definition ndr.h:313
@ WINPR_NDR_POINTER_FULL
Definition ndr.h:320
@ WINPR_NDR_FIXED_ARRAY
Definition ndr.h:317
@ WINPR_NDR_POINTER
Definition ndr.h:316
@ WINPR_NDR_POINTER_NON_NULL
Definition ndr.h:315
WinPrNdrPointerType pointerType
Definition ndr.h:331
const char * name
Definition ndr.h:344
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_wchar(WinPrNdrEncoder *context, wStream *s, const WCHAR *ptr)
writes a WCHAR stored in UTF-16LE, aligned on 2 bytes
Definition ndr.c:643
WINPR_API void * winpr_ndr_pointer_ref(void *ptr)
takes a reference on a referent
Definition ndr.c:1473
size_t narms
Definition ndr.h:370
WINPR_ATTR_NODISCARD WINPR_API WinPrNdrMessageType winpr_ndr_string_varying_descr(void)
the message type of winpr_ndr_string_varying_descr_s
Definition ndr.c:831
size_t structOffset
Definition ndr.h:330
WINPR_ATTR_NODISCARD WINPR_API winpr_ndr_refid winpr_ndr_pointer_refid(const void *ptr)
a referent id built from the value of a pointer
Definition ndr.c:1051
const char * name
Definition ndr.h:329
void(* WINPR_NDR_DUMP_FN)(wLog *logger, UINT32 lvl, size_t indentLevel, const void *obj)
dumps a message in the logs
Definition ndr.h:272
size_t alignment
Definition ndr.h:347
WINPR_API void winpr_ndr_struct_dump_fromDescr(wLog *logger, UINT32 lvl, size_t identLevel, const WinPrNdrStructDescr *descr, const void *obj)
dumps a structure in the logs from its descriptor
Definition ndr.c:1967
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_header(WinPrNdrEncoder *context, wStream *s)
writes the common type header ([MS-RPCE] 2.2.6.1): version, endianness, header length and filler
Definition ndr.c:224
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_uconformant_array(WinPrNdrDecoder *context, wStream *s, const WinPrNdrArrayHints *hints, WinPrNdrMessageType itemType, void *vtarget)
reads a conformant array: its count and the items
Definition ndr.c:1361
UINT32 discriminant
Definition ndr.h:355
static INLINE void winpr_ndr_decoder_destroy(WinPrNdrDecoder **pcontext)
frees a decoder and resets the pointer
Definition ndr.h:657
WINPR_NDR_DUMP_FN dumpFn
Definition ndr.h:300
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_skip_bytes(WinPrNdrDecoder *context, wStream *s, size_t nbytes)
skips bytes
Definition ndr.c:1164
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_pointedMessageEx(WinPrNdrDecoder *context, wStream *s, winpr_ndr_refid ptrId, WinPrNdrMessageType descr, void *hints, void **target)
reads the referent of a unique pointer
Definition ndr.c:1741
winpr_ndr_refid ptrId
Definition ndr.h:383
const WinPrNdrFieldStruct * fields
Definition ndr.h:346
void(* WINPR_NDR_DESTROY_FN)(const void *hints, void *obj)
releases the content of a message, not the message storage itself
Definition ndr.h:262
BOOL(* WINPR_NDR_WRITER_FN)(WinPrNdrEncoder *context, wStream *s, const void *hints, const void *obj)
writes a message
Definition ndr.h:253
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_fromDescr(WinPrNdrDecoder *context, wStream *s, const WinPrNdrStructDescr *descr, void *target)
reads a structure from its descriptor
Definition ndr.c:1695
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_data(WinPrNdrEncoder *context, wStream *s, const void *data, size_t sz)
writes raw bytes, without alignment
Definition ndr.c:1094
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_uconformant_varying_array(WinPrNdrDecoder *context, wStream *s, const WinPrNdrVaryingArrayHints *hints, WinPrNdrMessageType itemType, void *ptarget)
reads a conformant varying array: its maximum count, offset, actual count and the items
Definition ndr.c:1341
WINPR_ATTR_NODISCARD WINPR_API WinPrNdrMessageType winpr_ndr_wstring_varying_descr(void)
the message type of winpr_ndr_wstring_varying_descr_s
Definition ndr.c:898
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_treat_deferreds(WinPrNdrEncoder *context, wStream *s)
writes the pending deferred referents
Definition ndr.c:1075
#define WINPR_NDR_SIMPLE_TYPE_DECL(PREFIX, LOWER, UPPER)
declares the functions and the message descriptor of a simple type
Definition ndr.h:62
WINPR_API WinPrNdrDecoder * winpr_ndr_decoder_new(BOOL bigEndianDrep, BYTE version)
creates a decoder
Definition ndr.c:1106
WINPR_API WinPrNdrEncoder * winpr_ndr_encoder_new(BOOL bigEndianDrep, BYTE version)
creates an encoder
Definition ndr.c:194
static INLINE void winpr_ndr_encoder_destroy(WinPrNdrEncoder **pcontext)
frees an encoder and resets the pointer
Definition ndr.h:405
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_union(WinPrNdrDecoder *context, wStream *s, const WinPrNdrUnionDescr *descr, UINT32 switchValue, void *target)
reads a union, its discriminant must be switchValue
Definition ndr.c:1922
WINPR_ATTR_NODISCARD WINPR_API WinPrNdrMessageType winpr_ndr_string_conformant_descr(void)
the message type of winpr_ndr_string_conformant_descr_s
Definition ndr.c:735
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_toplevel_refid(WinPrNdrEncoder *context, wStream *s)
writes a new referent id for a non-null top-level pointer
Definition ndr.c:317
WinPrNdrMessageType msg
Definition ndr.h:390
UINT32 rangeMax
Definition ndr.h:336
WINPR_NDR_DESTROY_FN destroyFn
Definition ndr.h:299
WINPR_ATTR_NODISCARD WINPR_API size_t winpr_ndr_pointer_size(const void *ptr)
the size of a referent, as allocated by winpr_ndr_pointer_new()
Definition ndr.c:1465
const WinPrNdrMessageDescr * WinPrNdrMessageType
a message type, a pointer on its descriptor
Definition ndr.h:306
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_wchar(WinPrNdrDecoder *context, wStream *s, WCHAR *ptr)
reads a WCHAR, aligned on 2 bytes
Definition ndr.c:631
WinPrNdrTypeArity
arity of a message
Definition ndr.h:279
@ WINPR_NDR_ARITY_SIMPLE
Definition ndr.h:280
@ WINPR_NDR_ARITY_VARYING_ARRAYOF
Definition ndr.h:283
@ WINPR_NDR_ARITY_ARRAYOF
Definition ndr.h:281
@ WINPR_NDR_ARITY_SELF_ALLOCATED
Definition ndr.h:285
WINPR_API const WinPrNdrMessageDescr winpr_ndr_string_varying_descr_s
[string] char*: a conformant varying string of char, read in a char* allocated with winpr_ndr_pointer...
Definition ndr.c:822
WINPR_API void winpr_ndr_encoder_free(WinPrNdrEncoder *context)
frees an encoder
Definition ndr.c:213
WINPR_API const WinPrNdrMessageDescr winpr_ndr_wstring_varying_descr_s
[string] wchar_t*: a conformant varying string of WCHAR, read in a WCHAR* allocated with winpr_ndr_po...
Definition ndr.c:893
size_t switchSize
Definition ndr.h:372
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_refpointer(WinPrNdrDecoder *context, wStream *s, UINT32 *refId)
reads a referent id
Definition ndr.c:1194
WINPR_API void winpr_ndr_decoder_bytes_read(WinPrNdrDecoder *context, size_t len)
accounts for bytes read directly from the stream, for the alignments
Definition ndr.c:1158
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_align(WinPrNdrDecoder *context, wStream *s, size_t sz)
skips the padding to align the current object offset
Definition ndr.c:1176
SSIZE_T hintsField
Definition ndr.h:332
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_uconformant_varying_array(WinPrNdrEncoder *context, wStream *s, const WinPrNdrVaryingArrayHints *hints, WinPrNdrMessageType itemType, const void *src)
writes a conformant varying array: its maximum count, offset 0, actual count and the items
Definition ndr.c:916
WINPR_API WinPrNdrEncoder * winpr_ndr_encoder_from_decoder(const WinPrNdrDecoder *src)
creates an encoder with the same endianness and version as a decoder, to answer the message it decode...
Definition ndr.c:206
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_union(WinPrNdrEncoder *context, wStream *s, const WinPrNdrUnionDescr *descr, UINT32 switchValue, const void *src)
writes the discriminant and the arm of a union
Definition ndr.c:1903
WINPR_API void * winpr_ndr_pointer_new(WinPrNdrMessageType descr, const void *hints, size_t size)
allocates a referent
Definition ndr.c:1454
WINPR_API void winpr_ndr_encoder_bytes_written(WinPrNdrEncoder *context, size_t len)
accounts for bytes written directly in the stream, for the alignments
Definition ndr.c:218
WINPR_API void winpr_ndr_pointer_release(void *ptr)
releases a referent
Definition ndr.c:1483
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_object(WinPrNdrDecoder *context, wStream *s, wStream *object)
reads the private header of a serialized object ([MS-RPCE] 2.2.6 type serialization version 1)
Definition ndr.c:1199
const WinPrNdrUnionArm * arms
Definition ndr.h:371
const WinPrNdrUnionArm * defaultArm
Definition ndr.h:374
#define WINPR_NDR_ARRAY_OF_TYPE_DECL(PREFIX, TYPE, UPPERTYPE)
declares the functions and the message descriptors of the arrays of a simple type
Definition ndr.h:91
WINPR_API WinPrNdrDecoder * winpr_ndr_decoder_new_fromStream(wStream *s)
reads the common type header ([MS-RPCE] 2.2.6.1) and creates a decoder for its version and endianness
Definition ndr.c:1124
size_t nfields
Definition ndr.h:345
WINPR_ATTR_NODISCARD WINPR_API WinPrNdrMessageType winpr_ndr_wchar_descr(void)
the message type of winpr_ndr_wchar_descr_s
Definition ndr.c:668
const char * name
Definition ndr.h:384
WINPR_ATTR_NODISCARD WINPR_API UINT32 winpr_ndr_union_switch_value(const WinPrNdrUnionDescr *descr, const void *switchField)
the value of the [switch_is()] field of a union
Definition ndr.c:1830
WINPR_API const WinPrNdrMessageDescr winpr_ndr_wchar_descr_s
a WCHAR, stored in UTF-16LE in memory
Definition ndr.c:663
WINPR_NDR_WRITER_FN writeFn
Definition ndr.h:298
WINPR_API void winpr_ndr_struct_destroy(const WinPrNdrStructDescr *descr, void *pptr)
releases the content of a structure from its descriptor
Definition ndr.c:2005
UINT32 count
Definition ndr.h:554
WINPR_NDR_READER_FN readFn
Definition ndr.h:297
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_fromDescr(WinPrNdrEncoder *context, wStream *s, const WinPrNdrStructDescr *descr, const void *src)
writes a structure from its descriptor
Definition ndr.c:1032
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_push_deferreds(WinPrNdrDecoder *context, WinPrNdrDeferredEntry *deferreds, size_t ndeferred)
adds deferred pointers, read by the next winpr_ndr_decoder_treat_deferreds()
Definition ndr.c:1803
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_uconformant_array(WinPrNdrEncoder *context, wStream *s, UINT32 len, WinPrNdrMessageType itemType, const BYTE *ptr)
writes a conformant array: its count and the items
Definition ndr.c:935
const char * name
Definition ndr.h:369
size_t itemSize
Definition ndr.h:296
WINPR_API const WinPrNdrMessageDescr winpr_ndr_string_conformant_descr_s
conformant string of char, read in a char* allocated with winpr_ndr_pointer_new()
Definition ndr.c:726
WINPR_API void winpr_ndr_union_destroy(const WinPrNdrUnionDescr *descr, UINT32 switchValue, void *obj)
releases the content of the arm switchValue of a union
Definition ndr.c:1952
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_write_align(WinPrNdrEncoder *context, wStream *s, size_t sz)
writes zero padding to align the current object offset
Definition ndr.c:240
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_read_pointer_ex(WinPrNdrDecoder *context, wStream *s, const char *name, WinPrNdrMessageType descr, void *hints, void **target)
reads a full pointer ([ptr])
Definition ndr.c:1596
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_encoder_start_object(WinPrNdrEncoder *context, wStream *s)
starts a serialized object ([MS-RPCE] 2.2.6 type serialization version 1)
Definition ndr.c:259
size_t fixedArraySize
Definition ndr.h:335
WinPrNdrMessageType typeDescr
Definition ndr.h:334
WINPR_ATTR_NODISCARD WINPR_API BOOL winpr_ndr_decoder_treat_deferreds(WinPrNdrDecoder *context, wStream *s)
reads the pending deferred referents
Definition ndr.c:1714
hints for a conformant array
Definition ndr.h:553
a deferred pointer, a referent to read after the current construct
Definition ndr.h:382
descriptor of a field in a structure
Definition ndr.h:328
message descriptor
Definition ndr.h:294
structure descriptor
Definition ndr.h:343
an arm of a non-encapsulated union
Definition ndr.h:354
a non-encapsulated union ([switch_type()])
Definition ndr.h:368
hints for a conformant varying array
Definition ndr.h:526