diff --git a/dlls/spoolss/spoolss.spec b/dlls/spoolss/spoolss.spec index 4afa9bf10e749b70373c4cc4b8f2e8d0fc09b752..b7fc0bd455f29b5d93b64da1498b9afaadb270d3 100644 --- a/dlls/spoolss/spoolss.spec +++ b/dlls/spoolss/spoolss.spec @@ -121,7 +121,7 @@ @ stub SplCommitSpoolData @ stub SplDriverUnloadComplete @ stub SplGetSpoolFileInfo -@ stub SplInitializeWinSpoolDrv +@ stdcall SplInitializeWinSpoolDrv(ptr) @ stub SplIsUpgrade @ stub SplProcessPnPEvent @ stub SplReadPrinter diff --git a/dlls/spoolss/spoolss_main.c b/dlls/spoolss/spoolss_main.c index c368fe5b318603e51abf49490bf2efec73a751f9..52365c7bacf12a0bcfc1a3a5df3bea454d2e8a2a 100644 --- a/dlls/spoolss/spoolss_main.c +++ b/dlls/spoolss/spoolss_main.c @@ -27,6 +27,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(spoolss); +/* ################################ */ + +static HMODULE hwinspool; +static const WCHAR winspooldrvW[] = {'w','i','n','s','p','o','o','l','.','d','r','v',0}; /****************************************************************** * @@ -161,3 +165,47 @@ HANDLE WINAPI RevertToPrinterSelf(void) FIXME("() stub\n"); return NULL; } + +/****************************************************************** + * SplInitializeWinSpoolDrv [SPOOLSS.@] + * + * Dynamic load "winspool.drv" and fill an array with some function-pointer + * + * PARAMS + * table [I] array of function-pointer to fill + * + * RETURNS + * Success: TRUE + * Failure: FALSE + * + * NOTES + * Native "spoolss.dll" from w2k fill the table with 11 Function-Pointer. + * We implement the XP-Version (The table has only 9 Pointer) + * + */ +BOOL WINAPI SplInitializeWinSpoolDrv(LPVOID * table) +{ + DWORD res; + + TRACE("(%p)\n", table); + + hwinspool = LoadLibraryW(winspooldrvW); + if (!hwinspool) return FALSE; + + table[0] = (void *) GetProcAddress(hwinspool, "OpenPrinterW"); + table[1] = (void *) GetProcAddress(hwinspool, "ClosePrinter"); + table[2] = (void *) GetProcAddress(hwinspool, "SpoolerDevQueryPrintW"); + table[3] = (void *) GetProcAddress(hwinspool, "SpoolerPrinterEvent"); + table[4] = (void *) GetProcAddress(hwinspool, "DocumentPropertiesW"); + table[5] = (void *) GetProcAddress(hwinspool, (LPSTR) 212); /* LoadPrinterDriver */ + table[6] = (void *) GetProcAddress(hwinspool, (LPSTR) 213); /* RefCntLoadDriver */ + table[7] = (void *) GetProcAddress(hwinspool, (LPSTR) 214); /* RefCntUnloadDriver */ + table[8] = (void *) GetProcAddress(hwinspool, (LPSTR) 215); /* ForceUnloadDriver */ + + for (res = 0; res < 9; res++) { + if (table[res] == NULL) return FALSE; + } + + return TRUE; + +}