2 * PROJECT: ReactOS Spooler Router
3 * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation
4 * PURPOSE: Main functions
5 * COPYRIGHT: Copyright 2015 Colin Finck <colin@reactos.org>
11 PRINTPROVIDOR LocalSplFuncs
;
15 ClosePrinter(HANDLE hPrinter
)
21 DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
25 case DLL_PROCESS_ATTACH
:
26 DisableThreadLibraryCalls(hinstDLL
);
27 hProcessHeap
= GetProcessHeap();
35 EndDocPrinter(HANDLE hPrinter
)
41 EndPagePrinter(HANDLE hPrinter
)
47 EnumPrintersW(DWORD Flags
, LPWSTR Name
, DWORD Level
, LPBYTE pPrinterEnum
, DWORD cbBuf
, LPDWORD pcbNeeded
, LPDWORD pcReturned
)
53 GetPrinterDriverW(HANDLE hPrinter
, LPWSTR pEnvironment
, DWORD Level
, LPBYTE pDriverInfo
, DWORD cbBuf
, LPDWORD pcbNeeded
)
59 GetPrinterW(HANDLE hPrinter
, DWORD Level
, LPBYTE pPrinter
, DWORD cbBuf
, LPDWORD pcbNeeded
)
65 GetPrintProcessorDirectoryW(LPWSTR pName
, LPWSTR pEnvironment
, DWORD Level
, LPBYTE pPrintProcessorInfo
, DWORD cbBuf
, LPDWORD pcbNeeded
)
71 InitializeRouter(HANDLE SpoolerStatusHandle
)
73 HINSTANCE hinstLocalSpl
;
74 PInitializePrintProvidor pfnInitializePrintProvidor
;
76 // Only initialize localspl.dll for now.
77 // This function should later look for all available print providers in the registry and initialize all of them.
78 hinstLocalSpl
= LoadLibraryW(L
"localspl");
81 ERR("LoadLibraryW for localspl failed with error %lu!\n", GetLastError());
85 pfnInitializePrintProvidor
= (PInitializePrintProvidor
)GetProcAddress(hinstLocalSpl
, "InitializePrintProvidor");
86 if (!pfnInitializePrintProvidor
)
88 ERR("GetProcAddress failed with error %lu!\n", GetLastError());
92 if (!pfnInitializePrintProvidor(&LocalSplFuncs
, sizeof(PRINTPROVIDOR
), NULL
))
94 ERR("InitializePrintProvidor failed for localspl with error %lu!\n", GetLastError());
102 OpenPrinterW(LPWSTR pPrinterName
, LPHANDLE phPrinter
, LPPRINTER_DEFAULTSW pDefault
)
108 StartDocPrinterW(HANDLE hPrinter
, DWORD Level
, LPBYTE pDocInfo
)
114 SplInitializeWinSpoolDrv(PVOID
* pTable
)
119 hWinspool
= LoadLibraryW(L
"winspool.drv");
122 ERR("Could not load winspool.drv, last error is %lu!\n", GetLastError());
126 // Get the function pointers which are meant to be returned by this function.
127 pTable
[0] = GetProcAddress(hWinspool
, "OpenPrinterW");
128 pTable
[1] = GetProcAddress(hWinspool
, "ClosePrinter");
129 pTable
[2] = GetProcAddress(hWinspool
, "SpoolerDevQueryPrintW");
130 pTable
[3] = GetProcAddress(hWinspool
, "SpoolerPrinterEvent");
131 pTable
[4] = GetProcAddress(hWinspool
, "DocumentPropertiesW");
132 pTable
[5] = GetProcAddress(hWinspool
, (LPSTR
)212);
133 pTable
[6] = GetProcAddress(hWinspool
, (LPSTR
)213);
134 pTable
[7] = GetProcAddress(hWinspool
, (LPSTR
)214);
135 pTable
[8] = GetProcAddress(hWinspool
, (LPSTR
)215);
137 // Verify that all calls succeeded.
138 for (i
= 0; i
< 9; i
++)
154 // Nothing to do here yet
155 return ERROR_SUCCESS
;
159 StartPagePrinter(HANDLE hPrinter
)
165 WritePrinter(HANDLE hPrinter
, LPVOID pBuf
, DWORD cbBuf
, LPDWORD pcWritten
)
171 XcvDataW(HANDLE hXcv
, PCWSTR pszDataName
, PBYTE pInputData
, DWORD cbInputData
, PBYTE pOutputData
, DWORD cbOutputData
, PDWORD pcbOutputNeeded
, PDWORD pdwStatus
)