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.
2961 lines
58 KiB
2961 lines
58 KiB
/*++
|
|
|
|
Copyright (c) 1990 - 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
local.h
|
|
|
|
Abstract:
|
|
|
|
Header file for Local Print Providor
|
|
|
|
Author:
|
|
|
|
Dave Snipp (DaveSn) 15-Mar-1991
|
|
|
|
Revision History:
|
|
|
|
06-Jun-1995 MuhuntS DRIVER_INFO_3, PRINTER_INFO_5 changes
|
|
17-May-1992 ChuckC Added CreateSplUniStr, DeleteSplUniStr.
|
|
27 June 94 MattFe pIniSpooler
|
|
10 July 94 MattFe Spl entry points for Caching
|
|
|
|
--*/
|
|
|
|
#include <ntfytab.h>
|
|
#include "splcom.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Defines to make code more readable.
|
|
//
|
|
#define ONEDAY 60*24
|
|
#define BROADCAST TRUE
|
|
#define NO_BROADCAST FALSE
|
|
#define UPDATE_DS_ONLY 3
|
|
#define CHANGEID_ONLY 2
|
|
#define UPDATE_CHANGEID 1
|
|
#define KEEP_CHANGEID 0
|
|
#define FIRST_FILE_TIME_GREATER_THAN_SECOND 1
|
|
#define OVERWRITE_IF_TARGET_EXISTS FALSE
|
|
#define IMPERSONATE_USER TRUE
|
|
#define DO_NOT_IMPERSONATE_USER FALSE
|
|
#define STRINGS_ARE_EQUAL 0
|
|
#define ONE_MINUTE 60*1000
|
|
#define TEN_MINUTES 10*ONE_MINUTE
|
|
#define TWO_MINUTES 2*ONE_MINUTE
|
|
#define SEVEN_MINUTES 7*ONE_MINUTE
|
|
#define HOUR_OF_MINUTES 60
|
|
#define ONE_HOUR ONE_MINUTE*HOUR_OF_MINUTES
|
|
#define DAY_OF_HOURS 24
|
|
#define DAY_OF_MINUTES DAY_OF_HOURS*60
|
|
#define DEFAULT_NUMBER_MASTER_AND_BACKUP 3
|
|
#define DEFAULT_NUMBER_BROWSE_WORKSTATIONS 2
|
|
#define DEFAULT_REFRESH_TIMES_PER_DECAY_PERIOD 2;
|
|
#define FIND_ANY_VERSION TRUE
|
|
#define FIND_COMPATIBLE_VERSION FALSE
|
|
#define DRIVER_UPGRADE 2
|
|
#define DRIVER_SEARCH 4
|
|
#define NT3X_VERSION TRUE
|
|
#define CURRENT_VERSION FALSE
|
|
#define MAX_STATIC_ALLOC 2048
|
|
|
|
// Default timeout values we will return
|
|
#define DEFAULT_DNS_TIMEOUT 15000
|
|
#define DEFAULT_TX_TIMEOUT 45000
|
|
|
|
|
|
// Pruning definitions
|
|
#define PRUNE_DOWNLEVEL_NEVER 0
|
|
#define PRUNE_DOWNLEVEL_NICELY 1
|
|
#define PRUNE_DOWNLEVEL_AGGRESSIVELY 2
|
|
|
|
// Default pruning settings
|
|
#define DS_PRINTQUEUE_VERSION_WIN2000 4
|
|
#define DEFAULT_PRUNE_DOWNLEVEL PRUNE_DOWNLEVEL_NEVER // Never delete downlevel PQ
|
|
#define DEFAULT_PRUNING_PRIORITY THREAD_PRIORITY_NORMAL
|
|
#define DEFAULT_PRUNING_RETRIES 2
|
|
#define DEFAULT_PRUNING_INTERVAL (DAY_OF_MINUTES/(DEFAULT_PRUNING_RETRIES + 1)) // 8 hrs
|
|
#define DEFAULT_PRUNING_RETRY_LOG 0
|
|
|
|
#define MAX_PRUNING_RETRIES 10
|
|
|
|
// Default printQueue settings
|
|
#define IMMORTAL 1
|
|
#define DEFAULT_IMMORTAL !IMMORTAL
|
|
#define DEFAULT_VERIFY_PUBLISHED_STATE INFINITE // This is the interval
|
|
#define DEFAULT_PRINT_PUBLISH_POLICY 1
|
|
|
|
#define SERVER_THREAD_OFF 0
|
|
#define SERVER_THREAD_ON 1
|
|
#define SERVER_THREAD_UNCONFIGURED 2
|
|
|
|
// Default policy values
|
|
#define KM_PRINTERS_ARE_BLOCKED 1 // 1 = blocked, 0 = not blocked
|
|
#define SERVER_DEFAULT_KM_PRINTERS_ARE_BLOCKED 1
|
|
#define WKS_DEFAULT_KM_PRINTERS_ARE_BLOCKED 0
|
|
|
|
extern DWORD DefaultKMPrintersAreBlocked;
|
|
|
|
extern DWORD gdwServerInstallTimeOut;
|
|
|
|
#define INIT_TIME TRUE
|
|
#define NON_INIT_TIME FALSE
|
|
|
|
enum
|
|
{
|
|
kMaximumNumberOfBrowsePrinters = 256
|
|
};
|
|
|
|
extern WCHAR *szPrinterData;
|
|
extern WCHAR *szConfigurationKey;
|
|
extern WCHAR *szDataFileKey;
|
|
extern WCHAR *szDriverVersion;
|
|
extern WCHAR *szTempDir;
|
|
extern WCHAR *szDriversKey;
|
|
extern WCHAR *szPrintersKey;
|
|
extern WCHAR *szDirectory;
|
|
extern WCHAR *szDriverIni;
|
|
extern WCHAR *szDriverFile;
|
|
extern WCHAR *szDriverDir;
|
|
extern WCHAR *szPrintProcDir;
|
|
extern WCHAR *szPrinterDir;
|
|
extern WCHAR *szClusterPrinterDir;
|
|
extern WCHAR *szPrinterIni;
|
|
extern WCHAR *szNullPort;
|
|
extern WCHAR *szComma;
|
|
extern WCHAR *szName;
|
|
extern WCHAR *szShare;
|
|
extern WCHAR *szPort;
|
|
extern WCHAR *szPrintProcessor;
|
|
extern WCHAR *szDatatype;
|
|
extern WCHAR *szObjectGUID;
|
|
extern WCHAR *szDsKeyUpdate;
|
|
extern WCHAR *szDsKeyUpdateForeground;
|
|
extern WCHAR *szAction;
|
|
extern WCHAR *szDriver;
|
|
extern WCHAR *szLocation;
|
|
extern WCHAR *szDescription;
|
|
extern WCHAR *szAttributes;
|
|
extern WCHAR *szStatus;
|
|
extern WCHAR *szPriority;
|
|
extern WCHAR *szDefaultPriority;
|
|
extern WCHAR *szUntilTime;
|
|
extern WCHAR *szStartTime;
|
|
extern WCHAR *szParameters;
|
|
extern WCHAR *szSepFile;
|
|
extern WCHAR *szDevMode;
|
|
extern WCHAR *szSecurity;
|
|
extern WCHAR *szSpoolDir;
|
|
extern WCHAR *szNetMsgDll;
|
|
extern WCHAR *szTimeLastChange;
|
|
extern WCHAR *szHelpFile;
|
|
extern WCHAR *szMonitor;
|
|
extern WCHAR *szDependentFiles;
|
|
extern WCHAR *szPreviousNames;
|
|
extern WCHAR *szDNSTimeout;
|
|
extern WCHAR *szTXTimeout;
|
|
extern WCHAR *szNull;
|
|
extern WCHAR *szPendingUpgrades;
|
|
extern WCHAR *szMfgName;
|
|
extern WCHAR *szOEMUrl;
|
|
extern WCHAR *szHardwareID;
|
|
extern WCHAR *szProvider;
|
|
extern WCHAR *szDriverDate;
|
|
extern WCHAR *szLongVersion;
|
|
extern WCHAR *szClusDrvTimeStamp;
|
|
extern const WCHAR szDiscardTSJobs[];
|
|
extern const WCHAR szDisableFilePooling[];
|
|
|
|
extern HANDLE hInst;
|
|
extern PINISPOOLER pLocalIniSpooler;
|
|
extern HANDLE SchedulerSignal;
|
|
extern HANDLE PowerManagementSignal;
|
|
extern DWORD dwSchedulerThreadPriority;
|
|
extern CRITICAL_SECTION SpoolerSection;
|
|
|
|
#if DBG
|
|
extern HANDLE hcsSpoolerSection;
|
|
#endif
|
|
|
|
extern HANDLE WinStaDllHandle;
|
|
|
|
extern PINIENVIRONMENT pThisEnvironment;
|
|
extern WCHAR *szPrintProcKey;
|
|
extern WCHAR *szEnvironment;
|
|
extern WCHAR *szMajorVersion;
|
|
extern WCHAR *szMinorVersion;
|
|
extern WCHAR *szRegistryRoot;
|
|
extern WCHAR *szEMFThrottle;
|
|
extern WCHAR *szFlushShadowFileBuffers;
|
|
|
|
extern WCHAR *szClusterDriverRoot;
|
|
extern WCHAR *szClusterNonAwareMonitors;
|
|
|
|
extern LPWSTR szRemoteDoc;
|
|
extern LPWSTR szLocalDoc;
|
|
extern LPWSTR szFastPrintTimeout;
|
|
|
|
extern LPWSTR szRaw;
|
|
extern DWORD dwUpgradeFlag;
|
|
|
|
#define CHECK_SCHEDULER() SetEvent(SchedulerSignal)
|
|
|
|
extern DWORD dwFastPrintWaitTimeout;
|
|
extern DWORD dwPortThreadPriority;
|
|
extern DWORD dwFastPrintThrottleTimeout;
|
|
extern DWORD dwFastPrintSlowDownThreshold;
|
|
extern DWORD dwWritePrinterSleepTime;
|
|
extern DWORD dwServerThreadPriority;
|
|
extern DWORD dwEnableBroadcastSpoolerStatus;
|
|
extern DWORD ServerThreadTimeout;
|
|
extern DWORD ServerThreadRunning;
|
|
extern DWORD NetPrinterDecayPeriod;
|
|
extern DWORD RefreshTimesPerDecayPeriod;
|
|
extern HANDLE ServerThreadSemaphore;
|
|
extern BOOL bNetInfoReady;
|
|
extern DWORD FirstAddNetPrinterTickCount;
|
|
extern DWORD BrowsePrintWorkstations;
|
|
|
|
extern DWORD dwFlushShadowFileBuffers;
|
|
|
|
extern DWORD dwMajorVersion;
|
|
extern DWORD dwMinorVersion;
|
|
|
|
extern DWORD dwUniquePrinterSessionID;
|
|
|
|
extern DWORD PortToPrinterStatusMappings[];
|
|
|
|
extern WCHAR *szSpooler;
|
|
extern LPCTSTR pszLocalOnlyToken;
|
|
extern LPCTSTR pszLocalsplOnlyToken;
|
|
|
|
typedef DWORD NOTIFYVECTOR[NOTIFY_TYPE_MAX];
|
|
typedef NOTIFYVECTOR *PNOTIFYVECTOR;
|
|
|
|
#define ZERONV(dest) \
|
|
dest[0] = dest[1] = 0
|
|
|
|
#define COPYNV(dest, src) \
|
|
{ dest[0] = src[0]; dest[1] = src[1]; }
|
|
|
|
#define ADDNV(dest, src) \
|
|
{ dest[0] |= src[0]; dest[1] |= src[1]; }
|
|
|
|
extern NOTIFYVECTOR NVPrinterStatus;
|
|
extern NOTIFYVECTOR NVPrinterSD;
|
|
extern NOTIFYVECTOR NVJobStatus;
|
|
extern NOTIFYVECTOR NVJobStatusString;
|
|
extern NOTIFYVECTOR NVJobStatusAndString;
|
|
extern NOTIFYVECTOR NVPurge;
|
|
extern NOTIFYVECTOR NVDeletedJob;
|
|
extern NOTIFYVECTOR NVAddJob;
|
|
extern NOTIFYVECTOR NVSpoolJob;
|
|
extern NOTIFYVECTOR NVWriteJob;
|
|
extern NOTIFYVECTOR NVPrinterAll;
|
|
extern NOTIFYVECTOR NVJobPrinted;
|
|
extern BOOL (*pfnPrinterEvent)();
|
|
|
|
extern BOOL fW3SvcInstalled; // Says if IIS or "Peer web Server" is installed on the local machine.
|
|
extern PWCHAR szW3Root; // The WWWRoot dir, e.g. c:\inetpub\wwwroot
|
|
|
|
extern OSVERSIONINFO OsVersionInfo;
|
|
extern OSVERSIONINFOEX OsVersionInfoEx;
|
|
|
|
extern WCHAR *gszNT4EMF;
|
|
extern WCHAR *gszNT5EMF;
|
|
|
|
extern WCHAR *ipszRegistryClusRepository;
|
|
extern WCHAR *szDriversDirectory;
|
|
extern WCHAR *szDriversKey;
|
|
extern WCHAR *szWin95Environment;
|
|
|
|
extern ERemoteRPCEndPointPolicy gRemoteRPCEndPointPolicy;
|
|
|
|
BOOL
|
|
IsPrinterSharingAllowed(
|
|
VOID
|
|
);
|
|
|
|
typedef struct _JOBDATA {
|
|
struct _JOBDATA *pNext;
|
|
PINIJOB pIniJob;
|
|
SIZE_T MemoryUse;
|
|
DWORD dwWaitTime;
|
|
DWORD dwScheduleTime;
|
|
DWORD dwNumberOfTries;
|
|
} JOBDATA, *PJOBDATA;
|
|
|
|
|
|
typedef struct _Strings {
|
|
DWORD nElements;
|
|
PWSTR ppszString[1];
|
|
} STRINGS, *PSTRINGS;
|
|
|
|
|
|
typedef struct _INTERNAL_DRV_FILE {
|
|
LPWSTR pFileName;
|
|
DWORD dwVersion;
|
|
HANDLE hFileHandle;
|
|
BOOL bUpdated;
|
|
} INTERNAL_DRV_FILE, *PINTERNAL_DRV_FILE;
|
|
|
|
extern DWORD dwNumberOfEMFJobsRendering;
|
|
extern BOOL bUseEMFScheduling;
|
|
extern SIZE_T TotalMemoryForRendering;
|
|
extern SIZE_T AvailMemoryForRendering;
|
|
extern DWORD dwLastScheduleTime;
|
|
|
|
extern PJOBDATA pWaitingList;
|
|
extern PJOBDATA pScheduleList;
|
|
|
|
#define JOB_SCHEDULE_LIST 0x00000001
|
|
#define JOB_WAITING_LIST 0x00000002
|
|
|
|
#define SPL_FIRST_JOB 0x00000001
|
|
#define SPL_USE_MEMORY 0x00000002
|
|
|
|
typedef BOOL (*PFNSPOOLER_MAP)( HANDLE h, PINISPOOLER pIniSpooler );
|
|
typedef BOOL (*PFNPRINTER_MAP)( HANDLE h, PINIPRINTER pIniPrinter );
|
|
|
|
#define DBG_CLUSTER 0x200
|
|
|
|
VOID
|
|
RunForEachSpooler(
|
|
HANDLE h,
|
|
PFNSPOOLER_MAP pfnMap
|
|
);
|
|
|
|
VOID
|
|
RunForEachPrinter(
|
|
PINISPOOLER pIniSpooler,
|
|
HANDLE h,
|
|
PFNPRINTER_MAP pfnMap
|
|
);
|
|
|
|
BOOL
|
|
DsUpdateAllDriverKeys(
|
|
HANDLE h,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
InitializeLocalspl(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
EnterSplSem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
LeaveSplSem(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsThreadInSem(
|
|
DWORD ThreadID
|
|
);
|
|
|
|
#if DBG
|
|
|
|
extern HANDLE ghbtClusterRef;
|
|
extern PDBG_POINTERS gpDbgPointers;
|
|
|
|
VOID
|
|
SplInSem(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
SplOutSem(
|
|
VOID
|
|
);
|
|
#else
|
|
#define SplInSem()
|
|
#define SplOutSem()
|
|
#endif
|
|
|
|
PDEVMODE
|
|
AllocDevMode(
|
|
PDEVMODE pDevMode
|
|
);
|
|
|
|
BOOL
|
|
FreeDevMode(
|
|
PDEVMODE pDevMode
|
|
);
|
|
|
|
PINIENTRY
|
|
FindIniKey(
|
|
PINIENTRY pIniEntry,
|
|
LPWSTR lpName
|
|
);
|
|
|
|
VOID
|
|
RemoveFromJobList(
|
|
PINIJOB pIniJob,
|
|
DWORD dwJobList
|
|
);
|
|
|
|
BOOL
|
|
CheckSepFile(
|
|
LPWSTR lpFileName
|
|
);
|
|
|
|
int
|
|
DoSeparator(
|
|
PSPOOL
|
|
);
|
|
|
|
DWORD
|
|
GetFullNameFromId(
|
|
IN PINIPRINTER pIniPrinter,
|
|
IN DWORD JobId,
|
|
IN BOOL fJob,
|
|
IN PWSTR pFileName,
|
|
IN SIZE_T cchFileName,
|
|
IN BOOL Remote
|
|
);
|
|
|
|
DWORD
|
|
GetPrinterDirectory(
|
|
PINIPRINTER pIniPrinter,
|
|
BOOL Remote,
|
|
LPWSTR pFileName,
|
|
DWORD MaxLength,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
VOID
|
|
CreatePrintProcDirectory(
|
|
LPWSTR lpEnvironment,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
ProcessShadowJobs(
|
|
PINIPRINTER pIniPrinter,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIJOB
|
|
ReadShadowJob(
|
|
LPWSTR szDir,
|
|
PWIN32_FIND_DATA pFindFileData,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
GetDiscardTSJobsSettings(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
WriteShadowJob(
|
|
IN PINIJOB pIniJob,
|
|
IN BOOL bLeaveCS
|
|
);
|
|
|
|
BOOL
|
|
BuildEnvironmentInfo(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
BuildPrinterInfo(
|
|
PINISPOOLER pIniSpooler,
|
|
BOOL UpdateChangeID
|
|
);
|
|
|
|
BOOL
|
|
BuildAllPorts(
|
|
);
|
|
|
|
BOOL
|
|
BuildDriverInfo(
|
|
HKEY hEnvironmentKey,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
BuildTrueDependentFileField(
|
|
LPWSTR pDriverPath,
|
|
LPWSTR pDataFile,
|
|
LPWSTR pConfigFile,
|
|
LPWSTR pHelpFile,
|
|
LPWSTR pInputDependentFiles,
|
|
LPWSTR *ppDependentFiles
|
|
);
|
|
|
|
DWORD
|
|
GetDriverVersionDirectory(
|
|
LPWSTR pDir,
|
|
DWORD MaxLength,
|
|
PINISPOOLER pIniSpooler,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIVERSION pIniVersion,
|
|
PINIDRIVER pIniDriver,
|
|
LPWSTR lpRemote
|
|
);
|
|
|
|
PINIVERSION
|
|
FindVersionForDriver(
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIDRIVER pIniDriver
|
|
);
|
|
|
|
BOOL
|
|
BuildPrintProcInfo(
|
|
HKEY hEnvironmentKey,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
MoveNewDriverRelatedFiles(
|
|
LPWSTR pNewDir,
|
|
LPWSTR pCurrDir,
|
|
LPWSTR pOldDir,
|
|
PINTERNAL_DRV_FILE pInternalDriverFiles,
|
|
DWORD dwFileCount,
|
|
LPBOOL pbDriverFileMoved,
|
|
LPBOOL pbConfigFileMoved
|
|
);
|
|
|
|
BOOL
|
|
RemoveFromList(
|
|
PINIENTRY *ppIniHead,
|
|
PINIENTRY pIniEntry
|
|
);
|
|
|
|
PINIDRIVER
|
|
GetDriver(
|
|
HKEY hVersionKey,
|
|
LPWSTR DriverName,
|
|
PINISPOOLER pIniSpooler,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIVERSION pIniVersion
|
|
);
|
|
|
|
DWORD
|
|
GetDriverDirectory(
|
|
LPWSTR lpDir,
|
|
DWORD MaxLength,
|
|
PINIENVIRONMENT lpEnvironment,
|
|
LPWSTR lpRemotePath,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
GetProcessorDirectory(
|
|
LPWSTR *lpDir,
|
|
LPWSTR lpEnvironment,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
CreateCompleteDirectory(
|
|
LPWSTR lpDir
|
|
);
|
|
|
|
|
|
HRESULT
|
|
OpenMonitorPort(
|
|
PINIPORT pIniPort,
|
|
PINIMONITOR pIniLangMonitor,
|
|
LPWSTR pszPrinterName
|
|
);
|
|
|
|
HRESULT
|
|
CloseMonitorPort(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
HRESULT
|
|
ReleaseMonitorPort(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
HANDLE
|
|
GetMonitorHandle(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
PINIMONITOR
|
|
GetOpenedMonitor(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
|
|
VOID
|
|
ShutdownPorts(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
CreatePortThread(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
#define WAIT TRUE
|
|
#define NOWAIT FALSE
|
|
|
|
BOOL
|
|
DestroyPortThread(
|
|
PINIPORT pIniPort,
|
|
BOOL bShutdown
|
|
);
|
|
|
|
DWORD
|
|
PortThread(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
BOOL
|
|
DeleteJob(
|
|
PINIJOB pIniJob,
|
|
BOOL bBroadcast
|
|
);
|
|
|
|
VOID
|
|
DeleteJobCheck(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
BOOL
|
|
UpdateWinIni(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
PKEYDATA
|
|
CreateTokenList(
|
|
LPWSTR pKeyData
|
|
);
|
|
|
|
PINIPORT
|
|
CreatePortEntry(
|
|
LPWSTR pPortName,
|
|
PINIMONITOR pIniMonitor,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
GetPrinterPorts(
|
|
PINIPRINTER pIniPrinter,
|
|
LPWSTR pszPorts,
|
|
DWORD *pcbNeeded
|
|
);
|
|
|
|
DWORD
|
|
SchedulerThread(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
UpdatePrinterIni(
|
|
PINIPRINTER pIniPrinter,
|
|
DWORD dwChangeID
|
|
);
|
|
|
|
BOOL
|
|
UpdatePrinterNetworkName(
|
|
PINIPRINTER pIniPrinter,
|
|
LPWSTR pszPorts
|
|
);
|
|
|
|
BOOL
|
|
CopyPrinterDevModeToIniPrinter(
|
|
IN OUT PINIPRINTER pIniPrinter,
|
|
IN LPDEVMODE pDevMode
|
|
);
|
|
|
|
BOOL
|
|
InitializeForms(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
InitializeNet(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
ShareThisPrinter(
|
|
PINIPRINTER pIniPrinter,
|
|
LPWSTR pShareName,
|
|
BOOL Share
|
|
);
|
|
|
|
|
|
DWORD
|
|
AddPrintShare(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIJOB
|
|
FindJob(
|
|
PINIPRINTER pIniPrinter,
|
|
DWORD JobId,
|
|
PDWORD pPosition
|
|
);
|
|
|
|
PINIJOB
|
|
FindServerJob(
|
|
PINISPOOLER pIniSpooler,
|
|
DWORD JobId,
|
|
PDWORD pPosition,
|
|
PINIPRINTER* ppIniPrinter
|
|
);
|
|
|
|
PINIJOB
|
|
FindIniJob (
|
|
PSPOOL pSpool,
|
|
DWORD JobId
|
|
);
|
|
|
|
DWORD
|
|
GetJobSessionId (
|
|
PSPOOL pSpool,
|
|
DWORD JobId
|
|
);
|
|
|
|
BOOL
|
|
MyName(
|
|
LPWSTR pName,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
IsValidPrinterName(
|
|
IN LPCWSTR pszPrinter,
|
|
IN DWORD cchMax
|
|
);
|
|
|
|
BOOL
|
|
CheckMyName(
|
|
LPWSTR pName,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
PINISPOOLER
|
|
FindSpoolerByNameIncRef(
|
|
LPTSTR pszName,
|
|
LPCTSTR *ppszLocalName OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
FindSpoolerByNameDecRef(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINISPOOLER
|
|
FindSpoolerByName(
|
|
LPTSTR pszName,
|
|
LPCTSTR *ppszLocalName OPTIONAL
|
|
);
|
|
|
|
|
|
HANDLE
|
|
AddNetPrinter(
|
|
LPBYTE pPrinterInfo,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
CreateServerThread(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
GetSid(
|
|
PHANDLE hToken
|
|
);
|
|
|
|
BOOL
|
|
SetCurrentSid(
|
|
HANDLE phToken
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPrinters(
|
|
DWORD Flags,
|
|
LPWSTR Name,
|
|
DWORD Level,
|
|
LPBYTE pPrinterEnum,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
DWORD
|
|
LocalOpenPrinter(
|
|
LPWSTR pPrinterName,
|
|
LPHANDLE phPrinter,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
DWORD
|
|
LocalOpenPrinterEx(
|
|
LPWSTR pPrinterName,
|
|
LPHANDLE phPrinter,
|
|
LPPRINTER_DEFAULTS pDefault,
|
|
LPBYTE pSplClientInfo,
|
|
DWORD dwLevel
|
|
);
|
|
|
|
BOOL
|
|
LocalSetJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD Command
|
|
);
|
|
|
|
BOOL
|
|
LocalGetJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumJobs(
|
|
HANDLE hPrinter,
|
|
DWORD FirstJob,
|
|
DWORD NoJobs,
|
|
DWORD Level,
|
|
LPBYTE pJob,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
HANDLE
|
|
LocalAddPrinter(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pPrinter
|
|
);
|
|
|
|
HANDLE
|
|
LocalAddPrinterEx(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pPrinter,
|
|
LPBYTE pSplClientInfo,
|
|
DWORD dwClientInfoLevel
|
|
);
|
|
|
|
BOOL
|
|
DeletePrinterForReal(
|
|
PINIPRINTER pIniPrinter,
|
|
BOOL bIsInitTime
|
|
);
|
|
|
|
VOID
|
|
DeleteIniNetPort(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPrinterConnection(
|
|
LPWSTR pName
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrinterConnection(
|
|
LPWSTR pName
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPrinterDriver(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPrinterDriverEx(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo,
|
|
DWORD dwFileCopyFlags
|
|
);
|
|
|
|
BOOL
|
|
LocalAddDriverCatalog(
|
|
IN HANDLE hPrinter,
|
|
IN DWORD dwLevel,
|
|
IN VOID *pvDriverInfCatInfo,
|
|
IN DWORD dwCatalogCopyFlags
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPrinterDrivers(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LocalGetPrinterDriverDirectory(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pDriverDirectory,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrinterDriver(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
LPWSTR pDriverName
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrinterDriverEx(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
LPWSTR pDriverName,
|
|
DWORD dwDeleteFlag,
|
|
DWORD dwVersionNum
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPerMachineConnection(
|
|
LPCWSTR pServer,
|
|
LPCWSTR pPrinterName,
|
|
LPCWSTR pPrintServer,
|
|
LPCWSTR pProvider
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePerMachineConnection(
|
|
LPCWSTR pServer,
|
|
LPCWSTR pPrinterName
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPerMachineConnections(
|
|
LPCWSTR pServer,
|
|
LPBYTE pPrinterEnum,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPrintProcessor(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
LPWSTR pPathName,
|
|
LPWSTR pPrintProcessorName
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPrintProcessors(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pPrintProcessorInfo,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LocalGetPrintProcessorDirectory(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
DWORD Level,
|
|
LPBYTE pPrintProcessorInfo,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrintProcessor(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
LPWSTR pPrintProcessorName
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPrintProcessorDatatypes(
|
|
LPWSTR pName,
|
|
LPWSTR pPrintProcessorName,
|
|
DWORD Level,
|
|
LPBYTE pDatatypes,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
DWORD
|
|
LocalStartDocPrinter(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pDocInfo
|
|
);
|
|
|
|
BOOL
|
|
LocalStartPagePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalGetSpoolFileHandle(
|
|
HANDLE hPrinter,
|
|
LPWSTR *pSpoolDir,
|
|
LPHANDLE phFile,
|
|
HANDLE hSpoolerProcess,
|
|
HANDLE hAppProcess
|
|
);
|
|
|
|
BOOL
|
|
LocalCommitSpoolData(
|
|
HANDLE hPrinter,
|
|
DWORD cbCommit
|
|
);
|
|
|
|
BOOL
|
|
LocalCloseSpoolFileHandle(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalFlushPrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pcWritten,
|
|
DWORD cSleep
|
|
);
|
|
|
|
DWORD
|
|
LocalSendRecvBidiData(
|
|
HANDLE hPrinter,
|
|
LPCTSTR pAction,
|
|
PBIDI_REQUEST_CONTAINER pReqData,
|
|
PBIDI_RESPONSE_CONTAINER* ppResData
|
|
);
|
|
|
|
BOOL
|
|
LocalWritePrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pcWritten
|
|
);
|
|
|
|
BOOL
|
|
LocalSeekPrinter(
|
|
HANDLE hPrinter,
|
|
LARGE_INTEGER liDistanceToMove,
|
|
PLARGE_INTEGER pliNewPointer,
|
|
DWORD dwMoveMethod,
|
|
BOOL bWritePrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalEndPagePrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalAbortPrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalReadPrinter(
|
|
HANDLE hPrinter,
|
|
LPVOID pBuf,
|
|
DWORD cbBuf,
|
|
LPDWORD pNoBytesRead
|
|
);
|
|
|
|
BOOL
|
|
SplReadPrinter(
|
|
HANDLE hPrinter,
|
|
LPBYTE *pBuf,
|
|
DWORD cbBuf
|
|
);
|
|
|
|
BOOL
|
|
LocalEndDocPrinter(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
LocalAddJob(
|
|
HANDLE hPrinter,
|
|
DWORD Level,
|
|
LPBYTE pData,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
BOOL
|
|
LocalScheduleJob(
|
|
HANDLE hPrinter,
|
|
DWORD JobId
|
|
);
|
|
|
|
DWORD
|
|
LocalWaitForPrinterChange(
|
|
HANDLE hPrinter,
|
|
DWORD Flags
|
|
);
|
|
|
|
BOOL
|
|
SetSpoolClosingChange(
|
|
PSPOOL pSpool
|
|
);
|
|
|
|
BOOL
|
|
SetPrinterChange(
|
|
PINIPRINTER pIniPrinter,
|
|
PINIJOB pIniJob,
|
|
PDWORD pdwNotifyVectors,
|
|
DWORD Flags,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumMonitors(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pMonitors,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LocalEnumPorts(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pPorts,
|
|
DWORD cbBuf,
|
|
LPDWORD pcbNeeded,
|
|
LPDWORD pcReturned
|
|
);
|
|
|
|
BOOL
|
|
LocalAddPort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pMonitorName
|
|
);
|
|
|
|
BOOL
|
|
LocalConfigurePort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePort(
|
|
LPWSTR pName,
|
|
HWND hWnd,
|
|
LPWSTR pPortName
|
|
);
|
|
|
|
|
|
BOOL
|
|
LocalXcvData(
|
|
HANDLE hXcv,
|
|
LPCWSTR pszDataName,
|
|
PBYTE pInputData,
|
|
DWORD cbInputData,
|
|
PBYTE pOutputData,
|
|
DWORD cbOutputData,
|
|
PDWORD pcbOutputNeeded,
|
|
PDWORD pdwStatus
|
|
);
|
|
|
|
DWORD
|
|
XcvOpen(
|
|
PCWSTR pszServer,
|
|
PCWSTR pszObject,
|
|
DWORD dwType,
|
|
PPRINTER_DEFAULTS pDefault,
|
|
PHANDLE phXcv,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
XcvClose(
|
|
PINIXCV pIniXcv
|
|
);
|
|
|
|
BOOL
|
|
XcvDeletePort(
|
|
PINIXCV pIniXcv,
|
|
PCWSTR pszDataName,
|
|
PBYTE pInputData,
|
|
DWORD cbInputData,
|
|
PBYTE pOutputData,
|
|
DWORD cbOutputData,
|
|
PDWORD pcbOutputNeeded,
|
|
PDWORD pdwStatus,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
XcvAddPort(
|
|
PINIXCV pIniXcv,
|
|
PCWSTR pszDataName,
|
|
PBYTE pInputData,
|
|
DWORD cbInputData,
|
|
PBYTE pOutputData,
|
|
DWORD cbOutputData,
|
|
PDWORD pcbOutputNeeded,
|
|
PDWORD pdwStatus,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
BOOL
|
|
AddPortToSpooler(
|
|
PCWSTR pName,
|
|
PINIMONITOR pIniMonitor,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
DeletePortFromSpoolerStart(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
|
|
BOOL
|
|
DeletePortFromSpoolerEnd(
|
|
PINIPORT pIniPort,
|
|
PINISPOOLER pIniSpooler,
|
|
BOOL bSuccess
|
|
);
|
|
|
|
|
|
|
|
HANDLE
|
|
LocalCreatePrinterIC(
|
|
HANDLE hPrinter,
|
|
LPDEVMODE pDevMode
|
|
);
|
|
|
|
BOOL
|
|
LocalPlayGdiScriptOnPrinterIC(
|
|
HANDLE hPrinterIC,
|
|
LPBYTE pIn,
|
|
DWORD cIn,
|
|
LPBYTE pOut,
|
|
DWORD cOut,
|
|
DWORD ul
|
|
);
|
|
|
|
BOOL
|
|
LocalDeletePrinterIC(
|
|
HANDLE hPrinterIC
|
|
);
|
|
|
|
DWORD
|
|
LocalPrinterMessageBox(
|
|
HANDLE hPrinter,
|
|
DWORD Error,
|
|
HWND hWnd,
|
|
LPWSTR pText,
|
|
LPWSTR pCaption,
|
|
DWORD dwType
|
|
);
|
|
|
|
BOOL
|
|
LocalAddMonitor(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pMonitors
|
|
);
|
|
|
|
BOOL
|
|
LocalDeleteMonitor(
|
|
LPWSTR pName,
|
|
LPWSTR pEnvironment,
|
|
LPWSTR pMonitorName
|
|
);
|
|
|
|
BOOL
|
|
LocalFindFirstPrinterChangeNotification(
|
|
HANDLE hPrinter,
|
|
DWORD fdwFlags,
|
|
DWORD fdwOptions,
|
|
HANDLE hNotify,
|
|
PDWORD pfdwStatus,
|
|
PVOID pvReserved0,
|
|
PVOID pvReserved1
|
|
);
|
|
|
|
|
|
BOOL
|
|
LocalFindClosePrinterChangeNotification(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
|
|
PINIPRINTPROC
|
|
FindDatatype(
|
|
PINIPRINTPROC pDefaultPrintProc,
|
|
LPWSTR pDatatype
|
|
);
|
|
|
|
PINIPRINTPROC
|
|
InitializePrintProcessor(
|
|
HINSTANCE hLibrary,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
LPWSTR pPrintProcessorName,
|
|
LPWSTR pDLLName
|
|
);
|
|
|
|
HRESULT
|
|
InitializeLocalPrintProcessor(
|
|
IN PINIENVIRONMENT pIniEnvironment
|
|
);
|
|
|
|
PINIPRINTPROC
|
|
LoadPrintProcessor(
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
LPWSTR pPrintProcessorName,
|
|
LPWSTR pPathName,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIMONITOR
|
|
CreateMonitorEntry(
|
|
LPWSTR pMonitorDll,
|
|
LPWSTR pMonitorName,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIPORT
|
|
FindIniPortFromIniPrinter(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
|
|
BOOL
|
|
GetPrintDriverVersion(
|
|
IN LPCWSTR pszFileName,
|
|
OUT LPDWORD pdwFileMajorVersion,
|
|
OUT LPDWORD pdwFileMinorVersion
|
|
);
|
|
|
|
BOOL
|
|
GetBinaryVersion(
|
|
IN PCWSTR pszFileName,
|
|
OUT PDWORD pdwFileMajorVersion,
|
|
OUT PDWORD pdwFileMinorVersion
|
|
);
|
|
|
|
BOOL
|
|
IsSpecialDriver(
|
|
IN PINIDRIVER pIniDriver,
|
|
IN PINIPRINTPROC pIniProc,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
IsLocalFile (
|
|
IN LPCWSTR pszFileName,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
IsEXEFile(
|
|
IN LPCWSTR pszFileName
|
|
);
|
|
|
|
LPBYTE
|
|
PackStringToEOB(
|
|
IN LPWSTR pszSource,
|
|
IN LPBYTE pEnd
|
|
);
|
|
|
|
LPVOID
|
|
MakePTR (
|
|
IN LPVOID pBuf,
|
|
IN DWORD Quantity
|
|
);
|
|
|
|
DWORD
|
|
MakeOffset (
|
|
IN LPVOID pFirst,
|
|
IN LPVOID pSecond
|
|
);
|
|
|
|
|
|
LPWSTR
|
|
GetErrorString(
|
|
DWORD Error
|
|
);
|
|
|
|
DWORD
|
|
KMPrintersAreBlocked(
|
|
);
|
|
|
|
|
|
#define NULL_TERMINATED 0
|
|
INT
|
|
AnsiToUnicodeString(
|
|
LPSTR pAnsi,
|
|
LPWSTR pUnicode,
|
|
DWORD StringLength
|
|
);
|
|
|
|
int
|
|
Message(
|
|
HWND hwnd,
|
|
DWORD Type,
|
|
int CaptionID,
|
|
int TextID,
|
|
...
|
|
);
|
|
|
|
DWORD
|
|
PromptWriteError(
|
|
PSPOOL pSpool,
|
|
PHANDLE phThread,
|
|
PDWORD pdwThreadId
|
|
);
|
|
|
|
DWORD
|
|
InitializeEventLogging(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
SplLogEventWorker(
|
|
IN PINISPOOLER pIniSpooler,
|
|
IN WORD EventType,
|
|
IN NTSTATUS EventID,
|
|
IN BOOL bInSplSem,
|
|
IN LPWSTR pFirstString,
|
|
IN va_list vargs
|
|
);
|
|
|
|
VOID
|
|
SplLogEvent(
|
|
PINISPOOLER pIniSpooler,
|
|
WORD EventType,
|
|
NTSTATUS EventID,
|
|
BOOL bInSplSem,
|
|
LPWSTR pFirstString,
|
|
...
|
|
);
|
|
|
|
VOID
|
|
SplLogEventExternal(
|
|
IN WORD EventType,
|
|
IN DWORD EventID,
|
|
IN LPWSTR pFirstString,
|
|
...
|
|
);
|
|
|
|
VOID
|
|
LogPrintProcError(
|
|
IN DWORD Error,
|
|
IN PINIJOB pIniJob
|
|
);
|
|
|
|
LONG
|
|
InterlockedAnd (
|
|
IN OUT LONG volatile *Target,
|
|
IN LONG Set
|
|
);
|
|
|
|
LONG
|
|
InterlockedOr (
|
|
IN OUT LONG volatile *Target,
|
|
IN LONG Set
|
|
);
|
|
|
|
VOID
|
|
GetServerFilePoolSettings(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
#define IDS_LOCALSPOOLER 100
|
|
#define IDS_ERROR_WRITING_TO_PORT 101
|
|
#define IDS_ERROR_WRITING_TO_DISK 102
|
|
|
|
#define IDS_PRINTER_DRIVERS 104
|
|
#define IDS_UNNAMED 105
|
|
#define IDS_ERROR_WRITING_GENERAL 106
|
|
#define IDS_REMOTE_DOC 107
|
|
#define IDS_LOCAL_DOC 108
|
|
#define IDS_FASTPRINT_TIMEOUT 109
|
|
#define IDS_DRIVER_CHECKPOINT 110
|
|
|
|
// Maximum length of a builtin form
|
|
//
|
|
|
|
#define FORM_NAME_LEN 31
|
|
#define CUSTOM_NAME_LEN 31
|
|
#define FORM_DATA_LEN 32
|
|
|
|
// String table Ids for builtin form names
|
|
//
|
|
#define IDS_FORM_LETTER 200
|
|
#define IDS_FORM_LETTER_SMALL 201
|
|
#define IDS_FORM_TABLOID 202
|
|
#define IDS_FORM_LEDGER 203
|
|
#define IDS_FORM_LEGAL 204
|
|
#define IDS_FORM_STATEMENT 205
|
|
#define IDS_FORM_EXECUTIVE 206
|
|
#define IDS_FORM_A3 207
|
|
#define IDS_FORM_A4 208
|
|
#define IDS_FORM_A4_SMALL 209
|
|
#define IDS_FORM_A5 210
|
|
#define IDS_FORM_B4 211
|
|
#define IDS_FORM_B5 212
|
|
#define IDS_FORM_FOLIO 213
|
|
#define IDS_FORM_QUARTO 214
|
|
#define IDS_FORM_10X14 215
|
|
#define IDS_FORM_11X17 216
|
|
#define IDS_FORM_NOTE 217
|
|
#define IDS_FORM_ENVELOPE9 218
|
|
#define IDS_FORM_ENVELOPE10 219
|
|
#define IDS_FORM_ENVELOPE11 220
|
|
#define IDS_FORM_ENVELOPE12 221
|
|
#define IDS_FORM_ENVELOPE14 222
|
|
#define IDS_FORM_ENVELOPE_CSIZE_SHEET 223
|
|
#define IDS_FORM_ENVELOPE_DSIZE_SHEET 224
|
|
#define IDS_FORM_ENVELOPE_ESIZE_SHEET 225
|
|
#define IDS_FORM_ENVELOPE_DL 226
|
|
#define IDS_FORM_ENVELOPE_C5 227
|
|
#define IDS_FORM_ENVELOPE_C3 228
|
|
#define IDS_FORM_ENVELOPE_C4 229
|
|
#define IDS_FORM_ENVELOPE_C6 230
|
|
#define IDS_FORM_ENVELOPE_C65 231
|
|
#define IDS_FORM_ENVELOPE_B4 232
|
|
#define IDS_FORM_ENVELOPE_B5 233
|
|
#define IDS_FORM_ENVELOPE_B6 234
|
|
#define IDS_FORM_ENVELOPE 235
|
|
#define IDS_FORM_ENVELOPE_MONARCH 236
|
|
#define IDS_FORM_SIX34_ENVELOPE 237
|
|
#define IDS_FORM_US_STD_FANFOLD 238
|
|
#define IDS_FORM_GMAN_STD_FANFOLD 239
|
|
#define IDS_FORM_GMAN_LEGAL_FANFOLD 240
|
|
|
|
#if(WINVER >= 0x0400)
|
|
#define IDS_FORM_ISO_B4 241
|
|
#define IDS_FORM_JAPANESE_POSTCARD 242
|
|
#define IDS_FORM_9X11 243
|
|
#define IDS_FORM_10X11 244
|
|
#define IDS_FORM_15X11 245
|
|
#define IDS_FORM_ENV_INVITE 246
|
|
#define IDS_FORM_LETTER_EXTRA 247
|
|
#define IDS_FORM_LEGAL_EXTRA 248
|
|
#define IDS_FORM_TABLOID_EXTRA 249
|
|
#define IDS_FORM_A4_EXTRA 250
|
|
#define IDS_FORM_LETTER_TRANSVERSE 251
|
|
#define IDS_FORM_A4_TRANSVERSE 252
|
|
#define IDS_FORM_LETTER_EXTRA_TRANSVERSE 253
|
|
#define IDS_FORM_A_PLUS 254
|
|
#define IDS_FORM_B_PLUS 255
|
|
#define IDS_FORM_LETTER_PLUS 256
|
|
#define IDS_FORM_A4_PLUS 257
|
|
#define IDS_FORM_A5_TRANSVERSE 258
|
|
#define IDS_FORM_B5_TRANSVERSE 259
|
|
#define IDS_FORM_A3_EXTRA 260
|
|
#define IDS_FORM_A5_EXTRA 261
|
|
#define IDS_FORM_B5_EXTRA 262
|
|
#define IDS_FORM_A2 263
|
|
#define IDS_FORM_A3_TRANSVERSE 264
|
|
#define IDS_FORM_A3_EXTRA_TRANSVERSE 265
|
|
|
|
#define IDS_FORM_DBL_JAPANESE_POSTCARD 266
|
|
#define IDS_FORM_A6 267
|
|
#define IDS_FORM_JENV_KAKU2 268
|
|
#define IDS_FORM_JENV_KAKU3 269
|
|
#define IDS_FORM_JENV_CHOU3 270
|
|
#define IDS_FORM_JENV_CHOU4 271
|
|
#define IDS_FORM_LETTER_ROTATED 272
|
|
#define IDS_FORM_A3_ROTATED 273
|
|
#define IDS_FORM_A4_ROTATED 274
|
|
#define IDS_FORM_A5_ROTATED 275
|
|
#define IDS_FORM_B4_JIS_ROTATED 276
|
|
#define IDS_FORM_B5_JIS_ROTATED 277
|
|
#define IDS_FORM_JAPANESE_POSTCARD_ROTATED 278
|
|
#define IDS_FORM_DBL_JAPANESE_POSTCARD_ROTATED 279
|
|
#define IDS_FORM_A6_ROTATED 280
|
|
#define IDS_FORM_JENV_KAKU2_ROTATED 281
|
|
#define IDS_FORM_JENV_KAKU3_ROTATED 282
|
|
#define IDS_FORM_JENV_CHOU3_ROTATED 283
|
|
#define IDS_FORM_JENV_CHOU4_ROTATED 284
|
|
#define IDS_FORM_B6_JIS 285
|
|
#define IDS_FORM_B6_JIS_ROTATED 286
|
|
#define IDS_FORM_12X11 287
|
|
#define IDS_FORM_JENV_YOU4 288
|
|
#define IDS_FORM_JENV_YOU4_ROTATED 289
|
|
#define IDS_FORM_P16K 290
|
|
#define IDS_FORM_P32K 291
|
|
#define IDS_FORM_P32KBIG 292
|
|
#define IDS_FORM_PENV_1 293
|
|
#define IDS_FORM_PENV_2 294
|
|
#define IDS_FORM_PENV_3 295
|
|
#define IDS_FORM_PENV_4 296
|
|
#define IDS_FORM_PENV_5 297
|
|
#define IDS_FORM_PENV_6 298
|
|
#define IDS_FORM_PENV_7 299
|
|
#define IDS_FORM_PENV_8 300
|
|
#define IDS_FORM_PENV_9 301
|
|
#define IDS_FORM_PENV_10 302
|
|
#define IDS_FORM_P16K_ROTATED 303
|
|
#define IDS_FORM_P32K_ROTATED 304
|
|
#define IDS_FORM_P32KBIG_ROTATED 305
|
|
#define IDS_FORM_PENV_1_ROTATED 306
|
|
#define IDS_FORM_PENV_2_ROTATED 307
|
|
#define IDS_FORM_PENV_3_ROTATED 308
|
|
#define IDS_FORM_PENV_4_ROTATED 309
|
|
#define IDS_FORM_PENV_5_ROTATED 310
|
|
#define IDS_FORM_PENV_6_ROTATED 311
|
|
#define IDS_FORM_PENV_7_ROTATED 312
|
|
#define IDS_FORM_PENV_8_ROTATED 313
|
|
#define IDS_FORM_PENV_9_ROTATED 314
|
|
#define IDS_FORM_PENV_10_ROTATED 315
|
|
|
|
#define IDS_FORM_RESERVED_48 316
|
|
#define IDS_FORM_RESERVED_49 317
|
|
#define IDS_FORM_CUSTOMPAD 318
|
|
|
|
#endif /* WINVER >= 0x0400 */
|
|
|
|
VOID LogJobPrinted(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
#define MAP_READABLE 0
|
|
#define MAP_SETTABLE 1
|
|
|
|
DWORD
|
|
MapJobStatus(
|
|
DWORD Type,
|
|
DWORD Status
|
|
);
|
|
|
|
DWORD
|
|
MapPrinterStatus(
|
|
DWORD Type,
|
|
DWORD Status
|
|
);
|
|
|
|
|
|
BOOL
|
|
OpenPrinterPortW(
|
|
LPWSTR pPrinterName,
|
|
HANDLE *pHandle,
|
|
LPPRINTER_DEFAULTS pDefault
|
|
);
|
|
|
|
VOID
|
|
BroadcastChange(
|
|
PINISPOOLER pIniSpooler,
|
|
DWORD Message,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
);
|
|
|
|
VOID
|
|
MyMessageBeep(
|
|
DWORD fuType,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
VOID
|
|
SendJobAlert(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
BOOL
|
|
CheckDataTypes(
|
|
PINIPRINTPROC pIniPrintProc,
|
|
LPWSTR pDatatype
|
|
);
|
|
|
|
BOOL
|
|
ValidatePortTokenList(
|
|
IN OUT PKEYDATA pKeyData,
|
|
IN PINISPOOLER pIniSpooler,
|
|
IN BOOL bInitialize,
|
|
OUT BOOL *pbNoPorts OPTIONAL
|
|
);
|
|
|
|
VOID
|
|
FreePortTokenList(
|
|
PKEYDATA pKeyData
|
|
);
|
|
|
|
DWORD
|
|
ValidatePrinterInfo(
|
|
IN PPRINTER_INFO_2 pPrinter,
|
|
IN PINISPOOLER pIniSpooler,
|
|
IN PINIPRINTER pIniPrinter OPTIONAL,
|
|
OUT LPWSTR* ppszLocalName OPTIONAL
|
|
);
|
|
|
|
|
|
BOOL
|
|
DeletePortEntry(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
BOOL
|
|
GetTokenHandle(
|
|
PHANDLE pTokenHandle
|
|
);
|
|
|
|
|
|
VOID
|
|
LogJobInfo(
|
|
PINISPOOLER pIniSpooler,
|
|
NTSTATUS EventId,
|
|
DWORD JobId,
|
|
LPWSTR pDocumentName,
|
|
LPWSTR pUser,
|
|
LPWSTR pPrinterName,
|
|
DWORD curPos
|
|
);
|
|
|
|
LONG
|
|
Myatol(
|
|
LPWSTR nptr
|
|
);
|
|
|
|
ULONG_PTR
|
|
atox(
|
|
LPCWSTR psz
|
|
);
|
|
|
|
|
|
DWORD
|
|
DeleteSubkeys(
|
|
HKEY hKey,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
CreateClusterSpoolerEnvironmentsStructure(
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
CopyNewerOrOlderFiles(
|
|
IN LPCWSTR pszSourceDir,
|
|
IN LPCWSTR pszMasterDir,
|
|
IN BOOL (WINAPI *pfn)(LPWSTR, LPWSTR)
|
|
);
|
|
|
|
PINIENVIRONMENT
|
|
GetLocalArchEnv(
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
ClusterFindLanguageMonitor(
|
|
IN LPCWSTR pszMonitor,
|
|
IN LPCWSTR pszEnvName,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
ReadTimeStamp(
|
|
IN HKEY hkRoot,
|
|
IN OUT SYSTEMTIME *pSysTime,
|
|
IN LPCWSTR pszSubKey1,
|
|
IN LPCWSTR pszSubKey2,
|
|
IN LPCWSTR pszSubKey3,
|
|
IN LPCWSTR pszSubKey4,
|
|
IN LPCWSTR pszSubKey5,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
WriteTimeStamp(
|
|
IN HKEY hkRoot,
|
|
IN SYSTEMTIME SysTime,
|
|
IN LPCWSTR pszSubKey1,
|
|
IN LPCWSTR pszSubKey2,
|
|
IN LPCWSTR pszSubKey3,
|
|
IN LPCWSTR pszSubKey4,
|
|
IN LPCWSTR pszSubKey5,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
ClusterCheckDriverChanged(
|
|
IN HKEY hClusterVersionKey,
|
|
IN LPCWSTR pszDriver,
|
|
IN LPCWSTR pszEnv,
|
|
IN LPCWSTR pszVer,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
RunProcess(
|
|
IN LPCWSTR pszExe,
|
|
IN LPCWSTR pszCommand,
|
|
IN DWORD dwTimeOut,
|
|
OUT LPDWORD pdwExitCode OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
CopyICMFromLocalDiskToClusterDisk(
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
CopyICMFromClusterDiskToLocalDisk(
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
CreateProtectedDirectory(
|
|
IN LPCWSTR pszDir
|
|
);
|
|
|
|
DWORD
|
|
AddLocalDriverToClusterSpooler(
|
|
IN LPCWSTR pszDriver,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
StrCatPrefixMsz(
|
|
IN LPCWSTR pszPerfix,
|
|
IN LPWSTR pszzFiles,
|
|
IN OUT LPWSTR *ppszFullPathFiles
|
|
);
|
|
|
|
DWORD
|
|
ClusterSplDeleteUpgradeKey(
|
|
IN LPCWSTR pszResourceID
|
|
);
|
|
|
|
DWORD
|
|
ClusterSplReadUpgradeKey(
|
|
IN LPCWSTR pszResourceID,
|
|
OUT LPDWORD pdwValue
|
|
);
|
|
|
|
DWORD
|
|
CopyFileToDirectory(
|
|
IN LPCWSTR pszFullFileName,
|
|
IN LPCWSTR pszDestDir,
|
|
IN LPCWSTR pszDir1,
|
|
IN LPCWSTR pszDir2,
|
|
IN LPCWSTR pszDir3
|
|
);
|
|
|
|
DWORD
|
|
InstallMonitorFromCluster(
|
|
IN LPCWSTR pszName,
|
|
IN LPCWSTR pszEnvName,
|
|
IN LPCWSTR pszEnvDir,
|
|
IN PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIDRIVER
|
|
FindLocalDriver(
|
|
PINISPOOLER pIniSpooler,
|
|
LPWSTR pz
|
|
);
|
|
|
|
BOOL
|
|
FindLocalDriverAndVersion(
|
|
PINISPOOLER pIniSpooler,
|
|
LPWSTR pz,
|
|
PINIDRIVER *ppIniDriver,
|
|
PINIVERSION *ppIniVersion
|
|
);
|
|
|
|
BOOL
|
|
IsKMPD(
|
|
LPWSTR pDriverName
|
|
);
|
|
|
|
BOOL
|
|
IniDriverIsKMPD (
|
|
PINISPOOLER pIniSpooler,
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIVERSION pIniVersion,
|
|
PINIDRIVER pIniDriver
|
|
);
|
|
|
|
PINIDRIVER
|
|
FindCompatibleDriver(
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIVERSION * ppIniVersion,
|
|
LPWSTR pDriverName,
|
|
DWORD dwMajorVersion,
|
|
int FindAnyDriver
|
|
);
|
|
|
|
VOID
|
|
QueryUpgradeFlag(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
BOOL
|
|
LocalAddPortEx(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pBuffer,
|
|
LPWSTR pMonitorName
|
|
);
|
|
|
|
|
|
BOOL
|
|
ValidateSpoolHandle(
|
|
PSPOOL pSpool,
|
|
DWORD dwDisallowMask
|
|
);
|
|
|
|
|
|
PSECURITY_DESCRIPTOR
|
|
MapPrinterSDToShareSD(
|
|
PSECURITY_DESCRIPTOR pPrinterSD
|
|
);
|
|
|
|
BOOL
|
|
CallDevQueryPrint(
|
|
LPWSTR pPrinterName,
|
|
LPDEVMODE pDevMode,
|
|
LPWSTR ErrorString,
|
|
DWORD dwErrorString,
|
|
DWORD dwPrinterFlags,
|
|
DWORD dwJobFlags
|
|
);
|
|
|
|
|
|
BOOL
|
|
InitializeWinSpoolDrv(
|
|
VOID
|
|
);
|
|
|
|
|
|
VOID
|
|
FixDevModeDeviceName(
|
|
LPWSTR pPrinterName,
|
|
PDEVMODE pDevMode,
|
|
DWORD cbDevMode
|
|
);
|
|
|
|
VOID
|
|
RemoveOldNetPrinters(
|
|
PPRINTER_INFO_1 pCurrentPrinterInfo1,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIJOB
|
|
AssignFreeJobToFreePort(
|
|
PINIPORT pIniPort,
|
|
DWORD *pTimeToWait
|
|
);
|
|
|
|
BOOL
|
|
ValidRawDatatype(
|
|
LPWSTR pszDataType);
|
|
|
|
BOOL
|
|
InternalAddPrinterDriverEx(
|
|
LPWSTR pName,
|
|
DWORD Level,
|
|
LPBYTE pDriverInfo,
|
|
DWORD dwFileCopyFlags,
|
|
PINISPOOLER pIniSpooler,
|
|
BOOL bUseScratchDir,
|
|
BOOL bImpersonateOnCreate
|
|
);
|
|
|
|
VOID
|
|
CheckSizeDetectionThread(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
UpgradeForms(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
HANDLE
|
|
CreatePrinterHandle(
|
|
LPWSTR pPrinterName,
|
|
LPWSTR pFullMachineName,
|
|
PINIPRINTER pIniPrinter,
|
|
PINIPORT pIniPort,
|
|
PINIPORT pIniNetPort,
|
|
PINIJOB pIniJob,
|
|
DWORD TypeofHandle,
|
|
HANDLE hPort,
|
|
PPRINTER_DEFAULTS pDefaults,
|
|
PINISPOOLER pIniSpooler,
|
|
DWORD AccessRequested,
|
|
LPBYTE pSplClientInfo,
|
|
DWORD dwLevel,
|
|
HANDLE hReadFile
|
|
);
|
|
|
|
DWORD
|
|
CreateServerHandle(
|
|
LPWSTR pPrinterName,
|
|
LPHANDLE pPrinterHandle,
|
|
LPPRINTER_DEFAULTS pDefaults,
|
|
PINISPOOLER pIniSpooler,
|
|
DWORD dwTypeofHandle
|
|
);
|
|
|
|
|
|
PINIPRINTER
|
|
FindPrinterShare(
|
|
LPCWSTR pShareName,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
PINIJOB
|
|
CreateJobEntry(
|
|
PSPOOL pSpool,
|
|
DWORD Level,
|
|
LPBYTE pDocInfo,
|
|
DWORD JobId,
|
|
BOOL bRemote,
|
|
DWORD JobStatus,
|
|
LPWSTR pMachineName
|
|
);
|
|
|
|
BOOL
|
|
DeletePrinterCheck(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
VOID
|
|
DeleteSpoolerCheck(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
BOOL
|
|
DeletePrinterIni(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
DWORD
|
|
SplDeleteThisKey(
|
|
HKEY hParentKey, // handle to parent of key to delete
|
|
HKEY hThisKey, // handle of key to delete
|
|
LPWSTR pThisKeyName, // name of this key
|
|
BOOL bDeleteNullKey, // if *pThisKeyName is NULL, delete it if TRUE
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
CopyPrinterIni(
|
|
PINIPRINTER pIniPrinter,
|
|
LPWSTR pNewName
|
|
);
|
|
|
|
BOOL
|
|
UpdateString(
|
|
LPWSTR* ppszCur,
|
|
LPWSTR pszNew);
|
|
|
|
|
|
BOOL
|
|
SetPrinterPorts(
|
|
PSPOOL pSpool,
|
|
PINIPRINTER pIniPrinter,
|
|
PKEYDATA pKeyData
|
|
);
|
|
|
|
VOID
|
|
InternalDeletePrinter(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
PurgePrinter(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
AddIniPrinterToIniPort(
|
|
PINIPORT pIniPort,
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
AddIniPortToIniPrinter(
|
|
PINIPRINTER pIniPrinter,
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
LPCWSTR
|
|
FindFileName(
|
|
LPCWSTR pPathName
|
|
);
|
|
|
|
VOID
|
|
UpdateJobAttributes(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
BOOL
|
|
InternalCopyFile(
|
|
HANDLE hFile,
|
|
PWIN32_FIND_DATA pSourceFileData,
|
|
LPWSTR pTagetFileName,
|
|
BOOL bOverWriteIfTargetExists
|
|
);
|
|
|
|
BOOL
|
|
UpdateFile(
|
|
PINIVERSION pIniVersion,
|
|
HANDLE hSourceFile,
|
|
LPWSTR pSourceFile,
|
|
DWORD dwVersion,
|
|
LPWSTR pDestDir,
|
|
DWORD dwFileCopyFlags,
|
|
BOOL bImpersonateOnCreate,
|
|
LPBOOL pbFileUpdated,
|
|
LPBOOL pbFileMoved,
|
|
BOOL bSameEnvironment,
|
|
BOOL bWin95Environment
|
|
);
|
|
|
|
BOOL
|
|
PrinterCreateKey(
|
|
HKEY hKey,
|
|
LPWSTR pSubKey,
|
|
PHKEY phkResult,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegSetString(
|
|
HANDLE hPrinterKey,
|
|
LPWSTR pValueName,
|
|
LPWSTR pStringValue,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegSetDWord(
|
|
HANDLE hPrinterKey,
|
|
LPWSTR pValueName,
|
|
DWORD dwParam,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
CheckAndUpdatePrinterRegAll(
|
|
PINISPOOLER pIniSpooler,
|
|
LPWSTR pszPrinterName,
|
|
LPWSTR pszPort,
|
|
BOOL bDelete
|
|
);
|
|
|
|
BOOL
|
|
ForEachPrinterCallDriverDrvUpgrade(
|
|
PINISPOOLER pIniSpooler,
|
|
PINIDRIVER pIniDriver,
|
|
LPCWSTR pOldDriverDir,
|
|
PINTERNAL_DRV_FILE pInternalDriverFile,
|
|
DWORD dwFileCount,
|
|
LPBYTE pDriverInfo
|
|
);
|
|
|
|
BOOL
|
|
DeleteAllFilesInDirectory(
|
|
LPWSTR pDirectory,
|
|
BOOL bWaitForReboot
|
|
);
|
|
|
|
BOOL
|
|
DeleteAllFilesAndDirectory(
|
|
LPWSTR pDirectory,
|
|
BOOL bWaitForReboot
|
|
);
|
|
|
|
VOID
|
|
DeleteDirectoryRecursively(
|
|
LPCWSTR pDirectory,
|
|
BOOL bWaitForReboot
|
|
);
|
|
|
|
DWORD
|
|
CreateNumberedTempDirectory(
|
|
LPCWSTR pszDirectory,
|
|
LPWSTR *ppszTempDirectory
|
|
);
|
|
|
|
|
|
BOOL
|
|
FileExists(
|
|
LPWSTR pFileName
|
|
);
|
|
|
|
BOOL
|
|
DirectoryExists(
|
|
LPWSTR pDirectoryName
|
|
);
|
|
|
|
PINIVERSION
|
|
FindVersionEntry(
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
DWORD dwVersion
|
|
);
|
|
|
|
BOOL
|
|
CreateDirectoryWithoutImpersonatingUser(
|
|
LPWSTR pDirectory
|
|
);
|
|
|
|
VOID
|
|
InsertVersionList(
|
|
PINIVERSION* pIniVersionHead,
|
|
PINIVERSION pIniVersion
|
|
);
|
|
|
|
int
|
|
wstrcmpEx(
|
|
LPCWSTR s1,
|
|
LPCWSTR s2,
|
|
BOOL bCaseSensitive
|
|
);
|
|
|
|
BOOL
|
|
RegSetString(
|
|
HANDLE hKey,
|
|
LPWSTR pValueName,
|
|
LPWSTR pStringValue,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegSetDWord(
|
|
HANDLE hKey,
|
|
LPWSTR pValueName,
|
|
DWORD dwParam,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegSetBinaryData(
|
|
HKEY hKey,
|
|
LPWSTR pValueName,
|
|
LPBYTE pData,
|
|
DWORD cbData,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegSetMultiString(
|
|
HANDLE hKey,
|
|
LPWSTR pValueName,
|
|
LPWSTR pStringValue,
|
|
DWORD cbString,
|
|
PDWORD pdwLastError,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegGetString(
|
|
HANDLE hKey,
|
|
LPWSTR pValueName,
|
|
LPWSTR *ppValue,
|
|
LPDWORD pcchCount,
|
|
PDWORD pdwLastError,
|
|
BOOL bFailIfNotFound,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
RegGetMultiSzString(
|
|
HANDLE hKey,
|
|
LPWSTR pValueName,
|
|
LPWSTR *ppValue,
|
|
LPDWORD pcchValue,
|
|
PDWORD pdwLastError,
|
|
BOOL bFailIfNotFound,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
ValidatePrinterName(
|
|
LPWSTR pszNewName,
|
|
PINISPOOLER pIniSpooler,
|
|
PINIPRINTER pIniPrinter,
|
|
LPWSTR *ppszLocalName
|
|
);
|
|
|
|
DWORD
|
|
ValidatePrinterShareName(
|
|
LPWSTR pszNewShareName,
|
|
PINISPOOLER pIniSpooler,
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
AllocOrUpdateStringAndTestSame(
|
|
IN LPWSTR *ppString,
|
|
IN LPCWSTR pNewValue,
|
|
IN LPCWSTR pOldValue,
|
|
IN BOOL bCaseSensitive,
|
|
IN OUT BOOL *pbFail,
|
|
IN OUT BOOL *pbIdentical
|
|
);
|
|
|
|
BOOL
|
|
AllocOrUpdateString(
|
|
IN LPWSTR *ppString,
|
|
IN LPCWSTR pNewValue,
|
|
IN LPCWSTR pOldValue,
|
|
IN BOOL bCaseSensitive,
|
|
IN OUT BOOL *bFail
|
|
);
|
|
|
|
VOID
|
|
FreeStructurePointers(
|
|
LPBYTE lpStruct,
|
|
LPBYTE lpStruct2,
|
|
LPDWORD lpOffsets);
|
|
|
|
VOID
|
|
CopyNewOffsets(
|
|
LPBYTE pStruct,
|
|
LPBYTE pTempStruct,
|
|
LPDWORD lpOffsets
|
|
);
|
|
|
|
LPWSTR
|
|
GetConfigFilePath(
|
|
IN PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
PDEVMODE
|
|
ConvertDevModeToSpecifiedVersion(
|
|
IN PINIPRINTER pIniPrinter,
|
|
IN PDEVMODE pDevMode,
|
|
IN LPWSTR pszConfigFile, OPTIONAL
|
|
IN LPWSTR pszPrinterNameWithToken, OPTIONAL
|
|
IN BOOL bNt35xVersion
|
|
);
|
|
|
|
BOOL
|
|
CreateRedirectionThread(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
VOID
|
|
RemoveDeviceName(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
BOOL
|
|
IsPortType(
|
|
LPWSTR pPort,
|
|
LPWSTR pPrefix
|
|
);
|
|
|
|
BOOL
|
|
LocalSetPort(
|
|
LPWSTR pszName,
|
|
LPWSTR pszPortName,
|
|
DWORD dwLevel,
|
|
LPBYTE pPortInfo
|
|
);
|
|
|
|
DWORD
|
|
SetPrinterDataServer(
|
|
PINISPOOLER pIniSpooler,
|
|
LPWSTR pValueName,
|
|
DWORD Type,
|
|
LPBYTE pData,
|
|
DWORD cbData
|
|
);
|
|
|
|
BOOL
|
|
BuildPrintObjectProtection(
|
|
IN PUCHAR AceType,
|
|
IN DWORD AceCount,
|
|
IN PSID *AceSid,
|
|
IN ACCESS_MASK *AceMask,
|
|
IN BYTE *InheritFlags,
|
|
IN PSID OwnerSid,
|
|
IN PSID GroupSid,
|
|
IN PGENERIC_MAPPING GenericMap,
|
|
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor
|
|
);
|
|
|
|
LPWSTR
|
|
AnsiToUnicodeStringWithAlloc(
|
|
LPSTR pAnsi
|
|
);
|
|
|
|
HRESULT
|
|
UnicodeToAnsiString(
|
|
IN PWSTR pszUnicode,
|
|
OUT PSTR *ppszAnsi
|
|
);
|
|
|
|
HRESULT
|
|
BuildIPArrayFromCommaList(
|
|
LPTSTR pszCommaList,
|
|
LPWSTR **ppszNames,
|
|
DWORD *pcNames
|
|
);
|
|
|
|
VOID
|
|
FreeIniMonitor(
|
|
PINIMONITOR pIniMonitor
|
|
);
|
|
|
|
DWORD
|
|
RestartJob(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
BOOL
|
|
IsCallViaRPC(
|
|
IN VOID
|
|
);
|
|
|
|
VOID
|
|
UpdateReferencesToChainedJobs(
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
PrinterDriverEvent(
|
|
PINIPRINTER pIniPrinter,
|
|
INT PrinterEvent,
|
|
LPARAM lParam,
|
|
DWORD *pdwReturnedError
|
|
);
|
|
|
|
BOOL
|
|
SetPrinterShareInfo(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
VOID
|
|
LinkPortToSpooler(
|
|
PINIPORT pIniPort,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
VOID
|
|
DelinkPortFromSpooler(
|
|
PINIPORT pIniPort,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
|
|
DWORD
|
|
FinalInitAfterRouterInitComplete(
|
|
DWORD dwUpgrade,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
DWORD
|
|
CheckWebPrinting(
|
|
BOOL* bWebPrintingInstalled
|
|
);
|
|
|
|
DWORD
|
|
WebShareManager(
|
|
PINISPOOLER pIniSpooler,
|
|
BOOL bEnableWebShares
|
|
);
|
|
|
|
VOID
|
|
WebShare(
|
|
LPWSTR pShareName
|
|
);
|
|
|
|
VOID
|
|
WebUnShare(
|
|
LPWSTR pShareName
|
|
);
|
|
|
|
DWORD
|
|
OpenPrinterKey(
|
|
PINIPRINTER pIniPrinter,
|
|
REGSAM samDesired,
|
|
HANDLE *phKey,
|
|
LPCWSTR pKeyName,
|
|
BOOL bOpen
|
|
);
|
|
|
|
DWORD
|
|
GetIniDriverAndDirForThisMachine(
|
|
IN PINIPRINTER pIniPrinter,
|
|
OUT LPWSTR pszDriverDir,
|
|
OUT PINIDRIVER *ppIniDriver
|
|
);
|
|
|
|
BOOL
|
|
CopyAllFilesAndDeleteOldOnes(
|
|
PINIVERSION pIniVersion,
|
|
PINTERNAL_DRV_FILE pInternalDriverFile,
|
|
DWORD dwFileCount,
|
|
LPWSTR pDestDir,
|
|
DWORD dwFileCopyFlags,
|
|
BOOL bImpersonateOnCreate,
|
|
LPBOOL pbFileMoved,
|
|
BOOL bSameEnvironment,
|
|
BOOL bWin95Environment
|
|
);
|
|
|
|
BOOL LocalDriverUnloadComplete(
|
|
LPWSTR pDriverFile);
|
|
|
|
|
|
VOID PendingDriverUpgrades(
|
|
LPWSTR pDriverFile
|
|
);
|
|
|
|
BOOL
|
|
GenerateDirectoryNamesForCopyFilesKey(
|
|
PSPOOL pSpool,
|
|
HKEY hKey,
|
|
LPWSTR *ppszSourceDir,
|
|
LPWSTR *ppszTargetDir,
|
|
DWORD cbMax
|
|
);
|
|
|
|
LPWSTR
|
|
BuildFilesCopiedAsAString(
|
|
PINTERNAL_DRV_FILE pInternalDriverFile,
|
|
DWORD dwCount
|
|
);
|
|
|
|
VOID
|
|
SeekPrinterSetEvent(
|
|
PINIJOB pIniJob,
|
|
HANDLE hFile,
|
|
BOOL bEndDoc
|
|
);
|
|
|
|
VOID
|
|
SetPortErrorEvent(
|
|
PINIPORT pIniPort
|
|
);
|
|
|
|
BOOL
|
|
DeleteIniPrinterDevNode(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
VOID
|
|
SplConfigChange(
|
|
);
|
|
|
|
BOOL
|
|
DeletePrinterInAllConfigs(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
WritePrinterOnlineStatusInCurrentConfig(
|
|
PINIPRINTER pIniPrinter
|
|
);
|
|
|
|
BOOL
|
|
IsDsPresent(
|
|
VOID
|
|
);
|
|
|
|
PWSTR
|
|
FixDelim(
|
|
PCWSTR pszInBuffer,
|
|
WCHAR wcDelim
|
|
);
|
|
|
|
PWSTR
|
|
Array2DelimString(
|
|
PSTRINGS pStringArray,
|
|
WCHAR wcDelim
|
|
);
|
|
|
|
PSTRINGS
|
|
ShortNameArray2LongNameArray(
|
|
PSTRINGS pShortNames
|
|
);
|
|
|
|
PSTRINGS
|
|
DelimString2Array(
|
|
PCWSTR pszDelimString,
|
|
WCHAR wcDelim
|
|
);
|
|
|
|
BOOL
|
|
ValidateXcvHandle(
|
|
PINIXCV pIniXcv
|
|
);
|
|
|
|
VOID
|
|
FreeStringArray(
|
|
PSTRINGS pStrings
|
|
);
|
|
|
|
PSTRINGS
|
|
AllocStringArray(
|
|
DWORD nStrings
|
|
);
|
|
|
|
|
|
VOID
|
|
GetRegistryLocation(
|
|
HANDLE hKey,
|
|
LPCWSTR pszPath,
|
|
PHANDLE phKeyOut,
|
|
LPCWSTR *ppszPathOut
|
|
);
|
|
|
|
PWSTR
|
|
GetPrinterUrl(
|
|
PSPOOL pSpool
|
|
);
|
|
|
|
VOID
|
|
ClearJobError(
|
|
PINIJOB pIniJob
|
|
);
|
|
|
|
BOOL
|
|
UpdateDriverFileRefCnt(
|
|
PINIENVIRONMENT pIniEnvironment,
|
|
PINIVERSION pIniVersion,
|
|
PINIDRIVER pIniDriver,
|
|
LPCWSTR pDirectory,
|
|
DWORD dwDeleteFlag,
|
|
BOOL bIncrementFlag
|
|
);
|
|
|
|
|
|
BOOL
|
|
LocalRefreshPrinterChangeNotification(
|
|
HANDLE hPrinter,
|
|
DWORD dwColor,
|
|
PVOID pPrinterNotifyRefresh,
|
|
LPVOID* ppPrinterNotifyInfo
|
|
);
|
|
|
|
BOOL
|
|
CopyRegistryKeys(
|
|
HKEY hSourceParentKey,
|
|
LPWSTR szSourceKey,
|
|
HKEY hDestParentKey,
|
|
LPWSTR szDestKey,
|
|
PINISPOOLER pIniSpooler
|
|
);
|
|
|
|
BOOL
|
|
SplDeleteFile(
|
|
LPCTSTR lpFileName
|
|
);
|
|
|
|
BOOL
|
|
SplMoveFileEx(
|
|
LPCTSTR lpExistingFileName,
|
|
LPCTSTR lpNewFileName,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
DWORD
|
|
GetDefaultForKMPrintersBlockedPolicy (
|
|
);
|
|
|
|
ULONG_PTR
|
|
AlignToRegType(
|
|
IN ULONG_PTR Data,
|
|
IN DWORD RegType
|
|
);
|
|
|
|
BOOL
|
|
InternalINFInstallDriver(
|
|
LPDRIVER_INFO_7 pDriverInfo
|
|
);
|
|
|
|
DWORD
|
|
GetServerInstallTimeOut(
|
|
);
|
|
|
|
|
|
BOOL
|
|
AllowFaxSharing(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
GetClientSessionData(
|
|
OUT ULONG *plSessionId
|
|
);
|
|
|
|
BOOL
|
|
ShowThisPrinter(
|
|
IN PINIPRINTER pIniPrinter,
|
|
IN HANDLE hToken OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
PrinterNotificationVisible(
|
|
IN PINIPRINTER pIniPrinter OPTIONAL,
|
|
IN PSPOOL pSpool
|
|
);
|
|
|
|
DWORD
|
|
DetermineJobSessionId(
|
|
PSPOOL pSpool
|
|
);
|
|
|
|
typedef BOOLEAN
|
|
(*PWINSTATION_SEND_MESSAGEW)(
|
|
HANDLE hServer,
|
|
ULONG LogonId,
|
|
LPWSTR pTitle,
|
|
ULONG TitleLength,
|
|
LPWSTR pMessage,
|
|
ULONG MessageLength,
|
|
ULONG Style,
|
|
ULONG Timeout,
|
|
PULONG pResponse,
|
|
BOOL DoNotWait
|
|
);
|
|
|
|
int
|
|
WinStationMessage(
|
|
DWORD SessionId,
|
|
HWND hWnd,
|
|
DWORD Type,
|
|
int CaptionID,
|
|
int TextID,
|
|
...
|
|
);
|
|
|
|
int
|
|
WinStationMessageBox(
|
|
DWORD SessionId,
|
|
HWND hWnd,
|
|
LPCWSTR lpText,
|
|
LPCWSTR lpCaption,
|
|
UINT uType
|
|
);
|
|
|
|
BOOL
|
|
InitializeMessageBoxFunction(
|
|
);
|
|
|
|
VOID
|
|
LogFatalPortError(
|
|
IN PINISPOOLER pIniSpooler,
|
|
IN PCWSTR pszName
|
|
);
|
|
|
|
VOID
|
|
FreeIniEnvironment(
|
|
IN PINIENVIRONMENT pIniEnvironment
|
|
);
|
|
|
|
VOID
|
|
DeleteIniVersion(
|
|
IN PINIENVIRONMENT pIniEnvironment,
|
|
IN PINIVERSION pIniVersion
|
|
);
|
|
|
|
VOID
|
|
FreeIniDriver(
|
|
IN PINIENVIRONMENT pIniEnvironment,
|
|
IN PINIVERSION pIniVersion,
|
|
IN PINIDRIVER pIniDriver
|
|
);
|
|
|
|
VOID
|
|
FreeIniPrintProc(
|
|
IN PINIPRINTPROC pIniPrintProc
|
|
);
|
|
|
|
BOOL
|
|
MergeMultiSz(
|
|
IN PCWSTR pszMultiSz1,
|
|
IN DWORD cchMultiSz1,
|
|
IN PCWSTR pszMultiSz2,
|
|
IN DWORD cchMultiSz2,
|
|
OUT PWSTR *ppszMultiSzMerge,
|
|
OUT DWORD *pcchMultiSzMerge OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
AddMultiSzNoDuplicates(
|
|
IN PCWSTR pszMultiSzIn,
|
|
IN OUT PWSTR pszNewMultiSz,
|
|
IN DWORD cchNewMultiSz
|
|
);
|
|
|
|
DWORD
|
|
GetMultiSZLen(
|
|
IN LPWSTR pMultiSzSrc
|
|
);
|
|
|
|
DWORD
|
|
CheckShareSame(
|
|
IN PINIPRINTER pIniPrinter,
|
|
IN SHARE_INFO_502 *pShareInfo502,
|
|
OUT BOOL *pbSame
|
|
);
|
|
|
|
|
|
EXTERN_C
|
|
HRESULT
|
|
StrCchCopyMultipleStr(
|
|
IN PWSTR pszBuffer,
|
|
IN SIZE_T cchBuffer,
|
|
IN PCWSTR pszSource,
|
|
OUT PWSTR *ppszNext,
|
|
OUT SIZE_T *pcchRemaining
|
|
);
|
|
|
|
EXTERN_C
|
|
HRESULT
|
|
StrCbCopyMultipleStr(
|
|
IN PWSTR pszBuffer,
|
|
IN SIZE_T cbBuffer,
|
|
IN PCWSTR pszSource,
|
|
OUT PWSTR *ppszNext,
|
|
OUT SIZE_T *pcbRemaining
|
|
);
|
|
|
|
BOOL
|
|
IsStringNullTerminatedInBuffer(
|
|
IN PWSTR pszBuffer,
|
|
IN SIZE_T cchBuffer
|
|
);
|
|
|
|
VOID
|
|
DiscardJobFromPortThread(
|
|
IN PINIJOB pIniJob,
|
|
IN BOOL bStartDocComplete
|
|
);
|
|
|
|
BOOL
|
|
RetrieveMasqPrinterInfo(
|
|
IN PSPOOL pSpool,
|
|
OUT PRINTER_INFO_2 **ppPrinterInfo
|
|
);
|
|
|
|
DWORD
|
|
GetPrinterInfoFromRouter(
|
|
IN HANDLE hMasqPrinter,
|
|
OUT PRINTER_INFO_2 **ppPrinterInfo
|
|
);
|
|
|
|
DWORD
|
|
AsyncPopulateMasqPrinterCache(
|
|
IN VOID *ThreadData
|
|
);
|
|
|
|
BOOL
|
|
GetClientTokenForNotification(
|
|
IN OUT SPOOL *pSpool
|
|
);
|
|
|
|
|
|
//
|
|
// WMI macros to fill the WMI data struct.
|
|
//
|
|
#define SplWmiCopyEndJobData(WmiData, pIniJob, CreateInfo) \
|
|
{ \
|
|
if ((pIniJob)->pDatatype && \
|
|
(_wcsnicmp((pIniJob)->pDatatype, L"TEXT", 4) == 0)) \
|
|
(WmiData)->uJobData.eDataType = eDataTypeTEXT; \
|
|
else if ((pIniJob)->pDatatype && \
|
|
(_wcsnicmp((pIniJob)->pDatatype, L"NT EMF", 6) == 0)) \
|
|
(WmiData)->uJobData.eDataType = eDataTypeEMF; \
|
|
else \
|
|
(WmiData)->uJobData.eDataType = eDataTypeRAW; \
|
|
(WmiData)->uJobData.ulSize = (pIniJob)->Size; \
|
|
(WmiData)->uJobData.ulPages = (pIniJob)->cPagesPrinted; \
|
|
(WmiData)->uJobData.ulPagesPerSide = (pIniJob)->dwJobNumberOfPagesPerSide; \
|
|
(WmiData)->uJobData.sFilesOpened = 0; \
|
|
(WmiData)->uJobData.sFilesOpened += \
|
|
(((CreateInfo) & FP_SHD_CREATED) ? 1 : 0); \
|
|
(WmiData)->uJobData.sFilesOpened += \
|
|
(((CreateInfo) & FP_SPL_WRITER_CREATED) ? 1 : 0); \
|
|
(WmiData)->uJobData.sFilesOpened += \
|
|
(((CreateInfo) & FP_SPL_READER_CREATED) ? 1 : 0); \
|
|
}
|
|
|
|
#define SplWmiCopyRenderedData(WmiData, pDevmode) \
|
|
{ \
|
|
DWORD dmFields = (pDevmode)->dmFields; \
|
|
if (dmFields & DM_YRESOLUTION) { \
|
|
(WmiData)->uEmfData.sXRes = (pDevmode)->dmPrintQuality; \
|
|
(WmiData)->uEmfData.sYRes = (pDevmode)->dmYResolution; \
|
|
(WmiData)->uEmfData.sQuality = 0; \
|
|
} \
|
|
else if (dmFields & DM_PRINTQUALITY) { \
|
|
(WmiData)->uEmfData.sQuality = (pDevmode)->dmPrintQuality; \
|
|
(WmiData)->uEmfData.sXRes = 0; \
|
|
(WmiData)->uEmfData.sYRes = 0; \
|
|
} \
|
|
else { \
|
|
(WmiData)->uEmfData.sQuality = 0; \
|
|
(WmiData)->uEmfData.sXRes = 0; \
|
|
(WmiData)->uEmfData.sYRes = 0; \
|
|
} \
|
|
(WmiData)->uEmfData.sColor = (dmFields & DM_COLOR ? (pDevmode)->dmColor : 0); \
|
|
(WmiData)->uEmfData.sCopies = (dmFields & DM_COPIES ? (pDevmode)->dmCopies : 0); \
|
|
(WmiData)->uEmfData.sTTOption = (dmFields & DM_TTOPTION ? (pDevmode)->dmTTOption : 0); \
|
|
(WmiData)->uEmfData.ulICMMethod = (dmFields & DM_ICMMETHOD ? (pDevmode)->dmICMMethod : 0); \
|
|
(WmiData)->uEmfData.ulSize = 0;\
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|