winspool: Implement SetPrinterW for level 2

André Hentschel nerv at dawncrow.de
Thu May 10 13:08:57 CDT 2012


---
 dlls/winspool.drv/info.c |   37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 33caaad..614cfa2 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -748,6 +748,11 @@ PRINTCAP_LoadPrinters(void) {
     return hadprinter;
 }
 
+static inline DWORD set_reg_DWORD(HKEY hkey, LPCSTR keyname, const DWORD value)
+{
+    return RegSetValueExA(hkey, keyname, 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
+}
+
 static inline DWORD set_reg_szW(HKEY hkey, const WCHAR *keyname, const WCHAR *value)
 {
     if (value)
@@ -2874,6 +2879,30 @@ BOOL WINAPI SetPrinterA( HANDLE printer, DWORD level, LPBYTE data, DWORD command
     return ret;
 }
 
+static void set_printer_2( HKEY key, const PRINTER_INFO_2W *pi )
+{
+    set_reg_szW( key, NameW, pi->pPrinterName );
+    set_reg_szW( key, Share_NameW, pi->pShareName );
+    set_reg_szW( key, PortW, pi->pPortName );
+    set_reg_szW( key, Printer_DriverW, pi->pDriverName );
+    set_reg_szW( key, DescriptionW, pi->pComment );
+    set_reg_szW( key, LocationW, pi->pLocation );
+
+    if (pi->pDevMode)
+        set_reg_devmode( key, Default_DevModeW, pi->pDevMode );
+
+    set_reg_szW( key, Separator_FileW, pi->pSepFile );
+    set_reg_szW( key, Print_ProcessorW, pi->pPrintProcessor );
+    set_reg_szW( key, DatatypeW, pi->pDatatype );
+    set_reg_szW( key, ParametersW, pi->pParameters );
+
+    set_reg_DWORD( key, "Attributes", pi->Attributes );
+    set_reg_DWORD( key, "Priority", pi->Priority );
+    set_reg_DWORD( key, "Default Priority", pi->DefaultPriority );
+    set_reg_DWORD( key, "StartTime", pi->StartTime );
+    set_reg_DWORD( key, "UntilTime", pi->UntilTime );
+}
+
 static BOOL set_printer_9( HKEY key, const PRINTER_INFO_9W *pi )
 {
     if (!pi->pDevMode) return FALSE;
@@ -2899,6 +2928,14 @@ BOOL WINAPI SetPrinterW( HANDLE printer, DWORD level, LPBYTE data, DWORD command
 
     switch (level)
     {
+    case 2:
+    {
+        PRINTER_INFO_2W *pi2 = (PRINTER_INFO_2W *)data;
+        set_printer_2( key, pi2 );
+        ret = TRUE;
+        break;
+    }
+
     case 9:
     {
         PRINTER_INFO_9W *pi = (PRINTER_INFO_9W *)data;
-- 

Best Regards, André Hentschel


More information about the wine-patches mailing list