#include "precomp.h"
-BOOL WINAPI
-ClosePrinter(HANDLE hPrinter)
-{
- return FALSE;
-}
+HANDLE hProcessHeap;
+PRINTPROVIDOR LocalSplFuncs;
-BOOL WINAPI
-EndDocPrinter(HANDLE hPrinter)
-{
- return FALSE;
-}
BOOL WINAPI
-EndPagePrinter(HANDLE hPrinter)
+DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
- return FALSE;
-}
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
+ hProcessHeap = GetProcessHeap();
+ break;
+ }
-BOOL WINAPI
-EnumPrintersW(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned)
-{
- return FALSE;
+ return TRUE;
}
BOOL WINAPI
-GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded)
+InitializeRouter(HANDLE SpoolerStatusHandle)
{
- return FALSE;
-}
+ HINSTANCE hinstLocalSpl;
+ PInitializePrintProvidor pfnInitializePrintProvidor;
-BOOL WINAPI
-GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
-{
- return FALSE;
-}
+ // Only initialize localspl.dll for now.
+ // This function should later look for all available print providers in the registry and initialize all of them.
+ hinstLocalSpl = LoadLibraryW(L"localspl");
+ if (!hinstLocalSpl)
+ {
+ ERR("LoadLibraryW for localspl failed with error %lu!\n", GetLastError());
+ return FALSE;
+ }
-BOOL WINAPI
-GetPrintProcessorDirectoryW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pPrintProcessorInfo, DWORD cbBuf, LPDWORD pcbNeeded)
-{
- return FALSE;
-}
+ pfnInitializePrintProvidor = (PInitializePrintProvidor)GetProcAddress(hinstLocalSpl, "InitializePrintProvidor");
+ if (!pfnInitializePrintProvidor)
+ {
+ ERR("GetProcAddress failed with error %lu!\n", GetLastError());
+ return FALSE;
+ }
-BOOL WINAPI
-InitializeRouter(HANDLE SpoolerStatusHandle)
-{
- return FALSE;
+ if (!pfnInitializePrintProvidor(&LocalSplFuncs, sizeof(PRINTPROVIDOR), NULL))
+ {
+ ERR("InitializePrintProvidor failed for localspl with error %lu!\n", GetLastError());
+ return FALSE;
+ }
+
+ return TRUE;
}
BOOL WINAPI
-OpenPrinterW(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault)
+SplInitializeWinSpoolDrv(PVOID* pTable)
{
- return FALSE;
-}
+ HINSTANCE hWinspool;
+ int i;
-DWORD WINAPI
-StartDocPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pDocInfo)
-{
- return 0;
-}
+ hWinspool = LoadLibraryW(L"winspool.drv");
+ if (!hWinspool)
+ {
+ ERR("Could not load winspool.drv, last error is %lu!\n", GetLastError());
+ return FALSE;
+ }
-BOOL WINAPI
-StartPagePrinter(HANDLE hPrinter)
-{
- return FALSE;
+ // Get the function pointers which are meant to be returned by this function.
+ pTable[0] = GetProcAddress(hWinspool, "OpenPrinterW");
+ pTable[1] = GetProcAddress(hWinspool, "ClosePrinter");
+ pTable[2] = GetProcAddress(hWinspool, "SpoolerDevQueryPrintW");
+ pTable[3] = GetProcAddress(hWinspool, "SpoolerPrinterEvent");
+ pTable[4] = GetProcAddress(hWinspool, "DocumentPropertiesW");
+ pTable[5] = GetProcAddress(hWinspool, (LPSTR)212);
+ pTable[6] = GetProcAddress(hWinspool, (LPSTR)213);
+ pTable[7] = GetProcAddress(hWinspool, (LPSTR)214);
+ pTable[8] = GetProcAddress(hWinspool, (LPSTR)215);
+
+ // Verify that all calls succeeded.
+ for (i = 0; i < 9; i++)
+ if (!pTable[i])
+ return FALSE;
+
+ return TRUE;
}
BOOL WINAPI
-WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten)
+SplIsUpgrade()
{
- return FALSE;
+ return FALSE;
}
BOOL WINAPI
-XcvDataW(HANDLE hXcv, PCWSTR pszDataName, PBYTE pInputData, DWORD cbInputData, PBYTE pOutputData, DWORD cbOutputData, PDWORD pcbOutputNeeded, PDWORD pdwStatus)
+SpoolerInit()
{
- return FALSE;
+ // Nothing to do here yet
+ SetLastError(ERROR_SUCCESS);
+ return TRUE;
}