//	WhqlProvider.MOF
//	WMI classes definitions for the WHQL provider.
//	The provider is used to get signing info. about all device drivers
//
//	This mof defines two classes.Win32_PnPSignedDriver & Win32_PnPSignedDriverCIMDataFile
//
//===================================================================

#pragma namespace("\\\\.\\ROOT\\CIMV2") 

//*************************************************************
//***   Registers Provider									***
//*************************************************************
instance of __Win32Provider as $P
{
    Name = "WhqlProvider";
    ClsId = "{A0F93E27-F05D-4153-A151-F3720369A4C7}";
    ImpersonationLevel = 1;
    PerUserInitialization = TRUE;
    HostingModel = "NetworkServiceHost";
};

instance of __InstanceProviderRegistration
{
    Provider = $P;
    SupportsGet = TRUE;
    SupportsPut = FALSE;
    SupportsDelete = FALSE;
    SupportsEnumeration = TRUE;
    QuerySupportLevels = NULL;
};

instance of __MethodProviderRegistration
{
    Provider = $P;
};


//This would actually store info about the Driver.
[provider("WhqlProvider"): ToInstance ToSubClass, dynamic: ToInstance ToSubClass,
Description(
"The Win32_PnPSignedDriver class provides digital signature information about drivers "): ToSubClass ]
class Win32_PnPSignedDriver : CIM_Service
{
	[read: ToInstance ToSubClass ,
	Decription("The DeviceID property is the DeviceID of the device e.g. ROOT\\FTDISK\\0000 "): ToSubClass ]
		String		DeviceID;
	
	[read: ToInstance ToSubClass , 
	Decription("The ClassGUID  property is the ClassGUID of the device e.g. {71A27CDD-812A-11D0-BEC7-08002BE2092F}"): ToSubClass ]		
		String		ClassGuid;

	[Decription("The IsSigned property is the signature status of driver "
	"that is it represents whether the driver is signed or not")]		
		Boolean		IsSigned;

	[read: ToInstance ToSubClass , 
	Decription("The Signer property is the signer of driver if it is signed e.g. ntbuild "): ToSubClass ]
		String		Signer;

	[read: ToInstance ToSubClass , 
	Decription("The InfName property is the name of the Inf file which installed this device e.g. machine.inf "): ToSubClass ]		
		String		InfName ;

	[read: ToInstance ToSubClass , 
	Decription("The DriverVersion property is the version of the driver e.g. 5.1.2427.1 "): ToSubClass ]		
		String		DriverVersion;

	//a-kjaw BugBug: Needs to be converted to WMI DateTime format.
	[read: ToInstance ToSubClass , 
	Decription("The DriverDate property is the Date of the driver e.g 1-25-2001 "): ToSubClass ]		
		datetime		DriverDate;

	[read: ToInstance ToSubClass , 
	Decription("The Description property is the Description of the driver e.g. Volume Manager "): ToSubClass ]		
		//String		DriverDesc;	
		String		Description;	

	//a-kjaw: BugBug :Needs to be changed to avoid confusion?
	[read: ToInstance ToSubClass , 
	Decription("The ProviderName property is the Provider of the driver e.g. Microsoft "): ToSubClass ]		
		String		DriverProviderName;

	//[read: ToInstance ToSubClass , 
	//Decription("The HardwareID property array is the array of HardwareIDs of the driver "): ToSubClass ]		
	//	String		HardWareID[];		

	[read: ToInstance ToSubClass , 
	Decription("The HardwareID property is the HardwareID of the driver e.g. ROOT\\FTDISK "): ToSubClass ]		
		String		HardWareID;	

	[read: ToInstance ToSubClass , 
	Decription("The DeviceName property is the name of the device"): ToSubClass ]		
		String		DeviceName;

	[read: ToInstance ToSubClass , 
	Decription("The DeviceClass property is DeviceClass of the driver e.g. SYSTEM "): ToSubClass ]		
		String		DeviceClass;

	[read: ToInstance ToSubClass , 
	Decription("The CompatID property is the CompatID for the driver e.g. DETECTEDInternal\\ftdisk "): ToSubClass ]		
		String		CompatID;

	[read: ToInstance ToSubClass , 
	Decription("The Location property is the Location of the driver "): ToSubClass ]		
		String		Location;

	[read: ToInstance ToSubClass , 
	Decription("The PDO property represents Physical Device Object e.g \\Device\\00000002 "
	"PDOs represent individual devices on a bus to a bus driver"
	"A bus driver creates a PDO for each device that it enumerates on its bus."
	"The PDO represents the device to the bus driver. Other drivers for a device attach device objects "
	"on top of the PDO--the PDO is always at the bottom of the device stack"): ToSubClass ]		
		String		PDO;

	[read: ToInstance ToSubClass , 
	Decription("The Manufacturer property is the Manufacturer of the driver e.g. Microsoft"): ToSubClass ]		
		String		Manufacturer;

	[read: ToInstance ToSubClass , 
	Decription("The FriendlyName property is the array of FriendlyName/Caption of the driver e.g. Communications Port (COM2)"): ToSubClass ]		
		String		FriendlyName;

