控制设备访问 (WDM)
对设备的访问由安全描述符 (控制,其包含的 ACL) 。 在注册表中创建或设置设备对象时,可以指定设备对象的安全描述符。
控制 WDM 驱动程序的设备访问
当 WDM 驱动程序 (某些总线驱动程序) 创建设备对象时,即插即用管理器将确定设备的安全描述符。 操作顺序如下所示。
PnP 管理器调用驱动程序的 AddDevice 例程。
驱动程序的 AddDevice 例程调用 IoCreateDevice 来创建设备对象并将其附加到设备对象堆栈。
PnP 管理器更新新创建的设备对象的安全描述符。
对于 WDM 驱动程序,PnP 管理器确定设备对象的安全描述符,如下所示。
如果设备在注册表中具有安全描述符设置,则会将其应用于设备堆栈中的每个对象。
否则,如果设备的安装程序类在注册表中具有安全描述符设置,则会将其应用于设备堆栈中的每个对象。
否则,PnP 管理器将保留每个对象的默认安全描述符不变。 在这种情况下,堆栈的默认安全描述符由 PDO 的设备类型和设备特征确定。
对于大多数设备类型和特征,默认安全描述符为管理员提供完全访问权限 (GENERIC_ALL) ,以及读取、写入和执行访问权限 (GENERIC_READ |GENERIC_WRITE |GENERIC_EXECUTE) 其他人的访问权限。
有关如何为注册表中的设备或设备安装程序类设置安全描述符的详细信息,请参阅 在注册表中设置设备对象属性。
如果设备在原始模式下运行,则 PnP 管理器无法确定设备对象的安全描述符。 在这种情况下,总线驱动程序必须提供安全描述符;请参阅下文。
控制 WDM 总线驱动程序的设备访问
WDM 总线驱动程序必须为可在原始模式下运行的每台设备的 PDO 提供安全描述符。 使用 IoCreateDeviceSecure 创建具有安全描述符的设备对象。
如果总线驱动程序未在原始模式下运行设备,则不需要提供安全描述符。 如上所述,PnP 管理器确定安全描述符。 如果总线驱动程序必须确保其 PDO 具有比默认描述符更严格的安全设置,则总线驱动程序可以提供安全描述符。 总线驱动程序指定的任何描述符都将被注册表中的设置覆盖。
有关创建设备对象的详细信息,请参阅 创建设备对象。
控制非 WDM 驱动程序的设备访问
非 WDM 驱动程序必须为它们创建的任何命名设备对象指定默认安全描述符和类 GUID。
使用 IoCreateDeviceSecure 例程创建命名设备对象,并为该设备指定默认安全描述符和类 GUID。 安全描述符在 SDDL 的子集中指定。 有关详细信息,请参阅 SDDL for Device Objects。
系统使用指定类 GUID 的注册表中的任何安全设置替代默认安全描述符。 驱动程序必须为设备指定其自己的唯一 GUID。 使用 GuidGen 工具生成唯一 GUID。 (GuidGen 包含在 Microsoft Windows SDK.)