mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1234 lines
20 KiB
1234 lines
20 KiB
/*++
|
|
|
|
Copyright (c) 1990-1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
local.h
|
|
|
|
Abstract:
|
|
|
|
Header file for Remote Print Providor
|
|
|
|
Author:
|
|
|
|
Dave Snipp (DaveSn) 15-Mar-1991
|
|
|
|
Revision History:
|
|
|
|
16-Jun-1992 JohnRo net print vs. UNICODE.
|
|
|
|
July 12 1994 Matthew Felton (MattFe) Caching
|
|
|
|
--*/
|
|
|
|
#include <dosprint.h>
|
|
|
|
// ID in the PRINTMAN.HLP file for the Browse Network dialog.
|
|
// This must not clash with IDs used in other places.
|
|
|
|
#define ID_HELP_LM_BROWSE_NETWORK_PRINTER 4000
|
|
#define OVERWRITE_EXISTING_FILE FALSE
|
|
#define CALL_LM_OPEN TRUE
|
|
#define DO_NOT_CALL_LM_OPEN FALSE
|
|
#define GET_SECURITY_DESCRIPTOR 3
|
|
#define DO_NOT_USE_SCRATCH_DIR FALSE
|
|
#define STRINGS_ARE_EQUAL 0
|
|
|
|
//
|
|
// These define the values we fake out for a GetPrinter level 5 and EnumPrinter
|
|
// level 5 for the port Timeouts.
|
|
//
|
|
enum
|
|
{
|
|
kDefaultDnsTimeout = 15000,
|
|
kDefaultTxTimeout = 45000
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
kCheckPnPPolicy,
|
|
kDownloadDriver,
|
|
kDontDownloadDriver
|
|
|
|
} EDriverDownload;
|
|
|
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
|
|
|
typedef int (FAR WINAPI *INT_FARPROC)();
|
|
|
|
extern HANDLE hInst;
|
|
extern CRITICAL_SECTION SpoolerSection;
|
|
|
|
extern WCHAR *szRegistryPath;
|
|
extern WCHAR *szRegistryPortNames;
|
|
extern PWCHAR pszRaw;
|
|
|
|
extern HANDLE hNetApi;
|
|
extern NET_API_STATUS (*pfnNetServerEnum)();
|
|
extern NET_API_STATUS (*pfnNetWkstaUserGetInfo)();
|
|
extern NET_API_STATUS (*pfnNetApiBufferFree)();
|
|
|
|
extern WCHAR szPrintProvidorName[];
|
|
extern WCHAR szPrintProvidorDescription[];
|
|
extern WCHAR szPrintProvidorComment[];
|
|
extern WCHAR *szLoggedOnDomain;
|
|
extern WCHAR *szRegistryConnections;
|
|
extern WCHAR szRegistryWin32Root[];
|
|
extern WCHAR szOldLocationOfServersKey[];
|
|
extern PWCHAR szWin32SplDirectory;
|
|
|
|
extern PWINIPORT pIniFirstPort;
|
|
extern PWSPOOL pFirstWSpool;
|
|
|
|
extern WCHAR szMachineName[];
|
|
extern PWCHAR pszMonitorName;
|
|
extern PWCHAR gpSystemDir;
|
|
extern PWCHAR gpWin32SplDir;
|
|
|
|
extern LPWSTR *gppszOtherNames; // Contains szMachineName, DNS name, and all other machine name forms
|
|
extern DWORD gcOtherNames;
|
|
|
|
extern LPCWSTR pszCnvrtdmToken;
|
|
extern LPCWSTR pszDrvConvert;
|
|
|
|
extern BOOL gbMachineInDomain;
|
|
|
|
#define IDS_LANMAN_PRINT_SHARE 100
|
|
#define IDS_NOTHING_TO_CONFIGURE 101
|
|
#define IDS_WINDOWS_NT_REMOTE_PRINTERS 102
|
|
#define IDS_MICROSOFT_WINDOWS_NETWORK 103
|
|
#define IDS_REMOTE_PRINTERS 104
|
|
#define IDS_MONITOR_NAME 105
|
|
#define IDS_PORT_NAME 106
|
|
|
|
#define MSG_ERROR MB_OK | MB_ICONSTOP
|
|
#define MSG_YESNO MB_YESNO | MB_ICONQUESTION
|
|
#define MSG_INFORMATION MB_OK | MB_ICONINFORMATION
|
|
|
|
#define MAX_PRINTER_INFO0 2*MAX_PATH*sizeof(WCHAR) + sizeof( PRINTER_INFO_STRESSW)
|
|
|
|
|
|
BOOL
|
|
MyName(
|
|
LPWSTR pName
|
|
);
|
|
|
|
BOOL
|
|
MyUNCName(
|
|
LPWSTR pName
|
|
);
|
|
|
|
BOOL
|
|
Initialize(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
SplInSem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
SplOutSem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
EnterSplSem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
LeaveSplSem(
|
|
VOID
|
|
);
|
|
|
|
PWINIPORT
|
|
FindPort(
|
|
LPWSTR pName,
|
|
PWINIPORT pFirstPort
|
|
);
|
|
|
|
BOOL
|
|
LMSetJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD Command
|
|
);
|
|
|
|
BOOL
|
|
LMGetJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LMEnumJobs(
|
|
HANDLE hPrinter,
|
|
DWORD FirstJob,
|
|
DWORD NoJobs,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LMOpenPrinter(
|
|
LPWSTR pPrinterName,
|
|
LPHANDLE phPrinter,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
BOOL
|
|
LMSetPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
DWORD Command
|
|
);
|
|
|
|
BOOL
|
|
LMGetPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LMEnumPorts(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pPorts,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
DWORD
|
|
LMStartDocPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pDocInfo
|
|
);
|
|
|
|
BOOL
|
|
LMStartPagePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LMWritePrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pcWritten
|
|
);
|
|
|
|
BOOL
|
|
LMEndPagePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LMAbortPrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LMReadPrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pNoBytesRead
|
|
);
|
|
|
|
BOOL
|
|
LMEndDocPrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LMAddJob(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pData,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LMScheduleJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId
|
|
);
|
|
|
|
DWORD
|
|
LMGetPrinterData(
|
|
HANDLE hPrinter,
|
|
LPTSTR pValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD nSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
DWORD
|
|
LMSetPrinterData(
|
|
HANDLE hPrinter,
|
|
LPTSTR pValueName,
|
|
DWORD Type,
|
|
LPBYTE pData,
|
|
DWORD cbData
|
|
);
|
|
|
|
BOOL
|
|
LMClosePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
DWORD
|
|
LMWaitForPrinterChange(
|
|
HANDLE hPrinter,
|
|
DWORD Flags
|
|
);
|
|
|
|
VOID
|
|
LMSetSpoolChange(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
LMFindFirstPrinterChangeNotification(
|
|
HANDLE hPrinter,
|
|
DWORD fdwFlags,
|
|
DWORD fdwOptions,
|
|
HANDLE hPrinterLocal,
|
|
PDWORD pfdwStatus);
|
|
|
|
BOOL
|
|
LMFindClosePrinterChangeNotification(
|
|
HANDLE hPrinter);
|
|
|
|
VOID
|
|
LMSetSpoolerChange(
|
|
PWSPOOL pSpool);
|
|
|
|
BOOL
|
|
LMDeletePort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
BOOL
|
|
LMEnumMonitors(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pMonitors,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
PWINIPORT
|
|
CreatePortEntry(
|
|
LPWSTR pPortName,
|
|
PPWINIPORT ppFirstPort
|
|
);
|
|
|
|
BOOL
|
|
DeletePortEntry(
|
|
LPWSTR pPortName,
|
|
PPWINIPORT ppFirstPort
|
|
);
|
|
|
|
DWORD
|
|
CreateRegistryEntry(
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
HKEY
|
|
GetClientUserHandle(
|
|
IN REGSAM samDesired
|
|
);
|
|
|
|
|
|
DWORD
|
|
IsOlderThan(
|
|
DWORD i,
|
|
DWORD j
|
|
);
|
|
|
|
|
|
DWORD
|
|
AddEntrytoLMCache(
|
|
LPWSTR pServerName,
|
|
LPWSTR pShareName
|
|
);
|
|
|
|
|
|
DWORD
|
|
FindEntryinLMCache(
|
|
LPWSTR pServerName,
|
|
LPWSTR pShareName
|
|
);
|
|
|
|
|
|
VOID
|
|
DeleteEntryfromLMCache(
|
|
LPWSTR pServerName,
|
|
LPWSTR pShareName
|
|
);
|
|
|
|
|
|
DWORD
|
|
FindEntryinWin32LMCache(
|
|
LPWSTR pServerName
|
|
);
|
|
|
|
|
|
VOID
|
|
DeleteEntryfromWin32LMCache(
|
|
LPWSTR pServerName
|
|
);
|
|
|
|
|
|
DWORD
|
|
AddEntrytoWin32LMCache(
|
|
LPWSTR pServerName
|
|
);
|
|
|
|
HANDLE
|
|
AddPrinterConnectionToCache(
|
|
LPWSTR pName,
|
|
HANDLE hPrinter,
|
|
LPDRIVER_INFO_2W pDriverInfo
|
|
);
|
|
|
|
VOID
|
|
RefreshFormsCache(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
VOID
|
|
RefreshDriverDataCache(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
VOID
|
|
RefreshPrinterDataCache(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
|
|
DWORD
|
|
EnumerateAndCopyKey(
|
|
PWSPOOL pSpool,
|
|
LPWSTR pKeyName
|
|
);
|
|
|
|
|
|
BOOL
|
|
CacheGetForm(
|
|
HANDLE hPrinter,
|
|
LPWSTR pFormName,
|
|
DWORD Level,
|
|
LPBYTE pForm,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
RemoteGetForm(
|
|
HANDLE hPrinter,
|
|
LPWSTR pFormName,
|
|
DWORD Level,
|
|
LPBYTE pForm,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
|
|
BOOL
|
|
CacheEnumForms(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pForm,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
RemoteEnumForms(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pForm,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
|
|
DWORD
|
|
CacheGetPrinterData(
|
|
HANDLE hPrinter,
|
|
LPWSTR pValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD nSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
|
|
DWORD
|
|
CacheGetPrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPCWSTR pValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD nSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
DWORD
|
|
RemoteGetPrinterData(
|
|
HANDLE hPrinter,
|
|
LPWSTR pValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD nSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
|
|
DWORD
|
|
RemoteGetPrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPCWSTR pValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD nSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
DWORD
|
|
RemoteEnumPrinterData(
|
|
HANDLE hPrinter,
|
|
DWORD dwIndex,
|
|
LPWSTR pValueName,
|
|
DWORD cbValueName,
|
|
LPDWORD pcbValueName,
|
|
LPDWORD pType,
|
|
LPBYTE pData,
|
|
DWORD cbData,
|
|
LPDWORD pcbData
|
|
);
|
|
|
|
DWORD
|
|
RemoteEnumPrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPBYTE pEnumValues,
|
|
DWORD cbEnumValues,
|
|
LPDWORD pcbEnumValues,
|
|
LPDWORD pnEnumValues
|
|
);
|
|
|
|
DWORD
|
|
CacheEnumPrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPBYTE pEnumValues,
|
|
DWORD cbEnumValues,
|
|
LPDWORD pcbEnumValues,
|
|
LPDWORD pnEnumValues
|
|
);
|
|
|
|
DWORD
|
|
RemoteEnumPrinterKey(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPWSTR pSubkey,
|
|
DWORD cbSubkey,
|
|
LPDWORD pcbSubkey
|
|
);
|
|
|
|
DWORD
|
|
CacheEnumPrinterKey(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPWSTR pSubkey,
|
|
DWORD cbSubkey,
|
|
LPDWORD pcbSubkey
|
|
);
|
|
|
|
DWORD
|
|
RemoteDeletePrinterData(
|
|
HANDLE hPrinter,
|
|
LPWSTR pValueName
|
|
);
|
|
|
|
DWORD
|
|
RemoteDeletePrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName,
|
|
LPCWSTR pValueName
|
|
);
|
|
|
|
DWORD
|
|
RemoteDeletePrinterKey(
|
|
HANDLE hPrinter,
|
|
LPCWSTR pKeyName
|
|
);
|
|
|
|
DWORD
|
|
RemoteSetPrinterDataEx(
|
|
HANDLE hPrinter,
|
|
LPCTSTR pKeyName,
|
|
LPCTSTR pValueName,
|
|
DWORD Type,
|
|
LPBYTE pData,
|
|
DWORD cbData
|
|
);
|
|
|
|
BOOL
|
|
RemoteXcvData(
|
|
HANDLE hXcv,
|
|
PCWSTR pszDataName,
|
|
PBYTE pInputData,
|
|
DWORD cbInputData,
|
|
PBYTE pOutputData,
|
|
DWORD cbOutputData,
|
|
PDWORD pcbOutputNeeded,
|
|
PDWORD pdwStatus
|
|
);
|
|
|
|
LPWSTR
|
|
RemoveBackslashesForRegistryKey(
|
|
LPWSTR pSource,
|
|
const LPWSTR pScratch
|
|
);
|
|
|
|
LPBYTE
|
|
CopyPrinterNameToPrinterInfo(
|
|
LPWSTR pServerName,
|
|
LPWSTR pPrinterName,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
LPBYTE pEnd
|
|
);
|
|
|
|
BOOL
|
|
GetPrintSystemVersion(
|
|
);
|
|
|
|
BOOL Win32IsGoingToFile(
|
|
HANDLE hPrinter,
|
|
LPWSTR pOutputFile
|
|
);
|
|
|
|
LPWSTR
|
|
FormatPrinterForRegistryKey(
|
|
LPWSTR PrinterName,
|
|
LPWSTR KeyName);
|
|
|
|
LPWSTR
|
|
FormatRegistryKeyForPrinter(
|
|
LPWSTR Keyname,
|
|
LPWSTR PrinterName);
|
|
|
|
DWORD
|
|
InitializePortNames(
|
|
);
|
|
|
|
BOOL
|
|
WIN32FindFirstPrinterChangeNotification(
|
|
HANDLE hPrinter,
|
|
DWORD fdwFlags,
|
|
DWORD fdwOptions,
|
|
HANDLE hNotify,
|
|
PDWORD pfdwStatus,
|
|
PVOID pvReserved0,
|
|
PVOID pvReserved1);
|
|
|
|
BOOL
|
|
WIN32FindClosePrinterChangeNotification(
|
|
HANDLE hPrinter);
|
|
|
|
|
|
/* VALIDATE_NAME macro:
|
|
*
|
|
* pName is valid if:
|
|
*
|
|
* pName is non-null
|
|
*
|
|
* AND first 2 characters of pName are "\\"
|
|
*
|
|
* OR first 3 characters of pName are "LPT"
|
|
*
|
|
*/
|
|
#define VALIDATE_NAME(pName) \
|
|
((pName) && *(pName) == L'\\' && *((pName)+1) == L'\\')
|
|
|
|
#define BYTE_STRING_LENGTH(UnicodeString) \
|
|
(wcslen(UnicodeString) * sizeof(WCHAR) + sizeof(WCHAR))
|
|
|
|
#define SET_REG_VAL_SZ(hKey, pValueName, pValueSz) \
|
|
(RegSetValueEx(hKey, pValueName, REG_OPTION_RESERVED, \
|
|
REG_SZ, (LPBYTE)pValueSz, BYTE_STRING_LENGTH(pValueSz)) \
|
|
== NO_ERROR)
|
|
|
|
#define SET_REG_VAL_DWORD(hKey, pValueName, Value) \
|
|
(RegSetValueEx(hKey, pValueName, REG_OPTION_RESERVED, \
|
|
REG_DWORD, (LPBYTE)&Value, sizeof(DWORD)) \
|
|
== NO_ERROR)
|
|
|
|
#define GET_REG_VAL_SZ(hKey, pValueName, awchValueSz, cbValueSz) \
|
|
cbValueSz = sizeof(awchValueSz), *awchValueSz = (WCHAR)0, \
|
|
(RegQueryValueEx(hKey, pValueName, REG_OPTION_RESERVED, \
|
|
NULL, (LPBYTE)awchValueSz, &cbValueSz) \
|
|
== NO_ERROR)
|
|
|
|
|
|
|
|
|
|
typedef struct _GENERIC_CONTAINER {
|
|
DWORD Level;
|
|
LPBYTE pData;
|
|
} GENERIC_CONTAINER, *PGENERIC_CONTAINER, *LPGENERIC_CONTAINER ;
|
|
|
|
BOOL
|
|
RemoteOpenPrinter(
|
|
LPWSTR pPrinterName,
|
|
LPHANDLE phPrinter,
|
|
LPPRINTER_DEFAULTSW pDefault,
|
|
BOOL CallLMOpenPrinter
|
|
);
|
|
|
|
BOOL
|
|
RemoteClosePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
RemoteGetPrinterDriverDirectory(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pDriverDirectory,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
RemoteGetPrinterDriver(
|
|
HANDLE hPrinter,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
CacheGetPrinterDriver(
|
|
HANDLE hPrinter,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
PrinterConnectionExists(
|
|
LPWSTR pPrinterName
|
|
);
|
|
|
|
BOOL
|
|
AddPrinterConnectionPrivate(
|
|
LPWSTR pName
|
|
);
|
|
|
|
BOOL
|
|
CacheOpenPrinter(
|
|
LPWSTR pName,
|
|
LPHANDLE phPrinter,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
BOOL
|
|
GetSid(
|
|
PHANDLE phToken
|
|
);
|
|
|
|
BOOL
|
|
SetCurrentSid(
|
|
HANDLE hToken
|
|
);
|
|
|
|
BOOL
|
|
DoAsyncRemoteOpenPrinter(
|
|
PWSPOOL pSpool,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
DWORD
|
|
RemoteOpenPrinterThread(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
CacheClosePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
|
|
VOID
|
|
FreepSpool(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
DoRemoteOpenPrinter(
|
|
LPWSTR pPrinterName,
|
|
LPPRINTER_DEFAULTS pDefault,
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
PWSPOOL
|
|
AllocWSpool(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
CacheSyncRpcHandle(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
ValidateW32SpoolHandle(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
#define SYNCRPCHANDLE( pSpool ) if ( !CacheSyncRpcHandle( pSpool ) ) { SplOutSem(); return FALSE; }
|
|
#define VALIDATEW32HANDLE( pSpool ) if ( !ValidateW32SpoolHandle( pSpool ) ) return FALSE;
|
|
|
|
|
|
BOOL
|
|
CacheResetPrinter(
|
|
HANDLE hPrinter,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
BOOL
|
|
RemoteResetPrinter(
|
|
HANDLE hPrinter,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
BOOL
|
|
CopypDefaultTopSpool(
|
|
PWSPOOL pSpool,
|
|
LPPRINTER_DEFAULTSW pDefault
|
|
);
|
|
|
|
HANDLE
|
|
MySplCreateSpooler(
|
|
LPWSTR pMachineName
|
|
);
|
|
|
|
VOID
|
|
RefreshCompletePrinterCache(
|
|
IN PWSPOOL pSpool,
|
|
IN EDriverDownload eDriverDownload
|
|
);
|
|
|
|
VOID
|
|
ConvertRemoteInfoToLocalInfo(
|
|
PPRINTER_INFO_2 pRemoteInfo
|
|
);
|
|
|
|
VOID
|
|
RefreshPrinter(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
VOID
|
|
RefreshPrinterInfo7(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
CacheWritePrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pcWritten
|
|
);
|
|
|
|
|
|
BOOL
|
|
RemoteEnumPorts(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pPort,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
RemoteAddPort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pMonitorName
|
|
);
|
|
|
|
|
|
BOOL
|
|
RemoteConfigurePort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
BOOL
|
|
RemoteDeletePort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
BOOL
|
|
RemoteAddPortEx(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE lpBuffer,
|
|
LPWSTR lpMonitorName
|
|
);
|
|
|
|
LPBYTE
|
|
CopyIniPortToPort(
|
|
PWINIPORT pIniPort,
|
|
DWORD Level,
|
|
LPBYTE pPortInfo,
|
|
LPBYTE pEnd
|
|
);
|
|
|
|
|
|
DWORD
|
|
GetPortSize(
|
|
PWINIPORT pIniPort,
|
|
DWORD Level
|
|
);
|
|
|
|
BOOL
|
|
CacheWriteRegistryExtra(
|
|
LPWSTR pName,
|
|
HKEY hPrinterKey,
|
|
PWCACHEINIPRINTEREXTRA pExtraData
|
|
);
|
|
|
|
|
|
PWCACHEINIPRINTEREXTRA
|
|
CacheReadRegistryExtra(
|
|
HKEY hPrinterKey
|
|
);
|
|
|
|
PWCACHEINIPRINTEREXTRA
|
|
AllocExtraData(
|
|
PPRINTER_INFO_2W pPrinterInfo2,
|
|
DWORD cbPrinterInfo2
|
|
);
|
|
|
|
VOID
|
|
CacheFreeExtraData(
|
|
PWCACHEINIPRINTEREXTRA pExtraData
|
|
);
|
|
|
|
|
|
BOOL
|
|
RemoteGetPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
CacheGetPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
DWORD
|
|
GetCachePrinterInfoSize(
|
|
PWCACHEINIPRINTEREXTRA pExtraData
|
|
);
|
|
|
|
VOID
|
|
DownAndMarshallUpStructure(
|
|
LPBYTE lpStructure,
|
|
LPBYTE lpSource,
|
|
LPDWORD lpOffsets
|
|
);
|
|
|
|
VOID
|
|
CacheCopyPrinterInfo(
|
|
PPRINTER_INFO_2W pDestination,
|
|
PPRINTER_INFO_2W pPrinterInfo2,
|
|
DWORD cbPrinterInfo2
|
|
);
|
|
|
|
|
|
VOID
|
|
ConsistencyCheckCache(
|
|
IN PWSPOOL pSpool,
|
|
IN EDriverDownload eDriverDownload
|
|
);
|
|
|
|
BOOL
|
|
CopyFileWithoutImpersonation(
|
|
LPCWSTR lpExistingFileName,
|
|
LPCWSTR lpNewFileName,
|
|
BOOL bFailIfExists,
|
|
BOOL bImpersonateOnCreate
|
|
);
|
|
|
|
BOOL
|
|
InternalDeletePrinterConnection(
|
|
LPWSTR pName,
|
|
BOOL bNotifyDriver
|
|
);
|
|
|
|
BOOL
|
|
RefreshPrinterDriver(
|
|
IN PWSPOOL pSpool,
|
|
IN LPWSTR pszDriverName,
|
|
IN EDriverDownload eDriverDownload
|
|
);
|
|
|
|
BOOL
|
|
RefreshPrinterCopyFiles(
|
|
PWSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
SavePrinterConnectionInRegistry(
|
|
LPWSTR pRealName,
|
|
LPBYTE pDriverInfo,
|
|
DWORD dwLevel
|
|
);
|
|
|
|
|
|
BOOL
|
|
OpenCachePrinterOnly(
|
|
LPWSTR pName,
|
|
LPHANDLE phSplPrinter,
|
|
LPHANDLE phIniSpooler,
|
|
LPPRINTER_DEFAULTS pDefault,
|
|
BOOL bOpenOnly
|
|
);
|
|
|
|
BOOL
|
|
RemoteEndDocPrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
|
|
BOOL
|
|
RemoteAddPrinterDriver(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
PBYTE pDriverInfo
|
|
);
|
|
|
|
|
|
BOOL
|
|
DownloadDriverFiles(
|
|
PWSPOOL pSpool,
|
|
LPBYTE pDriverInfo,
|
|
DWORD dwLevel
|
|
);
|
|
|
|
PWSTR
|
|
StripString(
|
|
PWSTR pszString,
|
|
PCWSTR pszStrip,
|
|
PCWSTR pszTerminator
|
|
);
|
|
|
|
BOOL
|
|
BuildOtherNamesFromMachineName(
|
|
LPWSTR **ppszOtherNames,
|
|
DWORD *cOtherNames
|
|
);
|
|
|
|
VOID
|
|
FreeOtherNames(
|
|
LPWSTR **ppszMyOtherNames,
|
|
DWORD *cOtherNames
|
|
);
|
|
|
|
|
|
BOOL
|
|
CopyDriversLocally(
|
|
PWSPOOL pSpool,
|
|
LPWSTR pEnvironment,
|
|
LPBYTE pDriverInfo,
|
|
DWORD dwLevel,
|
|
DWORD cbDriverInfo,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
VOID
|
|
QueryTrustedDriverInformation(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
ValidRawDatatype(
|
|
LPCWSTR pszDatatype
|
|
);
|
|
|
|
BOOL
|
|
DoDevModeConversionAndBuildNewPrinterInfo2(
|
|
IN LPPRINTER_INFO_2 pInPrinter2,
|
|
IN DWORD dwInSize,
|
|
IN OUT LPBYTE pOutBuf,
|
|
IN DWORD dwOutSize,
|
|
IN OUT LPDWORD pcbNeeded,
|
|
IN PWSPOOL pSpool
|
|
);
|
|
|
|
HANDLE
|
|
LoadDriverFiletoConvertDevmodeFromPSpool(
|
|
HANDLE hSplPrinter
|
|
);
|
|
|
|
DWORD
|
|
GetPolicy();
|
|
|
|
BOOL
|
|
AddDriverFromLocalCab(
|
|
LPTSTR pszDriverName,
|
|
LPHANDLE pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
IsTrustedPathConfigured(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsAdminAccess(
|
|
IN PRINTER_DEFAULTS *pDefaults
|
|
);
|
|
|
|
HRESULT
|
|
DoesPolicyAllowPrinterConnectionsToServer(
|
|
IN PCWSTR pszQueue,
|
|
OUT BOOL *pbAllowPointAndPrint
|
|
);
|
|
|
|
HRESULT
|
|
AreWeOnADomain(
|
|
OUT BOOL *pbDomain
|
|
);
|
|
|
|
HRESULT
|
|
GetServerNameFromPrinterName(
|
|
IN PCWSTR pszQueue,
|
|
OUT PWSTR *ppszServerName
|
|
);
|
|
|
|
HRESULT
|
|
IsServerExplicitlyTrusted(
|
|
IN HKEY hKeyPolicy,
|
|
IN PCWSTR pszServerName,
|
|
OUT BOOL *pbServerTrusted
|
|
);
|
|
|
|
HRESULT
|
|
IsServerInSameForest(
|
|
IN PCWSTR pszServerName,
|
|
OUT BOOL *pbServerInSameForest
|
|
);
|
|
|
|
HRESULT
|
|
GetDNSNameFromServerName(
|
|
IN PCWSTR pszServerName,
|
|
OUT PWSTR *ppszFullyQualified
|
|
);
|
|
|
|
HRESULT
|
|
UnicodeToAnsiString(
|
|
IN PCWSTR pszUnicode,
|
|
OUT PSTR *ppszAnsi
|
|
);
|
|
|
|
LPWSTR
|
|
AnsiToUnicodeStringWithAlloc(
|
|
IN LPSTR pAnsi
|
|
);
|
|
|
|
HRESULT
|
|
CheckSamePhysicalAddress(
|
|
IN PCWSTR pszServer1,
|
|
IN PCWSTR pszServer2,
|
|
OUT BOOL *pbSameAddress
|
|
);
|
|
|
|
HRESULT
|
|
CheckUserPrintAdmin(
|
|
OUT BOOL *pbUserAdmin
|
|
);
|
|
|
|
HRESULT
|
|
GetFullyQualifiedDomainName(
|
|
IN PCWSTR pszServerName,
|
|
OUT PWSTR *ppszFullyQualified
|
|
);
|
|
|
|
//
|
|
// The defines are used for policy install of printer drivers
|
|
// for point and print. Currently the policy is hardcoded to
|
|
// only be SERVER_INF_INSTALL
|
|
//
|
|
#define SERVER_INSTALL_ONLY 1
|
|
#define INF_INSTALL_ONLY 2
|
|
#define SERVER_INF_INSTALL 4
|
|
#define INF_SERVER_INSTALL 8
|
|
|
|
|
|
extern DWORD cThisMajorVersion;
|
|
extern DWORD cThisMinorVersion;
|
|
extern DWORD gdwThisGetVersion;
|
|
extern WCHAR *szVersion;
|
|
extern WCHAR *szName;
|
|
extern WCHAR *szConfigurationFile;
|
|
extern WCHAR *szDataFile;
|
|
extern WCHAR *szDriver;
|
|
|
|
extern WCHAR *szEnvironment;
|
|
extern DWORD dwSyncOpenPrinter;
|