/*++ 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_