Huw Davies : winspool: Implement SetPrinterW for level 9.

Alexandre Julliard julliard at winehq.org
Thu Apr 5 12:31:47 CDT 2012


Module: wine
Branch: master
Commit: 79aac9fabce638cc9676b6e128018b7b364f6504
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=79aac9fabce638cc9676b6e128018b7b364f6504

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu Apr  5 13:25:51 2012 +0100

winspool: Implement SetPrinterW for level 9.

---

 dlls/winspool.drv/info.c |   51 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 72fa8f0..a5b065c 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -2243,16 +2243,6 @@ BOOL WINAPI DeletePortW (LPWSTR pName, HWND hWnd, LPWSTR pPortName)
 }
 
 /******************************************************************************
- *    SetPrinterW  [WINSPOOL.@]
- */
-BOOL WINAPI SetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD Command)
-{
-    FIXME("(%p, %d, %p, %d): stub\n", hPrinter, Level, pPrinter, Command);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
-}
-
-/******************************************************************************
  *    WritePrinter  [WINSPOOL.@]
  */
 BOOL WINAPI WritePrinter(HANDLE hPrinter, LPVOID pBuf, DWORD cbBuf, LPDWORD pcWritten)
@@ -2869,6 +2859,47 @@ BOOL WINAPI SetPrinterA( HANDLE printer, DWORD level, LPBYTE data, DWORD command
     return ret;
 }
 
+static BOOL set_printer_9( HKEY key, const PRINTER_INFO_9W *pi )
+{
+    if (!pi->pDevMode) return FALSE;
+
+    set_reg_devmode( key, Default_DevModeW, pi->pDevMode );
+    return TRUE;
+}
+
+/******************************************************************************
+ *    SetPrinterW  [WINSPOOL.@]
+ */
+BOOL WINAPI SetPrinterW( HANDLE printer, DWORD level, LPBYTE data, DWORD command )
+{
+    HKEY key;
+    BOOL ret = FALSE;
+
+    TRACE( "(%p, %d, %p, %d)\n", printer, level, data, command );
+
+    if (command != 0) FIXME( "Ignoring command %d\n", command );
+
+    if (WINSPOOL_GetOpenedPrinterRegKey( printer, &key ))
+        return FALSE;
+
+    switch (level)
+    {
+    case 9:
+    {
+        PRINTER_INFO_9W *pi = (PRINTER_INFO_9W *)data;
+        ret = set_printer_9( key, pi );
+        break;
+    }
+
+    default:
+        FIXME( "Unimplemented level %d\n", level );
+        SetLastError( ERROR_INVALID_LEVEL );
+    }
+
+    RegCloseKey( key );
+    return ret;
+}
+
 /*****************************************************************************
  *          SetJobA  [WINSPOOL.@]
  */




More information about the wine-cvs mailing list