命名的设备对象

与所有对象管理器对象一样,设备对象可以是命名的,也可以是未命名的。 当用户模式应用程序发出 I/O 请求时,它会按名称指定操作的目标。 对象管理器解析名称以确定 I/O 请求的目标。

重要

为了帮助增加驱动程序的安全名称,设备对象仅在必要时。 命名设备对象通常仅出于传统原因才是必需的,例如,如果应用程序希望使用特定名称打开设备,或者使用的是非 PNP 设备/控制设备。 请注意,WDF 驱动程序无需命名其 PnP 设备即可使用 WdfDeviceCreateSymbolicLink 创建符号链接。

驱动程序可以在调用 IoCreateDevice 或 IoCreateDeviceSecure 来创建设备对象时指定设备对象的名称。 有关何时以及如何命名设备对象的详细信息,请参阅 NT 设备名称

命名设备对象还可以具有 MS-DOS 设备名称,这是由 IoCreateSymbolicLinkIoCreateUnprotectedSymbolicLink 创建的符号链接。 WDM 驱动程序通常不需要 MS-DOS 设备名称。 有关详细信息,请参阅 MS-DOS 设备名称

重要

如果使用命名设备对象,则可以使用 IoCreateDeviceSecure 并指定 SDDL 来帮助保护它。 实现 IoCreateDeviceSecure 时,始终为 DeviceClassGuid 指定自定义类 GUID。 不应在此处指定现有的类 GUID。 这样做可能会破坏属于该类的其他设备的安全设置或兼容性。 有关详细信息,请参阅 WdmlibIoCreateDeviceSecure

若要允许应用程序或其他 WDF 驱动程序访问 PnP 设备,应使用设备接口。 有关详细信息,请参阅 使用设备接口。 设备接口充当指向设备堆栈 PDO 的符号链接。 一旦控制对 PDO 的访问,方法是在 INF 中指定 SDDL 字符串。 如果 SDDL 字符串不在 INF 文件中,Windows 将应用默认的安全描述符。 有关详细信息,请参阅 保护设备对象设备对象的 SDDL

本节包含以下小节:

NT 设备名称

MS-DOS 设备名称