Inventorying and Reporting Network Adapter Driver details, and how to report only the wireless type (with bonus mini-primer on SQL Report Builder) in Configuration Manager 2012

I occasionally get a question where someone wants to report on some seemingly simple piece of client information which seems, initially, to be a “no-brainer.”  Of course you can pull that information, just look,    umm,     I thought for sure that information was in here somewhere.  There’s no possible way that it isn’t, I clearly must be overlooking it…..

Hmm, it’s not there.  Then I think to myself, it must be Monday?!

So, I’ve learned over time that it’s not always the case – sometimes the seemingly most simple bits of information you want aren’t readily available for you out of the box.

So, what is a good example of this?  The most recent one I ran into was a request to report on wireless network drivers and versions.  I though for sure it would be included somewhere in Win32_NetworkAdapter or Win32_NetworkAdapterConfiguration or Win32_PnPEntity.  Nope, it’s not there, maybe I’m missing it.

So my next question – where is it?  I then came across a WMI Class called Win32_PNPSignedDriver.  Well, that’s a very interesting WMI Class with lots of good information – including the information I’m looking for – however it contains way more than just network adapters, and to make matters worse, importing the pertinent information into my Configuration Manager 2012 Hardware Inventory didn’t collect anything from this Class no matter how hard I kicked it.

That’s when I came across a blog posting written by Vinay Pamnani, which helpfully pointed out a registry key which contains all the information I needed!

The registry key for network adapter driver information is at HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318. 

As Vinay’s blog posting was created back in Feb 2010, it was clear that it was for Configuration Manager 2007.  Knowing this, it was time to take the information learned from his blog post and try it out in my trusty Configuration Manager 2012 R2 lab.

First, I (of course) made a backup copy of my configuration.mof in ConfigMgr\Inboxes\clifiles.src\hinv.  I then copied the information from Vinay’s Configuration.mof snip (see below) into my clipboard and added a few more entries I found interesting:

