450 lines
9.3 KiB
C
450 lines
9.3 KiB
C
/*++
|
|
|
|
Copyright (c) 1990 - 1995 Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
splcom.h
|
|
|
|
Abstract:
|
|
|
|
Header file for Common Routines in the Spooler.
|
|
|
|
Note -- link with spoolss.lib to find these routines
|
|
|
|
Author:
|
|
|
|
Krishna Ganugapati (KrishnaG) 02-Feb-1994
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _SPLCOM
|
|
#define _SPLCOM
|
|
|
|
#include "spllib.hxx"
|
|
|
|
//
|
|
// Include necessary for PATTRIBUTE_INFO_3, parameter in GetJobAttributes
|
|
// which was moved from prtprocs\winprint to spoolss\dll
|
|
//
|
|
#include <winddiui.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// This assumes that addr is an LPBYTE type.
|
|
//
|
|
#define WORD_ALIGN_DOWN(addr) ((LPBYTE)((ULONG_PTR)addr &= ~1))
|
|
|
|
#define DWORD_ALIGN_UP(size) (((size)+3)&~3)
|
|
#define DWORD_ALIGN_DOWN(size) ((size)&~3)
|
|
|
|
#define ALIGN_UP(addr, type) ((type) ((ULONG_PTR) (addr) + (sizeof(type) - 1))&~(sizeof(type) - 1))
|
|
#define ALIGN_DOWN(addr, type) ((type) ((ULONG_PTR) (addr) & ~(sizeof(type) - 1)))
|
|
|
|
#define ALIGN_PTR_UP(addr) ALIGN_UP(addr, ULONG_PTR)
|
|
#define ALIGN_PTR_DOWN(addr) ALIGN_DOWN(addr, ULONG_PTR)
|
|
|
|
//
|
|
// BitMap macros, assumes map is a DWORD array
|
|
//
|
|
#define MARKUSE(map, pos) ((map)[(pos) / 32] |= (1 << ((pos) % 32) ))
|
|
#define MARKOFF(map, pos) ((map)[(pos) / 32] &= ~(1 << ((pos) % 32) ))
|
|
|
|
#define ISBITON(map, id) ((map)[id / 32] & ( 1 << ((id) % 32) ) )
|
|
|
|
#define BROADCAST_TYPE_MESSAGE 1
|
|
#define BROADCAST_TYPE_CHANGEDEFAULT 2
|
|
|
|
|
|
|
|
VOID
|
|
UpdatePrinterRegAll(
|
|
LPWSTR pszPrinterName,
|
|
LPWSTR pszPort,
|
|
BOOL bDelete
|
|
);
|
|
|
|
#define UPDATE_REG_CHANGE FALSE
|
|
#define UPDATE_REG_DELETE TRUE
|
|
|
|
#if defined(_MIPS_)
|
|
#define LOCAL_ENVIRONMENT L"Windows NT R4000"
|
|
#elif defined(_AXP64_)
|
|
#define LOCAL_ENVIRONMENT L"Windows Alpha_AXP64"
|
|
#elif defined(_ALPHA_)
|
|
#define LOCAL_ENVIRONMENT L"Windows NT Alpha_AXP"
|
|
#elif defined(_PPC_)
|
|
#define LOCAL_ENVIRONMENT L"Windows NT PowerPC"
|
|
#elif defined(_IA64_)
|
|
#define LOCAL_ENVIRONMENT L"Windows IA64"
|
|
#else
|
|
#define LOCAL_ENVIRONMENT L"Windows NT x86"
|
|
#endif
|
|
|
|
#define SPOOLER_VERSION 3
|
|
#define NOTIFICATION_VERSION 2
|
|
#define DSPRINTQUEUE_VERSION SPOOLER_VERSION
|
|
|
|
//
|
|
// Flags for ResetPrinterEx
|
|
//
|
|
|
|
|
|
#define RESET_PRINTER_DATATYPE 0x00000001
|
|
#define RESET_PRINTER_DEVMODE 0x00000002
|
|
|
|
VOID
|
|
SplShutDownRouter(
|
|
VOID
|
|
);
|
|
|
|
PVOID
|
|
MIDL_user_allocate1 (
|
|
IN size_t NumBytes
|
|
);
|
|
|
|
|
|
VOID
|
|
MIDL_user_free1 (
|
|
IN void *MemPointer
|
|
);
|
|
|
|
|
|
BOOL
|
|
BroadcastMessage(
|
|
DWORD dwType,
|
|
DWORD dwMessage,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
);
|
|
|
|
VOID
|
|
DllSetFailCount(
|
|
DWORD FailCount
|
|
);
|
|
|
|
LPVOID
|
|
DllAllocSplMem(
|
|
DWORD cb
|
|
);
|
|
|
|
BOOL
|
|
DllFreeSplMem(
|
|
LPVOID pMem
|
|
);
|
|
|
|
LPVOID
|
|
ReallocSplMem(
|
|
LPVOID lpOldMem,
|
|
DWORD cbOld,
|
|
DWORD cbNew
|
|
);
|
|
|
|
|
|
LPWSTR
|
|
AllocSplStr(
|
|
LPCWSTR lpStr
|
|
);
|
|
|
|
|
|
BOOL
|
|
DllFreeSplStr(
|
|
LPWSTR lpStr
|
|
);
|
|
|
|
BOOL
|
|
ReallocSplStr(
|
|
LPWSTR *plpStr,
|
|
LPCWSTR lpStr
|
|
);
|
|
|
|
LPVOID
|
|
AlignRpcPtr (
|
|
LPVOID pBuffer,
|
|
LPDWORD pcbBuf
|
|
);
|
|
|
|
VOID
|
|
UndoAlignRpcPtr (
|
|
LPVOID pBuffer,
|
|
LPVOID pAligned,
|
|
SIZE_T cbSize,
|
|
LPDWORD pcbNeeded
|
|
);
|
|
|
|
VOID
|
|
UndoAlignKMPtr (
|
|
LPVOID pDestination,
|
|
LPVOID pSource
|
|
);
|
|
|
|
LPVOID
|
|
AlignKMPtr (
|
|
LPVOID pBuffer,
|
|
DWORD cbBuf
|
|
);
|
|
|
|
LPBYTE
|
|
PackStrings(
|
|
LPWSTR *pSource,
|
|
LPBYTE pDest,
|
|
DWORD *DestOffsets,
|
|
LPBYTE pEnd
|
|
);
|
|
|
|
BOOL
|
|
IsNamedPipeRpcCall(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsLocalCall(
|
|
VOID
|
|
);
|
|
|
|
HKEY
|
|
GetClientUserHandle(
|
|
IN REGSAM samDesired
|
|
);
|
|
|
|
VOID
|
|
UpdatePrinterRegAll(
|
|
LPWSTR pPrinterName,
|
|
LPWSTR pszValue,
|
|
BOOL bGenerateNetId
|
|
);
|
|
|
|
DWORD
|
|
UpdatePrinterRegUser(
|
|
HKEY hKey,
|
|
LPWSTR pszKey,
|
|
LPWSTR pPrinterName,
|
|
LPWSTR pszValue,
|
|
BOOL bGenerateNetId
|
|
);
|
|
|
|
DWORD
|
|
GetNetworkId(
|
|
HKEY hKeyUser,
|
|
LPWSTR pDeviceName);
|
|
|
|
HANDLE
|
|
LoadDriverFiletoConvertDevmode(
|
|
IN LPWSTR pDriverFile
|
|
);
|
|
|
|
HANDLE
|
|
LoadDriver(
|
|
LPWSTR pDriverFile
|
|
);
|
|
|
|
VOID
|
|
UnloadDriver(
|
|
HANDLE hModule
|
|
);
|
|
|
|
VOID
|
|
UnloadDriverFile(
|
|
IN OUT HANDLE hDevModeChgInfo
|
|
);
|
|
|
|
BOOL
|
|
SplIsUpgrade(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
SpoolerHasInitialized(
|
|
VOID
|
|
);
|
|
|
|
//
|
|
// DWORD used instead of NTSTATUS to prevent including NT headers.
|
|
//
|
|
VOID
|
|
SplLogEventExternal(
|
|
IN WORD EventType,
|
|
IN DWORD EventID,
|
|
IN LPWSTR pFirstString,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
DWORD
|
|
(*PFN_QUERYREMOVE_CALLBACK)(
|
|
LPVOID
|
|
);
|
|
|
|
HANDLE
|
|
SplRegisterForDeviceEvents(
|
|
HANDLE hDevice,
|
|
LPVOID pData,
|
|
PFN_QUERYREMOVE_CALLBACK pfnQueryRemove
|
|
);
|
|
|
|
BOOL
|
|
SplUnregisterForDeviceEvents(
|
|
HANDLE hNotify
|
|
);
|
|
|
|
DWORD
|
|
CallDrvDevModeConversion(
|
|
IN HANDLE pfnConvertDevMode,
|
|
IN LPWSTR pszPrinterName,
|
|
IN LPBYTE pInDevMode,
|
|
IN OUT LPBYTE *pOutDevMode,
|
|
IN OUT LPDWORD pdwOutDevModeSize,
|
|
IN DWORD dwConvertMode,
|
|
IN BOOL bAlloc
|
|
);
|
|
|
|
typedef struct _pfnWinSpoolDrv {
|
|
BOOL (*pfnOpenPrinter)(LPTSTR, LPHANDLE, LPPRINTER_DEFAULTS);
|
|
BOOL (*pfnClosePrinter)(HANDLE);
|
|
BOOL (*pfnDevQueryPrint)(HANDLE, LPDEVMODE, DWORD *, LPWSTR, DWORD);
|
|
BOOL (*pfnPrinterEvent)(LPWSTR, INT, DWORD, LPARAM);
|
|
LONG (*pfnDocumentProperties)(HWND, HANDLE, LPWSTR, PDEVMODE, PDEVMODE, DWORD);
|
|
HANDLE (*pfnLoadPrinterDriver)(HANDLE);
|
|
HANDLE (*pfnRefCntLoadDriver)(LPWSTR, DWORD, DWORD, BOOL);
|
|
BOOL (*pfnRefCntUnloadDriver)(HANDLE, BOOL);
|
|
BOOL (*pfnForceUnloadDriver)(LPWSTR);
|
|
} fnWinSpoolDrv, *pfnWinSpoolDrv;
|
|
|
|
|
|
BOOL
|
|
SplInitializeWinSpoolDrv(
|
|
pfnWinSpoolDrv pfnList
|
|
);
|
|
|
|
BOOL
|
|
GetJobAttributes(
|
|
LPWSTR pPrinterName,
|
|
LPDEVMODEW pDevmode,
|
|
PATTRIBUTE_INFO_3 pAttributeInfo
|
|
);
|
|
|
|
#if 1
|
|
#define AllocSplMem( cb ) DllAllocSplMem( cb )
|
|
#define FreeSplMem( pMem ) DllFreeSplMem( pMem )
|
|
#define FreeSplStr( lpStr ) DllFreeSplStr( lpStr )
|
|
#else
|
|
#define AllocSplMem( cb ) LocalAlloc( LPTR, cb )
|
|
#define FreeSplMem( pMem ) (LocalFree( pMem ) ? FALSE:TRUE)
|
|
#define FreeSplStr( lpStr ) ((lpStr) ? (LocalFree(lpStr) ? FALSE:TRUE):TRUE)
|
|
#endif
|
|
|
|
|
|
// Spooler treats MAX_PATH as including NULL terminator
|
|
|
|
#define MAX_PRINTER_NAME MAX_PATH
|
|
|
|
// Maximum size PrinterName ( including the ServerName ).
|
|
// "\\MAX_COMPUTER_NAME_LENGTH\MAX_PRINTER_NAME" NULL Terminated
|
|
#define MAX_UNC_PRINTER_NAME ( 2 + INTERNET_MAX_HOST_NAME_LENGTH + 1 + MAX_PRINTER_NAME )
|
|
|
|
// "\\MAX_PRINTER_NAME,DriverName,Location"
|
|
#define MAX_PRINTER_BROWSE_NAME ( MAX_UNC_PRINTER_NAME + 1 + MAX_PATH + 1 + MAX_PATH )
|
|
|
|
//
|
|
// Suffix string for hidden printers
|
|
// (e.g., ", Job 00322" or ", Port" or ", LocalOnly")
|
|
//
|
|
#define PRINTER_NAME_SUFFIX_MAX 20
|
|
|
|
#define NUMBER_OF_DRV_INFO_6_STRINGS 14
|
|
|
|
#define MAX_PRINTER_INFO1 ( (MAX_PRINTER_BROWSE_NAME + MAX_UNC_PRINTER_NAME + MAX_PATH) *sizeof(WCHAR) + sizeof( PRINTER_INFO_1) )
|
|
#define MAX_DRIVER_INFO_2 ( 5*MAX_PATH*sizeof(WCHAR) + sizeof( DRIVER_INFO_2 ) )
|
|
#define MAX_DRIVER_INFO_3 ( 8*MAX_PATH*sizeof(WCHAR) + sizeof( DRIVER_INFO_3 ) )
|
|
#define MAX_DRIVER_INFO_6 ( NUMBER_OF_DRV_INFO_6_STRINGS*MAX_PATH*sizeof(WCHAR) + sizeof( DRIVER_INFO_6 ) )
|
|
#define MAX_DRIVER_INFO_VERSION ( NUMBER_OF_DRV_INFO_6_STRINGS*MAX_PATH*sizeof(DRIVER_FILE_INFO)*sizeof(WCHAR) + sizeof( DRIVER_INFO_VERSION ) )
|
|
|
|
|
|
// NT Server Spooler base priority
|
|
#define SPOOLSS_SERVER_BASE_PRIORITY 9
|
|
#define SPOOLSS_WORKSTATION_BASE_PRIORITY 7
|
|
|
|
#define MIN_DEVMODE_SIZEW 72
|
|
#define MIN_DEVMODE_SIZEA 40
|
|
|
|
//
|
|
// PrinterData value keys for the server handle
|
|
//
|
|
#define SPLREG_W3SVCINSTALLED TEXT("W3SvcInstalled")
|
|
|
|
|
|
//
|
|
// If SPOOLER_REG_SYSTEM is not defined then setup moves the Printers data to
|
|
// HKLM\Software\Microsoft\Windows NT\CurrentVersion\Print\Printers during an
|
|
// upgrade or clean install. The spooler will then migrate the keys back to
|
|
// HKLM\System\CurrentControlSet\Control\Print\Printers when it starts up for
|
|
// the first time.
|
|
//
|
|
#define SPOOLER_REG_SYSTEM
|
|
|
|
|
|
//
|
|
// Event logging constants
|
|
//
|
|
|
|
#define LOG_ERROR EVENTLOG_ERROR_TYPE
|
|
#define LOG_WARNING EVENTLOG_WARNING_TYPE
|
|
#define LOG_INFO EVENTLOG_INFORMATION_TYPE
|
|
#define LOG_SUCCESS EVENTLOG_AUDIT_SUCCESS
|
|
#define LOG_FAILURE EVENTLOG_AUDIT_FAILURE
|
|
|
|
#define LOG_ALL_EVENTS ( LOG_ERROR | LOG_WARNING | LOG_INFO | LOG_SUCCESS | LOG_FAILURE )
|
|
#define LOG_DEFAULTS_WORKSTATION_EVENTS ( LOG_ERROR | LOG_WARNING | LOG_SUCCESS | LOG_FAILURE )
|
|
|
|
typedef struct _DRIVER_INFO_7A {
|
|
DWORD cbSize;
|
|
DWORD cVersion;
|
|
LPSTR pszDriverName;
|
|
LPSTR pszInfName;
|
|
LPSTR pszInstallSourceRoot;
|
|
} DRIVER_INFO_7A, *PDRIVER_INFO_7A, *LPDRIVER_INFO_7A;
|
|
typedef struct _DRIVER_INFO_7W {
|
|
DWORD cbSize;
|
|
DWORD cVersion;
|
|
LPWSTR pszDriverName;
|
|
LPWSTR pszInfName;
|
|
LPWSTR pszInstallSourceRoot;
|
|
} DRIVER_INFO_7W, *PDRIVER_INFO_7W, *LPDRIVER_INFO_7W;
|
|
#ifdef UNICODE
|
|
typedef DRIVER_INFO_7W DRIVER_INFO_7;
|
|
typedef PDRIVER_INFO_7W PDRIVER_INFO_7;
|
|
typedef LPDRIVER_INFO_7W LPDRIVER_INFO_7;
|
|
#else
|
|
typedef DRIVER_INFO_7A DRIVER_INFO_7;
|
|
typedef PDRIVER_INFO_7A PDRIVER_INFO_7;
|
|
typedef LPDRIVER_INFO_7A LPDRIVER_INFO_7;
|
|
#endif // UNICODE
|
|
|
|
//
|
|
// The initial commit for the stack is 3 pages on IA64 and 4 pages on X86
|
|
//
|
|
|
|
//
|
|
// This reserves 32KB for in-proc server stack on x86 and 48KB for IA64.
|
|
//
|
|
#ifdef _IA64_
|
|
#define INITIAL_STACK_COMMIT (6 * 0x2000)
|
|
#else
|
|
#define INITIAL_STACK_COMMIT (8 * 0x1000)
|
|
#endif
|
|
|
|
#define LARGE_INITIAL_STACK_COMMIT (64 * 1024)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // for #ifndef _SPLCOM
|