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.
 
 
 
 
 
 

156 lines
4.9 KiB

//***************************************************************************
//
// TestInfo.h
//
// Module: CDM Provider
//
// Purpose: Defines the CClassPro class. An object of this class is
// created by the class factory for each connection.
//
// Copyright (c) 2000 Microsoft Corporation
//
//***************************************************************************
class CWdmClass
{
public:
CWdmClass();
~CWdmClass();
//
// Linked list management routines for the benefit of the
// provider
//
CWdmClass *GetNext();
CWdmClass *GetPrev();
void InsertSelf(CWdmClass **Head);
BOOLEAN IsThisInitialized(void);
HRESULT InitializeSelf(IWbemContext *pCtx,
PWCHAR CimClass);
HRESULT RemapToCimClass(IWbemContext *pCtx);
BOOLEAN ClaimCimClassName(PWCHAR CimClassName);
HRESULT GetIndexByCimRelPath(BSTR CimObjectPath,
int *RelPathIndex);
BOOLEAN IsInstancesAvailable() {return(MappingInProgress == 0);};
void IncrementMappingInProgress() { InterlockedIncrement(&MappingInProgress); };
void DecrementMappingInProgress() { InterlockedDecrement(&MappingInProgress); };
HRESULT PutInstance(IWbemContext *pCtx,
int RelPathIndex,
IWbemClassObject *pCimInstance);
//
// Accessors
//
ULONG GetInstanceCount(void) { return(RelPathCount); };
BSTR /* NOFREE */ GetWdmRelPath(int RelPathIndex);
BSTR /* NOFREE */ GetCimRelPath(int RelPathIndex);
IWbemClassObject *GetCimInstance(int RelPathIndex);
IWbemServices *GetWdmServices(void);
IWbemServices *GetCimServices(void);
private:
HRESULT WdmPropertyToCimProperty(
IWbemClassObject *pCimClassInstance,
IWbemClassObject *pWdmClassInstance,
BSTR PropertyName,
VARIANT *PropertyValue,
CIMTYPE CimCimType,
CIMTYPE WdmCimType
);
HRESULT CimPropertyToWdmProperty(
IWbemClassObject *pWdmClassInstance,
IWbemClassObject *pCimClassInstance,
BSTR PropertyName,
VARIANT *PropertyValue,
CIMTYPE WdmCimType,
CIMTYPE CimCimType
);
HRESULT CopyBetweenCimAndWdmClasses(
IWbemClassObject *pDestinationClass,
IWbemClassObject *pSourceClass,
BOOLEAN WdmToCdm
);
HRESULT FillInCimInstance(
IN IWbemContext *pCtx,
IN int RelPathIndex,
IN OUT IWbemClassObject *pCimInstance,
IN IWbemClassObject *pWdmInstance
);
HRESULT GetWdmInstanceByIndex(IWbemContext *pCtx,
int RelPathIndex,
IWbemClassObject **Instance);
HRESULT CreateCimInstance( IWbemContext *pCtx,
int RelPathIndex,
IWbemClassObject **Instance);
HRESULT DiscoverPropertyTypes(IWbemContext *pCtx,
IWbemClassObject *pClassObject);
//
// Data Members
//
LONG MappingInProgress;
typedef enum
{
UnknownDerivation,
NoDerivation,
ConcreteDerivation,
NonConcreteDerivation
} DERIVATION_TYPE, *PDERIVATION_TYPE;
DERIVATION_TYPE DerivationType;
CBstrArray PropertyList;
//
// Link list management
//
CWdmClass *Next;
CWdmClass *Prev;
//
// WDM/CIM Class Names
//
BSTR WdmShadowClassName; // Shadow class name
BSTR CimClassName; // Current class name
BSTR CimMappingClassName;
BSTR CimMappingProperty;
BSTR WdmMappingClassName;
BSTR WdmMappingProperty;
//
// List of mappings between Cim and WDM.
//
int RelPathCount;
CBstrArray *CimMapRelPaths;
CBstrArray *WdmRelPaths;
CWbemObjectList *CimInstances;
//
// Useful device information
CBstrArray *PnPDeviceIds;
CBstrArray *FriendlyName;
CBstrArray *DeviceDesc;
};