Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (C) 1997-1999 Microsoft Corporation
Module Name:
hwprof.cpp
Abstract:
This module implements CHwProfileList and CHwProfile classes.
Author:
William Hsieh (williamh) created
Revision History:
--*/
#include "devmgr.h"
#include "hwprof.h"
BOOL CHwProfileList::Create( CDevice* pDevice, DWORD ConfigFlags ) { // first get the current profile index.
HWPROFILEINFO HwProfileInfo; ASSERT(pDevice); m_pDevice = pDevice; // get the current profile index.
if (!m_pDevice->m_pMachine->CmGetCurrentHwProfile(&m_CurHwProfile)) return FALSE; // go through each profile and create a CHwProfile for it
int Index = 0; CHwProfile* phwpf; while (m_pDevice->m_pMachine->CmGetHwProfileInfo(Index, &HwProfileInfo)) { DWORD hwpfFlags; // get the hwprofile flags for this device
// if failed, use the given ConfigFlags
if (m_pDevice->m_pMachine->CmGetHwProfileFlags(( LPTSTR)m_pDevice->GetDeviceID(), HwProfileInfo.HWPI_ulHWProfile, &hwpfFlags)) { if (hwpfFlags & CSCONFIGFLAG_DO_NOT_CREATE) { // skip this profile
Index++; continue; } } else { // flags have not been set for this profile yet.
hwpfFlags = ConfigFlags; }
ASSERT(CONFIGFLAG_DISABLED == CSCONFIGFLAG_DISABLED);
hwpfFlags |= ConfigFlags; // rememeber current hw profile index
if (m_CurHwProfile == HwProfileInfo.HWPI_ulHWProfile) m_CurHwProfileIndex = Index; phwpf = new CHwProfile(Index, &HwProfileInfo, pDevice, hwpfFlags); m_listProfile.AddTail(phwpf); Index++; } return TRUE;
}
CHwProfileList::~CHwProfileList() { if (!m_listProfile.IsEmpty()) { POSITION pos = m_listProfile.GetHeadPosition(); while (NULL != pos) { CHwProfile* pProfile = m_listProfile.GetNext(pos); delete pProfile; } m_listProfile.RemoveAll(); } }
BOOL CHwProfileList::GetFirst( CHwProfile** pphwpf, PVOID& Context ) { ASSERT(pphwpf);
if (!m_listProfile.IsEmpty()) { POSITION pos = m_listProfile.GetHeadPosition(); *pphwpf = m_listProfile.GetNext(pos); Context = pos; return TRUE; } Context = NULL; *pphwpf = NULL; return FALSE; }
BOOL CHwProfileList::GetNext( CHwProfile** pphwpf, PVOID& Context ) { ASSERT(pphwpf); POSITION pos = (POSITION)Context;
if (NULL != pos) { *pphwpf = m_listProfile.GetNext(pos); Context = pos; return TRUE; } *pphwpf = NULL; return FALSE; }
BOOL CHwProfileList::GetCurrentHwProfile( CHwProfile** pphwpf ) { ASSERT(pphwpf);
POSITION pos = m_listProfile.FindIndex(m_CurHwProfileIndex); *pphwpf = m_listProfile.GetAt(pos);
return TRUE; }
ULONG CHwProfileList::IndexToHwProfile( int HwProfileIndex ) { if (HwProfileIndex >= m_listProfile.GetCount()) return 0XFFFFFFFF; POSITION pos = m_listProfile.FindIndex(HwProfileIndex); CHwProfile* pHwProfile = m_listProfile.GetAt(pos); return pHwProfile->GetHwProfile(); }
CHwProfile::CHwProfile( int Index, PHWPROFILEINFO phwpfInfo, CDevice* pDevice, DWORD Flags ) { m_Index = Index; m_hwpfInfo = *phwpfInfo; m_pDevice = pDevice; m_EnablePending = FALSE; m_DisablePending = FALSE; m_Flags = Flags;
}
|