[PATCH] spoolss: Implement SplInitializeWinSpoolDrv
Detlef Riekenberg
wine.dev at web.de
Tue Oct 2 17:55:55 CDT 2007
---
dlls/spoolss/spoolss.spec | 2 +-
dlls/spoolss/spoolss_main.c | 48 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 1 deletions(-)
diff --git a/dlls/spoolss/spoolss.spec b/dlls/spoolss/spoolss.spec
index 4afa9bf..b7fc0bd 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 c368fe5..e5b5cc7 100644
--- a/dlls/spoolss/spoolss_main.c
+++ b/dlls/spoolss/spoolss_main.c
@@ -27,6 +27,10 @@ #include "wine/debug.h"
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;
+
+}
--
1.4.1
--=-mS1wJMP+Rj/6lJegLCwM--
More information about the wine-patches
mailing list