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.
383 lines
12 KiB
383 lines
12 KiB
/////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// cfgmgrdevice.h
|
|
|
|
//
|
|
|
|
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// History: 10/15/97 Sanj Created by Sanj
|
|
// 10/17/97 jennymc Moved things a tiny bit
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __CFGMGRDEVICE_H__
|
|
#define __CFGMGRDEVICE_H__
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// registry keys
|
|
/////////////////////////////////////////////////////////////////////////
|
|
#define CONFIGMGR_ENUM_KEY L"Config Manager\\Enum\\"
|
|
#define LOCALMACHINE_ENUM_KEY L"Enum\\"
|
|
|
|
#define CONFIGMGR_DEVICE_HARDWAREKEY_VALUE _T("HardwareKey")
|
|
#define CONFIGMGR_DEVICE_ALLOCATION_VALUE _T("Allocation")
|
|
#define CONFIGMGR_DEVICEDESC_VALUE _T("DeviceDesc")
|
|
#define CONFIGMGR_DEVICE_PROBLEM_VALUE _T("Problem")
|
|
#define CONFIGMGR_DEVICE_STATUS_VALUE L"Status"
|
|
#define CONFIGMGR_DEVICE_STATUS_VALUET _T("Status")
|
|
|
|
#include "iodesc.h"
|
|
#include "chwres.h"
|
|
#include "sms95lanexp.h"
|
|
#include "refptrlite.h"
|
|
|
|
class CIRQCollection;
|
|
class CDMACollection;
|
|
class CDeviceMemoryCollection;
|
|
class CNT4ServiceToResourceMap;
|
|
|
|
BOOL WINAPI FindDosDeviceName ( const TCHAR *a_DosDeviceNameList , const CHString a_SymbolicName , CHString &a_DosDevice , BOOL a_MappedDevice = FALSE ) ;
|
|
BOOL WINAPI QueryDosDeviceNames ( TCHAR *&a_DosDeviceNameList ) ;
|
|
|
|
|
|
class __declspec(uuid("CB0E0536-D375-11d2-B35E-00104BC97924")) CConfigMgrDevice;
|
|
|
|
_COM_SMARTPTR_TYPEDEF(CConfigMgrDevice, __uuidof(CConfigMgrDevice));
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
class
|
|
__declspec(uuid("CB0E0536-D375-11d2-B35E-00104BC97924"))
|
|
CConfigMgrDevice : public CRefPtrLite
|
|
{
|
|
|
|
public:
|
|
|
|
// Construction/Destruction
|
|
CConfigMgrDevice( LPCWSTR pszConfigMgrName,DWORD dwTypeToGet );
|
|
//CConfigMgrDevice( LPCWSTR pszDevice );
|
|
CConfigMgrDevice( DEVNODE dn = NULL, DWORD dwResType = ResType_All );
|
|
~CConfigMgrDevice();
|
|
|
|
//////////////////////////////////////////////////
|
|
// AVOID THESE FUNCTIONS, THESE ARE LEGACY //
|
|
//////////////////////////////////////////////////
|
|
|
|
LPCWSTR GetName( void );
|
|
LPCWSTR GetHardwareKey( void );
|
|
LPCWSTR GetDeviceDesc( void );
|
|
|
|
// Status and problem functions
|
|
DWORD GetStatus( void );
|
|
BOOL GetStatus( CHString& str );
|
|
void GetProblem( CHString& str );
|
|
|
|
DWORD GetProblem( void );
|
|
BOOL IsOK( void );
|
|
BOOL MapKeyToConfigMgrDeviceName();
|
|
|
|
//////////////////////////////////
|
|
// END LEGACY FUNCTIONS //
|
|
//////////////////////////////////
|
|
|
|
//////////////////////////////////////////////////////
|
|
// USE THESE FUNCTIONS, THESE ARE THE REAL THING! //
|
|
//////////////////////////////////////////////////////
|
|
|
|
// New functions that use config manager APIs directly
|
|
|
|
// Resource retrieval
|
|
void GetResourceList( CResourceCollection& resourceList, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
BOOL GetIRQResources( CIRQCollection& irqList, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
BOOL GetIOResources( CIOCollection& ioList, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
BOOL GetDMAResources( CDMACollection& dmaList, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
BOOL GetDeviceMemoryResources( CDeviceMemoryCollection& DeviceMemoryList, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
|
|
// String Values
|
|
BOOL GetDeviceDesc( CHString& strVal );
|
|
BOOL GetService( CHString& strVal );
|
|
BOOL GetClass( CHString& strVal );
|
|
BOOL GetClassGUID( CHString& strVal );
|
|
BOOL GetDriver( CHString& strVal );
|
|
BOOL GetMfg( CHString& strVal );
|
|
BOOL GetFriendlyName( CHString& strVal );
|
|
BOOL GetLocationInformation( CHString& strVal );
|
|
BOOL GetPhysicalDeviceObjectName( CHString& strVal );
|
|
BOOL GetEnumeratorName( CHString& strVal );
|
|
|
|
// DWORD Values
|
|
BOOL GetConfigFlags( DWORD& dwVal );
|
|
BOOL GetCapabilities( DWORD& dwVal );
|
|
BOOL GetUINumber( DWORD& dwVal );
|
|
|
|
// MULTI_SZ Values
|
|
BOOL GetHardwareID( CHStringArray& strArray );
|
|
BOOL GetCompatibleIDS( CHStringArray& strArray );
|
|
BOOL GetUpperFilters( CHStringArray& strArray );
|
|
BOOL GetLowerFilters( CHStringArray& strArray );
|
|
|
|
// Use Config Manager APIs directly
|
|
BOOL GetStringProperty( ULONG ulProperty, CHString& strValue );
|
|
BOOL GetDWORDProperty( ULONG ulProperty, DWORD* pdwVal );
|
|
BOOL GetMULTISZProperty( ULONG ulProperty, CHStringArray& strArray );
|
|
|
|
// Device Relationship functions
|
|
BOOL GetParent( CConfigMgrDevicePtr & pParentDevice );
|
|
BOOL GetChild( CConfigMgrDevicePtr & pChildDevice );
|
|
BOOL GetSibling( CConfigMgrDevicePtr & pSiblingDevice );
|
|
|
|
// Miscelaneous Device functions
|
|
BOOL GetBusInfo( INTERFACE_TYPE* pitBusType, LPDWORD pdwBusNumber, CNT4ServiceToResourceMap* pResourceMap = NULL );
|
|
BOOL GetDeviceID( CHString& strID );
|
|
BOOL GetStatus( LPDWORD pdwStatus, LPDWORD pdwProblem );
|
|
BOOL IsUsingForcedConfig();
|
|
BOOL IsClass(LPCWSTR pwszClassName);
|
|
|
|
// Direct registry access helpers
|
|
BOOL GetRegistryKeyName( CHString &strName);
|
|
BOOL GetRegStringProperty(LPCWSTR szProperty, CHString &strValue);
|
|
|
|
BOOL operator == ( const CConfigMgrDevice& device );
|
|
|
|
private:
|
|
|
|
// Registry traversal helpers
|
|
|
|
// LEGACY FUNCTIONS BEGIN
|
|
BOOL GetConfigMgrInfo( void );
|
|
BOOL GetDeviceInfo( void );
|
|
|
|
BOOL GetHardwareKey( HKEY hKey );
|
|
BOOL GetResourceAllocation( HKEY hKey );
|
|
BOOL GetStatusInfo( HKEY hKey );
|
|
BOOL GetDeviceDesc( HKEY hKey );
|
|
// LEGACY FUNCTIONS END
|
|
|
|
#if NTONLY > 4
|
|
// NT 5 Helpers
|
|
BOOL GetBusInfoNT5( INTERFACE_TYPE* pitBusType, LPDWORD pdwBusNumber );
|
|
static BOOL WINAPI IsIsaReallyEisa();
|
|
static INTERFACE_TYPE WINAPI ConvertBadIsaBusType(INTERFACE_TYPE type);
|
|
#endif
|
|
|
|
// Resource Allocation Data Helpers
|
|
|
|
// Resource allocation registry walkthroughs
|
|
void TraverseAllocationData( CResourceCollection& resourceList );
|
|
void TraverseData( const BYTE *& pbTraverseData, DWORD& dwSizeRemainingData, DWORD dwSizeTraverse );
|
|
BOOL GetNextResource( const BYTE * pbTraverseData, DWORD dwSizeRemainingData, DWORD& dwResourceType, DWORD& dwResourceSize );
|
|
|
|
// Resource functions
|
|
BOOL WalkAllocatedResources( CResourceCollection& resourceList, CNT4ServiceToResourceMap* pResourceMap, RESOURCEID resType );
|
|
BOOL AddResourceToList( RESOURCEID resourceID, LPVOID pResource, DWORD dwResourceLength, CResourceCollection& resourceList );
|
|
|
|
#ifdef NTONLY
|
|
// NT4 Resource functions
|
|
BOOL WalkAllocatedResourcesNT4( CResourceCollection& resourceList, CNT4ServiceToResourceMap* pResourceMap, CM_RESOURCE_TYPE resType );
|
|
BOOL GetServiceResourcesNT4( LPCWSTR pszServiceName, CNT4ServiceToResourceMap& resourceMap, CResourceCollection& resourceList, CM_RESOURCE_TYPE cmrtFilter = CmResourceTypeNull );
|
|
#if NTONLY == 4
|
|
BOOL GetBusInfoNT4( INTERFACE_TYPE* pitBusType, LPDWORD pdwBusNumber, CNT4ServiceToResourceMap* pResourceMap );
|
|
#endif
|
|
|
|
// NT 4 resource datatype coercsion functions
|
|
CM_RESOURCE_TYPE RESOURCEIDToCM_RESOURCE_TYPE( RESOURCEID resType );
|
|
void NT4IRQToIRQ_DES( LPRESOURCE_DESCRIPTOR pResourceDescriptor, PIRQ_DES pirqDes32 );
|
|
void NT4IOToIOWBEM_DES( LPRESOURCE_DESCRIPTOR pResourceDescriptor, PIOWBEM_DES pioDes32 );
|
|
void NT4MEMToMEM_DES( LPRESOURCE_DESCRIPTOR pResourceDescriptor, PMEM_DES pmemDes32 );
|
|
void NT4DMAToDMA_DES( LPRESOURCE_DESCRIPTOR pResourceDescriptor, PDMA_DES pdmaDes32 );
|
|
#endif
|
|
|
|
// 16 to 32-bit coercsion functions
|
|
void IRQDes16To32( PIRQ_DES16 pirqDes16, PIRQ_DES pirqDes32 );
|
|
void IODes16To32( PIO_DES16 pioDes16, PIOWBEM_DES pioDes32 );
|
|
void DMADes16To32( PDMA_DES16 pdmaDes16, PDMA_DES pdmaDes32 );
|
|
void MEMDes16To32( PMEM_DES16 pmemDes16, PMEM_DES pmemDes32 );
|
|
BOOL BusType16ToInterfaceType( CMBUSTYPE cmBusType16, INTERFACE_TYPE* pinterfaceType );
|
|
|
|
// LEGACY VARIABLES BEGIN
|
|
|
|
CHString m_strConfigMgrName;
|
|
CHString m_strHardwareKey;
|
|
CHString m_strDeviceDesc;
|
|
DWORD m_dwTypeToGet;
|
|
|
|
// If we get allocation information, we store it in here.
|
|
BYTE* m_pbAllocationData;
|
|
DWORD m_dwSizeAllocationData;
|
|
|
|
// Device status info
|
|
DWORD m_dwStatus;
|
|
DWORD m_dwProblem;
|
|
|
|
#ifdef WIN9XONLY
|
|
DWORD GetStatusFromConfigManagerDirectly(void);
|
|
#endif
|
|
|
|
// LEGACY VARIABLES END
|
|
|
|
// Use the devnode to query values directly from config manager
|
|
DEVNODE m_dn;
|
|
};
|
|
|
|
|
|
|
|
inline LPCWSTR CConfigMgrDevice::GetName( void )
|
|
{
|
|
return m_strConfigMgrName;
|
|
}
|
|
|
|
|
|
inline LPCWSTR CConfigMgrDevice::GetHardwareKey( void )
|
|
{
|
|
return m_strHardwareKey;
|
|
}
|
|
|
|
inline LPCWSTR CConfigMgrDevice::GetDeviceDesc( void )
|
|
{
|
|
return m_strDeviceDesc;
|
|
}
|
|
|
|
inline void CConfigMgrDevice::GetResourceList( CResourceCollection& resourceList, CNT4ServiceToResourceMap* pResourceMap/*=NULL*/ )
|
|
{
|
|
WalkAllocatedResources( resourceList, pResourceMap, m_dwTypeToGet );
|
|
}
|
|
|
|
inline DWORD CConfigMgrDevice::GetStatus( void )
|
|
{
|
|
return m_dwStatus;
|
|
}
|
|
|
|
inline DWORD CConfigMgrDevice::GetProblem( void )
|
|
{
|
|
return m_dwProblem;
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::IsOK( void )
|
|
{
|
|
return ( 0 == m_dwProblem );
|
|
}
|
|
|
|
// New Config manager functions that query Config Manager (16 & 32 bit)
|
|
// directly for info.
|
|
|
|
// REG_SZ Properties
|
|
inline BOOL CConfigMgrDevice::GetDeviceDesc( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_DEVICEDESC, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetService( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_SERVICE, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetClass( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_CLASS, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetClassGUID( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_CLASSGUID, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetDriver( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_DRIVER, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetMfg( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_MFG, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetFriendlyName( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_FRIENDLYNAME, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetLocationInformation( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_LOCATION_INFORMATION, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetPhysicalDeviceObjectName( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME, strVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetEnumeratorName( CHString& strVal )
|
|
{
|
|
return GetStringProperty( CM_DRP_ENUMERATOR_NAME, strVal );
|
|
}
|
|
|
|
// DWORD functions
|
|
inline BOOL CConfigMgrDevice::GetConfigFlags( DWORD& dwVal )
|
|
{
|
|
return GetDWORDProperty( CM_DRP_CONFIGFLAGS, &dwVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetCapabilities( DWORD& dwVal )
|
|
{
|
|
return GetDWORDProperty( CM_DRP_CAPABILITIES, &dwVal );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetUINumber( DWORD& dwVal )
|
|
{
|
|
return GetDWORDProperty( CM_DRP_UI_NUMBER, &dwVal );
|
|
}
|
|
|
|
// MULTI_SZ properties
|
|
inline BOOL CConfigMgrDevice::GetHardwareID( CHStringArray& strArray )
|
|
{
|
|
return GetMULTISZProperty( CM_DRP_HARDWAREID, strArray );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetCompatibleIDS( CHStringArray& strArray )
|
|
{
|
|
return GetMULTISZProperty( CM_DRP_COMPATIBLEIDS, strArray );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetUpperFilters( CHStringArray& strArray )
|
|
{
|
|
return GetMULTISZProperty( CM_DRP_UPPERFILTERS, strArray );
|
|
}
|
|
|
|
inline BOOL CConfigMgrDevice::GetLowerFilters( CHStringArray& strArray )
|
|
{
|
|
return GetMULTISZProperty( CM_DRP_LOWERFILTERS, strArray );
|
|
}
|
|
|
|
// Overloaded == operator. Checks if DEVNODEs are the same.
|
|
inline BOOL CConfigMgrDevice::operator == ( const CConfigMgrDevice& device )
|
|
{
|
|
return ( m_dn == device.m_dn );
|
|
}
|
|
|
|
// A collection of Devices
|
|
class CDeviceCollection : public TRefPtr<CConfigMgrDevice>
|
|
{
|
|
public:
|
|
|
|
// Construction/Destruction
|
|
CDeviceCollection();
|
|
~CDeviceCollection();
|
|
|
|
// Get the resources for this list of devices.
|
|
|
|
BOOL GetResourceList( CResourceCollection& resourceList );
|
|
BOOL GetIRQResources( CIRQCollection& IRQList );
|
|
BOOL GetDMAResources( CDMACollection& DMAList );
|
|
BOOL GetIOResources( CIOCollection& IOList );
|
|
BOOL GetDeviceMemoryResources( CDeviceMemoryCollection& DeviceMemoryList );
|
|
private:
|
|
// Because we're inheriting, we need to declare this here
|
|
// (= operator is not inherited).
|
|
const CDeviceCollection& operator = ( const CDeviceCollection& srcCollection );
|
|
|
|
};
|
|
|
|
|
|
#endif
|