[PATCH 3/4] winspool: Add a helper to open various printer registry keys.
Huw Davies
huw at codeweavers.com
Wed Oct 27 02:14:47 CDT 2021
Signed-off-by: Huw Davies <huw at 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;
--
2.23.0
More information about the wine-devel
mailing list