// // Driver Verifier UI // Copyright (c) Microsoft Corporation, 1999 // // // // module: VSetting.h // author: DMihai // created: 11/1/00 // // Description: // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_VSETTING_H__478A94E4_3D60_4419_950C_2144CB86691D__INCLUDED_) #define AFX_VSETTING_H__478A94E4_3D60_4419_950C_2144CB86691D__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ProgCtrl.h" /////////////////////////////////////////////////////////////// // // CDriverData class // // Has information about one driver // class CDriverData : public CObject { public: CDriverData(); CDriverData( const CDriverData &DriverData ); CDriverData( LPCTSTR szDriverName ); virtual ~CDriverData(); public: // // Operators // // // Methods // BOOL LoadDriverImageData(); // // Overrides // virtual void AssertValid( ) const; protected: BOOL LoadDriverHeaderData(); BOOL LoadDriverVersionData(); public: // // Type definitions // typedef enum { SignedNotVerifiedYet = 1, SignedYes, SignedNo } SignedTypeEnum; typedef enum { VerifyDriverNo = 1, VerifyDriverYes } VerifyDriverTypeEnum; public: // // Data // CString m_strName; SignedTypeEnum m_SignedStatus; VerifyDriverTypeEnum m_VerifyDriverStatus; // // If the current driver is a miniport then // m_strMiniportName is the driver it is linked against (videoprt.sys, etc.) // CString m_strMiniportName; // // If this is a "special driver" this is the name to add to the verification list // // - hal.dll for the HAL // - ntoskrnl.exe fro the kernel // CString m_strReservedName; // // Binary header info // WORD m_wMajorOperatingSystemVersion; WORD m_wMajorImageVersion; // // Version info // CString m_strCompanyName; CString m_strFileVersion; CString m_strFileDescription; }; /////////////////////////////////////////////////////////////// // // CDriverDataArray class // // ObArray of CDriverData // class CDriverDataArray : public CObArray { public: ~CDriverDataArray(); public: VOID DeleteAll(); CDriverData *GetAt( INT_PTR nIndex ) const; public: // // Operators // CDriverDataArray &operator = (const CDriverDataArray &DriversSet); }; /////////////////////////////////////////////////////////////// // // CDriversSet class // // Describes a set of drivers to verify // class CDriversSet : public CObject { public: CDriversSet(); virtual ~CDriversSet(); public: // // Find all installed unsigned drivers if we didn't do that already // BOOL LoadAllDriversData( HANDLE hAbortEvent, CVrfProgressCtrl &ProgressCtl ); BOOL FindUnsignedDrivers( HANDLE hAbortEvent, CVrfProgressCtrl &ProgressCtl ); BOOL ShouldDriverBeVerified( const CDriverData *pDriverData ) const; BOOL ShouldVerifySomeDrivers( ) const; BOOL GetDriversToVerify( CString &strDriversToVerify ); // // Operators // CDriversSet &operator = (const CDriversSet &DriversSet); // // Add a new verifier data structure based on the name // Returns the new item's index in the array. // INT_PTR AddNewDriverData( LPCTSTR szDriverName, BOOL bForceIfFileNotFound = FALSE ); // // Is this driver name already in our list? // BOOL IsDriverNameInList( LPCTSTR szDriverName ); // // Overrides // virtual void AssertValid( ) const; protected: // // Load all installed driver names if we didn't do this already // BOOL LoadAllDriversNames( HANDLE hAbortEvent ); public: // // Types // typedef enum { DriversSetCustom = 1, DriversSetOldOs, DriversSetNotSigned, DriversSetAllDrivers } DriversSetTypeEnum; // // Data // // // Standard, custom, etc. // DriversSetTypeEnum m_DriverSetType; // // Array with data for all the currently installed drivers // CDriverDataArray m_aDriverData; // // Extra drivers (not currenly installed) to verify // CStringArray m_astrNotInstalledDriversToVerify; // // Did we initialize already the driver data array? // BOOL m_bDriverDataInitialized; // // Did we initialize already the unsigned drivers member // of the driver data structure? // BOOL m_bUnsignedDriverDataInitialized; }; /////////////////////////////////////////////////////////////// // // CSettingsBits class // // Describes a set of verifier settings bits // class CSettingsBits : public CObject { public: CSettingsBits(); virtual ~CSettingsBits(); public: // // Type definitions // typedef enum { SettingsTypeTypical = 1, SettingsTypeCustom, } SettingsTypeEnum; public: // // Operators // CSettingsBits &operator = (const CSettingsBits &VerifSettings); // // Overrides // virtual void AssertValid() const; // // Methods // VOID SetTypicalOnly(); VOID EnableTypicalTests( BOOL bEnable ); VOID EnableExcessiveTests( BOOL bEnable ); VOID EnableLowResTests( BOOL bEnable ); BOOL GetVerifierFlags( DWORD &dwVerifyFlags ); public: // // Data // SettingsTypeEnum m_SettingsType; BOOL m_bSpecialPoolEnabled; BOOL m_bForceIrqlEnabled; BOOL m_bLowResEnabled; BOOL m_bPoolTrackingEnabled; BOOL m_bIoEnabled; BOOL m_bDeadlockDetectEnabled; BOOL m_bDMAVerifEnabled; BOOL m_bEnhIoEnabled; }; /////////////////////////////////////////////////////////////// // // CVerifierSettings class // // Describes a set of drivers to verify and the verifier settings bits // class CVerifierSettings : public CObject { public: CVerifierSettings(); virtual ~CVerifierSettings(); public: // // Operators // CVerifierSettings &operator = (const CVerifierSettings &VerifSettings); // // Overrides // virtual void AssertValid() const; // // Methods // BOOL SaveToRegistry(); public: // // Data // CSettingsBits m_SettingsBits; CDriversSet m_DriversSet; }; ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // // Runtime data - queried from the kernel // ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // // class CRuntimeDriverData // class CRuntimeDriverData : public CObject { public: // // Construction // CRuntimeDriverData(); public: // // Data // CString m_strName; ULONG Loads; ULONG Unloads; ULONG CurrentPagedPoolAllocations; ULONG CurrentNonPagedPoolAllocations; ULONG PeakPagedPoolAllocations; ULONG PeakNonPagedPoolAllocations; SIZE_T PagedPoolUsageInBytes; SIZE_T NonPagedPoolUsageInBytes; SIZE_T PeakPagedPoolUsageInBytes; SIZE_T PeakNonPagedPoolUsageInBytes; }; ////////////////////////////////////////////////////////////////////// // // class CRuntimeDriverDataArray // class CRuntimeDriverDataArray : public CObArray { public: ~CRuntimeDriverDataArray(); public: CRuntimeDriverData *GetAt( INT_PTR nIndex ); VOID DeleteAll(); }; ////////////////////////////////////////////////////////////////////// // // class CRuntimeVerifierData // class CRuntimeVerifierData : public CObject { public: // // Construction // CRuntimeVerifierData(); public: // // Methods // VOID FillWithDefaults(); BOOL IsDriverVerified( LPCTSTR szDriveName ); public: // // Data // BOOL m_bSpecialPool; BOOL m_bPoolTracking; BOOL m_bForceIrql; BOOL m_bIo; BOOL m_bEnhIo; BOOL m_bDeadlockDetect; BOOL m_bDMAVerif; BOOL m_bLowRes; ULONG RaiseIrqls; ULONG AcquireSpinLocks; ULONG SynchronizeExecutions; ULONG AllocationsAttempted; ULONG AllocationsSucceeded; ULONG AllocationsSucceededSpecialPool; ULONG AllocationsWithNoTag; ULONG Trims; ULONG AllocationsFailed; ULONG AllocationsFailedDeliberately; ULONG UnTrackedPool; DWORD Level; CRuntimeDriverDataArray m_RuntimeDriverDataArray; }; #endif // !defined(AFX_VSETTING_H__478A94E4_3D60_4419_950C_2144CB86691D__INCLUDED_)