526 lines
14 KiB
C
526 lines
14 KiB
C
/*++
|
|
|
|
Copyright (c) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
regdata.h
|
|
|
|
Abstract:
|
|
|
|
Funtions for dealing with registry data
|
|
|
|
Environment:
|
|
|
|
Win32 subsystem, printer drivers (kernel and user mode)
|
|
|
|
Revision History:
|
|
|
|
02/04/97 -davidx-
|
|
Use REG_MULTI_SZ instead of REG_BINARY where possible.
|
|
|
|
09/25/96 -davidx-
|
|
Functions to manipulate MultiSZ string pairs.
|
|
|
|
09/25/96 -davidx-
|
|
Convert to Hungarian notation.
|
|
|
|
08/13/96 -davidx-
|
|
New functions and interface.
|
|
|
|
07/22/96 -srinivac-
|
|
Updated for PSCRIPT5
|
|
|
|
06/19/95 -davidx-
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
#ifndef _REGDATA_H_
|
|
#define _REGDATA_H_
|
|
|
|
//
|
|
// Value names for printer data in the registry
|
|
//
|
|
|
|
// values common to pscript and unidrv
|
|
|
|
#define REGVAL_PRINTER_DATA_SIZE TEXT("PrinterDataSize")
|
|
#define REGVAL_PRINTER_DATA TEXT("PrinterData")
|
|
#define REGVAL_FONT_SUBST_TABLE TEXT("TTFontSubTable")
|
|
#define REGVAL_FORMS_ADDED TEXT("Forms?")
|
|
#define REGVAL_PRINTER_INITED TEXT("InitDriverVersion")
|
|
#define REGVAL_KEYWORD_NAME TEXT("FeatureKeyword")
|
|
#define REGVAL_KEYWORD_SIZE TEXT("FeatureKeywordSize")
|
|
|
|
#ifdef WINNT_40 // for NT4
|
|
|
|
#define REGVAL_INIDATA TEXT("IniData4")
|
|
|
|
#else // for Win2K
|
|
|
|
#define REGVAL_INIDATA TEXT("IniData5")
|
|
|
|
#endif // WINNT_40
|
|
|
|
// pscript specific
|
|
|
|
#define REGVAL_FREEMEM TEXT("FreeMem")
|
|
#define REGVAL_JOBTIMEOUT TEXT("JobTimeOut")
|
|
#define REGVAL_PROTOCOL TEXT("Protocol")
|
|
|
|
// unidrv specific
|
|
|
|
#define REGVAL_CURRENT_DEVHTINFO TEXT("CurDevHTInfo")
|
|
#define REGVAL_FONTCART TEXT("FontCart")
|
|
#define REGVAL_PAGE_PROTECTION TEXT("RasddFlags")
|
|
#define REGVAL_FONTFILENAME TEXT("ExternalFontFile")
|
|
#define REGVAL_CARTRIDGEFILENAME TEXT("ExtFontCartFile")
|
|
#define REGVAL_EXEFONTINSTALLER TEXT("FontInstaller")
|
|
#define REGVAL_EXTFONTCART TEXT("ExtFontCartNames")
|
|
#define REGVAL_PARTIALCLIP TEXT("PartialClip")
|
|
|
|
// pscript 4.0 compatibility
|
|
|
|
#define REGVAL_FONT_SUBST_SIZE_PS40 TEXT("TTFontSubTableSize")
|
|
#define REGVAL_TRAY_FORM_TABLE_PS40 TEXT("TrayFormTable")
|
|
#define REGVAL_TRAY_FORM_SIZE_PS40 TEXT("TrayFormSize")
|
|
|
|
#define REGVAL_DEPFILES TEXT("DependentFiles")
|
|
#define REGVAL_NTFFILENAME TEXT("FontDownloaderNTF")
|
|
|
|
// rasdd 4.0 compatibility
|
|
|
|
#define REGVAL_TRAYFORM_TABLE_RASDD TEXT("TrayFormTable")
|
|
#define REGVAL_MODELNAME TEXT("Model")
|
|
#define REGVAL_RASDD_FREEMEM TEXT("FreeMem")
|
|
|
|
//
|
|
// delimiter for keyword name conversion
|
|
//
|
|
|
|
#define END_OF_FEATURE '\n'
|
|
|
|
//
|
|
// Get a DWORD value from the registry under PrinerDriverData key
|
|
//
|
|
|
|
BOOL
|
|
BGetPrinterDataDWord(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
OUT PDWORD pdwValue
|
|
);
|
|
|
|
//
|
|
// Save a DWORD value to the registry under PrinerDriverData key
|
|
//
|
|
|
|
BOOL
|
|
BSetPrinterDataDWord(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
IN DWORD dwValue
|
|
);
|
|
|
|
//
|
|
// Get a string value from PrinterDriverData registry key
|
|
//
|
|
|
|
PTSTR
|
|
PtstrGetPrinterDataString(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
OUT PDWORD pdwSize
|
|
);
|
|
|
|
//
|
|
// Save a string or multi-sz value under PrinerDriverData registry key
|
|
//
|
|
|
|
BOOL
|
|
BSetPrinterDataString(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
IN LPCTSTR ptstrValue,
|
|
IN DWORD dwType
|
|
);
|
|
|
|
|
|
|
|
//
|
|
// Get a MULTI_SZ value from PrinerDriverData registry key
|
|
//
|
|
|
|
PTSTR
|
|
PtstrGetPrinterDataMultiSZPair(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
OUT PDWORD pdwSize
|
|
);
|
|
|
|
//
|
|
// Save a MULTI_SZ value under PrinerDriverData registry key
|
|
//
|
|
|
|
BOOL
|
|
BSetPrinterDataMultiSZPair(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrRegKey,
|
|
IN LPCTSTR ptstrValue,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
|
|
//
|
|
// Get binary data from the registry under PrinterDriverData key
|
|
//
|
|
|
|
PVOID
|
|
PvGetPrinterDataBinary(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrSizeKey,
|
|
IN LPCTSTR ptstrDataKey,
|
|
OUT PDWORD pdwSize
|
|
);
|
|
|
|
//
|
|
// Save binary data to the registry under PrinterDriverData key
|
|
//
|
|
|
|
BOOL
|
|
BSetPrinterDataBinary(
|
|
IN HANDLE hPrinter,
|
|
IN LPCTSTR ptstrSizeKey,
|
|
IN LPCTSTR ptstrDataKey,
|
|
IN PVOID pvData,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
//
|
|
// Functions for working with TrueType font substitution table:
|
|
// Retrieve TrueType font substitution table from registry
|
|
// Save TrueType font substitution table to registry
|
|
// Find out the substituted device font given a TrueType font name
|
|
//
|
|
// TrueType font substitution table has a very simple structure.
|
|
// Each TrueType font name is followed is followed by its
|
|
// corresponding device font name. Font names are NUL-terminated
|
|
// character strings. The entire table is terminated by a NUL character.
|
|
// For example:
|
|
//
|
|
// "Arial" "Helvetica"
|
|
// "Courier" "Courier"
|
|
// ...
|
|
// ""
|
|
//
|
|
|
|
typedef PTSTR TTSUBST_TABLE;
|
|
|
|
#define PGetTTSubstTable(hPrinter, pSize) \
|
|
PtstrGetPrinterDataMultiSZPair(hPrinter, REGVAL_FONT_SUBST_TABLE, pSize)
|
|
|
|
#define PtstrSearchTTSubstTable(pTTSubstTable, ptstrTTFontName) \
|
|
PtstrSearchStringInMultiSZPair(pTTSubstTable, ptstrTTFontName)
|
|
|
|
BOOL
|
|
BSaveTTSubstTable(
|
|
IN HANDLE hPrinter,
|
|
IN TTSUBST_TABLE pTTSubstTable,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
//
|
|
// Functions for working with form-to-tray assignment table:
|
|
// Retrieve form-to-tray assignment table from registry
|
|
// Save form-to-tray assignment table to registry
|
|
// Search form-to-tray assignment table
|
|
//
|
|
// The format of form-to-tray assignment table is fairly simple.
|
|
// for each table entry:
|
|
// tray name (NUL-terminated character string)
|
|
// form name (NUL-terminated character string)
|
|
// NUL terminator
|
|
//
|
|
|
|
typedef PTSTR FORM_TRAY_TABLE;
|
|
|
|
FORM_TRAY_TABLE
|
|
PGetFormTrayTable(
|
|
IN HANDLE hPrinter,
|
|
OUT PDWORD pdwSize
|
|
);
|
|
|
|
BOOL
|
|
BSaveFormTrayTable(
|
|
IN HANDLE hPrinter,
|
|
IN FORM_TRAY_TABLE pFormTrayTable,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
//
|
|
// These functions are implemented in lib\ps and lib\uni.
|
|
//
|
|
// If there is no new format form-to-tray table, PGetFormTrayTable will
|
|
// call PGetAndConvertOldVersionFormTrayTable to see if any old version
|
|
// form-to-tray table exists and can be converted to the new format.
|
|
//
|
|
// BSaveFormTrayTable calls BSaveAsOldVersionFormTrayTable to save
|
|
// a form-tray table in NT 4.0 compatible format.
|
|
//
|
|
|
|
FORM_TRAY_TABLE
|
|
PGetAndConvertOldVersionFormTrayTable(
|
|
IN HANDLE hPrinter,
|
|
OUT PDWORD pdwSize
|
|
);
|
|
|
|
BOOL
|
|
BSaveAsOldVersionFormTrayTable(
|
|
IN HANDLE hPrinter,
|
|
IN FORM_TRAY_TABLE pFormTrayTable,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
//
|
|
// Macros for accessing font cartridge registry data
|
|
//
|
|
|
|
#define PtstrGetFontCart(hPrinter, pSize) \
|
|
PtstrGetPrinterDataString(hPrinter, REGVAL_FONTCART, pSize)
|
|
|
|
#define BSaveFontCart(hPrinter, pFontCart) \
|
|
BSetPrinterDataString(hPrinter, REGVAL_FONTCART, pFontCart, REG_MULTI_SZ)
|
|
|
|
//
|
|
// Data structure for storing the result of searching form-to-tray assignment table
|
|
//
|
|
|
|
typedef struct _FINDFORMTRAY {
|
|
|
|
PVOID pvSignature; // signature
|
|
PTSTR ptstrTrayName; // tray name
|
|
PTSTR ptstrFormName; // form name
|
|
PTSTR ptstrNextEntry; // where to start the next search
|
|
|
|
} FINDFORMTRAY, *PFINDFORMTRAY;
|
|
|
|
BOOL
|
|
BSearchFormTrayTable(
|
|
IN FORM_TRAY_TABLE pFormTrayTable,
|
|
IN PTSTR ptstrTrayName,
|
|
IN PTSTR ptstrFormName,
|
|
IN OUT PFINDFORMTRAY pFindData
|
|
);
|
|
|
|
//
|
|
// Initialize FINDFORMTRAY structure. This must be called before calling
|
|
// BSearchFormTrayTable for the first time.
|
|
//
|
|
|
|
#define RESET_FINDFORMTRAY(pFormTrayTable, pFindData) \
|
|
{ \
|
|
(pFindData)->pvSignature = (pFindData); \
|
|
(pFindData)->ptstrNextEntry = (pFormTrayTable); \
|
|
}
|
|
|
|
//
|
|
// Printer sticky properties
|
|
//
|
|
|
|
typedef struct _PRINTERDATA {
|
|
|
|
WORD wDriverVersion; // driver version number
|
|
WORD wSize; // size of the structure
|
|
DWORD dwFlags; // flags
|
|
DWORD dwFreeMem; // amount of free memory
|
|
DWORD dwJobTimeout; // job timeout
|
|
DWORD dwWaitTimeout; // wait timeout
|
|
WORD wMinoutlinePPEM; // min size to download as Type1
|
|
WORD wMaxbitmapPPEM; // max size to download as Type3
|
|
DWORD dwReserved1[3]; // reserved space
|
|
|
|
WORD wReserved2; // old 16-bit checksum set to 0
|
|
WORD wProtocol; // output protocol
|
|
DWORD dwChecksum32; // checksum of printer description file
|
|
DWORD dwOptions; // number of printer-sticky features
|
|
OPTSELECT aOptions[MAX_PRINTER_OPTIONS]; // installable options
|
|
|
|
} PRINTERDATA, *PPRINTERDATA;
|
|
|
|
//
|
|
// Constant flags for PRINTERDATA.dwFlags field
|
|
//
|
|
|
|
#define PFLAGS_METRIC 0x0001 // running on metric system
|
|
#define PFLAGS_HOST_HALFTONE 0x0002 // use host halftoning
|
|
#define PFLAGS_IGNORE_DEVFONT 0x0004 // ignore device fonts
|
|
#define PFLAGS_SLOW_FONTSUBST 0x0008 // slow but accurate font subst
|
|
#define PFLAGS_NO_HEADERPERJOB 0x0010 // don't download header with job
|
|
#define PFLAGS_PAGE_PROTECTION 0x0020 // page protection is turned on
|
|
#define PFLAGS_CTRLD_BEFORE 0x0040 // send ^D before each job
|
|
#define PFLAGS_CTRLD_AFTER 0x0080 // send ^D after each job
|
|
|
|
#define PFLAGS_TRUE_GRAY_TEXT 0x0100 // enable TrueGray detection
|
|
#define PFLAGS_TRUE_GRAY_GRAPH 0x0200 // enable TrueGray detection
|
|
#define PERFORM_TRUE_GRAY_TEXT(pdev) ((pdev)->PrinterData.dwFlags & PFLAGS_TRUE_GRAY_TEXT)
|
|
#define PERFORM_TRUE_GRAY_GRAPH(pdev) ((pdev)->PrinterData.dwFlags & PFLAGS_TRUE_GRAY_GRAPH)
|
|
|
|
#define PFLAGS_ADD_EURO 0x0400 // enable Euro augmentation
|
|
#define PFLAGS_EURO_SET 0x0800 // set if PFLAGS_ADD_EURO has been set to it's current value intentionally
|
|
// as opposed to just because it wasn't set in an older version
|
|
#define PERFORM_ADD_EURO(pdev) (((pdev)->PrinterData.dwFlags & PFLAGS_ADD_EURO) && \
|
|
(TARGET_PSLEVEL(pdev) >= 2))
|
|
|
|
|
|
//
|
|
// Default Max/Min point sizes in PPEM for switching between Type1 and Type3
|
|
//
|
|
|
|
#define DEFAULT_MINOUTLINEPPEM 100
|
|
#define DEFAULT_MAXBITMAPPPEM 600
|
|
|
|
//
|
|
// Functions for accessing printer properties data:
|
|
// retrieve printer property data in the registry
|
|
// get the default printer property data
|
|
// save printer property data to registry
|
|
//
|
|
|
|
BOOL
|
|
BGetPrinterProperties(
|
|
IN HANDLE hPrinter,
|
|
IN PRAWBINARYDATA pRawData,
|
|
OUT PPRINTERDATA pPrinterData
|
|
);
|
|
|
|
BOOL
|
|
BGetDefaultPrinterProperties(
|
|
IN HANDLE hPrinter,
|
|
IN PRAWBINARYDATA pRawData,
|
|
OUT PPRINTERDATA pPrinterData
|
|
);
|
|
|
|
BOOL
|
|
BSavePrinterProperties(
|
|
IN HANDLE hPrinter,
|
|
IN PRAWBINARYDATA pRawData,
|
|
IN PPRINTERDATA pPrinterData,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
BOOL
|
|
BConvertPrinterPropertiesData(
|
|
IN HANDLE hPrinter,
|
|
IN PRAWBINARYDATA pRawData,
|
|
OUT PPRINTERDATA pPrinterData,
|
|
IN PVOID pvSrcData,
|
|
IN DWORD dwSrcSize
|
|
);
|
|
|
|
VOID
|
|
VUpdatePrivatePrinterData(
|
|
IN HANDLE hPrinter,
|
|
IN OUT PPRINTERDATA pPrinterData,
|
|
IN DWORD dwMode,
|
|
IN PUIINFO pUIInfo,
|
|
IN POPTSELECT pCombineOptions
|
|
);
|
|
|
|
#define MODE_READ 0
|
|
#define MODE_WRITE 1
|
|
|
|
|
|
//
|
|
// NT4 PS driver PRINTERDATA structure
|
|
//
|
|
|
|
typedef struct _PS4_PRINTERDATA {
|
|
WORD wDriverVersion; // driver version number
|
|
WORD wSize; // size of the structure
|
|
DWORD dwFlags; // flags
|
|
DWORD dwFreeVm; // amount of VM
|
|
DWORD dwJobTimeout; // job timeout
|
|
DWORD dwWaitTimeout; // wait timeout
|
|
DWORD dwReserved[4]; // reserved space
|
|
WORD wChecksum; // PPD file checksum
|
|
WORD wOptionCount; // number of options to follow
|
|
BYTE options[64]; // installable options
|
|
} PS4_PRINTERDATA, *PPS4_PRINTERDATA;
|
|
|
|
//
|
|
// Retrieve device halftone setup information from registry
|
|
//
|
|
|
|
BOOL
|
|
BGetDeviceHalftoneSetup(
|
|
HANDLE hPrinter,
|
|
DEVHTINFO *pDevHTInfo
|
|
);
|
|
|
|
//
|
|
// Save device halftone setup information to registry
|
|
//
|
|
|
|
BOOL
|
|
BSaveDeviceHalftoneSetup(
|
|
HANDLE hPrinter,
|
|
DEVHTINFO *pDevHTInfo
|
|
);
|
|
|
|
//
|
|
// Figure out printer driver directory from the driver DLL's full pathname
|
|
//
|
|
|
|
PTSTR
|
|
PtstrGetDriverDirectory(
|
|
IN LPCTSTR ptstrDriverDllPath
|
|
);
|
|
|
|
//
|
|
// Search the list of dependent files (in REG_MULTI_SZ format)
|
|
// for a file with the specified extension
|
|
//
|
|
|
|
LPCTSTR
|
|
PtstrSearchDependentFileWithExtension(
|
|
IN LPCTSTR ptstrDependentFiles,
|
|
IN LPCTSTR ptstrExtension
|
|
);
|
|
|
|
//
|
|
// Verify the input data block is in REG_MULTI_SZ format and
|
|
// it consists of multiple string pairs
|
|
//
|
|
|
|
BOOL
|
|
BVerifyMultiSZPair(
|
|
IN LPCTSTR ptstrData,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
BOOL
|
|
BVerifyMultiSZ(
|
|
IN LPCTSTR ptstrData,
|
|
IN DWORD dwSize
|
|
);
|
|
|
|
DWORD
|
|
DwCountStringsInMultiSZ(
|
|
IN LPCTSTR ptstrData
|
|
);
|
|
|
|
|
|
//
|
|
// Search for the specified key in MultiSZ key-value string pairs
|
|
//
|
|
|
|
LPCTSTR
|
|
PtstrSearchStringInMultiSZPair(
|
|
IN LPCTSTR ptstrMultiSZ,
|
|
IN LPCTSTR ptstrKey
|
|
);
|
|
|
|
#endif //!_REGDATA_H_
|
|
|