// // Driver Verifier UI // Copyright (c) Microsoft Corporation, 1999 // // // // module: VBitsDlg.cpp // author: DMihai // created: 11/1/00 // // Description: // #include "stdafx.h" #include "verifier.h" #include "VBitsDlg.h" #include "VGlobal.h" #include "VrfUtil.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CVolatileBitsDlg dialog CVolatileBitsDlg::CVolatileBitsDlg(CWnd* pParent /*=NULL*/) : CDialog(CVolatileBitsDlg::IDD, pParent) { //{{AFX_DATA_INIT(CVolatileBitsDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CVolatileBitsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CVolatileBitsDlg) DDX_Control(pDX, IDC_VOLBITS_LIST, m_SettingsList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CVolatileBitsDlg, CDialog) //{{AFX_MSG_MAP(CVolatileBitsDlg) ON_WM_HELPINFO() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// VOID CVolatileBitsDlg::SetupListHeader() { CString strTitle; CRect rectWnd; LVCOLUMN lvColumn; // // The list's rectangle // m_SettingsList.GetClientRect( &rectWnd ); ZeroMemory( &lvColumn, sizeof( lvColumn ) ); lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT; // // Column 0 // VERIFY( strTitle.LoadString( IDS_ENABLED_QUESTION ) ); lvColumn.iSubItem = 0; lvColumn.cx = (int)( rectWnd.Width() * 0.20 ); lvColumn.pszText = strTitle.GetBuffer( strTitle.GetLength() + 1 ); if (NULL != lvColumn.pszText) { VERIFY( m_SettingsList.InsertColumn( 0, &lvColumn ) != -1 ); strTitle.ReleaseBuffer(); } else { lvColumn.pszText = g_szVoidText; VERIFY( m_SettingsList.InsertColumn( 0, &lvColumn ) != -1 ); } // // Column 1 // VERIFY( strTitle.LoadString( IDS_SETTING ) ); lvColumn.iSubItem = 1; lvColumn.cx = (int)( rectWnd.Width() * 0.79 ); lvColumn.pszText = strTitle.GetBuffer( strTitle.GetLength() + 1 ); if (NULL != lvColumn.pszText) { VERIFY( m_SettingsList.InsertColumn( 1, &lvColumn ) != -1 ); strTitle.ReleaseBuffer(); } else { lvColumn.pszText = g_szVoidText; VERIFY( m_SettingsList.InsertColumn( 1, &lvColumn ) != -1 ); } } ///////////////////////////////////////////////////////////////////////////// VOID CVolatileBitsDlg::FillTheList( DWORD dwVerifierBits ) { // // N.B. // // If you change this order then you need to // change GetNewVerifierFlags as well // AddListItem( IDS_SPECIAL_POOL, ( ( dwVerifierBits & DRIVER_VERIFIER_SPECIAL_POOLING ) != 0 ) ); AddListItem( IDS_FORCE_IRQL_CHECKING, ( ( dwVerifierBits & DRIVER_VERIFIER_FORCE_IRQL_CHECKING ) != 0 ) ); AddListItem( IDS_LOW_RESOURCE_SIMULATION,( ( dwVerifierBits & DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES ) != 0 ) ); } ///////////////////////////////////////////////////////////////////////////// DWORD CVolatileBitsDlg::GetNewVerifierFlags() { // // N.B. // // If you change this order then you need to // change FillTheList as well // DWORD dwNewFlags; dwNewFlags = 0; if( m_SettingsList.GetCheck( 0 ) ) { dwNewFlags |= DRIVER_VERIFIER_SPECIAL_POOLING; } if( m_SettingsList.GetCheck( 1 ) ) { dwNewFlags |= DRIVER_VERIFIER_FORCE_IRQL_CHECKING; } if( m_SettingsList.GetCheck( 2 ) ) { dwNewFlags |= DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES; } return dwNewFlags; } ///////////////////////////////////////////////////////////////////////////// VOID CVolatileBitsDlg::AddListItem( ULONG uIdResourceString, BOOL bInitiallyEnabled ) { INT nActualIndex; LVITEM lvItem; CString strName; ZeroMemory( &lvItem, sizeof( lvItem ) ); // // LVITEM's member pszText is not a const pointer // so we need to GetBuffer here :-( // // // Sub-item 0 - enabled/diabled - empty text and a checkbox // lvItem.pszText = g_szVoidText; lvItem.mask = LVIF_TEXT; lvItem.iItem = m_SettingsList.GetItemCount(); nActualIndex = m_SettingsList.InsertItem( &lvItem ); if( nActualIndex < 0 ) { // // Could not add an item in the list - give up // goto Done; } m_SettingsList.SetCheck( nActualIndex, bInitiallyEnabled ); // // Sub-item 1 - feature name // VERIFY( strName.LoadString( uIdResourceString ) ); lvItem.pszText = strName.GetBuffer( strName.GetLength() + 1 ); if( NULL == lvItem.pszText ) { goto Done; } lvItem.mask = LVIF_TEXT; lvItem.iItem = nActualIndex; lvItem.iSubItem = 1; VERIFY( m_SettingsList.SetItem( &lvItem ) ); strName.ReleaseBuffer(); Done: // // All done // NOTHING; } ///////////////////////////////////////////////////////////////////////////// // CVolatileBitsDlg message handlers BOOL CVolatileBitsDlg::OnInitDialog() { CRuntimeVerifierData RuntimeVerifierData; // // Start with the current settings // VrfGetRuntimeVerifierData( &RuntimeVerifierData ); CDialog::OnInitDialog(); m_SettingsList.SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | m_SettingsList.GetExtendedStyle() ); SetupListHeader(); FillTheList( RuntimeVerifierData.Level ); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } ///////////////////////////////////////////////////////////////////////////// void CVolatileBitsDlg::OnOK() { DWORD dwNewVerifierBits; dwNewVerifierBits = GetNewVerifierFlags(); if( VrfSetNewFlagsVolatile( dwNewVerifierBits ) ) { CDialog::OnOK(); } // // If VrfSetNewFlagsVolatile fails we wait for the Cancel button // } ///////////////////////////////////////////////////////////////////////////// BOOL CVolatileBitsDlg::OnHelpInfo(HELPINFO* pHelpInfo) { return TRUE; }