//////////////////////////////////////////////
//	Specify namespace for v2 schema extension

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


//***************************************************************************
//	Diagnostics Provider (Instance & Method Provider) Registration
//***************************************************************************
instance of __Win32Provider as $P
{
  Name  = "wmimap";
  ClsId = "{8DD99E84-2B01-4c97-8061-2A3D08E289BB}";
};

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

[Dynamic, Provider("wmimap"),
 WdmShadowClass("MSKeyboard_PortInformation"),
 DerivedClassType("Concrete")
]
class FooConcrete : Win32_Keyboard
{
    string ConnectorType;
    uint32 DataQueueSize;
    uint32 ErrorCount;
    uint32 FunctionKeys;
};

[Dynamic, Provider("wmimap"),
 WdmShadowClass("MSKeyboard_PortInformation"),
 DerivedClassType("NonConcrete")
]
class FooNonConcrete : CIM_Keyboard
{
    [key] string InstanceName;
//    [FillSuperClass] string PnpDeviceId;
    string ConnectorType;
    uint32 DataQueueSize;
    uint32 ErrorCount;
    uint32 FunctionKeys;
};

[Dynamic, Provider("wmimap"),
 WdmShadowClass("MSKeyboard_PortInformation"),
 CimMappingClass("Win32_Keyboard")
]
class FooNoDerivation
{
    [key] string InstanceName;
    string ConnectorType;
    uint32 DataQueueSize;
    uint32 ErrorCount;
    uint32 FunctionKeys;
};

[Dynamic, Provider("wmimap"),
 WdmShadowClass("MSSerial_HardwareConfiguration"),

 CimMappingClass("Win32_SerialPort"),
 CimMappingProperty("DeviceId"),
 WdmMappingClass("MSSerial_PortName"),
 WdmMappingProperty("PortName"),
 DerivedClassType("Concrete")
]
class SerialConcrete : Win32_SerialPort
{

    uint32 IrqNumber;
    uint32 IrqVector;
    uint32 IrqLevel;
    uint64 IrqAffinityMask;
    string InterruptType;
    uint64 BaseIOAddress;

};

[Dynamic, Provider("wmimap"),
 WdmShadowClass("MSStorageDriver_FailurePredictFunction"),
 DerivedClassType("Concrete")
]
class DiskConcrete : Win32_DiskDrive
{
    [
     Implemented : ToInstance
    ]
     void GetFailurePredictionCapability([out, ValueMap{"0", "1", "2", "3"},
                                         Value{"Not Supported",
                                                  "Ioctl Based",
                                                  "IDE SMART",
                                                  "SCSI SMART"} : amended
                                        ] uint32 Capability);

    [
     Implemented : ToInstance
    ]
    void AllowPerformanceHit([in] boolean Allow);

};