main
h 200 lines 4.77 KB
Raw
1 #pragma once
2 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9
10 // macro definitions
11
12 #define ReleaseBuffer(b) BuffFree(b)
13 #define ReleaseNullBuffer(b) BuffFree(b)
14 #define BuffFree(b) if (b.pbData) { MemFree(b.pbData); b.pbData = NULL; } b.cbData = 0
15
16
17 // structs
18
19 // A buffer that owns its data and must be freed with BuffFree().
20 typedef struct _BUFF_BUFFER
21 {
22 LPBYTE pbData;
23 SIZE_T cbData;
24 } BUFF_BUFFER;
25
26 // A read-only buffer with internal pointer that can be advanced for multiple reads.
27 typedef struct _BUFF_READER
28 {
29 LPCBYTE pbData;
30 SIZE_T cbData;
31
32 SIZE_T iBuffer;
33 } BUFF_READER;
34
35 // A write buffer that does not own its data.
36 typedef struct _BUFF_WRITER
37 {
38 LPBYTE *ppbData;
39 SIZE_T *pcbData;
40 } BUFF_WRITER;
41
42
43 // function declarations
44
45 HRESULT BuffReadNumber(
46 __in_bcount(cbBuffer) const BYTE* pbBuffer,
47 __in SIZE_T cbBuffer,
48 __inout SIZE_T* piBuffer,
49 __out DWORD* pdw
50 );
51 HRESULT BuffReadNumber64(
52 __in_bcount(cbBuffer) const BYTE* pbBuffer,
53 __in SIZE_T cbBuffer,
54 __inout SIZE_T* piBuffer,
55 __out DWORD64* pdw64
56 );
57 HRESULT BuffReadPointer(
58 __in_bcount(cbBuffer) const BYTE* pbBuffer,
59 __in SIZE_T cbBuffer,
60 __inout SIZE_T* piBuffer,
61 __out DWORD_PTR* pdw
62 );
63 HRESULT BuffReadString(
64 __in_bcount(cbBuffer) const BYTE* pbBuffer,
65 __in SIZE_T cbBuffer,
66 __inout SIZE_T* piBuffer,
67 __deref_out_z LPWSTR* pscz
68 );
69 HRESULT BuffReadStringAnsi(
70 __in_bcount(cbBuffer) const BYTE* pbBuffer,
71 __in SIZE_T cbBuffer,
72 __inout SIZE_T* piBuffer,
73 __deref_out_z LPSTR* pscz
74 );
75 HRESULT BuffReadStream(
76 __in_bcount(cbBuffer) const BYTE* pbBuffer,
77 __in SIZE_T cbBuffer,
78 __inout SIZE_T* piBuffer,
79 __deref_inout_bcount(*pcbStream) BYTE** ppbStream,
80 __out SIZE_T* pcbStream
81 );
82 HRESULT BuffSkipExtraData(
83 __in SIZE_T cbExpectedSize,
84 __in SIZE_T cbActualSize,
85 __inout SIZE_T* piBuffer
86 );
87
88 HRESULT BuffReaderReadNumber(
89 __in BUFF_READER* pReader,
90 __out DWORD* pdw
91 );
92 HRESULT BuffReaderReadNumber64(
93 __in BUFF_READER* pReader,
94 __out DWORD64* pdw64
95 );
96 HRESULT BuffReaderReadPointer(
97 __in BUFF_READER* pReader,
98 __out DWORD_PTR* pdw
99 );
100 HRESULT BuffReaderReadString(
101 __in BUFF_READER* pReader,
102 __deref_out_z LPWSTR* pscz
103 );
104 HRESULT BuffReaderReadStringAnsi(
105 __in BUFF_READER* pReader,
106 __deref_out_z LPSTR* pscz
107 );
108 HRESULT BuffReaderReadStream(
109 __in BUFF_READER* pReader,
110 __deref_inout_bcount(*pcbStream) BYTE** ppbStream,
111 __out SIZE_T* pcbStream
112 );
113
114 HRESULT BuffWriteNumber(
115 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
116 __inout SIZE_T* piBuffer,
117 __in DWORD dw
118 );
119 HRESULT BuffWriteNumber64(
120 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
121 __inout SIZE_T* piBuffer,
122 __in DWORD64 dw64
123 );
124 HRESULT BuffWritePointer(
125 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
126 __inout SIZE_T* piBuffer,
127 __in DWORD_PTR dw
128 );
129 HRESULT BuffWriteString(
130 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
131 __inout SIZE_T* piBuffer,
132 __in_z_opt LPCWSTR scz
133 );
134 HRESULT BuffWriteStringAnsi(
135 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
136 __inout SIZE_T* piBuffer,
137 __in_z_opt LPCSTR scz
138 );
139 HRESULT BuffWriteStream(
140 __deref_inout_bcount(*piBuffer) BYTE** ppbBuffer,
141 __inout SIZE_T* piBuffer,
142 __in_bcount(cbStream) const BYTE* pbStream,
143 __in SIZE_T cbStream
144 );
145
146 HRESULT BuffWriteNumberToBuffer(
147 __in BUFF_BUFFER* pBuffer,
148 __in DWORD dw
149 );
150 HRESULT BuffWriteNumber64ToBuffer(
151 __in BUFF_BUFFER* pBuffer,
152 __in DWORD64 dw64
153 );
154 HRESULT BuffWritePointerToBuffer(
155 __in BUFF_BUFFER* pBuffer,
156 __in DWORD_PTR dw
157 );
158 HRESULT BuffWriteStringToBuffer(
159 __in BUFF_BUFFER* pBuffer,
160 __in_z_opt LPCWSTR scz
161 );
162 HRESULT BuffWriteStringAnsiToBuffer(
163 __in BUFF_BUFFER* pBuffer,
164 __in_z_opt LPCSTR scz
165 );
166 HRESULT BuffWriteStreamToBuffer(
167 __in BUFF_BUFFER* pBuffer,
168 __in_bcount(cbStream) const BYTE* pbStream,
169 __in SIZE_T cbStream
170 );
171
172 HRESULT BuffWriterWriteNumber(
173 __in BUFF_WRITER* pWriter,
174 __in DWORD dw
175 );
176 HRESULT BuffWriterWriteNumber64(
177 __in BUFF_WRITER* pWriter,
178 __in DWORD64 dw64
179 );
180 HRESULT BuffWriterWritePointer(
181 __in BUFF_WRITER* pWriter,
182 __in DWORD_PTR dw
183 );
184 HRESULT BuffWriterWriteString(
185 __in BUFF_WRITER* pWriter,
186 __in_z_opt LPCWSTR scz
187 );
188 HRESULT BuffWriterWriteStringAnsi(
189 __in BUFF_WRITER* pWriter,
190 __in_z_opt LPCSTR scz
191 );
192 HRESULT BuffWriterWriteStream(
193 __in BUFF_WRITER* pWriter,
194 __in_bcount(cbStream) const BYTE* pbStream,
195 __in SIZE_T cbStream
196 );
197
198 #ifdef __cplusplus
199 }
200 #endif