mirror of
https://github.com/reactos/reactos.git
synced 2025-05-10 20:27:45 +00:00
[PRINTING]
- Create the actual generic handle in _LocalOpenPrinterHandle. - Fix _RpcClosePrinter call. - Enable many more tests in winspool_apitest, GetPrinterData. - Bail out with ERROR_INVALID_PARAMETER for empty strings in _MakePrinterSubKey as well. - Add the Name registry value for "Dummy Printer on LPT1" to make a test succeed. This fixes many basic things.. which only got unnoticed, because Printing is only used in the form of API Tests so far. CORE-13458 CORE-13459 svn path=/trunk/; revision=75207
This commit is contained in:
parent
2bd66111fc
commit
1525fa31fc
5 changed files with 30 additions and 30 deletions
|
@ -444,6 +444,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer
|
||||||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
|
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
|
||||||
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Location",,"At Home"
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Location",,"At Home"
|
||||||
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Name",,"Dummy Printer On LPT1"
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Port",,"LPT1:"
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Port",,"LPT1:"
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Print Processor",,"winprint"
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Print Processor",,"winprint"
|
||||||
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Printer Driver",,"Dummy Printer Driver"
|
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Dummy Printer On LPT1","Printer Driver",,"Dummy Printer Driver"
|
||||||
|
|
|
@ -235,7 +235,7 @@ ClosePrinter(HANDLE hPrinter)
|
||||||
// Do the RPC call.
|
// Do the RPC call.
|
||||||
RpcTryExcept
|
RpcTryExcept
|
||||||
{
|
{
|
||||||
dwErrorCode = _RpcClosePrinter(pHandle->hPrinter);
|
dwErrorCode = _RpcClosePrinter(&pHandle->hPrinter);
|
||||||
}
|
}
|
||||||
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
|
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ _MakePrinterSubKey(PLOCAL_PRINTER_HANDLE pPrinterHandle, PCWSTR pKeyName, PWSTR*
|
||||||
PWSTR p;
|
PWSTR p;
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if (!pKeyName)
|
if (!pKeyName || !*pKeyName)
|
||||||
return ERROR_INVALID_PARAMETER;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
// Allocate a buffer for the subkey "PrinterName\KeyName".
|
// Allocate a buffer for the subkey "PrinterName\KeyName".
|
||||||
|
@ -204,7 +204,7 @@ _LocalGetPrintServerHandleData(PCWSTR pValueName, PDWORD pType, PBYTE pData, DWO
|
||||||
dwErrorCode = DsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, (PBYTE*)&pInfo);
|
dwErrorCode = DsRoleGetPrimaryDomainInformation(NULL, DsRolePrimaryDomainInfoBasic, (PBYTE*)&pInfo);
|
||||||
if (dwErrorCode != ERROR_SUCCESS)
|
if (dwErrorCode != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
ERR("DsRoleGetPrimaryDomainInformation failed with error %lu!\n", GetLastError());
|
ERR("DsRoleGetPrimaryDomainInformation failed with error %lu!\n", dwErrorCode);
|
||||||
return dwErrorCode;
|
return dwErrorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,9 +216,9 @@ _LocalGetPrintServerHandleData(PCWSTR pValueName, PDWORD pType, PBYTE pData, DWO
|
||||||
else if (wcsicmp(pValueName, SPLREG_DS_PRESENT_FOR_USER) == 0)
|
else if (wcsicmp(pValueName, SPLREG_DS_PRESENT_FOR_USER) == 0)
|
||||||
{
|
{
|
||||||
DWORD cch;
|
DWORD cch;
|
||||||
PWSTR pwszUserSam;
|
|
||||||
PWSTR p;
|
PWSTR p;
|
||||||
WCHAR wszComputerName[MAX_COMPUTERNAME_LENGTH + 1];
|
WCHAR wszComputerName[MAX_COMPUTERNAME_LENGTH + 1];
|
||||||
|
WCHAR wszUserSam[UNLEN + 1];
|
||||||
|
|
||||||
// We want to store a REG_DWORD value.
|
// We want to store a REG_DWORD value.
|
||||||
*pType = REG_DWORD;
|
*pType = REG_DWORD;
|
||||||
|
@ -230,47 +230,30 @@ _LocalGetPrintServerHandleData(PCWSTR pValueName, PDWORD pType, PBYTE pData, DWO
|
||||||
cch = MAX_COMPUTERNAME_LENGTH + 1;
|
cch = MAX_COMPUTERNAME_LENGTH + 1;
|
||||||
if (!GetComputerNameW(wszComputerName, &cch))
|
if (!GetComputerNameW(wszComputerName, &cch))
|
||||||
{
|
{
|
||||||
ERR("GetComputerNameW failed with error %lu!\n", GetLastError());
|
dwErrorCode = GetLastError();
|
||||||
return GetLastError();
|
ERR("GetComputerNameW failed with error %lu!\n", dwErrorCode);
|
||||||
|
return dwErrorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the User Name in the SAM format.
|
// Get the User Name in the SAM format.
|
||||||
// This could either be:
|
// This could either be:
|
||||||
// COMPUTERNAME\User
|
// COMPUTERNAME\User
|
||||||
// DOMAINNAME\User
|
// DOMAINNAME\User
|
||||||
cch = 0;
|
cch = UNLEN + 1;
|
||||||
GetUserNameExW(NameSamCompatible, NULL, &cch);
|
if (!GetUserNameExW(NameSamCompatible, wszUserSam, &cch))
|
||||||
dwErrorCode = GetLastError();
|
|
||||||
if (dwErrorCode != ERROR_MORE_DATA)
|
|
||||||
{
|
|
||||||
ERR("GetUserNameExW failed with error %lu!\n", dwErrorCode);
|
|
||||||
return dwErrorCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
pwszUserSam = DllAllocSplMem(cch * sizeof(WCHAR));
|
|
||||||
if (!pwszUserSam)
|
|
||||||
{
|
|
||||||
dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
|
|
||||||
ERR("DllAllocSplMem failed!\n");
|
|
||||||
return dwErrorCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!GetUserNameExW(NameSamCompatible, pwszUserSam, &cch))
|
|
||||||
{
|
{
|
||||||
dwErrorCode = GetLastError();
|
dwErrorCode = GetLastError();
|
||||||
ERR("GetUserNameExW failed with error %lu!\n", dwErrorCode);
|
ERR("GetUserNameExW failed with error %lu!\n", dwErrorCode);
|
||||||
DllFreeSplMem(pwszUserSam);
|
|
||||||
return dwErrorCode;
|
return dwErrorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terminate the SAM-formatted User Name at the backslash.
|
// Terminate the SAM-formatted User Name at the backslash.
|
||||||
p = wcschr(pwszUserSam, L'\\');
|
p = wcschr(wszUserSam, L'\\');
|
||||||
*p = 0;
|
*p = 0;
|
||||||
|
|
||||||
// Compare it with the Computer Name.
|
// Compare it with the Computer Name.
|
||||||
// If they differ, this User is part of a domain.
|
// If they differ, this User is part of a domain.
|
||||||
*((PDWORD)pData) = (wcscmp(pwszUserSam, wszComputerName) != 0);
|
*((PDWORD)pData) = (wcscmp(wszUserSam, wszComputerName) != 0);
|
||||||
DllFreeSplMem(pwszUserSam);
|
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
else if (wcsicmp(pValueName, SPLREG_REMOTE_FAX) == 0)
|
else if (wcsicmp(pValueName, SPLREG_REMOTE_FAX) == 0)
|
||||||
|
@ -328,6 +311,7 @@ _LocalGetPrintServerHandleData(PCWSTR pValueName, PDWORD pType, PBYTE pData, DWO
|
||||||
DWORD WINAPI
|
DWORD WINAPI
|
||||||
LocalGetPrinterDataEx(HANDLE hPrinter, PCWSTR pKeyName, PCWSTR pValueName, PDWORD pType, PBYTE pData, DWORD nSize, PDWORD pcbNeeded)
|
LocalGetPrinterDataEx(HANDLE hPrinter, PCWSTR pKeyName, PCWSTR pValueName, PDWORD pType, PBYTE pData, DWORD nSize, PDWORD pcbNeeded)
|
||||||
{
|
{
|
||||||
|
BYTE Temp;
|
||||||
DWORD dwErrorCode;
|
DWORD dwErrorCode;
|
||||||
DWORD dwTemp;
|
DWORD dwTemp;
|
||||||
PLOCAL_HANDLE pHandle = (PLOCAL_HANDLE)hPrinter;
|
PLOCAL_HANDLE pHandle = (PLOCAL_HANDLE)hPrinter;
|
||||||
|
@ -338,6 +322,12 @@ LocalGetPrinterDataEx(HANDLE hPrinter, PCWSTR pKeyName, PCWSTR pValueName, PDWOR
|
||||||
if (!pType)
|
if (!pType)
|
||||||
pType = &dwTemp;
|
pType = &dwTemp;
|
||||||
|
|
||||||
|
// pData is later fed to RegQueryValueExW in many cases. When calling it with zero buffer size, RegQueryValueExW returns a
|
||||||
|
// different error code based on whether pData is NULL or something else.
|
||||||
|
// Ensure here that ERROR_MORE_DATA is always returned.
|
||||||
|
if (!pData)
|
||||||
|
pData = &Temp;
|
||||||
|
|
||||||
if (!pHandle)
|
if (!pHandle)
|
||||||
{
|
{
|
||||||
dwErrorCode = ERROR_INVALID_HANDLE;
|
dwErrorCode = ERROR_INVALID_HANDLE;
|
||||||
|
|
|
@ -1106,6 +1106,15 @@ _LocalOpenPrinterHandle(PWSTR pwszPrinterName, PWSTR pwszJobParameter, PHANDLE p
|
||||||
goto Failure;
|
goto Failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a new generic handle.
|
||||||
|
pHandle = DllAllocSplMem(sizeof(LOCAL_HANDLE));
|
||||||
|
if (!pHandle)
|
||||||
|
{
|
||||||
|
dwErrorCode = ERROR_NOT_ENOUGH_MEMORY;
|
||||||
|
ERR("DllAllocSplMem failed!\n");
|
||||||
|
goto Failure;
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new LOCAL_PRINTER_HANDLE.
|
// Create a new LOCAL_PRINTER_HANDLE.
|
||||||
pPrinterHandle = DllAllocSplMem(sizeof(LOCAL_PRINTER_HANDLE));
|
pPrinterHandle = DllAllocSplMem(sizeof(LOCAL_PRINTER_HANDLE));
|
||||||
if (!pPrinterHandle)
|
if (!pPrinterHandle)
|
||||||
|
@ -1192,7 +1201,7 @@ _LocalOpenPrinterHandle(PWSTR pwszPrinterName, PWSTR pwszJobParameter, PHANDLE p
|
||||||
pPrinterHandle->pJob = pJob;
|
pPrinterHandle->pJob = pJob;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make the generic handle a Port handle.
|
// Make the generic handle a Printer handle.
|
||||||
pHandle->HandleType = HandleType_Printer;
|
pHandle->HandleType = HandleType_Printer;
|
||||||
pHandle->pSpecificHandle = pPrinterHandle;
|
pHandle->pSpecificHandle = pPrinterHandle;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ typedef struct _SPLREG_VALUE
|
||||||
SPLREG_VALUE, *PSPLREG_VALUE;
|
SPLREG_VALUE, *PSPLREG_VALUE;
|
||||||
|
|
||||||
SPLREG_VALUE SplRegValues[] = {
|
SPLREG_VALUE SplRegValues[] = {
|
||||||
#if 0
|
|
||||||
{ "DefaultSpoolDirectory", L"DefaultSpoolDirectory", REG_SZ, 0xFFFFFFFF, TRUE },
|
{ "DefaultSpoolDirectory", L"DefaultSpoolDirectory", REG_SZ, 0xFFFFFFFF, TRUE },
|
||||||
{ "PortThreadPriorityDefault", L"PortThreadPriorityDefault", REG_NONE, 4, FALSE },
|
{ "PortThreadPriorityDefault", L"PortThreadPriorityDefault", REG_NONE, 4, FALSE },
|
||||||
{ "PortThreadPriority", L"PortThreadPriority", REG_DWORD, 4, TRUE },
|
{ "PortThreadPriority", L"PortThreadPriority", REG_DWORD, 4, TRUE },
|
||||||
|
@ -50,6 +49,7 @@ SPLREG_VALUE SplRegValues[] = {
|
||||||
{ "Architecture", L"Architecture", REG_NONE, 0xFFFFFFFF, FALSE },
|
{ "Architecture", L"Architecture", REG_NONE, 0xFFFFFFFF, FALSE },
|
||||||
{ "OSVersion", L"OSVersion", REG_NONE, sizeof(OSVERSIONINFOA), FALSE },
|
{ "OSVersion", L"OSVersion", REG_NONE, sizeof(OSVERSIONINFOA), FALSE },
|
||||||
{ "OSVersionEx", L"OSVersionEx", REG_NONE, sizeof(OSVERSIONINFOEXA), FALSE },
|
{ "OSVersionEx", L"OSVersionEx", REG_NONE, sizeof(OSVERSIONINFOEXA), FALSE },
|
||||||
|
#if 0
|
||||||
{ "DsPresent", L"DsPresent", REG_DWORD, 4, FALSE },
|
{ "DsPresent", L"DsPresent", REG_DWORD, 4, FALSE },
|
||||||
{ "DsPresentForUser", L"DsPresentForUser", REG_DWORD, 4, FALSE },
|
{ "DsPresentForUser", L"DsPresentForUser", REG_DWORD, 4, FALSE },
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue