|
|
/* DRIVERS.H
** ** Copyright (C) Microsoft, 1990, All Rights Reserved. ** ** ** Multimedia Control Panel Drivers Applet. ** ** Display a list of all installed drivers, allow user to configure ** existing or install new ones. ** */ #include "dlgs.h"
#include "commdlg.h"
#include <commctrl.h>
#include "mmcpl.h"
#include <setupapi.h>
#define SECTION 512 // Maximum size of section
#define MAXSTR 256
#define DLG_BROWSE 38
#define UNLIST_LINE 1
#define NO_UNLIST_LINE 0
#define WEC_RESTART 0x42
#define DESC_ERROR 4
#define DESC_SYS 3
#define DESC_INF 2
#define DESC_EXE 1
#define DESC_NOFILE 0
#define MAXDRVSTR 80 // Warning - Making this constant bigger could cause a buffer overflow
#define dwStatusHASSERVICE 0x00000001 // bit set if driver has service
#define dwStatusSvcENABLED 0x00000002 // bit set if has -enabled- service
#define dwStatusSvcSTARTED 0x00000004 // bit set if has now-running service
#define dwStatusDRIVEROK 0x00000008 // bit set if !svc and can open driver
#define dwStatusMAPPABLE 0x00000010 // bit set if doesn't have Mappable=0
#ifndef cchRESOURCE
#define cchRESOURCE 256
#endif
typedef struct _IDRIVER { WCHAR wszSection[MAXSTR]; WCHAR wszAlias[MAXSTR]; WCHAR wszFile[MAX_PATH]; TCHAR szSection[MAXSTR]; TCHAR szAlias[MAXSTR]; TCHAR szFile[MAX_PATH]; TCHAR szDesc[MAXSTR]; struct _IDRIVER *related; BOOL bRelated; TCHAR szRelated[MAXSTR]; TCHAR szRemove[MAXSTR]; int fQueryable; // 0 -> can't, 1 -> can, -1 -> need to check
BOOL bInstall; // 0 -> no, 1 -> yes
BOOL KernelDriver; // If TRUE this is a kernel driver, not an
// 'installable' driver so it can't be opened,
// process messages etc.
#ifdef INFFILE
BOOL infFileProcessing; #endif // INFFILE
LPARAM lp; } IDRIVER, *PIDRIVER;
typedef enum // DriverClass (in no particular order)
{ dcINVALID = -1, dcAUX = 0, // Aux devices
dcMIDI, // MIDi devices, MIDI mapper
dcMIXER, // Mixer devices
dcWAVE, // Wave audio devices, Wave mapper
dcACODEC, // Audio codecs
dcVCODEC, // Video codecs
dcMCI, // MCI devices
dcVIDCAP, // Video capture devices
dcJOY, // Joystick devices
dcLEGACY, // Legacy Devices for wave, midi and mixer
dcOTHER // Any unknown device
} DriverClass;
typedef struct _DevTreeNode // legacy from win95 devpropsheet code
{ HWND hwndTree; LPARAM lParam; } DEVTREENODE, * PDEVTREENODE;
extern HANDLE myInstance; extern TCHAR szNULL[]; extern TCHAR szDrivers[]; extern TCHAR szBoot[]; extern TCHAR szDriversHlp[]; extern TCHAR szAppName[]; extern TCHAR szUnlisted[]; extern TCHAR szFullPath[]; extern TCHAR szOemInf[]; extern TCHAR szDirOfSrc[]; extern TCHAR szUserDrivers[]; extern TCHAR szControlIni[]; extern TCHAR szDriversDesc[]; extern TCHAR szSetupInf[]; extern TCHAR szSysIni[]; extern TCHAR szMCI[]; extern TCHAR szRestartDrv[MAXDRVSTR]; extern TCHAR szRelated[]; extern TCHAR szNULL[]; extern TCHAR szBackslash[]; extern TCHAR szOutOfRemoveSpace[]; extern TCHAR szKnown[]; extern TCHAR szRelatedDesc[]; extern TCHAR szDrv[]; extern TCHAR szRemove[]; extern TCHAR szSystem[]; extern TCHAR szSystemDrivers[]; extern int iRestartMessage; extern UINT wHelpMessage; extern DWORD dwContext; extern BOOL bCopyVxD; extern BOOL bVxd; extern BOOL bInstallBootLine; extern BOOL bFindOEM; extern BOOL bRestart; extern BOOL bCopyingRelated; extern BOOL bRelated; extern HWND hAdvDlgTree; extern BOOL IniFileReadAllowed; extern BOOL IniFileWriteAllowed;
//------------------------------------------------------------------------
//
// Public routines
//
//------------------------------------------------------------------------
extern void RemoveDriverEntry (LPTSTR, LPTSTR, LPTSTR, BOOL); extern int FileNameCmp (TCHAR *, TCHAR *); extern void OpenDriverError (HWND, LPTSTR, LPTSTR); extern void RemoveSpaces (LPTSTR, LPTSTR); extern INT_PTR RestartDlg (HWND, unsigned, WPARAM, LPARAM); extern INT_PTR AddDriversDlg (HWND, unsigned, WPARAM, LPARAM); extern INT_PTR AddUnlistedDlg (HWND, unsigned, WPARAM, LPARAM); extern BOOL mmAddNewDriver (LPTSTR, LPTSTR, PIDRIVER); extern LONG_PTR PostRemove (PIDRIVER, BOOL); extern BOOL RemoveService (LPTSTR); extern BOOL CopyToSysDir (void); extern BOOL InstallDrivers (HWND, HWND, LPTSTR); extern void InitDrvConfigInfo (LPDRVCONFIGINFO, PIDRIVER); extern BOOL AddIDriverToArray (PIDRIVER); extern BOOL FillTreeInAdvDlg (HWND, PIDRIVER); extern PIDRIVER FindIDriverByName (LPTSTR); extern void RemoveIDriver (HWND, PIDRIVER, BOOL); extern BOOL IsConfigurable (PIDRIVER, HWND); extern void BrowseDlg (HWND, int); extern int LoadDescFromFile (PIDRIVER, LPTSTR, LPTSTR, size_t); extern BOOL wsInfParseInit (void); extern void wsStartWait (void); extern void wsEndWait (void); extern UINT wsCopySingleStatus (int, DWORD_PTR, LPTSTR); extern BOOL QueryRemoveDrivers (HWND, LPTSTR, LPTSTR); #ifdef FIX_BUG_15451
extern void ConfigureDriver (HWND, LPTSTR); extern BOOL fDeviceHasMixers (LPTSTR); extern BOOL WaitForNewCPLWindow (HWND); extern void GetTreeItemNodeDesc (LPTSTR, PIRESOURCE); extern void GetTreeItemNodeID (LPTSTR, PIRESOURCE); #endif // FIX_BUG_15451
extern void RefreshAdvDlgTree (void);
extern DWORD InstallDriversForPnPDevice (HWND, HDEVINFO, PSP_DEVINFO_DATA);
// From drivers.c
extern void lsplitpath (LPTSTR, LPTSTR, LPTSTR, LPTSTR, LPTSTR);
// From remove.c
LPTSTR mystrtok(LPTSTR SrcString, LPCTSTR Seps, LPTSTR FAR *State); extern DWORD Media_RemoveDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ); extern BOOL RemoveDriver (HDEVINFO, PSP_DEVINFO_DATA); #ifdef _WIN64
extern void mmWOW64ThunkMediaClassInstaller(DWORD dwInstallationFlag, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData); #endif //_WIN64
// From install.c
extern BOOL FilterOutNonNTInfs(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType ); extern DWORD Media_SelectBestCompatDrv(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ); extern DWORD Media_AllowInstall(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL ); extern DWORD Media_InstallDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL );
// From legcyinf.c
extern DWORD Media_SelectDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL );
extern DWORD Media_MigrateLegacy(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL );
#define IS_MS_MMMCI 1
#define IS_MS_MMVID 2
#define IS_MS_MMACM 3
#define IS_MS_MMVCD 4
#define IS_MS_MMDRV 5
extern int IsSpecialDriver(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData );
extern BOOL IsPnPDriver(IN PTSTR szName);
void acmDeleteCodec (WORD, WORD); // (from MSACMCPL.C)
#ifdef FIX_BUG_15451
extern TCHAR szDriverWhichNeedsSettings[MAX_PATH]; // See MMCPL.C
#endif // FIX_BUG_15451
void FreeIResource (PIRESOURCE); INT_PTR CALLBACK DevPropDlg (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL DriverClassToClassNode (PCLASSNODE, DriverClass); int DriverClassToOldClassID (DriverClass); DWORD GetDriverStatus (PIDRIVER); BOOL InitInstalled (HWND, LPTSTR);
/* Resource IDs */
#define IDOK 1
#define IDCANCEL 2
#define ID_IGNORE 3
#define ID_CURRENT 4
#define ID_RETRY 5
#define ID_NEW 6
#define ID_DISK 101
#define ID_ADV_ADD 102
#define ID_EDIT 105
#define ID_TEXT 106
#define ID_DIR 202
#define ID_FILE_LIST 203
#define ID_DIR_LIST 204
#define ID_TYPE 205
#define LB_AVAILABLE 301
#define ID_DRV 302
#define ID_LIST 303
#define ID_DRVSTRING 304
#define LB_UNLISTED 306
#define ID_ADV_PROP 307
#define ID_ADV_TSHOOT 308
#define ADVDLG 1001
#define DLG_UPDATE 1002
#define DLG_KNOWN 1003
#define DLG_RESTART 1004
#define DLG_EXISTS 1005
#define DLG_INSERTDISK 1006
#define DLG_COPYERR 1007
#define ID_STATUS2 1008
#define DLG_DM_ADVDLG 1009
#define DLG_DM_LEGACY_RESOURCES 1010
#define IDS_NOINF 2003
#define IDS_DEFDRIVE 2004
#define IDS_OUTOFDISK 2005
#define IDS_DISKS 2006
#define IDS_INSTALLDRIVERS 2007
#define IDS_INSTALLDRIVERS32 2067
#define IDS_DRIVERDESC 2008
#define IDS_OUT_OF_REMOVE_SPACE 2009
#define IDS_AVAILABLE_DRIVERS_DEFAULT 2010
#define IDS_ERROR 2011
#define IDS_INSTALLING_DRIVERS 2012
#define IDS_NO_DESCRIPTION 2013
#define IDS_ERRORBOX 2014
#define IDS_RESTARTTEXT 2015
#define IDS_CONFIGURE_DRIVER 2016
#define IDS_TOO_MANY_DRIVERS 2017
#define IDS_CANNOT_FIND 2018
#define IDS_APPNAME 2019
#define IDS_DRIVERS 2020
#define IDS_SETUPINF 2021
#define IDS_CONTROLINI 2022
#define IDS_SYSINI 2023
#define IDS_MCI 2024
#define IDS_CONTROL_INI 2025
#define IDS_WIN 2027
#define IDS_DOS 2028
#define IDS_BROWSE 2029
#define IDS_UPDATED 2031
#define IDS_CLOSE 2032
#define IDS_REMOVEORNOT 2033
#define IDS_UNLISTED 2034
#define IDS_KNOWN 2035
#define IDS_REMOVE 2036
#define IDS_REMOVEORNOTSTRICT 2037
#define IDS_USERINSTALLDRIVERS 2038
#define IDS_OEMSETUP 2044
#define IDS_SYSTEM 2045
#define IDS_FILE_ERROR 2046
#define IDS_INVALIDINF 2048
#define IDS_UNABLE_TOINSTALL 2049
#define IDS_BOOT 2050
#define IDS_RESTART_ADD 2051
#define IDS_RESTART_REM 2052
#define IDS_FILEINUSEADD 2053
#define IDS_OEMDISKS 2054
#define IDS_FILEINUSEREM 2055
#define IDS_LASTQUERY 2056
#define IDS_RELATEDDESC 2057
#define IDS_DRIVER_EXISTS 2058
#define IDS_SYSTEM_DRIVERS 2060
#define IDS_INSUFFICIENT_PRIVILEGE 2061
#define IDS_CANNOT_RESTART_PRIVILEGE 2062
#define IDS_CANNOT_RESTART_UNKNOWN 2063
#define IDS_DRIVER_CONFIG_ERROR 2064
#define IDS_CANTADD 2065
#define IDS_CONTROL_HLP_FILE 2066
#define IDS_TSHOOT 2068
|