	[read: ToInstance ToSubClass , 
	Decription("The DevLoader property is the Device Loader for the device"): ToSubClass ]		
		String		DevLoader;

	[read: ToInstance ToSubClass , 
	Decription("The DriverName of the driver "): ToSubClass ]		
		String		DriverName;
	

	//Other attributes as reqd by WHQL.
	
	/*[read: ToInstance ToSubClass , 
	Decription("The DrvTool property is an authenticated attribute stored in drivers' cat file which represents"
	"Version # of the tool that generated .CAT file."): ToSubClass ]		
		String		DrvTool;	

	[read: ToInstance ToSubClass , 
	Decription("The SerialNumber property is an authenticated attribute stored in drivers' cat file which represents"
	"Self-Sign job ID"): ToSubClass ]		
		String		SerialNumber;

	[read: ToInstance ToSubClass , 
	Decription("The KitVer property is an authenticated attribute stored in drivers' cat file which represents "
	"Test Kit version driver set passed testing with? Note: KV_Unknown means No Test Program"): ToSubClass ]		
		String		KitVer;

	[read: ToInstance ToSubClass , 
	Decription("The OSBuild property is an authenticated attribute stored in drivers' cat file which represents "
	"Which build of OS did driver set pass testing with?"): ToSubClass ]		
		String		OSBuild;

	[read: ToInstance ToSubClass , 
	Decription("The OSAttr property is an authenticated attribute stored in drivers' cat file whch represents OS Attribute "): ToSubClass ]		
		String		OSAttr;

	[read: ToInstance ToSubClass , 
	Decription("OSSP is an authenticated attribute stored in drivers' cat file which represents "
	"Which OS Service Pack did driver set pass testing with?"): ToSubClass ]		
		String		OSSP;

	[read: ToInstance ToSubClass , 
	Decription("The HWIDxxx property is an authenticated attribute stored in drivers' cat file which represents"
	"Hardware Ids that have actually passed testing.  Note: there number of hardware Ids is practically unlimited "): ToSubClass ]		
		String		HWIDxxx;

	[read: ToInstance ToSubClass , 
	Decription("The Company property is an authenticated attribute stored in drivers' cat file which represents "
	"Company name that requested driver set be signed"): ToSubClass ]		
		String		Company;
	
	[read: ToInstance ToSubClass , 
	Decription("The SupURL property is an authenticated attribute stored in drivers' cat file which represents"
	"Support URL for company that requested driver set be signed"): ToSubClass ]		
		String		SupURL;

	[read: ToInstance ToSubClass , 
	Decription("The SupPhone property is an authenticated attribute stored in drivers' cat file which represents The Support phone no."): ToSubClass ]		
		String		SupPhone;
	
	[read: ToInstance ToSubClass , 
	Decription("The PilotProg property is an authenticated attribute stored in drivers' cat file which represents"
	"Audit trail for drivers signed during Pilot Program"): ToSubClass ]		
		String		PilotProg;
	
	[read: ToInstance ToSubClass , 
	Decription("The Cave property is an authenticated attribute stored in drivers' cat file which represents"
	"Audit trail if we have to sign driver sets without reviewing test log files"): ToSubClass ]		
		String		Cave;	*/
};	

[provider("WhqlProvider"): ToInstance ToSubClass, dynamic: ToInstance ToSubClass , 
Decription("Win32_PnPSignedDriverCIMDataFile is an association class basically used to get all the binary "
"files associated with the driver"): ToSubClass ]
class Win32_PnPSignedDriverCIMDataFile : CIM_Dependency
{
	/*[read: ToInstance ToSubClass, key , 
	Decription("The PnPID propety is the PnPID of the device represented by Win32_PnPSignedDriver class instance"): ToSubClass ]
		String	PnPID;
	//[read: ToInstance ToSubClass, key]String	FileName;*/

	[read: ToInstance ToSubClass, key , 
	Decription("The Antecedent propety is a reference to Win32_PnPSignedDriver	instance "): ToSubClass ]
		Win32_PnPSignedDriver	ref Antecedent;

	[read: ToInstance ToSubClass, key , 
	Decription("The Dependent property is a reference to CIM_DataFile which represents "
	"the binary file associated with the PnP driver "): ToSubClass ]
		CIM_DataFile			ref Dependent;	
};

/*[provider("WhqlProvider"): ToInstance ToSubClass, dynamic: ToInstance ToSubClass , 
Decription("Win32_PnPSignedDriverWin32PnPEntity is an association class Win32_PnPSignedDriver Win32PnPEntity classes"): ToSubClass ]
class Win32_PnPSignedDriverWin32PnPEntity
{
	[read: ToInstance ToSubClass, key , 
	Decription("The Dependent property is a reference Win32_PnPSignedDriver"): ToSubClass ]
		Win32_PnPSignedDriver	ref Antecedent;	
	
	[read: ToInstance ToSubClass, key , 
	Decription("The Antecedent property is a reference to Win32_PnPSignedDriver	instance "): ToSubClass ]
		Win32_PnEntity			ref Dependent;	
};*/