ReactOS  0.4.14-dev-614-gbfd8a84
marshalling.c File Reference
#include <windef.h>
#include <winbase.h>
#include <marshalling/marshalling.h>
Include dependency graph for marshalling.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 

Functions

MarshallDownStructure

Prepare a structure for marshalling/serialization by replacing absolute pointer addresses in its fields by relative offsets.

Parameters
pStructurePointer to the structure to operate on.
pInfoArray of MARSHALLING_INFO elements containing information about the fields of the structure as well as how to modify them. See the documentation on MARSHALLING_INFO for more information. You have to indicate the end of the array by setting the dwOffset field to MAXDWORD.
cbStructureSizeSize in bytes of the structure. This parameter is unused in my implementation.
bSomeBooleanUnknown boolean value, set to TRUE.
Returns
TRUE if the structure was successfully adjusted, FALSE otherwise.
BOOL WINAPI MarshallDownStructure (PVOID pStructure, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
 
MarshallDownStructuresArray

Prepare an array of structures for marshalling/serialization by replacing absolute pointer addresses in its fields by relative offsets.

Parameters
pStructuresArrayPointer to the array of structures to operate on.
cElementsNumber of array elements.
pInfoArray of MARSHALLING_INFO elements containing information about the fields of the structure as well as how to modify them. See the documentation on MARSHALLING_INFO for more information. You have to indicate the end of the array by setting the dwOffset field to MAXDWORD.
cbStructureSizeSize in bytes of each structure array element.
bSomeBooleanUnknown boolean value, set to TRUE.
Returns
TRUE if the array was successfully adjusted, FALSE otherwise.
BOOL WINAPI MarshallDownStructuresArray (PVOID pStructuresArray, DWORD cElements, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
 
MarshallUpStructure

Unmarshall/deserialize a structure previuosly marshalled by MarshallDownStructure by replacing relative offsets in its fields by absolute pointer addresses again.

Parameters
cbSizeSize in bytes of the memory allocated for both the structure and its data. The function will check if all relative offsets are within the bounds given by this size.
pStructurePointer to the structure to operate on.
pInfoArray of MARSHALLING_INFO elements containing information about the fields of the structure as well as how to modify them. See the documentation on MARSHALLING_INFO for more information. You have to indicate the end of the array by setting the dwOffset field to MAXDWORD.
cbStructureSizeSize in bytes of the structure. This parameter is unused in my implementation.
bSomeBooleanUnknown boolean value, set to TRUE.
Returns
TRUE if the structure was successfully adjusted, FALSE otherwise.
BOOL WINAPI MarshallUpStructure (DWORD cbSize, PVOID pStructure, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
 
MarshallUpStructuresArray

Unmarshall/deserialize an array of structures previuosly marshalled by MarshallDownStructuresArray by replacing relative offsets in its fields by absolute pointer addresses again.

Parameters
cbSizeSize in bytes of the memory allocated for the entire structure array and its data. The function will check if all relative offsets are within the bounds given by this size.
pStructuresArrayPointer to the array of structures to operate on.
cElementsNumber of array elements.
pInfoArray of MARSHALLING_INFO elements containing information about the fields of the structure as well as how to modify them. See the documentation on MARSHALLING_INFO for more information. You have to indicate the end of the array by setting the dwOffset field to MAXDWORD.
cbStructureSizeSize in bytes of each structure array element.
bSomeBooleanUnknown boolean value, set to TRUE.
Returns
TRUE if the array was successfully adjusted, FALSE otherwise.
BOOL WINAPI MarshallUpStructuresArray (DWORD cbSize, PVOID pStructuresArray, DWORD cElements, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
 

Macro Definition Documentation

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 8 of file marshalling.c.

Function Documentation

◆ MarshallDownStructure()

BOOL WINAPI MarshallDownStructure ( PVOID  pStructure,
const MARSHALLING_INFO pInfo,
DWORD  cbStructureSize,
BOOL  bSomeBoolean 
)

Definition at line 38 of file marshalling.c.

39 {
40  // Sanity checks
41  if (!pStructure || !pInfo)
42  {
44  return FALSE;
45  }
46 
47  // Loop until we reach an element with offset set to MAXDWORD.
48  while (pInfo->dwOffset != MAXDWORD)
49  {
50  PULONG_PTR pCurrentField = (PULONG_PTR)((PBYTE)pStructure + pInfo->dwOffset);
51 
52  if (pInfo->bAdjustAddress && *pCurrentField)
53  {
54  // Make a relative offset out of the absolute pointer address.
55  *pCurrentField -= (ULONG_PTR)pStructure;
56  }
57 
58  // Advance to the next field description.
59  pInfo++;
60  }
61 
62  return TRUE;
63 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
#define MAXDWORD
#define SetLastError(x)
Definition: compat.h:417
#define ULONG_PTR
Definition: config.h:101
uint32_t * PULONG_PTR
Definition: typedefs.h:63
BYTE * PBYTE
Definition: pedump.c:66

Referenced by _RpcAddJob(), _RpcGetJob(), _RpcGetPrinter(), _RpcGetPrinterDriver(), and MarshallDownStructuresArray().

◆ MarshallDownStructuresArray()

BOOL WINAPI MarshallDownStructuresArray ( PVOID  pStructuresArray,
DWORD  cElements,
const MARSHALLING_INFO pInfo,
DWORD  cbStructureSize,
BOOL  bSomeBoolean 
)

Definition at line 91 of file marshalling.c.

92 {
93  PBYTE pCurrentElement = pStructuresArray;
94 
95  // Call MarshallDownStructure on all array elements given by cElements of cbStructureSize.
96  while (cElements--)
97  {
98  if (!MarshallDownStructure(pCurrentElement, pInfo, cbStructureSize, bSomeBoolean))
99  return FALSE;
100 
101  // Advance to the next array element.
102  pCurrentElement += cbStructureSize;
103  }
104 
105  return TRUE;
106 }
#define TRUE
Definition: types.h:120
BOOL WINAPI MarshallDownStructure(PVOID pStructure, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
Definition: marshalling.c:38
BYTE * PBYTE
Definition: pedump.c:66

Referenced by _RpcEnumJobs(), _RpcEnumMonitors(), _RpcEnumPorts(), _RpcEnumPrinters(), _RpcEnumPrintProcessorDatatypes(), _RpcEnumPrintProcessors(), and START_TEST().

◆ MarshallUpStructure()

BOOL WINAPI MarshallUpStructure ( DWORD  cbSize,
PVOID  pStructure,
const MARSHALLING_INFO pInfo,
DWORD  cbStructureSize,
BOOL  bSomeBoolean 
)

Definition at line 137 of file marshalling.c.

138 {
139  // Sanity checks
140  if (!pStructure || !pInfo)
141  {
143  return FALSE;
144  }
145 
146  // Loop until we reach an element with offset set to MAXDWORD.
147  while (pInfo->dwOffset != MAXDWORD)
148  {
149  PULONG_PTR pCurrentField = (PULONG_PTR)((PBYTE)pStructure + pInfo->dwOffset);
150 
151  if (pInfo->bAdjustAddress && *pCurrentField)
152  {
153  // Verify that the offset in the current field is within the bounds given by cbSize.
154  if (cbSize <= *pCurrentField)
155  {
157  return FALSE;
158  }
159 
160  // Make an absolute pointer address out of the relative offset.
161  *pCurrentField += (ULONG_PTR)pStructure;
162  }
163 
164  // Advance to the next field description.
165  pInfo++;
166  }
167 
168  return TRUE;
169 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define TRUE
Definition: types.h:120
#define MAXDWORD
#define SetLastError(x)
Definition: compat.h:417
#define ERROR_INVALID_DATA
Definition: winerror.h:116
#define ULONG_PTR
Definition: config.h:101
uint32_t * PULONG_PTR
Definition: typedefs.h:63
BYTE * PBYTE
Definition: pedump.c:66

Referenced by AddJobW(), GetJobW(), GetPrinterDriverW(), GetPrinterW(), and MarshallUpStructuresArray().

◆ MarshallUpStructuresArray()

BOOL WINAPI MarshallUpStructuresArray ( DWORD  cbSize,
PVOID  pStructuresArray,
DWORD  cElements,
const MARSHALLING_INFO pInfo,
DWORD  cbStructureSize,
BOOL  bSomeBoolean 
)

Definition at line 202 of file marshalling.c.

203 {
204  PBYTE pCurrentElement = pStructuresArray;
205 
206  // Call MarshallUpStructure on all array elements given by cElements of cbStructureSize.
207  while (cElements--)
208  {
209  if (!MarshallUpStructure(cbSize, pCurrentElement, pInfo, cbStructureSize, bSomeBoolean))
210  return FALSE;
211 
212  // Advance to the next array element.
213  pCurrentElement += cbStructureSize;
214  }
215 
216  return TRUE;
217 }
#define TRUE
Definition: types.h:120
BOOL WINAPI MarshallUpStructure(DWORD cbSize, PVOID pStructure, const MARSHALLING_INFO *pInfo, DWORD cbStructureSize, BOOL bSomeBoolean)
Definition: marshalling.c:137
BYTE * PBYTE
Definition: pedump.c:66

Referenced by EnumJobsW(), EnumMonitorsW(), EnumPortsW(), EnumPrintersW(), EnumPrintProcessorDatatypesW(), EnumPrintProcessorsW(), and START_TEST().