Updating WMI Registration Information

After its initial registration with WMI, a driver changes its registration information by calling IoWMIRegistrationControl with one of the following actions:

  • WMIREG_ACTION_REREGISTER to replace all registration information previously supplied by the driver with new information.

    In response, WMI sends either an IRP_MN_REGINFO request or an IRP_MN_REGINFO_EX request to the driver, with Parameters.WMI.DataPath set to WMIREGISTER. (On Windows 98 and Windows 2000, the system sends the IRP_MN_REGINFO request. On Windows XP and later, the system sends the IRP_MN_REGINFO_EX request.)

    The driver supplies WMI with new registration information for all blocks it supports, as described in Using the WMI Library to Register Blocks and Handling IRP_MN_REGINFO and IRP_MN_REGINFO_EX to Register Blocks.

  • WMIREG_ACTION_UPDATE_GUIDS to add or remove support for blocks or to change the static instance names of registered blocks.

    In response, WMI sends an IRP_MN_REGINFO or IRP_MN_REGINFO_EX request to the driver, with Parameters.Wmi.DataPath set to WMIUPDATE.

    The driver supplies WMI with an updated registration information in which:

    • The driver sets WMIREG_FLAG_REMOVE_GUID to remove support for that block.

    • The driver clears WMIREG_FLAG_REMOVE_GUID to add a new block or update an existing block.

    • The driver sets or clears WMIREG_FLAG_INSTANCE_XXX and supplies any necessary instance name information to change a block's static instance names or change it to use dynamic instance names.

  • WMIREG_ACTION_DEREGISTER to instruct WMI that the driver will no longer provide WMI information.

    WMI does not send an IRP_MN_REGINFO or IRP_MN_REGINFO_EX request in response to this call, because it requires no further information from the driver. A driver typically deregisters its blocks in response to an IRP_MN_REMOVE_DEVICE request. Note that the deregister call will block until all WMI IRPs to the device have been completed. If a driver queues WMI IRPs, it must cancel them before calling IoWMIRegistrationControl to deregister.