创建安全的设备安装

创建 驱动程序包时,必须确保始终以安全的方式执行设备的安装。 安全设备安装是执行以下操作的安装:

  • 限制对设备及其设备接口类的访问

  • 限制对为设备创建的驱动程序服务的访问

  • 防止修改或删除驱动程序文件

  • 限制对设备注册表项的访问

  • 限制对设备的 WMI 类的访问

  • 正确使用 SetupAPI 函数

设备安装安全性由 安全描述符控制。 用于指定安全描述符的主要介质是 INF 文件。 系统提供默认的安全描述符,在大多数情况下,不必重写这些描述符。

设备和接口的安全设置

系统为所有 系统提供的设备安装类提供默认的安全描述符。 通常,这些描述符允许系统管理员的完全访问权限和用户的读/写/执行访问权限。 (控制对设备的访问的安全描述符还控制对设备 接口类(如果有)的访问。)

WDM 驱动程序的 INF 文件可以指定替代系统默认设置的每个类或每个设备的安全设置。 创建新设备安装程序类的供应商应为类指定安全描述符。 通常,不需要指定特定于设备的安全描述符。 如果属于同一类的不同类型的设备具有明显不同的用户类型,则提供特定于设备的安全描述符可能很有用。

若要为属于 WDM 设备安装类的所有设备指定安全描述符,请在类安装程序的 INF 文件的 INF ClassInstall32 节中使用 INFAddReg 指令AddReg 指令必须指向 add-registry-section,该节设置 DeviceTypeSecurity 注册表项的值。 这些注册表值为指定设备类型的所有设备指定安全描述符。

若要为属于 WDM 设备安装类的单个设备指定安全描述符,请在设备的 INF 文件的 INF DDInstall.HW 节中使用 INFAddReg 指令AddReg 指令必须指向 add-registry-section,该节设置 DeviceTypeSecurity 注册表项的值。 这些注册表值为与关联的 INF 模型部分指定的硬件 ID兼容 ID 匹配的所有设备指定安全描述符。

默认情况下,系统会将设备的安全描述符集应用于打开表示设备 (设备对象的请求,例如,打开 NT 设备名称为 \Device\DeviceName) 的设备的请求。

但是,默认情况下,系统不会将设备的安全描述符集应用于在设备命名空间中打开对象的请求,其中设备命名空间包括其名称格式为 \Device\DeviceName\ObjectName 的所有对象。 若要确保将相同的安全设置应用于对设备命名空间中对象的打开请求,请为设备设置FILE_DEVICE_SECURE_OPEN设备特征标志。 有关安全设备访问的详细信息,请参阅 ) (Windows 驱动程序控制设备命名空间访问 。 有关如何设置FILE_DEVICE_SECURE_OPEN设备特征标志的信息,请参阅 ) (Windows 驱动程序指定设备特征

PnP 管理器在调用驱动程序的 AddDevice 例程后,在设备对象上设置安全值。 在通过调用 IoCreateDeviceSecure (PDO) 创建物理设备对象时,某些 WDM 驱动程序可以指定特定于设备的安全描述符。 有关详细信息,请参阅 保护设备对象

驱动程序文件的安全设置

使用 INF CopyFiles 指令复制文件时,可以指定 file-list-sectionsecurity 节。 本部分为 CopyFiles 指令复制的所有文件指定安全描述符。 但是,如果安装目标是 %SystemRoot% 的系统子目录之一,则供应商不必为驱动程序文件指定安全描述符。 (有关这些子目录的详细信息,请参阅 使用 Dirids.) 系统为这些子目录提供默认安全描述符,并且不应重写默认描述符。

驱动程序服务的安全设置

在驱动程序 INF 文件的 service-install-section (请参阅 INF AddService Directive) 中,可以包含 “安全性” 条目。 此项指定执行启动、停止和配置与设备关联的驱动程序服务等操作所需的权限。 但是,系统为驱动程序服务提供默认安全描述符,通常不必重写此默认描述符。

设备和驱动程序注册表项的安全设置

使用 INF AddReg 指令在 INF 文件中指定注册表项时,可以包含 add-registry-section。每个 add-registry-section的安全部分。 add-registry-sectionSecurity 节指定对由关联的 add-registry-section 节创建的已创建注册表项的访问权限。 系统为 HKR 相对根下创建的所有注册表项提供默认的安全描述符。 因此,在相对根下创建注册表项时,不必指定安全描述符。

WMI 类的安全设置

系统将默认安全描述符分配给标识 WMI 类的 GUID。 对于 Windows XP 和早期操作系统版本,WMI GUID 的默认安全描述符允许所有用户完全访问。 从 Windows Server 2003 开始,默认安全描述符仅允许管理员进行访问。

如果驱动程序定义了 WMI 类,并且你不想为这些类使用系统的默认安全描述符,则可以使用设备的 INF 文件中的 INF DDInstall.WMI 部分 提供安全描述符。

正确使用 SetupAPI 函数

如果 驱动程序包 包含安装程序、辅助安装程序或其他调用 SetupAPI 函数的安装应用程序,则必须遵循 使用 SetupAPI 的准则

测试安装安全设置

使用 SetupAPI 日志记录 验证是否已正确指定与安装设备关联的安全设置。 将日志记录级别设置为详细 (0x0000FFFF) ,然后尝试各种安装方案。

此类方案应包括用户帐户和系统管理员帐户的初始安装和重新安装。 在安装软件之前尝试插入设备,反之亦然。

如果安装成功,请查看日志以确认未发生错误。 如果安装失败,请查看日志以确定失败的原因。

此外,安装完成后,可以执行以下操作:

  • 使用注册表编辑器查看分配给注册表项的安全设置。

  • 使用 “我的电脑” 查看分配给文件的安全设置。