Author: cfinck Date: Mon Jun 22 14:31:47 2015 New Revision: 68237
URL: http://svn.reactos.org/svn/reactos?rev=68237&view=rev Log: [SPOOLSS] [SPOOLSV] [WINSPOOL] - Add RPC calls in winspool, Router calls in spoolsv and Local Spooler calls in spoolss for most of the APIs I've implemented in localspl. This is still Work-In-Progress and missing some sanity checks, but a first step into something usable from the documented Spooler API side. - Separate APIs into individual source files just like I did for localspl.
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/jobs.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printers.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printprocessors.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/jobs.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printers.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printprocessors.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/jobs.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printers.c (with props) branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printprocessors.c (with props) Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/CMakeLists.txt branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/main.c branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/precomp.h branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/spoolss.spec branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/CMakeLists.txt branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/rpcstubs.c branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/CMakeLists.txt branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/main.c branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/winspool.spec
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/CMakeLists.txt [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/CMakeLists.txt [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -3,9 +3,12 @@
list(APPEND SOURCE context.c + jobs.c main.c memory.c precomp.h + printers.c + printprocessors.c tools.c)
add_library(spoolss SHARED
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/jobs.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/jobs.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/jobs.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,20 @@ +/* + * PROJECT: ReactOS Spooler Router + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions for managing print jobs + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +BOOL WINAPI +AddJob(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return LocalSplFuncs.fpAddJob(hPrinter, Level, pData, cbBuf, pcbNeeded); +} + +BOOL WINAPI +GetJob(HANDLE hPrinter, DWORD JobId, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return LocalSplFuncs.fpGetJob(hPrinter, JobId, Level, pJob, cbBuf, pcbNeeded); +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/jobs.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/main.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/main.c [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/main.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -12,12 +12,6 @@
BOOL WINAPI -ClosePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) @@ -29,42 +23,6 @@ }
return TRUE; -} - -BOOL WINAPI -EndDocPrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -EndPagePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; }
BOOL WINAPI @@ -96,18 +54,6 @@ }
return TRUE; -} - -BOOL WINAPI -OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault) -{ - return FALSE; -} - -DWORD WINAPI -StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo) -{ - return 0; }
BOOL WINAPI @@ -154,21 +100,3 @@ // Nothing to do here yet return ERROR_SUCCESS; } - -BOOL WINAPI -StartPagePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten) -{ - return FALSE; -} - -BOOL WINAPI -XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus) -{ - return FALSE; -}
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/precomp.h URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/precomp.h [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/precomp.h [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -26,5 +26,6 @@
// main.c extern HANDLE hProcessHeap; +extern PRINTPROVIDOR LocalSplFuncs;
#endif
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printers.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printers.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printers.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,75 @@ +/* + * PROJECT: ReactOS Spooler Router + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Printers and printing + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + + +BOOL WINAPI +ClosePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +EndDocPrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +EndPagePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + return LocalSplFuncs.fpEnumPrinters(Flags, Name, Level, pPrinterEnum, cbBuf, pcbNeeded, pcReturned); +} + +BOOL WINAPI +GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault) +{ + return LocalSplFuncs.fpOpenPrinter(pPrinterName, phPrinter, pDefault); +} + +DWORD WINAPI +StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo) +{ + return 0; +} + +BOOL WINAPI +StartPagePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten) +{ + return FALSE; +} + +BOOL WINAPI +XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus) +{ + return FALSE; +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printers.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printprocessors.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printprocessors.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printprocessors.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,26 @@ +/* + * PROJECT: ReactOS Spooler Router + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Print Processors + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +BOOL WINAPI +EnumPrintProcessorDatatypesW(LPWSTR pName, LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + return LocalSplFuncs.fpEnumPrintProcessorDatatypes(pName, pPrintProcessorName, Level, pDatatypes, cbBuf, pcbNeeded, pcReturned); +} + +BOOL WINAPI +EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + return LocalSplFuncs.fpEnumPrintProcessors(pName, pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded, pcReturned); +} + +BOOL WINAPI +GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return LocalSplFuncs.fpGetPrintProcessorDirectory(pName, pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded); +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/printprocessors.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/spoolss.spec URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/spoolss.spec [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolss/spoolss.spec [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -1,7 +1,7 @@ @ stub AbortPrinter @ stub AddDriverCatalog @ stub AddFormW -@ stub AddJobW +@ stdcall AddJobW(long long ptr long ptr) @ stub AddMonitorW @ stub AddPerMachineConnectionW @ stub AddPortExW @@ -68,8 +68,8 @@ @ stub EnumPrinterDriversW @ stub EnumPrinterKeyW @ stdcall EnumPrintersW(long ptr long ptr long ptr ptr) -@ stub EnumPrintProcessorDatatypesW -@ stub EnumPrintProcessorsW +@ stdcall EnumPrintProcessorDatatypesW(ptr ptr long ptr long ptr ptr) +@ stdcall EnumPrintProcessorsW(ptr ptr long ptr long ptr ptr) @ stub FindClosePrinterChangeNotification @ stub FlushPrinter @ stub FormatPrinterForRegistryKey @@ -78,7 +78,7 @@ @ stub GetClientUserHandle @ stub GetFormW @ stub GetJobAttributes -@ stub GetJobW +@ stdcall GetJobW(long long long ptr long ptr) @ stub GetNetworkId @ stub GetPrinterDataExW @ stub GetPrinterDataW
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/CMakeLists.txt [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/CMakeLists.txt [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -4,10 +4,13 @@
list(APPEND SOURCE init.c + jobs.c main.c + printers.c + printprocessors.c + precomp.h rpcserver.c rpcstubs.c - precomp.h ${CMAKE_CURRENT_BINARY_DIR}/winspool_s.c)
add_executable(spoolsv ${SOURCE} spoolsv.rc)
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/jobs.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/jobs.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/jobs.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,68 @@ +/* + * PROJECT: ReactOS Print Spooler Service + * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + * PURPOSE: Functions for managing print jobs + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +DWORD +_RpcAddJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD Level, BYTE* pAddJob, DWORD cbBuf, DWORD* pcbNeeded) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = AddJobW(hPrinter, Level, pAddJob, cbBuf, pcbNeeded); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("AddJobW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +} + +DWORD +_RpcGetJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId, DWORD Level, BYTE* pJob, DWORD cbBuf, DWORD* pcbNeeded) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = GetJobW(hPrinter, JobId, Level, pJob, cbBuf, pcbNeeded); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("GetJobW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +} + +DWORD +_RpcScheduleJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId) +{ + UNIMPLEMENTED; + return ERROR_INVALID_FUNCTION; +} + +DWORD +_RpcSetJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId, WINSPOOL_JOB_CONTAINER* pJobContainer, DWORD Command) +{ + UNIMPLEMENTED; + return ERROR_INVALID_FUNCTION; +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/jobs.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printers.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printers.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printers.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,59 @@ +/* + * PROJECT: ReactOS Print Spooler Service + * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Printers and printing + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +DWORD +_RpcEnumPrinters(DWORD Flags, WINSPOOL_HANDLE Name, DWORD Level, BYTE* pPrinterEnum, DWORD cbBuf, DWORD* pcbNeeded, DWORD* pcReturned) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = EnumPrintersW(Flags, Name, Level, pPrinterEnum, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("EnumPrintersW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +} + +DWORD +_RpcOpenPrinter(WINSPOOL_HANDLE pPrinterName, WINSPOOL_PRINTER_HANDLE* phPrinter, WCHAR* pDatatype, WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer, DWORD AccessRequired) +{ + DWORD dwErrorCode; + PRINTER_DEFAULTSW Default; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + Default.DesiredAccess = AccessRequired; + Default.pDatatype = pDatatype; + Default.pDevMode = (PDEVMODEW)pDevModeContainer->pDevMode; + + dwErrorCode = OpenPrinterW(pPrinterName, phPrinter, &Default); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("OpenPrinterW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printers.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printprocessors.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printprocessors.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printprocessors.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,84 @@ +/* + * PROJECT: ReactOS Print Spooler Service + * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Print Processors + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +DWORD +_RpcAddPrintProcessor(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, WCHAR *pPathName, WCHAR *pPrintProcessorName) +{ + UNIMPLEMENTED; + return ERROR_INVALID_FUNCTION; +} + +DWORD +_RpcEnumPrintProcessorDatatypes(WINSPOOL_HANDLE pName, WCHAR *pPrintProcessorName, DWORD Level, BYTE *pDatatypes, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = EnumPrintProcessorDatatypesW(pName, pPrintProcessorName, Level, pDatatypes, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("EnumPrintProcessorDatatypesW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +} + +DWORD +_RpcEnumPrintProcessors(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, DWORD Level, BYTE *pPrintProcessorInfo, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = EnumPrintProcessorsW(pName, pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("EnumPrintProcessorsW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +} + +DWORD +_RpcGetPrintProcessorDirectory(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, DWORD Level, BYTE *pPrintProcessorDirectory, DWORD cbBuf, DWORD *pcbNeeded) +{ + DWORD dwErrorCode; + + dwErrorCode = RpcImpersonateClient(NULL); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("RpcImpersonateClient failed with error %lu!\n", dwErrorCode); + return dwErrorCode; + } + + dwErrorCode = GetPrintProcessorDirectoryW(pName, pEnvironment, Level, pPrintProcessorDirectory, cbBuf, pcbNeeded); + if (dwErrorCode != ERROR_SUCCESS) + { + ERR("EnumPrintProcessorsW failed with error %lu!\n", dwErrorCode); + RpcRevertToSelf(); + return dwErrorCode; + } + + return RpcRevertToSelf(); +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/printprocessors.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/rpcstubs.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/rpcstubs.c [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/spoolsv/rpcstubs.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -8,34 +8,6 @@ #include "precomp.h"
DWORD -_RpcEnumPrinters(DWORD Flags, WINSPOOL_HANDLE Name, DWORD Level, BYTE* pPrinterEnum, DWORD cbBuf, DWORD* pcbNeeded, DWORD* pcReturned) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcOpenPrinter(WINSPOOL_HANDLE pPrinterName, WINSPOOL_PRINTER_HANDLE* phPrinter, WCHAR* pDatatype, WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer, DWORD AccessRequired) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcSetJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId, WINSPOOL_JOB_CONTAINER *pJobContainer, DWORD Command) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcGetJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId, DWORD Level, BYTE *pJob, DWORD cbBuf, DWORD *pcbNeeded) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD _RpcEnumJobs(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs, DWORD Level, BYTE *pJob, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned) { UNIMPLEMENTED; @@ -106,27 +78,6 @@ }
DWORD -_RpcAddPrintProcessor(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, WCHAR *pPathName, WCHAR *pPrintProcessorName) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcEnumPrintProcessors(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, DWORD Level, BYTE *pPrintProcessorInfo, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcGetPrintProcessorDirectory(WINSPOOL_HANDLE pName, WCHAR *pEnvironment, DWORD Level, BYTE *pPrintProcessorDirectory, DWORD cbBuf, DWORD *pcbNeeded) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD _RpcStartDocPrinter(WINSPOOL_PRINTER_HANDLE hPrinter, WINSPOOL_DOC_INFO_CONTAINER *pDocInfoContainer, DWORD *pJobId) { UNIMPLEMENTED; @@ -176,20 +127,6 @@ }
DWORD -_RpcAddJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD Level, BYTE *pAddJob, DWORD cbBuf, DWORD *pcbNeeded) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD -_RpcScheduleJob(WINSPOOL_PRINTER_HANDLE hPrinter, DWORD JobId) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD _RpcGetPrinterData(WINSPOOL_PRINTER_HANDLE hPrinter, WCHAR *pValueName, DWORD *pType, BYTE *pData, DWORD nSize, DWORD *pcbNeeded) { UNIMPLEMENTED; @@ -365,13 +302,6 @@ }
DWORD -_RpcEnumPrintProcessorDatatypes(WINSPOOL_HANDLE pName, WCHAR *pPrintProcessorName, DWORD Level, BYTE *pDatatypes, DWORD cbBuf, DWORD *pcbNeeded, DWORD *pcReturned) -{ - UNIMPLEMENTED; - return ERROR_INVALID_FUNCTION; -} - -DWORD _RpcResetPrinter(WINSPOOL_PRINTER_HANDLE hPrinter, WCHAR *pDatatype, WINSPOOL_DEVMODE_CONTAINER *pDevModeContainer) { UNIMPLEMENTED;
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/CMakeLists.txt [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/CMakeLists.txt [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -4,8 +4,11 @@ spec2def(winspool.drv winspool.spec ADD_IMPORTLIB)
list(APPEND SOURCE + jobs.c main.c precomp.h + printers.c + printprocessors.c ${CMAKE_CURRENT_BINARY_DIR}/winspool_c.c)
add_library(winspool SHARED
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/jobs.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/jobs.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/jobs.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,60 @@ +/* + * PROJECT: ReactOS Spooler API + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions for managing print jobs + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +BOOL WINAPI +AddJob(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf, LPDWORD pcbNeeded) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcAddJob(hPrinter, Level, pData, cbBuf, pcbNeeded); + if (dwErrorCode) + { + ERR("_RpcAddJob failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcAddJob failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +} + +BOOL WINAPI +GetJob(HANDLE hPrinter, DWORD JobId, DWORD Level, LPBYTE pJob, DWORD cbBuf, LPDWORD pcbNeeded) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcGetJob(hPrinter, JobId, Level, pJob, cbBuf, pcbNeeded); + if (dwErrorCode) + { + ERR("_RpcGetJob failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcGetJob failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/jobs.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/main.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/main.c [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/main.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -66,217 +66,6 @@ }
BOOL WINAPI -ClosePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -DWORD WINAPI -DeviceCapabilitiesA(LPCSTR pDevice, LPCSTR pPort, WORD fwCapability, LPSTR pOutput, const DEVMODEA* pDevMode) -{ - return 0; -} - -DWORD WINAPI -DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort, WORD fwCapability, LPWSTR pOutput, const DEVMODEW* pDevMode) -{ - return 0; -} - -LONG WINAPI -DocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA pDevModeOutput, PDEVMODEA pDevModeInput, DWORD fMode) -{ - return 0; -} - -LONG WINAPI -DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW pDevModeOutput, PDEVMODEW pDevModeInput, DWORD fMode) -{ - return 0; -} - -BOOL WINAPI -EndDocPrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -EndPagePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -EnumPrintersA(DWORD Flags, LPSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ - return FALSE; -} - -BOOL WINAPI -EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ - return FALSE; -} - -BOOL WINAPI -EnumPrintProcessorDatatypesA(LPSTR pName, LPSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ - return FALSE; -} - -BOOL WINAPI -EnumPrintProcessorDatatypesW(LPWSTR pName, LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ - return FALSE; -} - -BOOL WINAPI -GetDefaultPrinterA(LPSTR pszBuffer, LPDWORD pcchBuffer) -{ - return FALSE; -} - -BOOL WINAPI -GetDefaultPrinterW(LPWSTR pszBuffer, LPDWORD pcchBuffer) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded) -{ - return FALSE; -} - -BOOL WINAPI -OpenPrinterA(LPSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSA pDefault) -{ - BOOL ReturnValue = FALSE; - PWSTR pwszPrinterName = NULL; - PWSTR pwszDatatype = NULL; - PRINTER_DEFAULTSW wDefault = { 0 }; - size_t StringLength; - - if (pPrinterName) - { - // Convert pPrinterName to a Unicode string pwszPrinterName - StringLength = strlen(pPrinterName) + 1; - - pwszPrinterName = HeapAlloc(GetProcessHeap(), 0, StringLength * sizeof(WCHAR)); - if (!pwszPrinterName) - { - ERR("HeapAlloc failed for pwszPrinterName with last error %lu!\n", GetLastError()); - goto Cleanup; - } - - MultiByteToWideChar(CP_ACP, 0, pPrinterName, -1, pwszPrinterName, StringLength); - } - - if (pDefault) - { - wDefault.DesiredAccess = pDefault->DesiredAccess; - - if (pDefault->pDatatype) - { - // Convert pDefault->pDatatype to a Unicode string pwszDatatype that later becomes wDefault.pDatatype - StringLength = strlen(pDefault->pDatatype) + 1; - - pwszDatatype = HeapAlloc(GetProcessHeap(), 0, StringLength * sizeof(WCHAR)); - if (!pwszDatatype) - { - ERR("HeapAlloc failed for pwszDatatype with last error %lu!\n", GetLastError()); - goto Cleanup; - } - - MultiByteToWideChar(CP_ACP, 0, pDefault->pDatatype, -1, pwszDatatype, StringLength); - wDefault.pDatatype = pwszDatatype; - } - - if (pDefault->pDevMode) - wDefault.pDevMode = GdiConvertToDevmodeW(pDefault->pDevMode); - } - - ReturnValue = OpenPrinterW(pwszPrinterName, phPrinter, &wDefault); - -Cleanup: - if (wDefault.pDevMode) - HeapFree(GetProcessHeap(), 0, wDefault.pDevMode); - - if (pwszPrinterName) - HeapFree(GetProcessHeap(), 0, pwszPrinterName); - - if (pwszDatatype) - HeapFree(GetProcessHeap(), 0, pwszDatatype); - - return ReturnValue; -} - -BOOL WINAPI -OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault) -{ - BOOL ReturnValue = FALSE; - DWORD ErrorCode; - PWSTR pDatatype = NULL; - WINSPOOL_DEVMODE_CONTAINER DevModeContainer; - WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer = NULL; - ACCESS_MASK AccessRequired = 0; - - // Prepare the additional parameters in the format required by _RpcOpenPrinter - if (pDefault) - { - pDatatype = pDefault->pDatatype; - DevModeContainer.cbBuf = sizeof(DEVMODEW); - DevModeContainer.pDevMode = (BYTE*)pDefault->pDevMode; - pDevModeContainer = &DevModeContainer; - AccessRequired = pDefault->DesiredAccess; - } - - // Do the RPC call - RpcTryExcept - { - ErrorCode = _RpcOpenPrinter(pPrinterName, phPrinter, pDatatype, pDevModeContainer, AccessRequired); - if (ErrorCode) - { - ERR("_RpcOpenPrinter failed with error %lu!\n", ErrorCode); - } - - ReturnValue = (ErrorCode == ERROR_SUCCESS); - } - RpcExcept(EXCEPTION_EXECUTE_HANDLER) - { - ERR("_RpcOpenPrinter failed with exception code %lu!\n", RpcExceptionCode()); - } - RpcEndExcept; - - return ReturnValue; -} - -BOOL WINAPI SpoolerInit() { BOOL ReturnValue = FALSE; @@ -301,27 +90,3 @@
return ReturnValue; } - -DWORD WINAPI -StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo) -{ - return 0; -} - -BOOL WINAPI -StartPagePrinter(HANDLE hPrinter) -{ - return FALSE; -} - -BOOL WINAPI -WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten) -{ - return FALSE; -} - -BOOL WINAPI -XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus) -{ - return FALSE; -}
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printers.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printers.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printers.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,245 @@ +/* + * PROJECT: ReactOS Spooler API + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Printers and printing + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +BOOL WINAPI +EnumPrintersA(DWORD Flags, LPSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + return FALSE; +} + +BOOL WINAPI +EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcEnumPrinters(Flags, Name, Level, pPrinterEnum, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode) + { + ERR("_RpcEnumPrinters failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcEnumPrinters failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +} + +BOOL WINAPI +ClosePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +DWORD WINAPI +DeviceCapabilitiesA(LPCSTR pDevice, LPCSTR pPort, WORD fwCapability, LPSTR pOutput, const DEVMODEA* pDevMode) +{ + return 0; +} + +DWORD WINAPI +DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort, WORD fwCapability, LPWSTR pOutput, const DEVMODEW* pDevMode) +{ + return 0; +} + +LONG WINAPI +DocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA pDevModeOutput, PDEVMODEA pDevModeInput, DWORD fMode) +{ + return 0; +} + +LONG WINAPI +DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW pDevModeOutput, PDEVMODEW pDevModeInput, DWORD fMode) +{ + return 0; +} + +BOOL WINAPI +EndDocPrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +EndPagePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +GetDefaultPrinterA(LPSTR pszBuffer, LPDWORD pcchBuffer) +{ + return FALSE; +} + +BOOL WINAPI +GetDefaultPrinterW(LPWSTR pszBuffer, LPDWORD pcchBuffer) +{ + return FALSE; +} + +BOOL WINAPI +GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded) +{ + return FALSE; +} + +BOOL WINAPI +OpenPrinterA(LPSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSA pDefault) +{ + BOOL bReturnValue = FALSE; + PWSTR pwszPrinterName = NULL; + PWSTR pwszDatatype = NULL; + PRINTER_DEFAULTSW wDefault = { 0 }; + size_t StringLength; + + if (pPrinterName) + { + // Convert pPrinterName to a Unicode string pwszPrinterName + StringLength = strlen(pPrinterName) + 1; + + pwszPrinterName = HeapAlloc(GetProcessHeap(), 0, StringLength * sizeof(WCHAR)); + if (!pwszPrinterName) + { + ERR("HeapAlloc failed for pwszPrinterName with last error %lu!\n", GetLastError()); + goto Cleanup; + } + + MultiByteToWideChar(CP_ACP, 0, pPrinterName, -1, pwszPrinterName, StringLength); + } + + if (pDefault) + { + wDefault.DesiredAccess = pDefault->DesiredAccess; + + if (pDefault->pDatatype) + { + // Convert pDefault->pDatatype to a Unicode string pwszDatatype that later becomes wDefault.pDatatype + StringLength = strlen(pDefault->pDatatype) + 1; + + pwszDatatype = HeapAlloc(GetProcessHeap(), 0, StringLength * sizeof(WCHAR)); + if (!pwszDatatype) + { + ERR("HeapAlloc failed for pwszDatatype with last error %lu!\n", GetLastError()); + goto Cleanup; + } + + MultiByteToWideChar(CP_ACP, 0, pDefault->pDatatype, -1, pwszDatatype, StringLength); + wDefault.pDatatype = pwszDatatype; + } + + if (pDefault->pDevMode) + wDefault.pDevMode = GdiConvertToDevmodeW(pDefault->pDevMode); + } + + bReturnValue = OpenPrinterW(pwszPrinterName, phPrinter, &wDefault); + +Cleanup: + if (wDefault.pDevMode) + HeapFree(GetProcessHeap(), 0, wDefault.pDevMode); + + if (pwszPrinterName) + HeapFree(GetProcessHeap(), 0, pwszPrinterName); + + if (pwszDatatype) + HeapFree(GetProcessHeap(), 0, pwszDatatype); + + return bReturnValue; +} + +BOOL WINAPI +OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + PWSTR pDatatype = NULL; + WINSPOOL_DEVMODE_CONTAINER DevModeContainer; + WINSPOOL_DEVMODE_CONTAINER* pDevModeContainer = NULL; + ACCESS_MASK AccessRequired = 0; + + // Prepare the additional parameters in the format required by _RpcOpenPrinter + if (pDefault) + { + pDatatype = pDefault->pDatatype; + DevModeContainer.cbBuf = sizeof(DEVMODEW); + DevModeContainer.pDevMode = (BYTE*)pDefault->pDevMode; + pDevModeContainer = &DevModeContainer; + AccessRequired = pDefault->DesiredAccess; + } + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcOpenPrinter(pPrinterName, phPrinter, pDatatype, pDevModeContainer, AccessRequired); + if (dwErrorCode) + { + ERR("_RpcOpenPrinter failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcOpenPrinter failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +} + +DWORD WINAPI +StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo) +{ + return 0; +} + +BOOL WINAPI +StartPagePrinter(HANDLE hPrinter) +{ + return FALSE; +} + +BOOL WINAPI +WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten) +{ + return FALSE; +} + +BOOL WINAPI +XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus) +{ + return FALSE; +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printers.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printprocessors.c URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printprocessors.c (added) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printprocessors.c [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -0,0 +1,92 @@ +/* + * PROJECT: ReactOS Spooler API + * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation + * PURPOSE: Functions related to Print Processors + * COPYRIGHT: Copyright 2015 Colin Finck colin@reactos.org + */ + +#include "precomp.h" + +BOOL WINAPI +EnumPrintProcessorDatatypesA(LPSTR pName, LPSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + return FALSE; +} + +BOOL WINAPI +EnumPrintProcessorDatatypesW(LPWSTR pName, LPWSTR pPrintProcessorName, DWORD Level, LPBYTE pDatatypes, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcEnumPrintProcessorDatatypes(pName, pPrintProcessorName, Level, pDatatypes, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode) + { + ERR("_RpcEnumPrintProcessorDatatypes failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcEnumPrintProcessorDatatypes failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +} + +BOOL WINAPI +EnumPrintProcessorsW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcEnumPrintProcessors(pName, pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded, pcReturned); + if (dwErrorCode) + { + ERR("_RpcEnumPrintProcessors failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcEnumPrintProcessors failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +} + +BOOL WINAPI +GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded) +{ + BOOL bReturnValue = FALSE; + DWORD dwErrorCode; + + // Do the RPC call + RpcTryExcept + { + dwErrorCode = _RpcGetPrintProcessorDirectory(pName, pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded); + if (dwErrorCode) + { + ERR("_RpcGetPrintProcessorDirectory failed with error %lu!\n", dwErrorCode); + } + + bReturnValue = (dwErrorCode == ERROR_SUCCESS); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ERR("_RpcGetPrintProcessorDirectory failed with exception code %lu!\n", RpcExceptionCode()); + } + RpcEndExcept; + + return bReturnValue; +}
Propchange: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/printprocessors.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/winspool.spec URL: http://svn.reactos.org/svn/reactos/branches/colins-printing-for-freedom/reac... ============================================================================== --- branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/winspool.spec [iso-8859-1] (original) +++ branches/colins-printing-for-freedom/reactos/win32ss/printing/base/winspool/winspool.spec [iso-8859-1] Mon Jun 22 14:31:47 2015 @@ -10,7 +10,7 @@ 109 stub AddFormA 110 stub AddFormW 111 stub AddJobA -112 stub AddJobW +112 stdcall AddJobW(long long ptr long ptr) 113 stub AddMonitorA 114 stub AddMonitorW 115 stub AddPortA @@ -92,7 +92,7 @@ 191 stdcall EnumPrintProcessorDatatypesA(ptr ptr long ptr long ptr ptr) 192 stdcall EnumPrintProcessorDatatypesW(ptr ptr long ptr long ptr ptr) 193 stub EnumPrintProcessorsA -194 stub EnumPrintProcessorsW +194 stdcall EnumPrintProcessorsW(ptr ptr long ptr long ptr ptr) 195 stub EnumPrinterDataA 196 stub EnumPrinterDataExA 197 stub EnumPrinterDataExW @@ -143,7 +143,7 @@ 242 stub GetFormA 243 stub GetFormW 244 stub GetJobA -245 stub GetJobW +245 stdcall GetJobW(long long long ptr long ptr) 246 stub GetPrintProcessorDirectoryA 247 stdcall GetPrintProcessorDirectoryW(wstr wstr long ptr long ptr) 248 stdcall GetPrinterA(long long ptr long ptr)