#include "precomp.h"
+static void
+_MarshallDownAddJobInfo(PADDJOB_INFO_1W pAddJobInfo1)
+{
+ // Replace absolute pointer addresses in the output by relative offsets.
+ pAddJobInfo1->Path = (PWSTR)((ULONG_PTR)pAddJobInfo1->Path - (ULONG_PTR)pAddJobInfo1);
+}
+
static void
_MarshallDownJobInfo(PBYTE pJobInfo, DWORD Level)
{
_RpcAddJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD Level, BYTE* pAddJob, DWORD cbBuf, DWORD* pcbNeeded)
{
DWORD dwErrorCode;
- PADDJOB_INFO_1W pAddJobInfo1;
dwErrorCode = RpcImpersonateClient(NULL);
if (dwErrorCode != ERROR_SUCCESS)
dwErrorCode = GetLastError();
if (dwErrorCode == ERROR_SUCCESS)
- {
- // Replace absolute pointer addresses in the output by relative offsets.
- pAddJobInfo1 = (PADDJOB_INFO_1W)pAddJob;
- pAddJobInfo1->Path = (PWSTR)((ULONG_PTR)pAddJobInfo1->Path - (ULONG_PTR)pAddJobInfo1);
- }
+ _MarshallDownAddJobInfo((PADDJOB_INFO_1W)pAddJob);
RpcRevertToSelf();
return dwErrorCode;
#include "precomp.h"
+static void
+_MarshallUpAddJobInfo(PADDJOB_INFO_1W pAddJobInfo1)
+{
+ // Replace relative offset addresses in the output by absolute pointers.
+ pAddJobInfo1->Path = (PWSTR)((ULONG_PTR)pAddJobInfo1->Path + (ULONG_PTR)pAddJobInfo1);
+}
+
static void
_MarshallUpJobInfo(PBYTE pJobInfo, DWORD Level)
{
AddJobW(HANDLE hPrinter, DWORD Level, PBYTE pData, DWORD cbBuf, PDWORD pcbNeeded)
{
DWORD dwErrorCode;
- PADDJOB_INFO_1W pAddJobInfo1;
PSPOOLER_HANDLE pHandle = (PSPOOLER_HANDLE)hPrinter;
if (!pHandle)
RpcEndExcept;
if (dwErrorCode == ERROR_SUCCESS)
- {
- // Replace relative offset addresses in the output by absolute pointers.
- pAddJobInfo1 = (PADDJOB_INFO_1W)pData;
- pAddJobInfo1->Path = (PWSTR)((ULONG_PTR)pAddJobInfo1->Path + (ULONG_PTR)pAddJobInfo1);
- }
+ _MarshallUpAddJobInfo((PADDJOB_INFO_1W)pData);
Cleanup:
SetLastError(dwErrorCode);