484 lines
9.1 KiB
C
484 lines
9.1 KiB
C
|
//
|
||
|
// 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_)
|