[ dynamic,
  class Win32Reg_NetworkDrivers
        string    Index;
        string    DriverDesc;
        string    DriverVersion;
    [PropertyContext("DriverDate")  ]
        string    DriverDate;
        string    ProviderName;
    [PropertyContext("*MediaType")  ]
         string    MediaType;
    [PropertyContext("RemoteWakeEnable")  ]
        string    RemoteWakeEnable;
    [PropertyContext("*WakeOnMagicPacket")  ]
        string    WakeOnMagicPacket;

Next, I pasted it into my configuration.mof on my CAS (yes, even at my own home there’s enough politics to cause me to have a CAS).  Next, I simply pasted it between the section at the bottom in between “// Added extensions start” and “//Added extensions end” and saved it, so the final result looked like this:


This change provided my Configuration Manager hierarchy the knowledge about this registry key and all of the information of my interest within the key.  Looking at this key, there are a plethora of other values to collect, but the only ones I added over and above Vinay’s example were: Provider, RemoteWakeEnable, and *WakeOnMagicPacket.  If desired, I could’ve easily gathered additional information from this key such as the wireless roaming aggressiveness settings, whether or not the wireless radio is enabled, preferred wifi channel, PNP Device info – the list goes on.

Next, I copied the information for the SMS_DEF.MOF file, but once again, I added the additional information for ProviderName, RemoteWakeEnable, and WakeOnMagicPacket to let my ConfigMgr site know that I also want it to collect the information stored in these registry values during my client hardware inventories.  All of this will be inserted into the new SQL View it will automatically create named “v_GS_NETWORK_DRIVERS”.

Here’s what I ended up with for my MOF to import into my Hardware Inventory:

#pragma namespace ("\\\\.\\root\\cimv2\\sms")
  [ SMS_Report     (TRUE),
  SMS_Group_Name ("Network Drivers"),
  Namespace      ("\\\\\\\\localhost\\\\root\\\\cimv2") ]
  class Win32Reg_NetworkDrivers : SMS_Class_Template
    [SMS_Report (TRUE), key ]
        string Index;
    [SMS_Report (TRUE)      ]
        string DriverDesc;
    [SMS_Report (TRUE)      ]
        string DriverVersion;
    [SMS_Report (TRUE)      ]
        string DriverDate;
    [SMS_Report (TRUE)      ]
        string MediaType;
    [SMS_Report (TRUE)      ]
        string ProviderName;
    [SMS_Report (TRUE)      ]
        string RemoteWakeEnable;
    [SMS_Report (TRUE)      ]
        string WakeOnMagicPacket;

Knowing there’s no longer an SMS_DEF.MOF that exists in clifiles.src/hinv on ConfigMgr 2012, I instead pasted it into a new file I created in Notepad and named it something memorable but only slightly witty such as “wifidriversarefun.MOF”.  I went to my Administration/Client Settings and modified my Default Client Settings on my CAS.  Next, I drilled into the Hardware Inventory section of my Default Client Settings (note: you MUST select Default Client Settings) and clicked the “Set Classes” button:


Next, click “Import” and browse to the “wifidriversarefun.MOF” file you saved.


Leave the “Import Summary” option at the default of “Import both hardware inventory classes and hardware inventory class settings”.  Once again click the “Import” button.


I also left all of the class settings checked since I wanted everything that I defined in both my configuration.mof and my imported Hardware Inventory MOF, and clicked OK a couple times.


Next, go to Monitoring->Reporting->Reports and click “Create Report”


The “Create Report Wizard” will appear.  Select “SQL-based Report”, give it a memorable name, and select which folder on your SSRS you want to store it in.  Click “Next", “Next”, “Close”.


Once SQL Report Builder 3.0 appears, select “Table or Matrix”:


And then “Create a Dataset”.  The “New Table or Matrix” wizard appears with your Data Source Connection to your ConfigMgr 12 database.  Click the “Test Connection” to confirm all is well.


If you don’t have the required permissions with your currently logged on account, instead of using your currently logged on credentials, type in the login credentials for an account which has the appropriate permissions to the site database, and click “Next”.

In the “Design a query” wizard, expand dbo –>Views:


Next, expand v_GS_NETWORK_DRIVERS and select the values that you want included in your report; first from v_GS_NETWORK_DRIVERS to get the new Network Adapter Driver information:


Then, select Name0 from the v_GS_System view so that you will also get a computer name included.


Click on “Auto Detect”, and then click the “Add Relationships” button to the right of “Edit Fields”


Single click into the “Left Table”, selecting one of the two tables, then single click into the “Right Table”, and of course select the other view.  Your join can be Inner, Left Outer, Right Outer, or Full Outer, but I’m not going to go into depth on SQL joins today, so you can read more about them here.


Now, click the “Add Field” button:


Under the “Left Join Field”, select “ResourceID”.  Then under the “Right Join Field” column, once again select “ResourceID”.  ResourceID is the field which you should always be familiar with as pretty much every report that contains information about clients has a unique ResourceID value which identifies each client and allows you to join the various views together for reporting purposes.


Now the final result should appear like this:


If all is well, click “Next” to continue, and on the “Arrange fields” step, drag “Name0” to the “Row groups” box, and the rest of the information you want associated with each computer name to the “Values” box” and click “Next”.


Uncheck the “Show subtotals and grand totals” and “Expand/collapse groups” checkboxes.


Select your favorite SSRS style:


Now you should have a nice report showing each of your network adapters and their pertinent driver information, as well as some additionally helpful wake-on-lan information.  You can also customize the column names to something more meaningful as I have below (ie. Name0 –> Computer Name):


Now, if you want to filter it down to only the wireless network adapters, under Datasets,  right-click “DataSet1” and click “Properties”.


Then click “Filters” and click "Add” to add a filter:


In “Expression” field, select “MediaType0”.  Leave the Operator at "=”, and the value of MediaType0 for all wireless adapters happens to be a value of “16”.


Save the report, run it again, and viola, only the wireless network adapters and their driver information will magically appear for each client, along with their driver dates, descriptions, versions and WakeOnLan settings.

Now, for an extra bonus, if you want to be able to click on any client and have it show you some additional Network Adapter information for a specific client, right click in the [Name0] cell, and click “Text Box Properties”


Click “Action” and in the “Change Action Options” section, select the “Go to report” radio button, click “Browse”, and browse to the Hardware – Network Adapter / “Network Adapter information for a specific computer” report.  Under “Use these parameters to run the report”, click “Add”, select “variable” in the Name field, and “[Name0]” in the Value field, and click OK.


Now, run the report and pat yourself on the back for making it to the end of this blog post (and hopefully you even have a working report!)

Comments (28)

  1. Make sure the clients have received the new policy, and then make sure at least one client has run a hardware inventory. Once that occurs, it should create the view automatically. Until at least 1 client does this, the view will not exist in SQL. You can check SQL Management Studio to look for the v_GS_Network_Drivers view to see if it exists.

  2. Anonymous says:

    Ah figured it out; you have to do the import on “Default Client Settings” and not on any custom client settings that you may have set up. Thanks for this article!

  3. Anonymous says:

    When I try to import the mof file under Hardware Inventory Classes I just get a message saying that the “class does not exist”. Did I leave out a step?

  4. Anonymous says:

    This is a really good walk though, thanks for the walk through Russ. I do have a question though, do you know how you could limit the report portion of this walk through by Collection only? I’d like to target only specific collections with this report
    and am not quite sure how to do this.

  5. Durval Ramos says:

    Very useful and detailed. Thanks for sharing

  6. Hmm, try giving the configuration.mof some time to propagate out. My guess is when you import the client setting .mof, if fhe Win32Reg_NetworkDrivers WMI class doesn’t yet exist (you might check to confirm this as well), it will likely complain.

  7. Thanks, very interesting

  8. dude -d says:

    Sorry, working now. Thanks! Management Point issue causing general problems for my environment.

  9. Yes it should work just fine on 2007 since it’s really dependent on the registry keys on the clients existing and inventorying them which 2007 can also do. Of course, with 2007 you won’t use client settings to import the custom MOF, you’ll have to add
    it to your SMS_DEF.MOF instead.

  10. dude -d says:

    As far as I can see, I’m following this step by step to the letter, but when I run the report, I only get the column names. No machines are listed (I have over 1000 clients which are showing up in my other reports).
    Anything else I could be doing wrong?

  11. Scott – Did you also modify your configuration.mof as well?

  12. Anonymous says:

    Pingback from Inventorying Scanners, Digital Cameras, and WebCams in Configuration Manager 2012 – Russ Rimmerman – ConfigMgr Guy – Site Home – TechNet Blogs

  13. Anonymous says:

    Pingback from Inventorying Scanners, Digital Cameras, and WebCams in Configuration Manager 2012 – Russ Rimmerman – ConfigMgr Guy – Site Home – TechNet Blogs

  14. Anonymous says:

    Similar to one of my past blog posts on how to go about collecting network adapter driver information

  15. v_2mayas says:

    The v_GS_Network_Drivers view isn’t showing-up while creating the report. Any clue?

  16. Dominic Reina says:

    Worked perfectly! Thanks!

  17. Mike Compton says:

    This is a particularly brilliant article I think, very well written and illustrated!!! Thanks a lot.

    Incidentally, I also created a new Client Setting config to test this and received the error which was resolved this way: "you have to do the import on "Default Client Settings" and not on any custom client settings that you may have set up".

  18. Mike Compton says:

    "Under “Use these parameters to run the report”, click “Add”, select “variable” in the Name field, and “[Name0]” in the Value field, and click OK."

    This does not work for me, i cannot *select* variable because there is nothing in the drop down, if i type it in and then run the report i get the error "An attempt was made to set a report paramter ‘variable’ that is not defined in theis report . (rsUnknownReportParameter)"

    Any ideas?

    Also, can you advise how to select multiple values in the filter? I want to only see adapter types 0 and 16, but clearly adding multiple filters results in an AND not an OR because nothing is returned.

    Thanks in advance

  19. v_2mayas says:

    worked perfectly Russ. Thank you 🙂

  20. Brad Sage says:

    Worked like a charm with SCCM 2012 R2.
    Been trying to do this for ages, Will definitely share your post

  21. David Cook says:

    Will this work on Config Mgr 2007?

  22. Scott Ewing says:

    Great article Russ. I was asked to add the PnPCapabilities value to what we inventory. But the hardware inventory for that property is failing.

    Here is what I see in the SCCM 2012 R2 client InventoryAgent,log.

    Collection: Namespace = \localhostrootcimv2; Query = SELECT __CLASS, __PATH, __RELPATH, Index, DriverDate, DriverDesc, DriverVersion, LOM, LOMRadio, MediaType, NICPowerState, PowerSaveMode, ProviderName, PnPCapabilities FROM Win32Reg_NetworkDrivers; Timeout
    = 600 secs.

    Invalid Query for class Win32Reg_NetworkDrivers: 80041017, will retry to remove invalid properties

    Collection-Retry:Ignore invalid property PnPCapabilities

    Collection-Retry: Namespace = \localhostrootcimv2; Query = SELECT __CLASS, __PATH, __RELPATH, Index,DriverDate,DriverDesc,DriverVersion,LOM,LOMRadio,MediaType,NICPowerState,PowerSaveMode,ProviderName FROM Win32Reg_NetworkDrivers; Timeout = 600 secs.

    This is the MOF file I imported into the Default Client Setting

    #pragma namespace ("\\.\root\cimv2\sms")
    [ SMS_Report (TRUE),
    SMS_Group_Name ("Network Drivers"),
    Namespace ("\\\\localhost\\root\\cimv2") ]
    class Win32Reg_NetworkDrivers : SMS_Class_Template
    [SMS_Report (TRUE), key ] string Index;
    [SMS_Report (TRUE) ] string DriverDesc;
    [SMS_Report (TRUE) ] string DriverVersion;
    [SMS_Report (TRUE) ] string DriverDate;
    [SMS_Report (TRUE) ] string ProviderName;
    [SMS_Report (TRUE) ] string MediaType;
    [SMS_Report (TRUE) ] string PowerSaveMode;
    [SMS_Report (TRUE) ] string LOM;
    [SMS_Report (TRUE) ] string LOMRadio;
    [SMS_Report (TRUE) ] string NICPowerState;
    [SMS_Report (TRUE) ] uint32 PnPCapabilities;

    Do you know why it is failing inventory the PnPCapabilities value?

    Thank you!

  23. Scott Ewing says:

    Of course not! 🙂

    I thought of that as soon as I clicked POST on my previous comment. It is working fine now that I have updated the configuration.mof.

    Thank you again Russ.

  24. H. Shaw says:

    Is there a way to easily do this as a Configuration Item in SCCM 2012? I’m trying to reach a certain compliance level for new wireless drivers we are pushing via a third party (Lenovo). I need to know machines are compliant without having to wait for the
    next hardware scan.

  25. You can certainly check registry keys and their associated values with a CI, so I don’t see why not…

  26. Patrick Kalinowski says:

    Hi ! First of all thank you for the article. It has been a great guide for my implementing it on several of our SCCM 2012 R2 environments. The report "Network Adapter Drivers" reports on all drivers on Windows 8.1 Enterprise x64 systems. But I have some
    trouble on Windows 8 and Windows 7 systems. I only see one driver on those 7 and 8 systems, the "WAN Miniport (SSTP)" to be specific.

    I have checked the registry keys on a Windows 7 Enterprise x64 system. I have most of the values in the registry path < HKLMSYSTEMCurrentControlSetControlClass{4d36e972-e325-11ce-bfc1-08002be10318} >. In Windows 8.1 I find these values in < ..{4d36e972-e325-11ce-bfc1-08002be10318}002
    >. In Windows 7 I find the velues in < ..{4d36e972-e325-11ce-bfc1-08002be10318}011 > and < ..{4d36e972-e325-11ce-bfc1-08002be10318}027 > for the WiFi driver that I’m looking for in my reports. I see the keys DriverDesc, DriverVersion, DriverDate, ProviderName
    and *MediaType in both paths. I’m missing the RemoteWakeEnable and *WakeOnMagicPacket. But none of these WiFi driver information is to be found in the report "Network Adapter Drivers".

    Has anyone else noticed this ? Or am I missing something ?

  27. Patrick Kalinowski says:

    Never mind. I discovered that Excel can’t handle the amount of information. The applied automatic filter does not work well with the merged cells in the "Network Adapter Drivers" exported excel file.