如何将类别添加到 Windows 驱动程序

在 Configuration Manager中,通过将类别的唯一标识符添加到 SMS_Driver Server WMI 类CategoryInstance_UniqueIDs数组属性,将类别添加到 Windows 驱动程序。 数组包含一个或多个与 SMS_CategoryInstance 服务器 WMI 类CategoryInstance_UniqueID 属性值匹配的字符串标识符。 系统中的每个类别都有 一个 SMS_CategoryInstance 服务器 WMI 类 对象的实例。

注意

驱动程序类别的唯一标识符前面附加了文本“DriverCategories”。 其他类别类型具有不同的文本。

类别具有本地化信息,它是从 SMS_CategoryInstance 服务器 WMI 类LocalizedCategoryInstanceName 属性获取类别的显示名称。

向 Windows 驱动程序添加类别

  1. 设置与 SMS 提供程序的连接。 有关详细信息,请参阅 SMS 提供程序基础知识

  2. 获取要向其添加类别的驱动程序 的 SMS_Driver 对象。

  3. 从与所需类别匹配的 SMS_CategoryInstance 服务器 WMI 类 对象获取类别名称标识符。

  4. 将类别标识符添加到 SMS_Driver 服务器 WMI 类 对象 CategoryInstance_UniqueIDs 数组属性。

  5. 提交 SMS_Driver服务器 WMI 类 更改。

示例

以下示例方法将类别添加到 Windows 驱动程序。 driverID 是有效的 SMS_Driver服务器 WMI 类 对象。 有关详细信息,请参阅 关于操作系统部署驱动程序管理

有关调用示例代码的信息,请参阅调用Configuration Manager代码片段

Sub AddDriverCategory(connection,driver,categoryName)  

    Dim categories  
    Dim category  
    Dim driverCategoryID  
    Dim categoryID  
    Dim results  
    Dim existingCategory  

    ' Find the category that matches the supplied category name.  
    Set results = _  
      connection.ExecQuery("SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" _  
      + categoryName+ "'")  

    ' If the category was found, add it to the driver.  
    For Each category in results  

        If IsNull(driver.CategoryInstance_UniqueIDs) or UBound (driver.CategoryInstance_UniqueIDs) = -1 Then  
            ' It is empty. Add the category.  
            driver.CategoryInstance_UniqueIDs =  Array(category.CategoryInstance_UniqueID)  
         Else  

            ' Determine if the category is already applied to the driver.  
            For each existingCategory in driver.CategoryInstance_UniqueIDs   
                if existingCategory = category.CategoryInstance_UniqueID Then  
                    WScript.Echo "Already added"  
                    Exit Sub  
                End If  
            Next      

            ' Add the category.  
            categories = driver.CategoryInstance_UniqueIDs  
            Redim Preserve categories (UBound (driver.CategoryInstance_UniqueIDs)+1)  
            categories (Ubound (categories)) =  category.CategoryInstance_UniqueID   
            driver.CategoryInstance_UniqueIDs = categories  
        End If  

        driver.Put_         
    Next      
End Sub  
public void AddDriverCategory(  
    WqlConnectionManager connection,  
    IResultObject driver,  
    string categoryName)  
{  
    try  
    {  
        // Get the category.  
        IResultObject results = connection.QueryProcessor.ExecuteQuery(  
        "SELECT * From SMS_CategoryInstance WHERE LocalizedCategoryInstanceName = '" + categoryName + "'");  

       ArrayList driverCategories = new ArrayList(driver["CategoryInstance_UniqueIDs"].StringArrayValue);//;driverCategories);  

        foreach (IResultObject category in results)  
        {  
            foreach (string driverCategory in driverCategories)  
            {  
                // Do nothing if the driver already has the category.  
                if (driverCategory == category["CategoryInstance_UniqueID"].StringValue)  
                {  
                    Console.WriteLine("Already exists");  
                    return;  
                }  
           }  

            // Add the category to the action.  
           driverCategories.Add(category["CategoryInstance_UniqueID"].StringValue);  
        }  

        // Update the driver.  
        driver["CategoryInstance_UniqueIDs"].StringArrayValue = (string[])driverCategories.ToArray(typeof(string));  
        driver.Put();  

    }  
    catch (SmsException e)  
    {  
        Console.WriteLine("Failed to add the category" + e.Message);  
        throw;  
    }  
}  

示例方法具有以下参数:

参数 类型 说明
Connection -管理: WqlConnectionManager
- VBScript: SWbemServices
与 SMS 提供程序的有效连接。
driver -管理: IResultObject
- VBScript: SWbemObject
Windows 驱动程序。 它是 SMS_Driver服务器 WMI 类的实例。
categoryName -管理: String
- VBScript: String
现有类别的名称。 这与 SMS_CategoryInstance 服务器 WMI 类LocalizedCategoryInstanceName 属性匹配。

编译代码

此 C# 示例需要:

命名空间

System

System.Collections.Generic

System.Text

Microsoft。ConfigurationManagement.ManagementProvider

Microsoft。ConfigurationManagement.ManagementProvider.WqlQueryEngine

Assembly

microsoft.configurationmanagement.managementprovider

adminui.wqlqueryengine

可靠编程

有关错误处理的详细信息,请参阅关于Configuration Manager错误

.NET Framework 安全性

有关保护Configuration Manager应用程序的详细信息,请参阅Configuration Manager基于角色的管理

另请参阅

关于操作系统部署驱动程序管理
如何从 Windows 驱动程序中删除类别