Storage Query Property test

The storage query property test validates if the storage miniport driver is reporting the correct bus type and the storage controller is reporting the correct PCI class code.


The test sends the IOCTL_STORAGE_QUERY_PROPERTY with STORAGE_PROPERTY_ID set to StorageAdapterProperty/StorageDeviceProperty to get the device bus type from the storage miniport driver.  The miniport driver should report the correct bus type from the following bus type enumeration values


typedef enum _STORAGE_BUS_TYPE {

  BusTypeUnknown = 0x00,

  BusTypeScsi = 0x01,

  BusTypeAtapi = 0x02,

  BusTypeAta = 0x03,

  BusType1394 = 0x04,

  BusTypeSsa = 0x05,

  BusTypeFibre = 0x06,

  BusTypeUsb = 0x07,

  BusTypeRAID = 0x08,

  BusTypeiSCSI = 0x09,

  BusTypeSas = 0x0A,

  BusTypeSata = 0x0B,

  BusTypeMaxReserved = 0x7F



The documentation for these bus type values can be found at:


The test gets the storage controller PCI class code from the OS generated PNP compatibility IDs  and determines the controller bus type based on the PCI class code. The test verifies if the bus type reported by the miniport driver matches with the bus type for the storage controller PCI class code. The test also verifies if the user supplied device bus type in the DTM submission matches with the corresponding bus type for the controller PCI class code.


The test uses the following PCI class code table to determine the storage controller bus type












































The controller bus type validation testing will continue to be a key test scenario in the Storage HBA category, but it will be modified to stop checking  the Programming Interface byte (IF), of the 0x0101 (IDE) and 0x0104 (RAID) types to determine the bus type. 

This results in being the following required class code definitions that must be present:

IDE Type:  Mass Storage Device (0x01), ATA Parallel – IDE Type (0x01), Programming Interface (Don’t Care – 0xXX )

RAID Type:  Mass Storage Device (0x01), RAID Type (0x04), Programming Interface (Don’t Care – 0xXX)

However, because the PCI Conventional specification (2.3) declares two unique values for the SATA Type (Non-ATA Compatible Mode) Programming Interface, the following is required for AHCI-enabled controllers:

AHCI Type:  Mass Storage Device (0x01), SATA Type (0x06), AHCI Type (0x01)

The SATA controller must report 0x0101XX in IDE compatible mode, 0x010601 in AHCI mode and 0x010600 in vendor specific implementations.

Comments (16)

  1. ATang says:

    Hi Bhanu,

    Following is the feedback from our engineering team on the Storage Query Property Test.  Would you mind commenting on it?  Thanks!


    The PCI class codes dictated by this blog entry won’t work for our Sable architecture controllers (3124, 3132, and 3531) in non-RAID mode.  The last sentence of the entry is what causes the problem:

      "Vendor-specific SATA is not supported in Windows, all SATA controllers

       must report either 0x0101XX in IDE Compatible mode or 0x010601 in AHCI

       mode, 0x010600 is not allowed."

    Sable architecture controllers have neither an IDE compatible or AHCI mode programming interface, instead they only support our own proprietary programming interface.

    If we changed our PCI Class Code to one of these, we would risk having an inbox driver attempting to program our controller, which would almost certainly cause problems for the system.  For these controllers we MUST be allowed to use the 0x010600 PCI Class Code/Programming Interface.

  2. bhanug says:


         The sentence has been reworded and it is allowed to report 0x010600 in vendor specific SATA implementations.


  3. ATang says:

    Hi Bhanu,

    Thanks for the reply.  As we try to follow the rules set by Microsoft on this test, we were looked at it from the engineer’s point of view.  But we found its seriousness on this change after we discussed it with our marketing and sales groups.  As one of our main goals here is the customer satisfaction and we realized that the simple PCI class code change to pass the WHQL test will manifest more problems than benefit for the millions of user whom are currently using our SATA chipset.

    We will need help from Microsoft and especially from your team to help us and see if there is any way that Microsoft can accommodate our unique situation so we can keep the PCI class code of 018000h.  Thanks.

  4. r_kanna says:


    I tried to run the storage query property test (WLK 1.2) on a Qlogic FC HBA running on Windows Server 2008 RTM (x64/DataCenter edition), and it fails. I have included output from the task log below.

    It seems this test considers the PCI ClassCode of 0xC (Serial Bus controller) as "BusTypeUnknown" and compares that with "BusTypeFibre" that is returned by the driver.

    I see that Qlogic INF file sets up the correct "BusType" in the registry (0x6), but this test still fails. Any ideas??

    Any help would be appreciated. thanks!



    Start Test 5/5/2008 7:47:46.828 PM STORAGE_ADAPTER_DESCRIPTOR: STORAGE_BUS_TYPE must match the submission type.

    Message 5/5/2008 7:47:46.828 PM Submission STORAGE_BUS_TYPE(s:)


    Message 5/5/2008 7:47:46.828 PM STORAGE_ADAPTER_DESCRIPTOR BusType:


    Error 5/5/2008 7:47:46.828 PM BusType BusTypeFibre is not an acceptable STORAGE_BUS_TYPE for this adapter.

    File:    Line: 0

    Error Type:    

    Error Code:   0x0

    Error Text:   Error 0x00000000

    Message 5/5/2008 7:47:46.828 PM This can be fixed by adding an ‘AddReg’ directive to the INF.

    The directive should look something like this:


    Where XX is replaced with a STORAGE_BUS_TYPE as defined in winioctl.h

    End Test 5/5/2008 7:47:46.828 PM STORAGE_ADAPTER_DESCRIPTOR: STORAGE_BUS_TYPE must match the submission type.

    Result:   Fail

    Repro:   QueryProperty.exe /device PCIVEN_1077&DEV_2432&SUBSYS_01381077&REV_024&727DAF7&0&0108 /busType BusTypeFibre /raid 0


  5. bhanug says:

    Did you ran this test from the DTM submission console ? or you are getting this failure by running the test on command line ?

  6. r_kanna says:

    Hi Bhanu,

    I ran the test from the DTM submission console. The output I got from the "View Task Log" option when you right click on the failed test

    I am using Qlogic driver ver the card model is the QLE2462

    I think the DTM test is classifying PCI class code 0xC (Serial Controller) as BusTypeUnknown and compares this with BusTypeFibre reported by the driver.


  7. bhanug says:

    Which version of the logo kit are you using ?

    Did you select the device bus type as "Fibre Channel" in the submission wizard ?

  8. r_kanna says:

    WLK Version 1.2.6475.0

    Storage Query Property (LOGO)ID 525

    WDKDataStorage_bus_type – BusTypeFibre

    WDKDeviceID – PCIVEN_1077&DEV_2432&SUBSYS_01381077&REV_024&727DAF7&0&0108

    I cannot set "FibreChannel", I just put "BusTypeFibre"


  9. bhanug says:

    Why you cannot set the bus type as "Fibre Channel" ? Are you not able to select it from the combo box in the submission wizard ?

  10. r_kanna says:


    Maybe I am missing something. Here are the steps I take for running the Query Property Test (ID 525)

    Goto Job Monitor Page

    Click on Client Machine

    Right Click, "Schedule by Job ID"

    Job Window

      + Select Job ID 525

      + Right-Click -> "Edit"

    Edit Window

      + Select "Parameters" and "Locals" Tab

      + Select "WDKDeviceID", Click "Value" column

      + Type in "PCIVEN_XXX"

      + Select "WDKDataStorage_bus_type", Click on "Value" column

    Note: There is no combo box for this parameter, its an edit box. I saw a blog saying that this will show up as an edit box (in WLK 1.1), but you can select the combo box value using up/down arrow. That doesnt work. If you use the up/down key, it just moves the focus up/down parameter fields.

      + I type in the value "BusTypeFibre"

      + "Save" the job settings, exit dialog

    Job Window

      + Schedule the Job

    I dont know where I get the option of setting the bus type to "FibreChannel"

    Also note, I am not running these tests as part of a "submission" . I am just running the tests individually.



  11. bhanug says:

    The method that you are using to run this test is not a supported approach. We never mentioned in the documentation to run the job like that.

    Please use WLK 1.2 for creating the submission for this hardware and run this job from that submission.


  12. r_kanna says:


    Looks like using submission is the way to go. The tests are finally passing.

    I thought I could just run the jobs manually instead of going through the submission process, guess that was the wrong way to go.

    thanks for all your help!


  13. Prabal says:

    Picking up an old thread –

    "The test verifies if the bus type reported by the miniport driver matches with the bus type for the storage controller PCI class code."

    How is the miniport driver supposed to report the bustype?



  14. Ben says:


    We have run the Storage Property test on our iSCSI product and are failing. My question today is about test configuration. Please correct/confirm my setup.

    On the Controller/Studio I create a new submission as normal, choosing bus type "iSCSI". I select Storage Query Property test. There are no options to "Edit Parameters" or "Add Information" for this test.

    OK so far?

    I have tried both HBAs (Win 2008 Logo with WLK 1.2 requires 2 HBAs or 2 systems) both fail.

    IS this the proper way to setup for test? Most all other tests are Passing, so I feel the config is OK.

    Any help/advice is appreciated.

  15. bhanug says:


    The minport INF file should provide the bustype information. In the INF file BusType parameter should be set with the bustype value.

    The following white paper discusses about this requirement

  16. bhanug says:

    I hope you are trying to logo your hardware for Storage Controller logo program. For iSCSI controller testing, only one iSCSI controller is required. The following WLK documentation explains the test system setup instructions