96 return _wcsicmp(
A->pwszPrinterName,
B->pwszPrinterName);
110 DWORD cchPrinterName;
122 TRACE(
"InitializePrinterList()\n");
128 dwErrorCode = (
DWORD)
RegQueryInfoKeyW(
hPrintersKey,
NULL,
NULL,
NULL, &dwSubKeys,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
131 ERR(
"RegQueryInfoKeyW failed with status %lu!\n", dwErrorCode);
136 for (
i = 0;
i < dwSubKeys;
i++)
166 if (pwszPrintProcessor)
169 pwszPrintProcessor =
NULL;
173 cchPrinterName =
_countof(wszPrinterName);
182 ERR(
"RegEnumKeyExW failed for iteration %lu with status %lu!\n",
i, dwErrorCode);
190 ERR(
"RegOpenKeyExW failed for Printer \"%S\" with status %lu!\n", wszPrinterName, dwErrorCode);
196 if (!pwszPrintProcessor)
201 if (!pPrintProcessor)
203 ERR(
"Invalid Print Processor \"%S\" for Printer \"%S\"!\n", pwszPrintProcessor, wszPrinterName);
216 ERR(
"Invalid Port \"%S\" for Printer \"%S\"!\n", pwszPort, wszPrinterName);
225 ERR(
"DllAllocSplMem failed!\n");
231 pPrinter->
pPort = pPort;
257 ERR(
"Invalid default datatype \"%S\" for Printer \"%S\"!\n", pPrinter->
pwszDefaultDatatype, wszPrinterName);
265 ERR(
"Couldn't query the size of the DevMode for Printer \"%S\", status is %lu, cbData is %lu!\n", wszPrinterName, dwErrorCode, cbData);
274 ERR(
"DllAllocSplMem failed!\n");
282 ERR(
"Couldn't query a DevMode for Printer \"%S\", status is %lu, cbData is %lu!\n", wszPrinterName, dwErrorCode, cbData);
287 cbData =
sizeof(
DWORD);
291 ERR(
"Couldn't query Attributes for Printer \"%S\", status is %lu!\n", wszPrinterName, dwErrorCode);
296 cbData =
sizeof(
DWORD);
300 ERR(
"Couldn't query Status for Printer \"%S\", status is %lu!\n", wszPrinterName, dwErrorCode);
342 if (pwszPrintProcessor)
354 DWORD cchMachineName = 0;
423 pwszComputerName[0] =
L'\\';
424 pwszComputerName[1] =
L'\\';
435 *pcchComputerName += 2;
438 pComputerName = &pwszComputerName[2];
451 pwszComputerName[(*pcchComputerName)++] =
L'\\';
452 pwszComputerName[*pcchComputerName] = 0;
469 *pwszComputerName = 0;
470 *pcchComputerName = 0;
493 for (
i = 0;
i < 3;
i++)
528 (*ppPrinterInfo)->dwGetVersion =
GetVersion();
529 (*ppPrinterInfo)->Status = pPrinter->
dwStatus;
532 (*ppPrinterInfo)->fFreeBuild = 1;
558 const WCHAR wszComma[] =
L",";
562 size_t cbDescription;
563 PWSTR p, Allocation1, Allocation2;
584 pwszStrings[0] = Allocation1;
593 pwszStrings[2] = Allocation2;
616 size_t cbPrinterName;
623 size_t cbPrintProcessor;
628 FIXME(
"LocalGetPrinterLevel2\n");
646 *
pcbNeeded +=
sizeof(
PRINTER_INFO_2W) + cbDevMode + cbPrinterName + cbShareName + cbPortName + cbDriverName + cbComment + cbLocation + cbSepFile + cbPrintProcessor + cbDatatype + cbParameters;
655 (*ppPrinterInfo)->Status = pPrinter->
dwStatus;
658 *ppPrinterInfoEnd -= cbDevMode;
660 (*ppPrinterInfo)->pDevMode = (
PDEVMODEW)(*ppPrinterInfoEnd);
714 FIXME(
"Return a valid security descriptor for PRINTER_INFO_3\n");
728 size_t cbPrinterName;
742 (*ppPrinterInfo)->pServerName =
NULL;
762 size_t cbPrinterName;
810 (*ppPrinterInfo)->dwStatus = pPrinter->
dwStatus;
825 FIXME(
"No Directory Support, returning DSPRINT_UNPUBLISH for PRINTER_INFO_7 all the time!\n");
829 (*ppPrinterInfo)->pszObjectGUID =
NULL;
850 *ppPrinterInfoEnd -= cbDevMode;
852 (*ppPrinterInfo)->pDevMode = (
PDEVMODEW)(*ppPrinterInfoEnd);
872 FIXME(
"Per-user settings are not yet implemented, returning the global DevMode for PRINTER_INFO_9!\n");
875 *ppPrinterInfoEnd -= cbDevMode;
877 (*ppPrinterInfo)->pDevMode = (
PDEVMODEW)(*ppPrinterInfoEnd);
886 DWORD cchComputerName = 0;
888 PBYTE pPrinterInfoEnd;
893 FIXME(
"LocalEnumPrinters(%lu, %S, %lu, %p, %lu, %p, %p)\n",
Flags,
Name,
Level, pPrinterEnum, cbBuf,
pcbNeeded, pcReturned);
948 FIXME(
"Printer Sharing is not supported yet, returning no printers!\n");
963 pPrinterInfoEnd = &pPrinterEnum[*
pcbNeeded];
989 const WCHAR wszDummyComputerName[] =
L"";
996 TRACE(
"LocalGetPrinter(%p, %lu, %p, %lu, %p)\n", hPrinter,
Level, pPrinter, cbBuf,
pcbNeeded);
1006 if (pHandle->
HandleType != HandleType_Printer)
1068 bReturnValue = ((
LPMONITOREX)pPrintMonitor->
pMonitor)->Monitor.pfnOpenPort(pwszPortName, &hPort);
1082 ERR(
"DllAllocSplMem failed!\n");
1091 ERR(
"DllAllocSplMem failed!\n");
1095 pPortHandle->
hPort = hPort;
1096 pPortHandle->
pPort = pPort;
1103 *phPrinter = (
HANDLE)pHandle;
1141 ERR(
"DllAllocSplMem failed!\n");
1147 if (!pPrinterHandle)
1150 ERR(
"DllAllocSplMem failed!\n");
1155 pPrinterHandle->
pPrinter = pPrinter;
1176 if (pDefault && pDefault->
pDevMode)
1182 if (pwszJobParameter)
1185 if (
wcsncmp(pwszJobParameter,
L"Job ", 4) != 0)
1192 pwszJobParameter += 4;
1195 while (*pwszJobParameter ==
' ')
1209 if (!pJob || pJob->
pPrinter != pPrinter)
1222 ERR(
"CreateFileW failed with error %lu for \"%S\"!\n", dwErrorCode, wszFullPath);
1228 pPrinterHandle->
pJob = pJob;
1236 *phPrinter = (
HANDLE)pHandle;
1266 ERR(
"DllAllocSplMem failed!\n");
1271 pHandle->
HandleType = HandleType_PrintServer;
1275 *phPrinter = (
HANDLE)pHandle;
1294 if (
wcsncmp(pwszParameter,
L"Monitor ", 8) == 0)
1305 ERR(
"OpenXcvHandle failed on Monitor name! %lu\n", dwErrorCode);
1309 else if (
wcsncmp(pwszParameter,
L"Port ", 5) == 0)
1320 ERR(
"OpenXcvHandle failed on Port name! %lu\n", dwErrorCode);
1329 ERR(
"OpenXcvHandle failed on bad name! %lu\n", dwErrorCode);
1343 ERR(
"XcvOpenPort function failed! %lu\n", dwErrorCode);
1352 ERR(
"DllAllocSplMem failed!\n");
1361 ERR(
"DllAllocSplMem failed!\n");
1373 *phPrinter = (
HANDLE)pHandle;
1374 ERR(
"OpenXcvHandle Success! %p\n", pXcvHandle);
1400 DWORD cchComputerName;
1401 DWORD cchFirstParameter;
1405 PWSTR pwszSecondParameter;
1408 TRACE(
"LocalOpenPrinter(%S, %p, %p)\n", lpPrinterName, phPrinter, pDefault);
1422 if (lpPrinterName[0] ==
L'\\' && lpPrinterName[1] ==
L'\\')
1429 while (*
p !=
L'\0' && *
p !=
L'\\')
1433 cchComputerName =
_countof(wszComputerName);
1437 ERR(
"GetComputerNameW failed with error %lu!\n", dwErrorCode);
1444 if (
p - lpPrinterName != cchComputerName ||
_wcsnicmp(lpPrinterName, wszComputerName, cchComputerName) != 0)
1460 lpPrinterName =
p + 1;
1464 pwszSecondParameter =
wcschr(lpPrinterName,
L',');
1465 if (pwszSecondParameter)
1466 cchFirstParameter = pwszSecondParameter -
p;
1468 cchFirstParameter =
wcslen(lpPrinterName);
1471 if (!cchFirstParameter && !pwszSecondParameter)
1478 if (cchFirstParameter)
1483 CopyMemory(pwszFirstParameter, lpPrinterName, cchFirstParameter *
sizeof(
WCHAR));
1487 if (pwszSecondParameter)
1490 ++pwszSecondParameter;
1493 while (*pwszSecondParameter ==
L' ')
1494 ++pwszSecondParameter;
1498 if (pwszFirstParameter && pwszSecondParameter &&
wcsncmp(pwszSecondParameter,
L"Port", 4) == 0)
1505 else if (!pwszFirstParameter && pwszSecondParameter &&
wcsncmp(pwszSecondParameter,
L"Xcv", 3) == 0)
1512 FIXME(
"OpenXcvHandle : %S\n",pwszSecondParameter);
1526 if (pwszFirstParameter)
1542 TRACE(
"LocalReadPrinter(%p, %p, %lu, %p)\n", hPrinter, pBuf, cbBuf, pNoBytesRead);
1575 if (pHandle->
HandleType != HandleType_Printer)
1595 ERR(
"ReadFile failed with error %lu!\n", dwErrorCode);
1611 DWORD dwReturnValue = 0;
1618 TRACE(
"LocalStartDocPrinter(%p, %lu, %p)\n", hPrinter,
Level, pDocInfo);
1653 dwReturnValue = pJob->
dwJobID;
1658 if (pHandle->
HandleType != HandleType_Printer)
1673 if (pPrinterHandle->
pJob)
1694 dwErrorCode =
CreateJob(pPrinterHandle);
1720 return dwReturnValue;
1730 TRACE(
"LocalStartPagePrinter(%p)\n", hPrinter);
1733 if (!pHandle || pHandle->
HandleType != HandleType_Printer)
1766 TRACE(
"LocalWritePrinter(%p, %p, %lu, %p)\n", hPrinter, pBuf, cbBuf, pcWritten);
1799 if (pHandle->
HandleType != HandleType_Printer)
1818 if (!
WriteFile(SOME_SPOOL_FILE_HANDLE, pBuf, cbBuf, pcWritten,
NULL))
1839 TRACE(
"LocalEndPagePrinter(%p)\n", hPrinter);
1842 if (!pHandle || pHandle->
HandleType != HandleType_Printer)
1865 TRACE(
"LocalEndDocPrinter(%p)\n", hPrinter);
1898 if (pHandle->
HandleType != HandleType_Printer)
1928 FIXME(
"LocalClosePortHandle\n");
1939 FIXME(
"LocalClosePrinterHandle\n");
1941 if (pPrinterHandle->
pJob)
1964 FIXME(
"LocalClosePrinter(%p)\n", hPrinter);
1976 else if (pHandle->
HandleType == HandleType_Printer)
1980 else if (pHandle->
HandleType == HandleType_PrintServer)
1984 else if (pHandle->
HandleType == HandleType_Xcv)
1988 FIXME(
"LocalClosePrinter 1\n");
1992 FIXME(
"LocalClosePrinter 2\n");
1994 FIXME(
"LocalClosePrinter 3\n");
#define RegCloseKey(hKey)
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define ERROR_INVALID_PARAMETER
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
#define ERROR_INVALID_HANDLE
#define ERROR_INVALID_NAME
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
static const WCHAR Cleanup[]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static const WCHAR wszEmpty[]
struct _SECURITY_DESCRIPTOR * PSECURITY_DESCRIPTOR
struct _SECURITY_DESCRIPTOR SECURITY_DESCRIPTOR
DWORD WINAPI CreateJob(PLOCAL_PRINTER_HANDLE pPrinterHandle)
void InitializePrinterJobList(PLOCAL_PRINTER pPrinter)
DWORD GetJobFilePath(PCWSTR pwszExtension, DWORD dwJobID, PWSTR pwszOutput)
void FreeJob(PLOCAL_JOB pJob)
PLOCAL_PRINT_MONITOR FindPrintMonitor(PCWSTR pwszName)
static void _LocalClosePrinterHandle(PLOCAL_PRINTER_HANDLE pPrinterHandle)
static const DWORD dwTransmissionRetryTimeout
static DWORD _LocalOpenPortHandle(PWSTR pwszPortName, PHANDLE phPrinter)
static void _LocalGetPrinterLevel1(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_1W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
static DWORD _DumpLevel1PrintProviderInformation(PBYTE pPrinterEnum, DWORD cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
BOOL WINAPI LocalEnumPrinters(DWORD Flags, LPWSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned)
DWORD WINAPI LocalPrinterMessageBox(HANDLE hPrinter, DWORD Error, HWND hWnd, LPWSTR pText, LPWSTR pCaption, DWORD dwType)
void(* PLocalGetPrinterLevelFunc)(PLOCAL_PRINTER, PVOID, PBYTE *, PDWORD, DWORD, PCWSTR)
static const DWORD dwDeviceNotSelectedTimeout
static DWORD dwPrinterInfo1Offsets[]
static DWORD _LocalOpenPrinterHandle(PWSTR pwszPrinterName, PWSTR pwszJobParameter, PHANDLE phPrinter, PPRINTER_DEFAULTSW pDefault)
BOOL WINAPI LocalWritePrinter(HANDLE hPrinter, PVOID pBuf, DWORD cbBuf, PDWORD pcWritten)
static DWORD dwPrinterInfo5Offsets[]
static void _LocalCloseXcvHandle(PLOCAL_XCV_HANDLE pXcvHandle)
static DWORD _LocalOpenPrintServerHandle(PHANDLE phPrinter)
static int WINAPI _PrinterListCompareRoutine(PVOID FirstStruct, PVOID SecondStruct)
static void _LocalGetPrinterLevel0(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_STRESS *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
static void _LocalGetPrinterLevel8(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_8W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
BOOL WINAPI LocalEndPagePrinter(HANDLE hPrinter)
static DWORD dwPrinterInfo0Offsets[]
static void _LocalGetPrinterLevel6(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_6 *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
BOOL WINAPI LocalStartPagePrinter(HANDLE hPrinter)
static const PLocalGetPrinterLevelFunc pfnGetPrinterLevels[]
BOOL WINAPI LocalReadPrinter(HANDLE hPrinter, PVOID pBuf, DWORD cbBuf, PDWORD pNoBytesRead)
static void _LocalClosePortHandle(PLOCAL_PORT_HANDLE pPortHandle)
static void _LocalGetPrinterLevel7(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_7W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
VOID BroadcastChange(PLOCAL_HANDLE pHandle)
static DWORD _LocalOpenXcvHandle(PWSTR pwszParameter, PHANDLE phPrinter)
BOOL WINAPI LocalClosePrinter(HANDLE hPrinter)
static void _LocalGetPrinterLevel5(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_5W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
BOOL WINAPI LocalOpenPrinter(PWSTR lpPrinterName, HANDLE *phPrinter, PPRINTER_DEFAULTSW pDefault)
static DWORD dwPrinterInfo2Offsets[]
static DWORD dwPrinterInfo4Offsets[]
BOOL WINAPI LocalGetPrinter(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
DWORD WINAPI LocalStartDocPrinter(HANDLE hPrinter, DWORD Level, PBYTE pDocInfo)
static void _LocalGetPrinterLevel3(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_3 *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
static void _LocalGetPrinterLevel4(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_4W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
static void _LocalGetPrinterLevel2(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_2W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
static DWORD _LocalEnumPrintersCheckName(DWORD Flags, PCWSTR Name, PWSTR pwszComputerName, PDWORD pcchComputerName)
static void _LocalGetPrinterLevel9(PLOCAL_PRINTER pPrinter, PPRINTER_INFO_9W *ppPrinterInfo, PBYTE *ppPrinterInfoEnd, PDWORD pcbNeeded, DWORD cchComputerName, PCWSTR wszComputerName)
BOOL WINAPI LocalEndDocPrinter(HANDLE hPrinter)
struct _MONITOR2 * PMONITOR2
struct _MONITOREX * LPMONITOREX
DWORD WINAPI GetVersion()
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
PVOID LookupElementSkiplist(PSKIPLIST Skiplist, PVOID Element, PDWORD ElementIndex)
BOOL InsertElementSkiplist(PSKIPLIST Skiplist, PVOID Element)
void InitializeSkiplist(PSKIPLIST Skiplist, PSKIPLIST_ALLOCATE_ROUTINE AllocateRoutine, PSKIPLIST_COMPARE_ROUTINE CompareRoutine, PSKIPLIST_FREE_ROUTINE FreeRoutine)
void(WINAPI * PSKIPLIST_FREE_ROUTINE)(PVOID)
struct _PRINTER_INFO_STRESS PRINTER_INFO_STRESS
STRSAFEAPI StringCbCopyExW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcbRemaining, STRSAFE_DWORD dwFlags)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
enum _LOCAL_HANDLE::@5125 HandleType
PLOCAL_PRINT_PROCESSOR pPrintProcessor
PLOCAL_PRINT_MONITOR pPrintMonitor
PLOCAL_JOB pNextJobToProcess
PWSTR pwszDefaultDatatype
PLOCAL_PRINT_PROCESSOR pPrintProcessor
PDEVMODEW pDefaultDevMode
PLOCAL_PRINT_MONITOR pPrintMonitor
struct _SKIPLIST_NODE * Next[SKIPLIST_LEVELS]
DWORD dwNumberOfProcessors
WORD wProcessorArchitecture
#define FIELD_OFFSET(t, f)
BOOL WINAPI DllFreeSplMem(PVOID pMem)
PVOID WINAPI DllAllocSplMem(DWORD dwBytes)
BOOL WINAPI DllFreeSplStr(PWSTR pwszString)
PWSTR WINAPI AllocSplStr(PCWSTR pwszInput)
BOOL WINAPI ReallocSplStr(PWSTR *ppwszString, PCWSTR pwszInput)
PCWSTR wszPrintProviderInfo[3]
PLOCAL_PORT FindPort(PCWSTR pwszName)
struct _LOCAL_PRINTER * PLOCAL_PRINTER
struct _LOCAL_PORT_HANDLE * PLOCAL_PORT_HANDLE
BOOL InitializePrinterList(void)
PDEVMODEW DuplicateDevMode(PDEVMODEW pInput)
PLOCAL_PRINT_PROCESSOR FindPrintProcessor(PCWSTR pwszName)
struct _LOCAL_PRINTER_HANDLE * PLOCAL_PRINTER_HANDLE
BOOL FindDatatype(const PLOCAL_PRINT_PROCESSOR pPrintProcessor, PCWSTR pwszDatatype)
PWSTR AllocAndRegQueryWSZ(HKEY hKey, PCWSTR pwszValueName)
#define IS_VALID_JOB_ID(ID)
struct _LOCAL_HANDLE * PLOCAL_HANDLE
DWORD WINAPI GetLastError(void)
#define MAX_COMPUTERNAME_LENGTH
_In_ DWORD _Out_ PDWORD pcbNeeded
#define ERROR_INVALID_DATATYPE
#define ERROR_INVALID_LEVEL
#define ERROR_INVALID_PRINTER_NAME
#define ERROR_SPL_NO_STARTDOC
struct _devicemodeW * PDEVMODEW
struct _PRINTER_INFO_8W PRINTER_INFO_8W
#define PRINTER_ENUM_SHARED
struct _PRINTER_INFO_5W PRINTER_INFO_5W
#define PRINTER_ENUM_LOCAL
struct _PRINTER_INFO_3 PRINTER_INFO_3
struct _PRINTER_INFO_1W PRINTER_INFO_1W
struct _PRINTER_INFO_2W PRINTER_INFO_2W
#define PRINTER_ENUM_NETWORK
struct _PRINTER_INFO_1W * PPRINTER_INFO_1W
struct _PRINTER_INFO_9W PRINTER_INFO_9W
struct _PRINTER_INFO_4W PRINTER_INFO_4W
struct _PRINTER_INFO_6 PRINTER_INFO_6
#define PRINTER_ENUM_ICON8
#define PRINTER_ENUM_NAME
#define PRINTER_ENUM_REMOTE
#define PRINTER_ENUM_CONNECTIONS
struct _DOC_INFO_1W * PDOC_INFO_1W
#define DSPRINT_UNPUBLISH
struct _PRINTER_INFO_7W PRINTER_INFO_7W
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
_Must_inspect_result_ _In_ ULONG Flags
_IRQL_requires_same_ _In_ PVOID _In_ PVOID SecondStruct
_IRQL_requires_same_ _In_ PVOID FirstStruct