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
5.0 KiB
156 lines
5.0 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;
|
|
};
|
|
|