mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 21:25:43 +00:00
[WINSPOOL] Implement GetPrinterA based on GetPrinterW (#2308)
This commit is contained in:
parent
2c6747aff0
commit
ecde376825
1 changed files with 457 additions and 5 deletions
|
@ -1031,16 +1031,468 @@ Cleanup:
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
|
GetPrinterA(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
|
||||||
{
|
{
|
||||||
|
PPRINTER_INFO_1A ppi1a = (PPRINTER_INFO_1A)pPrinter;
|
||||||
|
PPRINTER_INFO_1W ppi1w = (PPRINTER_INFO_1W)pPrinter;
|
||||||
|
PPRINTER_INFO_2A ppi2a = (PPRINTER_INFO_2A)pPrinter;
|
||||||
|
PPRINTER_INFO_2W ppi2w = (PPRINTER_INFO_2W)pPrinter;
|
||||||
|
PPRINTER_INFO_4A ppi4a = (PPRINTER_INFO_4A)pPrinter;
|
||||||
|
PPRINTER_INFO_4W ppi4w = (PPRINTER_INFO_4W)pPrinter;
|
||||||
|
PPRINTER_INFO_5A ppi5a = (PPRINTER_INFO_5A)pPrinter;
|
||||||
|
PPRINTER_INFO_5W ppi5w = (PPRINTER_INFO_5W)pPrinter;
|
||||||
|
PPRINTER_INFO_7A ppi7a = (PPRINTER_INFO_7A)pPrinter;
|
||||||
|
PPRINTER_INFO_7W ppi7w = (PPRINTER_INFO_7W)pPrinter;
|
||||||
|
DWORD cch;
|
||||||
|
BOOL bReturnValue = FALSE;
|
||||||
|
|
||||||
TRACE("GetPrinterA(%p, %lu, %p, %lu, %p)\n", hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
|
TRACE("GetPrinterA(%p, %lu, %p, %lu, %p)\n", hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
|
||||||
if(pcbNeeded) *pcbNeeded = 0;
|
|
||||||
return FALSE;
|
// Check for invalid levels here for early error return. Should be 1-9.
|
||||||
|
if (Level < 1 || Level > 9)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_LEVEL);
|
||||||
|
ERR("Invalid Level!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
bReturnValue = GetPrinterW(hPrinter, Level, pPrinter, cbBuf, pcbNeeded);
|
||||||
|
|
||||||
|
if (!bReturnValue)
|
||||||
|
{
|
||||||
|
TRACE("GetPrinterW failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (Level)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
if (ppi1w->pDescription)
|
||||||
|
{
|
||||||
|
PSTR pszDescription;
|
||||||
|
|
||||||
|
// Convert Unicode pDescription to a ANSI string pszDescription.
|
||||||
|
cch = wcslen(ppi1w->pDescription);
|
||||||
|
|
||||||
|
pszDescription = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszDescription)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi1w->pDescription, -1, pszDescription, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi1a->pDescription, cch + 1, pszDescription);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszDescription);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi1w->pName)
|
||||||
|
{
|
||||||
|
PSTR pszName;
|
||||||
|
|
||||||
|
// Convert Unicode pName to a ANSI string pszName.
|
||||||
|
cch = wcslen(ppi1w->pName);
|
||||||
|
|
||||||
|
pszName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi1w->pName, -1, pszName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi1a->pName, cch + 1, pszName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi1w->pComment)
|
||||||
|
{
|
||||||
|
PSTR pszComment;
|
||||||
|
|
||||||
|
// Convert Unicode pComment to a ANSI string pszComment.
|
||||||
|
cch = wcslen(ppi1w->pComment);
|
||||||
|
|
||||||
|
pszComment = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszComment)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi1w->pComment, -1, pszComment, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi1a->pComment, cch + 1, pszComment);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszComment);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
if (ppi2w->pServerName)
|
||||||
|
{
|
||||||
|
PSTR pszServerName;
|
||||||
|
|
||||||
|
// Convert Unicode pServerName to a ANSI string pszServerName.
|
||||||
|
cch = wcslen(ppi2w->pServerName);
|
||||||
|
|
||||||
|
pszServerName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszServerName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pServerName, -1, pszServerName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pServerName, cch + 1, pszServerName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszServerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pPrinterName)
|
||||||
|
{
|
||||||
|
PSTR pszPrinterName;
|
||||||
|
|
||||||
|
// Convert Unicode pPrinterName to a ANSI string pszPrinterName.
|
||||||
|
cch = wcslen(ppi2w->pPrinterName);
|
||||||
|
|
||||||
|
pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPrinterName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pPrinterName, -1, pszPrinterName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pPrinterName, cch + 1, pszPrinterName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPrinterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pShareName)
|
||||||
|
{
|
||||||
|
PSTR pszShareName;
|
||||||
|
|
||||||
|
// Convert Unicode pShareName to a ANSI string pszShareName.
|
||||||
|
cch = wcslen(ppi2w->pShareName);
|
||||||
|
|
||||||
|
pszShareName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszShareName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pShareName, -1, pszShareName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pShareName, cch + 1, pszShareName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszShareName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pPortName)
|
||||||
|
{
|
||||||
|
PSTR pszPortName;
|
||||||
|
|
||||||
|
// Convert Unicode pPortName to a ANSI string pszPortName.
|
||||||
|
cch = wcslen(ppi2w->pPortName);
|
||||||
|
|
||||||
|
pszPortName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPortName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pPortName, -1, pszPortName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pPortName, cch + 1, pszPortName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPortName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pDriverName)
|
||||||
|
{
|
||||||
|
PSTR pszDriverName;
|
||||||
|
|
||||||
|
// Convert Unicode pDriverName to a ANSI string pszDriverName.
|
||||||
|
cch = wcslen(ppi2w->pDriverName);
|
||||||
|
|
||||||
|
pszDriverName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszDriverName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pDriverName, -1, pszDriverName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pDriverName, cch + 1, pszDriverName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszDriverName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pComment)
|
||||||
|
{
|
||||||
|
PSTR pszComment;
|
||||||
|
|
||||||
|
// Convert Unicode pComment to a ANSI string pszComment.
|
||||||
|
cch = wcslen(ppi2w->pComment);
|
||||||
|
|
||||||
|
pszComment = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszComment)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pComment, -1, pszComment, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pComment, cch + 1, pszComment);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszComment);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pLocation)
|
||||||
|
{
|
||||||
|
PSTR pszLocation;
|
||||||
|
|
||||||
|
// Convert Unicode pLocation to a ANSI string pszLocation.
|
||||||
|
cch = wcslen(ppi2w->pLocation);
|
||||||
|
|
||||||
|
pszLocation = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszLocation)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pLocation, -1, pszLocation, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pLocation, cch + 1, pszLocation);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pSepFile)
|
||||||
|
{
|
||||||
|
PSTR pszSepFile;
|
||||||
|
|
||||||
|
// Convert Unicode pSepFile to a ANSI string pszSepFile.
|
||||||
|
cch = wcslen(ppi2w->pSepFile);
|
||||||
|
|
||||||
|
pszSepFile = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszSepFile)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pSepFile, -1, pszSepFile, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pSepFile, cch + 1, pszSepFile);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszSepFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pPrintProcessor)
|
||||||
|
{
|
||||||
|
PSTR pszPrintProcessor;
|
||||||
|
|
||||||
|
// Convert Unicode pPrintProcessor to a ANSI string pszPrintProcessor.
|
||||||
|
cch = wcslen(ppi2w->pPrintProcessor);
|
||||||
|
|
||||||
|
pszPrintProcessor = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPrintProcessor)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pPrintProcessor, -1, pszPrintProcessor, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pPrintProcessor, cch + 1, pszPrintProcessor);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPrintProcessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pDatatype)
|
||||||
|
{
|
||||||
|
PSTR pszDatatype;
|
||||||
|
|
||||||
|
// Convert Unicode pDatatype to a ANSI string pszDatatype.
|
||||||
|
cch = wcslen(ppi2w->pDatatype);
|
||||||
|
|
||||||
|
pszDatatype = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszDatatype)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pDatatype, -1, pszDatatype, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pDatatype, cch + 1, pszDatatype);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszDatatype);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi2w->pParameters)
|
||||||
|
{
|
||||||
|
PSTR pszParameters;
|
||||||
|
|
||||||
|
// Convert Unicode pParameters to a ANSI string pszParameters.
|
||||||
|
cch = wcslen(ppi2w->pParameters);
|
||||||
|
|
||||||
|
pszParameters = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszParameters)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi2w->pParameters, -1, pszParameters, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi2a->pParameters, cch + 1, pszParameters);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszParameters);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
if (ppi4w->pPrinterName)
|
||||||
|
{
|
||||||
|
PSTR pszPrinterName;
|
||||||
|
|
||||||
|
// Convert Unicode pPrinterName to a ANSI string pszPrinterName.
|
||||||
|
cch = wcslen(ppi4w->pPrinterName);
|
||||||
|
|
||||||
|
pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPrinterName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi4w->pPrinterName, -1, pszPrinterName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi4a->pPrinterName, cch + 1, pszPrinterName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPrinterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi4w->pServerName)
|
||||||
|
{
|
||||||
|
PSTR pszServerName;
|
||||||
|
|
||||||
|
// Convert Unicode pServerName to a ANSI string pszServerName.
|
||||||
|
cch = wcslen(ppi4w->pServerName);
|
||||||
|
|
||||||
|
pszServerName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszServerName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi4w->pServerName, -1, pszServerName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi4a->pServerName, cch + 1, pszServerName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszServerName);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
if (ppi5w->pPrinterName)
|
||||||
|
{
|
||||||
|
PSTR pszPrinterName;
|
||||||
|
|
||||||
|
// Convert Unicode pPrinterName to a ANSI string pszPrinterName.
|
||||||
|
cch = wcslen(ppi5w->pPrinterName);
|
||||||
|
|
||||||
|
pszPrinterName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPrinterName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi5w->pPrinterName, -1, pszPrinterName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi5a->pPrinterName, cch + 1, pszPrinterName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPrinterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ppi5w->pPortName)
|
||||||
|
{
|
||||||
|
PSTR pszPortName;
|
||||||
|
|
||||||
|
// Convert Unicode pPortName to a ANSI string pszPortName.
|
||||||
|
cch = wcslen(ppi5w->pPortName);
|
||||||
|
|
||||||
|
pszPortName = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszPortName)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi5w->pPortName, -1, pszPortName, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi5a->pPortName, cch + 1, pszPortName);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszPortName);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 7:
|
||||||
|
{
|
||||||
|
if (ppi7w->pszObjectGUID)
|
||||||
|
{
|
||||||
|
PSTR pszaObjectGUID;
|
||||||
|
|
||||||
|
// Convert Unicode pszObjectGUID to a ANSI string pszaObjectGUID.
|
||||||
|
cch = wcslen(ppi7w->pszObjectGUID);
|
||||||
|
|
||||||
|
pszaObjectGUID = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
|
||||||
|
if (!pszaObjectGUID)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
ERR("HeapAlloc failed!\n");
|
||||||
|
goto Cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, ppi7w->pszObjectGUID, -1, pszaObjectGUID, cch + 1, NULL, NULL);
|
||||||
|
StringCchCopyA(ppi7a->pszObjectGUID, cch + 1, pszaObjectGUID);
|
||||||
|
|
||||||
|
HeapFree(hProcessHeap, 0, pszaObjectGUID);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} // switch
|
||||||
|
|
||||||
|
Cleanup:
|
||||||
|
return bReturnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded)
|
GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded)
|
||||||
{
|
{
|
||||||
TRACE("GetPrinterDriverA(%p, %s, %lu, %p, %lu, %p)\n", hPrinter, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded);
|
ERR("GetPrinterDriverA(%p, %s, %lu, %p, %lu, %p)\n", hPrinter, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded);
|
||||||
if(pcbNeeded) *pcbNeeded = 0;
|
if (pcbNeeded) *pcbNeeded = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1050,7 +1502,7 @@ GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment, DWORD Level, LPBYTE pDri
|
||||||
DWORD dwErrorCode;
|
DWORD dwErrorCode;
|
||||||
PSPOOLER_HANDLE pHandle = (PSPOOLER_HANDLE)hPrinter;
|
PSPOOLER_HANDLE pHandle = (PSPOOLER_HANDLE)hPrinter;
|
||||||
|
|
||||||
ERR("GetPrinterDriverW(%p, %S, %lu, %p, %lu, %p)\n", hPrinter, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded);
|
TRACE("GetPrinterDriverW(%p, %S, %lu, %p, %lu, %p)\n", hPrinter, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded);
|
||||||
|
|
||||||
// Sanity checks.
|
// Sanity checks.
|
||||||
if (!pHandle)
|
if (!pHandle)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue