Detlef Riekenberg : winspool: Use all Fields from DRIVER_INFO_8A when we add a Printer Driver.
Module: wine Branch: master Commit: 7cba560ab22158ceb4792fde7b658e4cfa857878 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7cba560ab22158ceb4792fde7b... Author: Detlef Riekenberg <wine.dev(a)web.de> Date: Sun Nov 27 00:59:50 2016 +0100 winspool: Use all Fields from DRIVER_INFO_8A when we add a Printer Driver. Signed-off-by: Detlef Riekenberg <wine.dev(a)web.de> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/winspool.drv/info.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 2b2e0fc..39ae4eb 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -6948,6 +6948,12 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW MultiByteToWideChar(CP_ACP, 0, diA->pConfigFile, -1, diW.pConfigFile, len); } + if ((Level > 2) && diA->pHelpFile) { + len = MultiByteToWideChar(CP_ACP, 0, diA->pHelpFile, -1, NULL, 0); + diW.pHelpFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pHelpFile, -1, diW.pHelpFile, len); + } + if ((Level > 2) && diA->pDependentFiles) { lenA = multi_sz_lenA(diA->pDependentFiles); len = MultiByteToWideChar(CP_ACP, 0, diA->pDependentFiles, lenA, NULL, 0); @@ -6961,7 +6967,7 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW MultiByteToWideChar(CP_ACP, 0, diA->pMonitorName, -1, diW.pMonitorName, len); } - if ((Level > 3) && diA->pDefaultDataType) { + if ((Level > 2) && diA->pDefaultDataType) { len = MultiByteToWideChar(CP_ACP, 0, diA->pDefaultDataType, -1, NULL, 0); diW.pDefaultDataType = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, diA->pDefaultDataType, -1, diW.pDefaultDataType, len); @@ -6974,6 +6980,11 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW MultiByteToWideChar(CP_ACP, 0, diA->pszzPreviousNames, lenA, diW.pszzPreviousNames, len); } + if (Level > 5) { + diW.ftDriverDate = diA->ftDriverDate; + diW.dwlDriverVersion = diA->dwlDriverVersion; + } + if ((Level > 5) && diA->pszMfgName) { len = MultiByteToWideChar(CP_ACP, 0, diA->pszMfgName, -1, NULL, 0); diW.pszMfgName = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); @@ -6998,8 +7009,42 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW MultiByteToWideChar(CP_ACP, 0, diA->pszProvider, -1, diW.pszProvider, len); } + if ((Level > 7) && diA->pszPrintProcessor) { + len = MultiByteToWideChar(CP_ACP, 0, diA->pszPrintProcessor, -1, NULL, 0); + diW.pszPrintProcessor = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pszPrintProcessor, -1, diW.pszPrintProcessor, len); + } + + if ((Level > 7) && diA->pszVendorSetup) { + len = MultiByteToWideChar(CP_ACP, 0, diA->pszVendorSetup, -1, NULL, 0); + diW.pszVendorSetup = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pszVendorSetup, -1, diW.pszVendorSetup, len); + } + + if ((Level > 7) && diA->pszzColorProfiles) { + lenA = multi_sz_lenA(diA->pszzColorProfiles); + len = MultiByteToWideChar(CP_ACP, 0, diA->pszzColorProfiles, lenA, NULL, 0); + diW.pszzColorProfiles = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pszzColorProfiles, lenA, diW.pszzColorProfiles, len); + } + + if ((Level > 7) && diA->pszInfPath) { + len = MultiByteToWideChar(CP_ACP, 0, diA->pszInfPath, -1, NULL, 0); + diW.pszInfPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pszInfPath, -1, diW.pszInfPath, len); + } + + if ((Level > 7) && diA->pszzCoreDriverDependencies) { + lenA = multi_sz_lenA(diA->pszzCoreDriverDependencies); + len = MultiByteToWideChar(CP_ACP, 0, diA->pszzCoreDriverDependencies, lenA, NULL, 0); + diW.pszzCoreDriverDependencies = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, diA->pszzCoreDriverDependencies, lenA, diW.pszzCoreDriverDependencies, len); + } + if (Level > 7) { - FIXME("level %u is incomplete\n", Level); + diW.dwPrinterDriverAttributes = diA->dwPrinterDriverAttributes; + diW.ftMinInboxDriverVerDate = diA->ftMinInboxDriverVerDate; + diW.dwlMinInboxDriverVerVersion = diA->dwlMinInboxDriverVerVersion; } res = AddPrinterDriverExW(nameW, Level, (LPBYTE) &diW, dwFileCopyFlags); @@ -7010,6 +7055,7 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW HeapFree(GetProcessHeap(), 0, diW.pDriverPath); HeapFree(GetProcessHeap(), 0, diW.pDataFile); HeapFree(GetProcessHeap(), 0, diW.pConfigFile); + HeapFree(GetProcessHeap(), 0, diW.pHelpFile); HeapFree(GetProcessHeap(), 0, diW.pDependentFiles); HeapFree(GetProcessHeap(), 0, diW.pMonitorName); HeapFree(GetProcessHeap(), 0, diW.pDefaultDataType); @@ -7018,6 +7064,11 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW HeapFree(GetProcessHeap(), 0, diW.pszOEMUrl); HeapFree(GetProcessHeap(), 0, diW.pszHardwareID); HeapFree(GetProcessHeap(), 0, diW.pszProvider); + HeapFree(GetProcessHeap(), 0, diW.pszPrintProcessor); + HeapFree(GetProcessHeap(), 0, diW.pszVendorSetup); + HeapFree(GetProcessHeap(), 0, diW.pszzColorProfiles); + HeapFree(GetProcessHeap(), 0, diW.pszInfPath); + HeapFree(GetProcessHeap(), 0, diW.pszzCoreDriverDependencies); TRACE("=> %u with %u\n", res, GetLastError()); return res;
participants (1)
-
Alexandre Julliard