|
|
//=================================================================
//
// ConfgMgr.h
//
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
//=================================================================
#pragma once
#include <chstring.h>
#include <chptrarr.h>
#include "refptr.h"
#include "poormansresource.h"
//#include <cfgmgrdevice.h>
#include "resourcedesc.h"
#include "cfgmgrdevice.h"
#include "irqdesc.h"
#include "dmadesc.h"
#include "devdesc.h"
#include "configmgrapi.h"
#define CFGMGR_WORRY_SIZE 250
typedef std::map<CHString, _GUID> STRING2GUID;
typedef struct _IO_INFO{ DWORD StartingAddress; DWORD EndingAddress; DWORD Alias; DWORD Decode; CHString OwnerName; CHString DeviceType; } IO_INFO;
typedef struct _DMA_INFO{ DWORD Channel; DWORD ChannelWidth; CHString OwnerDeviceId; CHString OwnerName; DWORD OEMNumber; CHString DeviceType; DWORD Port; } DMA_INFO;
typedef struct _IRQ_INFO{ BOOL Shareable; DWORD IRQNumber; CHString OwnerDeviceId; CHString OwnerName; DWORD OEMNumber; CHString DeviceType; DWORD Vector; } IRQ_INFO;
typedef struct _MEM_INFO{ DWORD StartingAddress; DWORD EndingAddress; CHString OwnerName; CHString DeviceType; CHString MemoryType; } MEM_INFO;
class CConfigManager { public:
// The Type to get parameter should be discarded whenever we get a chance.
CConfigManager( DWORD dwTypeToGet = ResType_All ); ~CConfigManager() { ResetList();}
//////////////////////////////////////////////////////////////////
// The following functions are LEGACY! Phase these out ASAP! //
// DO NOT USE! //
//////////////////////////////////////////////////////////////////
BOOL BuildListsForThisDevice(CConfigMgrDevice *pDevice); BOOL RefreshList();
inline IRQ_INFO * GetIRQ(int i) { return(( IRQ_INFO * ) m_List.GetAt(i));} inline DMA_INFO * GetDMA(int i) { return(( DMA_INFO * ) m_List.GetAt(i));} inline IO_INFO * GetIO(int i) { return(( IO_INFO * ) m_List.GetAt(i));} inline MEM_INFO * GetMem(int i) { return(( MEM_INFO * ) m_List.GetAt(i));}
inline int GetTotal() { return m_List.GetSize(); }
//////////////////////////////
// End Legacy functions //
//////////////////////////////
BOOL GetDeviceList( CDeviceCollection& deviceList, LPCWSTR pszFilter = NULL, ULONG ulProperty = CM_DRP_MAX ); BOOL LocateDevice( LPCWSTR pszDeviceID, CConfigMgrDevicePtr & pCfgMgrDevice );
// Device List Helper functions
BOOL GetDeviceListFilterByClass( CDeviceCollection& deviceList, LPCWSTR pszFilter ); BOOL GetDeviceListFilterByService( CDeviceCollection& deviceList, LPCWSTR pszFilter ); BOOL GetDeviceListFilterByDriver( CDeviceCollection& deviceList, LPCWSTR pszFilter ); BOOL GetDeviceListFilterByClassGUID( CDeviceCollection& deviceList, LPCWSTR pszFilter );
static STRING2GUID s_ClassMap;
private:
// Legacy function
void ResetList();
static BOOL s_ClassIsValid;
DWORD GetIRQVector(PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor, DWORD dwCount, DWORD dwIRQNum); LPCWSTR GetMemoryType(PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor, DWORD dwCount, ULONGLONG ulStartAddress); DWORD GetDMAPort(PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor, DWORD dwCount, DWORD dwChannel);
BOOL WalkDeviceTree( DEVNODE dn, CDeviceCollection& deviceList, LPCWSTR pszFilter, ULONG ulFilterProperty, CConfigMgrAPI *a_pconfigmgr ); BOOL WalkDeviceTree2( DEVNODE dn, CDeviceCollection& deviceList, CConfigMgrAPI *a_pconfigmgr ) ;
// Legacy variables
CHPtrArray m_List; DWORD m_dwTypeToGet; BOOL CheckForLoop(CDeviceCollection& deviceList, CConfigMgrDevice* pDevice); };
// Device List Helper functions
inline BOOL CConfigManager::GetDeviceListFilterByService( CDeviceCollection& deviceList, LPCWSTR pszFilter ) { return GetDeviceList( deviceList, pszFilter, CM_DRP_SERVICE ); }
inline BOOL CConfigManager::GetDeviceListFilterByDriver( CDeviceCollection& deviceList, LPCWSTR pszFilter ) { return GetDeviceList( deviceList, pszFilter, CM_DRP_DRIVER ); }
inline BOOL CConfigManager::GetDeviceListFilterByClassGUID( CDeviceCollection& deviceList, LPCWSTR pszFilter ) { return GetDeviceList( deviceList, pszFilter, CM_DRP_CLASSGUID ); }
|