From ce51d9d0c966c542851940a11c415a085ea436d2 Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Tue, 15 Jun 2010 17:25:16 +0200 Subject: [PATCH] winspool: Support the spooler in GetPrinterData. --- dlls/winspool.drv/info.c | 78 ++++++++++++++++++++++++++++++++---------------- tools/wine.inf.in | 1 + 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 4993a7823e3..3f97ebd82a7 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -5354,27 +5354,40 @@ DWORD WINAPI GetPrinterDataExA(HANDLE hPrinter, LPCSTR pKeyName, LPCSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded) { - HKEY hkeyPrinter, hkeySubkey; + opened_printer_t *printer; + HKEY hkeyPrinters, hkeyPrinter = 0, hkeySubkey = 0; DWORD ret; - TRACE("(%p, %s, %s %p, %p, %08x, %p)\n", hPrinter, - debugstr_a(pKeyName), debugstr_a(pValueName), pType, pData, nSize, - pcbNeeded); + TRACE("(%p, %s, %s, %p, %p, %u, %p)\n", hPrinter, debugstr_a(pKeyName), + debugstr_a(pValueName), pType, pData, nSize, pcbNeeded); - if((ret = WINSPOOL_GetOpenedPrinterRegKey(hPrinter, &hkeyPrinter)) - != ERROR_SUCCESS) - return ret; + printer = get_opened_printer(hPrinter); + if(!printer) return ERROR_INVALID_HANDLE; - if((ret = RegOpenKeyA(hkeyPrinter, pKeyName, &hkeySubkey)) - != ERROR_SUCCESS) { - WARN("Can't open subkey %s\n", debugstr_a(pKeyName)); - RegCloseKey(hkeyPrinter); - return ret; + ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); + if (ret) return ret; + + if (printer->name) { + + ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); + if (ret) { + RegCloseKey(hkeyPrinters); + 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); + return ret; + } } *pcbNeeded = nSize; - ret = RegQueryValueExA(hkeySubkey, pValueName, 0, pType, pData, pcbNeeded); + ret = RegQueryValueExA(printer->name ? hkeySubkey : hkeyPrinters, pValueName, + 0, pType, pData, pcbNeeded); + RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); + RegCloseKey(hkeyPrinters); return ret; } @@ -5385,27 +5398,40 @@ DWORD WINAPI GetPrinterDataExW(HANDLE hPrinter, LPCWSTR pKeyName, LPCWSTR pValueName, LPDWORD pType, LPBYTE pData, DWORD nSize, LPDWORD pcbNeeded) { - HKEY hkeyPrinter, hkeySubkey; + opened_printer_t *printer; + HKEY hkeyPrinters, hkeyPrinter = 0, hkeySubkey = 0; DWORD ret; - TRACE("(%p, %s, %s %p, %p, %08x, %p)\n", hPrinter, - debugstr_w(pKeyName), debugstr_w(pValueName), pType, pData, nSize, - pcbNeeded); + TRACE("(%p, %s, %s, %p, %p, %u, %p)\n", hPrinter, debugstr_w(pKeyName), + debugstr_w(pValueName), pType, pData, nSize, pcbNeeded); - if((ret = WINSPOOL_GetOpenedPrinterRegKey(hPrinter, &hkeyPrinter)) - != ERROR_SUCCESS) - return ret; + printer = get_opened_printer(hPrinter); + if(!printer) return ERROR_INVALID_HANDLE; - if((ret = RegOpenKeyW(hkeyPrinter, pKeyName, &hkeySubkey)) - != ERROR_SUCCESS) { - WARN("Can't open subkey %s\n", debugstr_w(pKeyName)); - RegCloseKey(hkeyPrinter); - return ret; + ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, PrintersW, &hkeyPrinters); + if (ret) return ret; + + if (printer->name) { + + ret = RegOpenKeyW(hkeyPrinters, printer->name, &hkeyPrinter); + if (ret) { + RegCloseKey(hkeyPrinters); + return ret; + } + if((ret = RegOpenKeyW(hkeyPrinter, pKeyName, &hkeySubkey)) != ERROR_SUCCESS) { + WARN("Can't open subkey %s: %d\n", debugstr_w(pKeyName), ret); + RegCloseKey(hkeyPrinter); + RegCloseKey(hkeyPrinters); + return ret; + } } *pcbNeeded = nSize; - ret = RegQueryValueExW(hkeySubkey, pValueName, 0, pType, pData, pcbNeeded); + ret = RegQueryValueExW(printer->name ? hkeySubkey : hkeyPrinters, pValueName, + 0, pType, pData, pcbNeeded); + RegCloseKey(hkeySubkey); RegCloseKey(hkeyPrinter); + RegCloseKey(hkeyPrinters); return ret; } diff --git a/tools/wine.inf.in b/tools/wine.inf.in index b8f4a82f65b..63a78d2e119 100644 --- a/tools/wine.inf.in +++ b/tools/wine.inf.in @@ -1009,6 +1009,7 @@ HKLM,"Software\Microsoft\OLE","EnableRemoteConnect",,"N" [Printing] HKLM,%Control%\Print\Monitors\Local Port,"Driver",2,"localspl.dll" +HKLM,%Control%\Print\Printers,"DefaultSpoolDirectory",2,"%11%\spool\printers" HKLM,%CurrentVersionNT%\Ports,"FILE:",,"" HKLM,%CurrentVersionNT%\Ports,"LPT1:",,"" HKLM,%CurrentVersionNT%\Ports,"LPT2:",,"" -- 2.11.4.GIT