[PATCH] winspool.drv: Implement OpenPrinter2.

Dmitry Timoshkov dmitry at baikal.ru
Wed Jul 13 03:46:22 CDT 2022


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/winspool.drv/info.c            | 18 ++++++++++++++++++
 dlls/winspool.drv/winspool.drv.spec |  2 ++
 include/winspool.h                  | 29 ++++++++++++++++++++++++++++-
 3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 482f70a2235..c536253317b 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -2078,6 +2078,24 @@ BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter, LPPRINTER_DEFAU
     return (*phPrinter != 0);
 }
 
+BOOL WINAPI OpenPrinter2A(LPSTR name, HANDLE *printer,
+    PRINTER_DEFAULTSA *defaults, PRINTER_OPTIONSA *options)
+{
+    if (options)
+        FIXME("flags %08lx ignored\n", options->dwFlags);
+
+    return OpenPrinterA(name, printer, defaults);
+}
+
+BOOL WINAPI OpenPrinter2W(LPWSTR name, HANDLE *printer,
+    PRINTER_DEFAULTSW *defaults, PRINTER_OPTIONSW *options)
+{
+    if (options)
+        FIXME("flags %08lx ignored\n", options->dwFlags);
+
+    return OpenPrinterW(name, printer, defaults);
+}
+
 /******************************************************************
  *              AddMonitorA        [WINSPOOL.@]
  *
diff --git a/dlls/winspool.drv/winspool.drv.spec b/dlls/winspool.drv/winspool.drv.spec
index d7bb49bd34b..39c2613a4a0 100644
--- a/dlls/winspool.drv/winspool.drv.spec
+++ b/dlls/winspool.drv/winspool.drv.spec
@@ -149,6 +149,8 @@
 @ stdcall IsValidDevmodeW(ptr long)
 @ stdcall OpenPrinterA(str ptr ptr)
 @ stdcall OpenPrinterW(wstr ptr ptr)
+@ stdcall OpenPrinter2A(str ptr ptr ptr)
+@ stdcall OpenPrinter2W(wstr ptr ptr ptr)
 @ stdcall PerfClose()
 @ stdcall PerfCollect(wstr ptr ptr ptr)
 @ stdcall PerfOpen(wstr)
diff --git a/include/winspool.h b/include/winspool.h
index db8773ec418..ef39104ea30 100644
--- a/include/winspool.h
+++ b/include/winspool.h
@@ -1143,6 +1143,30 @@ typedef struct _BIDI_RESPONSE_CONTAINER {
  BIDI_RESPONSE_DATA aData[1];
 } BIDI_RESPONSE_CONTAINER, *LPBIDI_RESPONSE_CONTAINER, *PBIDI_RESPONSE_CONTAINER;
 
+typedef enum _PRINTER_OPTION_FLAGS
+{
+    PRINTER_OPTION_NO_CACHE       = 1 << 0,
+    PRINTER_OPTION_CACHE          = 1 << 1,
+    PRINTER_OPTION_CLIENT_CHANGE  = 1 << 2,
+    PRINTER_OPTION_NO_CLIENT_DATA = 1 << 3,
+} PRINTER_OPTION_FLAGS;
+
+typedef struct _PRINTER_OPTIONSA
+{
+    UINT cbSize;
+    DWORD dwFlags;
+} PRINTER_OPTIONSA, *PPRINTER_OPTIONSA, *LPPRINTER_OPTIONSA;
+
+typedef struct _PRINTER_OPTIONSW
+{
+    UINT cbSize;
+    DWORD dwFlags;
+} PRINTER_OPTIONSW, *PPRINTER_OPTIONSW, *LPPRINTER_OPTIONSW;
+
+DECL_WINELIB_TYPE_AW(PRINTER_OPTIONS)
+DECL_WINELIB_TYPE_AW(PPRINTER_OPTIONS)
+DECL_WINELIB_TYPE_AW(LPPRINTER_OPTIONS)
+
 /* string constants */
 
 #define SPLREG_DEFAULT_SPOOL_DIRECTORYA "DefaultSpoolDirectory"
@@ -1400,9 +1424,12 @@ BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter,
 			     LPPRINTER_DEFAULTSA pDefault);
 BOOL WINAPI OpenPrinterW(LPWSTR lpPrinterName,HANDLE *phPrinter,
 			     LPPRINTER_DEFAULTSW pDefault);
-
 #define OpenPrinter WINELIB_NAME_AW(OpenPrinter)
 
+BOOL WINAPI OpenPrinter2A(LPSTR,HANDLE *,PRINTER_DEFAULTSA *,PRINTER_OPTIONSA *);
+BOOL WINAPI OpenPrinter2W(LPWSTR,HANDLE *,PRINTER_DEFAULTSW *,PRINTER_OPTIONSW *);
+#define OpenPrinter2 WINELIB_NAME_AW(OpenPrinter2)
+
 BOOL WINAPI ResetPrinterA(HANDLE hPrinter, LPPRINTER_DEFAULTSA pDefault);
 BOOL WINAPI ResetPrinterW(HANDLE hPrinter, LPPRINTER_DEFAULTSW pDefault);
 #define ResetPrinter WINELIB_NAME_AW(ResetPrinter)
-- 
2.36.1




More information about the wine-devel mailing list