Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/winspool.drv/info.c | 255 ++++++++++++++++++++------------------- 1 file changed, 128 insertions(+), 127 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 7cffc9ae7ec..9bc5c5e7a8c 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -126,37 +126,6 @@ static opened_printer_t **printer_handles; static UINT nb_printer_handles; static LONG next_job_id = 1;
-static const WCHAR DriversW[] = { 'S','y','s','t','e','m','\', - 'C','u', 'r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\', - 'c','o','n','t','r','o','l','\', - 'P','r','i','n','t','\', - 'E','n','v','i','r','o','n','m','e','n','t','s','\', - '%','s','\','D','r','i','v','e','r','s','%','s',0 }; - -static const WCHAR PrintersW[] = {'S','y','s','t','e','m','\', - 'C','u', 'r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\', - 'C','o','n','t','r','o','l','\', - 'P','r','i','n','t','\', - 'P','r','i','n','t','e','r','s',0}; - -static const WCHAR user_default_reg_key[] = { 'S','o','f','t','w','a','r','e','\', - 'M','i','c','r','o','s','o','f','t','\', - 'W','i','n','d','o','w','s',' ','N','T','\', - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\', - 'W','i','n','d','o','w','s',0}; - -static const WCHAR user_printers_reg_key[] = { 'S','o','f','t','w','a','r','e','\', - 'M','i','c','r','o','s','o','f','t','\', - 'W','i','n','d','o','w','s',' ','N','T','\', - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\', - 'D','e','v','i','c','e','s',0}; - -static const WCHAR WinNT_CV_PrinterPortsW[] = { 'S','o','f','t','w','a','r','e','\', - 'M','i','c','r','o','s','o','f','t','\', - 'W','i','n','d','o','w','s',' ','N','T','\', - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\', - 'P','r','i','n','t','e','r','P','o','r','t','s',0}; - static WCHAR envname_win40W[] = {'W','i','n','d','o','w','s',' ','4','.','0',0}; static const WCHAR envname_x64W[] = {'W','i','n','d','o','w','s',' ','x','6','4',0}; static WCHAR envname_x86W[] = {'W','i','n','d','o','w','s',' ','N','T',' ','x','8','6',0}; @@ -456,17 +425,18 @@ static HKEY WINSPOOL_OpenDriverReg(const void *pEnvironment) LPWSTR buffer; const printenv_t *env; unsigned int len; + static const WCHAR driver_fmt[] = L"System\CurrentControlSet\control\Print\Environments\%s\Drivers%s";
TRACE("(%s)\n", debugstr_w(pEnvironment));
env = validate_envW(pEnvironment); if (!env) return NULL;
- len = wcslen( DriversW ) + wcslen( env->envname ) + wcslen( env->versionregpath ) + 1; + len = ARRAY_SIZE( driver_fmt ) + wcslen( env->envname ) + wcslen( env->versionregpath ); buffer = heap_alloc( len * sizeof(WCHAR) ); if (buffer) { - swprintf( buffer, len, DriversW, env->envname, env->versionregpath ); + swprintf( buffer, len, driver_fmt, env->envname, env->versionregpath ); RegCreateKeyW( HKEY_LOCAL_MACHINE, buffer, &retval ); heap_free( buffer ); } @@ -652,13 +622,37 @@ static HANDLE get_backend_handle( HANDLE hprn ) return printer->backend_printer; }
+enum printers_key +{ + system_printers_key, + user_printers_key, + user_ports_key, + user_default_key, +}; + +static DWORD create_printers_reg_key( enum printers_key type, HKEY *key ) +{ + switch( type ) + { + case system_printers_key: + return RegCreateKeyW( HKEY_LOCAL_MACHINE, L"System\CurrentControlSet\Control\Print\Printers", key ); + case user_printers_key: + return RegCreateKeyW( HKEY_CURRENT_USER, L"Software\Microsoft\Windows NT\CurrentVersion\Devices", key ); + case user_ports_key: + return RegCreateKeyW( HKEY_CURRENT_USER, L"Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts", key ); + case user_default_key: + return RegCreateKeyW( HKEY_CURRENT_USER, L"Software\Microsoft\Windows NT\CurrentVersion\Windows", key ); + } + return ERROR_PATH_NOT_FOUND; +} + static DWORD open_printer_reg_key( const WCHAR *name, HKEY *key ) { HKEY printers; DWORD err;
*key = NULL; - err = RegCreateKeyW( HKEY_LOCAL_MACHINE, PrintersW, &printers ); + err = create_printers_reg_key( system_printers_key, &printers ); if (err) return err;
err = RegOpenKeyW( printers, name, key ); @@ -810,7 +804,7 @@ static BOOL init_unix_printers( void ) NTSTATUS status; int i;
- if (RegCreateKeyW( HKEY_LOCAL_MACHINE, PrintersW, &printers_key ) != ERROR_SUCCESS) + if (create_printers_reg_key( system_printers_key, &printers_key )) { ERR( "Can't create Printers key\n" ); return FALSE; @@ -1207,7 +1201,7 @@ static HANDLE init_mutex;
void WINSPOOL_LoadSystemPrinters(void) { - HKEY hkey, hkeyPrinters; + HKEY printers_key, printer_key; DWORD needed, num, i; WCHAR PrinterName[256];
@@ -1229,21 +1223,18 @@ void WINSPOOL_LoadSystemPrinters(void) /* This ensures that all printer entries have a valid Name value. If causes problems later if they don't. If one is found to be missed we create one and set it equal to the name of the key */ - if(RegCreateKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) == ERROR_SUCCESS) { - if(RegQueryInfoKeyW(hkeyPrinters, NULL, NULL, NULL, &num, NULL, NULL, - NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { - for(i = 0; i < num; i++) { - if(RegEnumKeyW(hkeyPrinters, i, PrinterName, ARRAY_SIZE(PrinterName)) == ERROR_SUCCESS) { - if(RegOpenKeyW(hkeyPrinters, PrinterName, &hkey) == ERROR_SUCCESS) { - if(RegQueryValueExW(hkey, NameW, 0, 0, 0, &needed) == ERROR_FILE_NOT_FOUND) { - set_reg_szW(hkey, NameW, PrinterName); - } - RegCloseKey(hkey); + if (!create_printers_reg_key( system_printers_key, &printers_key )) + { + if (!RegQueryInfoKeyW( printers_key, NULL, NULL, NULL, &num, NULL, NULL, NULL, NULL, NULL, NULL, NULL )) + for (i = 0; i < num; i++) + if (!RegEnumKeyW( printers_key, i, PrinterName, ARRAY_SIZE(PrinterName) )) + if (!RegOpenKeyW( printers_key, PrinterName, &printer_key )) + { + if (RegQueryValueExW( printer_key, NameW, 0, 0, 0, &needed ) == ERROR_FILE_NOT_FOUND) + set_reg_szW( printer_key, NameW, PrinterName ); + RegCloseKey( printer_key ); } - } - } - } - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); }
old_printer_check( FALSE ); @@ -2684,7 +2675,7 @@ static void set_devices_and_printerports(PRINTER_INFO_2W *pi) { DWORD portlen = wcslen( pi->pPortName ) * sizeof(WCHAR); WCHAR *devline; - HKEY hkey; + HKEY key;
TRACE("(%p) %s\n", pi, debugstr_w(pi->pPrinterName));
@@ -2697,17 +2688,19 @@ static void set_devices_and_printerports(PRINTER_INFO_2W *pi) wcscat( devline, pi->pPortName );
TRACE("using %s\n", debugstr_w(devline)); - if (!RegCreateKeyW(HKEY_CURRENT_USER, user_printers_reg_key, &hkey)) { - RegSetValueExW(hkey, pi->pPrinterName, 0, REG_SZ, (LPBYTE)devline, - (wcslen( devline ) + 1) * sizeof(WCHAR)); - RegCloseKey(hkey); + if (!create_printers_reg_key( user_printers_key, &key )) + { + RegSetValueExW( key, pi->pPrinterName, 0, REG_SZ, (BYTE *)devline, + (wcslen( devline ) + 1) * sizeof(WCHAR) ); + RegCloseKey( key ); }
wcscat( devline, timeout_15_45 ); - if (!RegCreateKeyW(HKEY_CURRENT_USER, WinNT_CV_PrinterPortsW, &hkey)) { - RegSetValueExW(hkey, pi->pPrinterName, 0, REG_SZ, (LPBYTE)devline, - (wcslen( devline ) + 1) * sizeof(WCHAR)); - RegCloseKey(hkey); + if (!create_printers_reg_key( user_ports_key, &key )) + { + RegSetValueExW( key, pi->pPrinterName, 0, REG_SZ, (BYTE *)devline, + (wcslen( devline ) + 1) * sizeof(WCHAR) ); + RegCloseKey( key ); } HeapFree(GetProcessHeap(), 0, devline); } @@ -2721,7 +2714,7 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) PRINTER_INFO_2W *pi = (PRINTER_INFO_2W *) pPrinter; LPDEVMODEW dm; HANDLE retval; - HKEY hkeyPrinter, hkeyPrinters, hkeyDriver, hkeyDrivers; + HKEY hkeyPrinter, printers_key, hkeyDriver, hkeyDrivers; LONG size;
TRACE("(%s,%d,%p)\n", debugstr_w(pName), Level, pPrinter); @@ -2740,16 +2733,17 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) SetLastError(ERROR_INVALID_PARAMETER); return 0; } - if(RegCreateKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) != - ERROR_SUCCESS) { + if (create_printers_reg_key( system_printers_key, &printers_key )) + { ERR("Can't create Printers key\n"); return 0; } - if(!RegOpenKeyW(hkeyPrinters, pi->pPrinterName, &hkeyPrinter)) { + if (!RegOpenKeyW( printers_key, pi->pPrinterName, &hkeyPrinter )) + { if (!RegQueryValueW(hkeyPrinter, AttributesW, NULL, NULL)) { SetLastError(ERROR_PRINTER_ALREADY_EXISTS); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return 0; } RegCloseKey(hkeyPrinter); @@ -2757,13 +2751,13 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) hkeyDrivers = WINSPOOL_OpenDriverReg(NULL); if(!hkeyDrivers) { ERR("Can't create Drivers key\n"); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return 0; } if(RegOpenKeyW(hkeyDrivers, pi->pDriverName, &hkeyDriver) != ERROR_SUCCESS) { WARN("Can't find driver %s\n", debugstr_w(pi->pDriverName)); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); RegCloseKey(hkeyDrivers); SetLastError(ERROR_UNKNOWN_PRINTER_DRIVER); return 0; @@ -2775,15 +2769,15 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) { FIXME("Can't find processor %s\n", debugstr_w(pi->pPrintProcessor)); SetLastError(ERROR_UNKNOWN_PRINTPROCESSOR); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return 0; }
- if(RegCreateKeyW(hkeyPrinters, pi->pPrinterName, &hkeyPrinter) != - ERROR_SUCCESS) { + if (RegCreateKeyW( printers_key, pi->pPrinterName, &hkeyPrinter )) + { FIXME("Can't create printer %s\n", debugstr_w(pi->pPrinterName)); SetLastError(ERROR_INVALID_PRINTER_NAME); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return 0; }
@@ -2839,7 +2833,7 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) if (!pi->pDevMode) HeapFree( GetProcessHeap(), 0, dm );
RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); if(!OpenPrinterW(pi->pPrinterName, &retval, NULL)) { ERR("OpenPrinter failing\n"); return 0; @@ -2959,7 +2953,7 @@ BOOL WINAPI DeletePrinter(HANDLE hPrinter) { LPCWSTR lpNameW = get_opened_printer_name(hPrinter); config_module_t *config_module; - HKEY hkeyPrinters, hkey; + HKEY key; WCHAR def[MAX_PATH]; DWORD size = ARRAY_SIZE(def);
@@ -2975,27 +2969,30 @@ BOOL WINAPI DeletePrinter(HANDLE hPrinter) } LeaveCriticalSection(&config_modules_cs);
- if(RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) == ERROR_SUCCESS) { - RegDeleteTreeW(hkeyPrinters, lpNameW); - RegCloseKey(hkeyPrinters); + if (!create_printers_reg_key( system_printers_key, &key )) + { + RegDeleteTreeW( key, lpNameW ); + RegCloseKey( key ); }
- if(RegCreateKeyW(HKEY_CURRENT_USER, user_printers_reg_key, &hkey) == ERROR_SUCCESS) { - RegDeleteValueW(hkey, lpNameW); - RegCloseKey(hkey); + if (!create_printers_reg_key( user_printers_key, &key )) + { + RegDeleteValueW( key, lpNameW ); + RegCloseKey( key ); }
- if(RegCreateKeyW(HKEY_CURRENT_USER, WinNT_CV_PrinterPortsW, &hkey) == ERROR_SUCCESS) { - RegDeleteValueW(hkey, lpNameW); - RegCloseKey(hkey); + if (!create_printers_reg_key( user_ports_key, &key ) == ERROR_SUCCESS) + { + RegDeleteValueW( key, lpNameW ); + RegCloseKey( key ); }
if (GetDefaultPrinterW( def, &size ) && !wcscmp( def, lpNameW )) { - if (!RegCreateKeyW( HKEY_CURRENT_USER, user_default_reg_key, &hkey )) + if (!create_printers_reg_key( user_default_key, &key )) { - RegDeleteValueW( hkey, deviceW ); - RegCloseKey( hkey ); + RegDeleteValueW( key, deviceW ); + RegCloseKey( key ); } SetDefaultPrinterW( NULL ); } @@ -4222,7 +4219,7 @@ static BOOL WINSPOOL_EnumPrintersW(DWORD dwType, LPWSTR lpszName, LPDWORD lpdwReturned)
{ - HKEY hkeyPrinters, hkeyPrinter; + HKEY printers_key, hkeyPrinter; WCHAR PrinterName[255]; DWORD needed = 0, number = 0; DWORD used, i, left; @@ -4255,15 +4252,15 @@ static BOOL WINSPOOL_EnumPrintersW(DWORD dwType, LPWSTR lpszName, return FALSE; }
- if(RegCreateKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters) != - ERROR_SUCCESS) { + if (create_printers_reg_key( system_printers_key, &printers_key )) + { ERR("Can't create Printers key\n"); return FALSE; }
- if(RegQueryInfoKeyA(hkeyPrinters, NULL, NULL, NULL, &number, NULL, NULL, - NULL, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) { - RegCloseKey(hkeyPrinters); + if (RegQueryInfoKeyA( printers_key, NULL, NULL, NULL, &number, NULL, NULL, NULL, NULL, NULL, NULL, NULL )) + { + RegCloseKey( printers_key ); ERR("Can't query Printers key\n"); return FALSE; } @@ -4285,22 +4282,23 @@ static BOOL WINSPOOL_EnumPrintersW(DWORD dwType, LPWSTR lpszName,
default: SetLastError(ERROR_INVALID_LEVEL); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return FALSE; } pi = (used <= cbBuf) ? lpbPrinters : NULL;
for(i = 0; i < number; i++) { - if(RegEnumKeyW(hkeyPrinters, i, PrinterName, ARRAY_SIZE(PrinterName)) != ERROR_SUCCESS) { + if (RegEnumKeyW( printers_key, i, PrinterName, ARRAY_SIZE(PrinterName) )) + { ERR("Can't enum key number %d\n", i); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return FALSE; } TRACE("Printer %d is %s\n", i, debugstr_w(PrinterName)); - if(RegOpenKeyW(hkeyPrinters, PrinterName, &hkeyPrinter) != - ERROR_SUCCESS) { + if (RegOpenKeyW( printers_key, PrinterName, &hkeyPrinter )) + { ERR("Can't open key %s\n", debugstr_w(PrinterName)); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return FALSE; }
@@ -4340,12 +4338,12 @@ static BOOL WINSPOOL_EnumPrintersW(DWORD dwType, LPWSTR lpszName, default: ERR("Shouldn't be here!\n"); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return FALSE; } RegCloseKey(hkeyPrinter); } - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key );
if(lpdwNeeded) *lpdwNeeded = used; @@ -5609,16 +5607,16 @@ BOOL WINAPI SetDefaultPrinterW(LPCWSTR pszPrinter)
pszPrinter = NULL; /* we have no default Printer: search local Printers and use the first */ - if (!RegOpenKeyExW(HKEY_LOCAL_MACHINE, PrintersW, 0, KEY_READ, &hreg)) { - + if (!create_printers_reg_key( system_printers_key, &hreg )) + { default_printer[0] = '\0'; size = ARRAY_SIZE(default_printer); - if (!RegEnumKeyExW(hreg, 0, default_printer, &size, NULL, NULL, NULL, NULL)) { - + if (!RegEnumKeyExW( hreg, 0, default_printer, &size, NULL, NULL, NULL, NULL )) + { pszPrinter = default_printer; TRACE("using %s\n", debugstr_w(pszPrinter)); } - RegCloseKey(hreg); + RegCloseKey( hreg ); }
if (pszPrinter == NULL) { @@ -5632,8 +5630,8 @@ BOOL WINAPI SetDefaultPrinterW(LPCWSTR pszPrinter) namelen = wcslen( pszPrinter ); size = namelen + (MAX_PATH * 2) + 3; /* printer,driver,port and a 0 */ buffer = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)); - if (!buffer || - (RegOpenKeyExW(HKEY_CURRENT_USER, user_printers_reg_key, 0, KEY_READ, &hreg) != ERROR_SUCCESS)) { + if (!buffer || create_printers_reg_key( user_printers_key, &hreg )) + { HeapFree(GetProcessHeap(), 0, buffer); SetLastError(ERROR_FILE_NOT_FOUND); return FALSE; @@ -5650,7 +5648,7 @@ BOOL WINAPI SetDefaultPrinterW(LPCWSTR pszPrinter) if (!lres) { HKEY hdev;
- if (!RegCreateKeyW(HKEY_CURRENT_USER, user_default_reg_key, &hdev)) + if (!create_printers_reg_key( user_default_key, &hdev )) { RegSetValueExW(hdev, deviceW, 0, REG_SZ, (BYTE *)buffer, (wcslen( buffer ) + 1) * sizeof(WCHAR)); RegCloseKey(hdev); @@ -5777,7 +5775,7 @@ DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded) { opened_printer_t *printer; - HKEY hkeyPrinters, hkeyPrinter = 0, hkeySubkey = 0; + HKEY printers_key, hkeyPrinter = 0, hkeySubkey = 0; DWORD ret;
TRACE("(%p, %s, %s, %p, %p, %u, %p)\n", hPrinter, debugstr_a(pKeyName), @@ -5786,34 +5784,35 @@ DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, printer = get_opened_printer(hPrinter); if(!printer) return ERROR_INVALID_HANDLE;
- ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); + ret = create_printers_reg_key( system_printers_key, &printers_key ); if (ret) return ret;
TRACE("printer->name: %s\n", debugstr_w(printer->name));
if (printer->name) {
- ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); - if (ret) { - RegCloseKey(hkeyPrinters); + ret = RegOpenKeyW( printers_key, printer->name, &hkeyPrinter ); + if (ret) + { + RegCloseKey( printers_key ); return ret; } if((ret = RegOpenKeyA(hkeyPrinter, pKeyName, &hkeySubkey)) != ERROR_SUCCESS) { WARN("Can't open subkey %s: %d\n", debugstr_a(pKeyName), ret); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return ret; } } *pcbNeeded = nSize; - ret = RegQueryValueExA(printer->name ? hkeySubkey : hkeyPrinters, pValueName, - 0, pType, pData, pcbNeeded); + ret = RegQueryValueExA( printer->name ? hkeySubkey : printers_key, pValueName, + 0, pType, pData, pcbNeeded );
if (!ret && !pData) ret = ERROR_MORE_DATA;
RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key );
TRACE("--> %d\n", ret); return ret; @@ -5827,7 +5826,7 @@ DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded) { opened_printer_t *printer; - HKEY hkeyPrinters, hkeyPrinter = 0, hkeySubkey = 0; + HKEY printers_key, hkeyPrinter = 0, hkeySubkey = 0; DWORD ret;
TRACE("(%p, %s, %s, %p, %p, %u, %p)\n", hPrinter, debugstr_w(pKeyName), @@ -5836,34 +5835,36 @@ DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, printer = get_opened_printer(hPrinter); if(!printer) return ERROR_INVALID_HANDLE;
- ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); + ret = create_printers_reg_key( system_printers_key, &printers_key ); if (ret) return ret;
TRACE("printer->name: %s\n", debugstr_w(printer->name));
- if (printer->name) { - - ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); - if (ret) { - RegCloseKey(hkeyPrinters); + if (printer->name) + { + ret = RegOpenKeyW( printers_key, printer->name, &hkeyPrinter); + if (ret) + { + RegCloseKey( printers_key ); return ret; } - if((ret = RegOpenKeyW(hkeyPrinter, pKeyName, &hkeySubkey)) != ERROR_SUCCESS) { + if ((ret = RegOpenKeyW(hkeyPrinter, pKeyName, &hkeySubkey)) != ERROR_SUCCESS) + { WARN("Can't open subkey %s: %d\n", debugstr_w(pKeyName), ret); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key ); return ret; } } *pcbNeeded = nSize; - ret = RegQueryValueExW(printer->name ? hkeySubkey : hkeyPrinters, pValueName, - 0, pType, pData, pcbNeeded); + ret = RegQueryValueExW( printer->name ? hkeySubkey : printers_key, pValueName, + 0, pType, pData, pcbNeeded );
if (!ret && !pData) ret = ERROR_MORE_DATA;
RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); - RegCloseKey(hkeyPrinters); + RegCloseKey( printers_key );
TRACE("--> %d\n", ret); return ret;