/*++ Copyright (c) 1995-97 Microsoft Corporation All rights reserved. Module Name: local.h Abstract: Holds spooler install headers. Author: Muhunthan Sivapragasam (MuhuntS) 20-Oct-1995 Revision History: --*/ #if defined(__cplusplus) extern "C" { #endif #define MAX_SETUP_LEN 250 #define MAX_SETUP_ALLOC_STRING_LEN 4000 // in characters, used in GetLongStringFromRcFile #define MAX_SECT_NAME_LEN 256 #define MAX_DWORD 0xFFFFFFFF #define IDS_PRINTERWIZARD 1001 #define IDS_WINNTDEV_INSTRUCT 1002 #define IDS_WIN95DEV_INSTRUCT 1003 #define IDS_SELECTDEV_LABEL 1004 #define IDS_DRIVERS_FOR_PLATFORM 1005 #define IDS_INSTALLING_PORT_MONITOR 1006 #define IDS_WRONG_ARCHITECTURE 1007 #define IDS_INVALID_DRIVER 1008 #define IDS_PROMPT_PORT_MONITOR 1009 #define IDS_ERROR_INST_PORT_MONITOR 1010 #define IDS_WIN95_FLATSHARE 1021 #define IDS_WINNT_40_CD 1022 #define IDS_WINNT_SERVER_CD 1023 #define IDS_WINNT_X86_SERVER_CD 1024 #define IDS_WINNT_ALPHA_SERVER_CD 1025 #define IDS_WINNT_IA64_SERVER_CD 1026 #define IDS_PROMPT_ALT_PLATFORM_DRIVER 1027 #define IDS_WARN_NO_ALT_PLATFORM_DRIVER 1028 #define IDS_WARN_NO_DRIVER_FOUND 1029 #define IDS_DRIVERS_FOR_WIN95 1031 #define IDS_DRIVERS_FOR_NT4_X86 1032 #define IDS_DRIVERS_FOR_NT4_ALPHA 1033 #define IDS_DRIVERS_FOR_NT4_MIPS 1034 #define IDS_DRIVERS_FOR_NT4_PPC 1035 #define IDS_DRIVERS_FOR_X86 1036 #define IDS_DRIVERS_FOR_IA64 1037 // // Setuplog entried used during upgrade // #define IDS_UPGRADE_FAILED 1051 #define IDS_DRIVER_UPGRADE_FAILED 1052 #define IDS_PRINTER_UPGRADE_FAILED 1053 #define IDS_PRINTER_DELETED 1054 #define IDS_DRIVER_CHANGED 1055 #define IDS_CONNECTION_DELETED 1056 // // entries for printupg warnings // #define IDS_TITLE_BSP_WARN 1060 #define IDS_TITLE_BSP_ERROR 1061 #define IDS_BSP_WARN_NO_INBOX 1062 #define IDS_BSP_WARN_WITH_INBOX 1063 #define IDS_BSP_BLOCK_NO_INBOX 1064 #define IDS_BSP_BLOCK_WITH_INBOX 1065 #define IDS_BSP_WARN_UNSIGNED_DRIVER 1066 #define IDT_STATIC 100 #define IDD_BILLBOARD 101 #define IDI_SETUP 102 #define SETUP_ICON 103 // // Printer driver directory set in ntprint.inf // #define PRINTER_DRIVER_DIRECTORY_ID 66000 #define PRINT_PROC_DIRECTORY_ID 66001 #define SYSTEM_DIRECTORY_ID_ONLY_FOR_NATIVE_ARCHITECTURE 66002 #define ICM_PROFILE_DIRECTORY_ID 66003 #define WEBPAGE_DIRECTORY_ID 66004 #define PSETUP_SIGNATURE 0x9585 // Defines for the columns in the Architecture Platform Table for Driver Signing & CDM #define OS_PLATFORM 0 #define PROCESSOR_ARCH 1 #ifdef UNICODE #define lstrchr wcschr #define lstrncmp wcsncmp #define lstrncmpi _wcsnicmp #else #define lstrchr strchr #define lstrtok strtok #define lstrncmp strncmp #define lstrncmpi _strnicmp #endif #define SIZECHARS(x) (sizeof((x))/sizeof(*x)) // // Type definitions // typedef struct _SPLPLATFORMINFO { LPTSTR pszName; } SPLPLATFORMINFO, *PSPLPLATFORMINFO; typedef struct _SELECTED_DRV_INFO { LPTSTR pszInfName; LPTSTR pszModelName; LPTSTR pszDriverSection; PSP_DEVINFO_DATA pDevInfoData; LPTSTR pszHardwareID; LPTSTR pszManufacturer; LPTSTR pszOEMUrl; LPTSTR pszProvider; FILETIME ftDriverDate; DWORDLONG dwlDriverVersion; DWORD Flags; LPTSTR pszzPreviousNames; } SELECTED_DRV_INFO, *PSELECTED_DRV_INFO; #define SDFLAG_PREVNAME_SECTION_FOUND 0x00000001 #define SDFLAG_CDM_DRIVER 0x00000002 typedef struct _PARSEINF_INFO { PLATFORM platform; LPTSTR pszInstallSection; // Can be platform dependent LPTSTR pszzICMFiles; LPTSTR pszPrintProc; LPTSTR pszVendorSetup; LPTSTR pszVendorInstaller; DWORD cbDriverInfo6; DRIVER_INFO_6 DriverInfo6; } PARSEINF_INFO, *PPARSEINF_INFO; typedef struct _PNP_INFO { LPTSTR pszPortName; LPTSTR pszDeviceInstanceId; } PNP_INFO, *PPNP_INFO; #define VALID_INF_INFO 0x00000001 #define VALID_PNP_INFO 0x00000002 // // Set if the installation files are copied into a directory whose name is derived from // the pnp ID. Since the spooler copies files around, setupapi can't find the files anymore // when the device is re-pnp'd and prompts the user for them. We copy the files into this directory // and don't delete it, that way setupapi can find them. // #define LOCALDATAFLAG_PNP_DIR_INSTALL 0x00000004 typedef struct _PSETUP_LOCAL_DATA { SELECTED_DRV_INFO DrvInfo; DWORD signature; DWORD Flags; PARSEINF_INFO InfInfo; PNP_INFO PnPInfo; } PSETUP_LOCAL_DATA; // // Global data // extern OSVERSIONINFO OsVersionInfo; extern LCID lcid; extern DWORD dwThisMajorVersion; extern TCHAR sComma; extern TCHAR sZero; extern const GUID GUID_DEVCLASS_PRINTER; extern PLATFORM MyPlatform; extern HINSTANCE ghInst; extern SPLPLATFORMINFO PlatformEnv[], PlatformOverride[]; extern DWORD PlatformArch[][2]; extern TCHAR cszNtprintInf[]; extern TCHAR cszDataSection[]; extern TCHAR cszComma[]; extern ULONG_PTR DriverInfo6Offsets[]; extern ULONG_PTR LocalDataOffsets[]; extern ULONG_PTR InfInfoOffsets[]; extern ULONG_PTR SharedInfInfoOffsets[]; extern ULONG_PTR PnPInfoOffsets[]; extern TCHAR cszWebNTPrintPkg[]; extern PCODEDOWNLOADINFO gpCodeDownLoadInfo; extern TCHAR cszCatExt[]; extern TCHAR cszInfExt[]; extern CRITICAL_SECTION CDMCritSect; extern CRITICAL_SECTION SkipCritSect; extern LPTSTR gpszSkipDir; extern TCHAR cszHardwareID[]; extern TCHAR cszBestDriverInbox[]; extern TCHAR cszPnPKey[]; extern TCHAR cszDeviceInstanceId[]; extern TCHAR cszMonitorKey[]; // // Function prototypes // VOID GetDriverPath( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA pLocalData, OUT TCHAR szDriverPath[MAX_PATH] ); DWORD InvokeSetup( IN HWND hwnd, IN LPCTSTR pszOption, IN LPCTSTR pszInfFile, IN LPCTSTR pszSourcePath, IN LPCTSTR pszServerName OPTIONAL ); PVOID LocalAllocMem( IN UINT cbSize ); VOID LocalFreeMem( IN PVOID pMem ); LPTSTR AllocStr( IN LPCTSTR pszStr ); DWORD InstallWin95Driver( IN HWND hwnd, IN LPCTSTR pszModel, IN LPCTSTR pszzPreviousNames, IN BOOL bPreviousNamesSection, IN LPCTSTR pszServerName, IN OUT LPTSTR pszInfPath, IN LPCTSTR pszDiskName, IN DWORD dwInstallFlags, IN DWORD dwAddDrvFlags ); VOID InfGetString( IN PINFCONTEXT pInfContext, IN DWORD dwFieldIndex, OUT LPTSTR *ppszField, IN OUT LPDWORD pcchCopied, IN OUT LPBOOL pbFail ); LPTSTR GetStringFromRcFile( UINT uId ); LPTSTR GetLongStringFromRcFile( UINT uId ); BOOL SetSelectDevParams( IN HDEVINFO hDevInfo, IN PSP_DEVINFO_DATA pDevInfoData, IN BOOL bWin95, IN LPCTSTR pszModel OPTIONAL ); BOOL SetDevInstallParams( IN HDEVINFO hDevInfo, IN PSP_DEVINFO_DATA pDevInfoData, IN LPCTSTR pszDriverPath OPTIONAL ); HDEVINFO CreatePrinterDeviceInfoList( IN HWND hwnd ); LPDRIVER_INFO_6 Win95DriverInfo6FromName( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA* ppLocalData, IN LPCTSTR pszModel, IN LPCTSTR pszzPreviousNames ); BOOL CopyPrinterDriverFiles( IN LPDRIVER_INFO_6 pDriverInfo6, IN LPCTSTR pszInfName, IN LPCTSTR pszSourcePath, IN LPCTSTR pszDiskName, IN LPCTSTR pszTargetPath, IN HWND hwnd, IN DWORD dwInstallFlags, IN BOOL bForgetSource ); BOOL ParseInf( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA pLocalData, IN PLATFORM platform, IN LPCTSTR pszServerName, IN DWORD dwInstallFlags ); BOOL BuildClassDriverList( IN HDEVINFO hDevInfo ); DWORD InstallDriverFromCurrentInf( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA pLocalData, IN HWND hwnd, IN PLATFORM platform, IN DWORD dwVersion, IN LPCTSTR pszServerName, IN HSPFILEQ CopyQueue, IN PVOID QueueContext, IN PSP_FILE_CALLBACK InstallMsgHandler, IN DWORD Flags, IN LPCTSTR pszSource, IN DWORD dwInstallFlags, IN DWORD dwAddDrvFlags, IN LPCTSTR pszFileSrcPath, // can be different from INF source in case we had to decompress NT4 CD-ROM inf OUT LPTSTR *ppszNewModelName, OUT PDWORD pBlockingInfo ); HRESULT IsProductType( IN BYTE ProductType, IN BYTE Comparison ); #if 0 BOOL CopyOEMInfFileAndGiveUniqueName( IN HDEVINFO hDevInfo, IN PSP_DEVINFO_DATA pDevInfoData, IN LPTSTR pszInfFile ); #endif BOOL AddPrintMonitor( IN LPCTSTR pszName, IN LPCTSTR pszDllName ); BOOL FindPathOnSource( IN LPCTSTR pszFileName, IN HINF MasterInf, IN OUT LPTSTR pszPathOnSource, IN DWORD dwLen, OUT LPTSTR *ppszMediaDescription, OPTIONAL OUT LPTSTR *ppszTagFile OPTIONAL ); VOID DestroyLocalData( IN PPSETUP_LOCAL_DATA pLocalData ); LPDRIVER_INFO_6 CloneDriverInfo6( IN LPDRIVER_INFO_6 pSourceDriverInfo6, IN DWORD cbDriverInfo6 ); PPSETUP_LOCAL_DATA BuildInternalData( IN HDEVINFO hDevInfo, IN PSP_DEVINFO_DATA pSpDevInfoData ); VOID PackDriverInfo6( IN LPDRIVER_INFO_6 pSourceDriverInfo6, IN LPDRIVER_INFO_6 pTargetDriverInfo6, IN DWORD cbDriverInfo6 ); BOOL InfGetDependentFilesAndICMFiles( IN HDEVINFO hDevInfo, IN HINF hInf, IN BOOL bWin95, IN PPSETUP_LOCAL_DATA pLocalData, IN PLATFORM platform, IN LPCTSTR pszServerName, IN DWORD dwInstallFlags, IN LPCTSTR pszSectionNameWithExt, IN OUT LPDWORD pcchSize ); BOOL IdenticalDriverInfo6( IN LPDRIVER_INFO_6 p1, IN LPDRIVER_INFO_6 p2 ); BOOL DeleteAllFilesInDirectory( LPCTSTR pszDir, BOOL bDeleteDir ); LPTSTR FileNamePart( IN LPCTSTR pszFullName ); HDEVINFO GetInfAndBuildDrivers( IN HWND hwnd, IN DWORD dwTitleId, IN DWORD dwDiskId, IN TCHAR szInfPath[MAX_PATH], IN DWORD dwInstallFlags, IN PLATFORM platform, IN DWORD dwVersion, IN LPCTSTR pszDriverName, OPTIONAL OUT PPSETUP_LOCAL_DATA *ppLocalData, OPTIONAL OUT LPTSTR *ppFileSrcPath OPTIONAL ); BOOL MyName( IN LPCTSTR pszServerName ); BOOL CreateDevNodeForPrinter( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA pLocalData, IN LPCTSTR pszPrinterName, IN HANDLE hPrinter ); VOID FreeStructurePointers( LPBYTE pStruct, PULONG_PTR pOffSets, BOOL bFreeStruct ); BOOL AddPrinterDriverUsingCorrectLevel( IN LPCTSTR pszServerName, IN DRIVER_INFO_6 *pDriverInfo6, IN DWORD dwAddDrvFlags ); BOOL AddPrinterDriverUsingCorrectLevelWithPrintUpgRetry( IN LPCTSTR pszServerName, OPTIONAL IN DRIVER_INFO_6 *pDriverInfo6, IN DWORD dwAddDrvFlags, IN BOOL bIsDriverPathFullPath, IN BOOL bOfferReplacement, IN BOOL bPopupUI, OUT LPTSTR *ppszReplacementDriver, OUT DWORD *pdwBlockingStatus ); BOOL BlockedDriverPrintUpgUI( IN LPCTSTR pszServer, OPTIONAL IN DRIVER_INFO_6 *pDriverInfo6, IN BOOL bIsDriverPathFullPath, IN BOOL bOfferReplacement, IN BOOL bPopupUI, OUT LPTSTR *ppszReplacementDriver, OUT DWORD *pdwBlockingStatus ); BOOL InfIsCompatibleDriver( IN LPCTSTR pszDriverModel, IN LPCTSTR pszDriverPath, // main rendering driver dll IN LPCTSTR pszEnvironment, IN HINF hInf, OUT DWORD *pdwBlockingStatus, OUT LPTSTR *ppszReplacementDriver OPTIONAL // caller must free it. ); BOOL FileExists( IN LPCTSTR pszFileName ); BOOL SetPnPInfoForPrinter( IN HANDLE hPrinter, IN LPCTSTR pszDeviceInstanceId, IN LPCTSTR pszHardwareID, IN LPCTSTR pszManufacturer, IN LPCTSTR pszOEMUrl ); BOOL IsRunningNtServer( VOID ); BOOL InstallAllInfSections( IN PPSETUP_LOCAL_DATA pLocalData, IN PLATFORM platform, IN LPCTSTR pszServerName, IN HSPFILEQ CopyQueue, IN LPCTSTR pszSource, IN DWORD dwInstallFlags, IN HINF hInf, IN LPCTSTR pszInstallSection ); LPTSTR CheckForCatalogFile( IN HINF hInf, IN BOOL bOnlyFromINF, IN LPCTSTR pszSource ); BOOL SetTargetDirectories( IN PPSETUP_LOCAL_DATA pLocalData, IN PLATFORM platform, IN LPCTSTR pszServerName, IN HINF hInf, IN DWORD dwInstallFlags ); BOOL IsMonitorFound( IN LPVOID pBuf, IN DWORD dwReturned, IN LPTSTR pszName ); BOOL IsMonitorInstalled( IN LPTSTR pszMonitorName ); BOOL IsLanguageMonitorInstalled( IN PCTSTR pszMonitorName ); BOOL CleanupUniqueScratchDirectory( IN LPCTSTR pszServerName, IN PLATFORM platform ); BOOL CleanupScratchDirectory( IN LPCTSTR pszServerName, IN PLATFORM platform ); BOOL InitCodedownload( HWND hwnd ); VOID DestroyCodedownload( PCODEDOWNLOADINFO pCodeDownLoadInfo ); BOOL DestroyOnlyPrinterDeviceInfoList( IN HDEVINFO hDevInfo ); LPTSTR GetSystemInstallPath( VOID ); PPSETUP_LOCAL_DATA RebuildDeviceInfo( IN HDEVINFO hDevInfo, IN PPSETUP_LOCAL_DATA pLocalData, IN LPCTSTR pszSource ); BOOL SetupSkipDir( IN PLATFORM platform, IN LPCTSTR pszServerName ); void CleanupSkipDir( VOID ); LPTSTR AllocAndCatStr( IN LPCTSTR pszStr1, IN LPCTSTR pszStr2 ); LPTSTR AllocAndCatStr2( IN LPCTSTR pszStr1, IN LPCTSTR pszStr2, IN LPCTSTR pszStr3 ); LPTSTR AllocStrWCtoTC( IN LPWSTR lpStr ); VOID PSetupKillBadUserConnections( VOID ); DWORD PSetupInstallInboxDriverSilently( IN LPCTSTR pszDriverName ); BOOL PruneInvalidFilesIfNotAdmin( IN HWND hWnd, IN OUT HSPFILEQ CopyQueue ); BOOL AddDirectoryTag( IN LPTSTR pszDir, IN DWORD dwSize ); BOOL AddPnpDirTag( IN LPTSTR pszHardwareId, IN OUT LPTSTR pszDir, IN DWORD dwSize ); BOOL AddDirToDriverInfo( IN LPTSTR pszDir, IN LPDRIVER_INFO_6 pDriverInfo6 ); VOID GetCDRomDrive( TCHAR szDrive[5] ); BOOL IsSystemUpgradeInProgress( VOID ); BOOL IsSystemSetupInProgress( VOID ); BOOL IsSpoolerRunning( VOID ); LPTSTR GetMyTempDir( VOID ); BOOL IsNTPrintInf( IN LPCTSTR pszInfName ); BOOL IsSystemNTPrintInf( IN LPCTSTR pszInfName ); PVOID SetupDriverSigning( IN HDEVINFO hDevInfo, IN LPCTSTR pszServerName, IN LPTSTR pszInfName, IN LPCTSTR pszSource, IN PLATFORM platform, IN DWORD dwVersion, IN HSPFILEQ CopyQueue, IN BOOL bWeb ); BOOL IsLocalAdmin( OUT BOOL *pbAdmin ); BOOL GetCatalogFile( IN HANDLE hDriverSigning, OUT PCWSTR *ppszCat ); BOOL DrvSigningIsLocalAdmin( IN HANDLE hDriverSigning, OUT BOOL *pbIsLocalAdmin ); BOOL AddDriverCatalogIfNotAdmin( IN PCWSTR pszServer, IN HANDLE hDriverSigningInfo, IN PCWSTR pszInfPath, IN PCWSTR pszSrcLoc, IN DWORD dwMediaType, IN DWORD dwCopyStyle ); BOOL CleanupDriverSigning( IN PVOID pDSInfo ); BOOL CheckForCatalogFileInInf( IN LPCTSTR pszInfName, OUT LPTSTR *lppszCatFile OPTIONAL ); BOOL IsCatInInf( IN PVOID pDSInfo ); BOOL GetOSVersion( IN LPCTSTR pszServerName, OUT POSVERSIONINFO pOSVer ); BOOL GetOSVersionEx( IN LPCTSTR pszServerName, OUT POSVERSIONINFOEX pOSVerEx ); BOOL GetArchitecture( IN LPCTSTR pszServerName, OUT LPTSTR pszArch, IN OUT LPDWORD pcArchSize ); DWORD InstallDriverSilently( IN LPCTSTR pszInfFile, IN LPCTSTR pszDriverName, IN LPCTSTR pszSource ); BOOL IsInWow64( ); BOOL IsWhistlerOrAbove( IN LPCTSTR pszServerName ); DWORD InstallReplacementDriver( IN HWND hwnd, IN LPCTSTR pszServerName, IN LPCTSTR pszModelName, IN PLATFORM platform, IN DWORD version, IN DWORD dwInstallFlags, IN DWORD dwAddDrvFlags ); HMODULE LoadLibraryUsingFullPath( LPCTSTR lpFileName ); BOOL CheckAndKeepPreviousNames( IN LPCTSTR pszServer, IN PDRIVER_INFO_6 pDriverInfo6, IN PLATFORM platform ); BOOL IsTheSamePlatform( IN LPCTSTR pszServer, IN PLATFORM platform ); LPTSTR GetArchitectureName( IN LPCTSTR pszServerName ); #if defined(__cplusplus) } #endif