设备对象(如所有对象管理器对象)可以命名或未命名。 当应用程序处于用户模式时发出 I/O 请求,它会通过名称指定操作的目标。 对象管理器解析名称以确定 I/O 请求的目标。
重要
仅在必要时给设备对象命名,以帮助提高驱动程序安全性。 命名设备对象通常是出于旧式原因所必需的,例如,如果应用程序希望使用特定名称打开设备,或者使用的是非 PNP 设备/控制设备。 请注意,WDF 驱动程序不需要为其 PnP 设备命名,才能使用 WdfDeviceCreateSymbolicLink 创建符号链接。
驱动程序可以在调用 IoCreateDevice 或 IoCreateDeviceSecure 来创建设备对象时为设备对象指定名称。 有关何时以及如何命名设备对象的详细信息,请参阅 NT 设备名称。
命名设备对象还可以具有 MS-DOS 设备名称,这是 IoCreateSymbolicLink 或 IoCreateUnprotectedSymbolicLink 创建的符号链接。 WDM 驱动程序通常不需要 MS-DOS 设备名称。 有关详细信息,请参阅 MS-DOS 设备名称。
重要
如果使用命名设备对象,可以使用 IoCreateDeviceSecure 并指定 SDDL 来帮助保护它。 实现 IoCreateDeviceSecure 时,请始终为 DeviceClassGuid 指定自定义类 GUID。 不应在此处指定现有的类 GUID。 这样做可能会破坏属于该类的其他设备的安全设置或兼容性。 有关详细信息,请参阅 WdmlibIoCreateDeviceSecure。
若要允许应用程序或其他 WDF 驱动程序访问 PnP 设备,应使用设备接口。 有关详细信息,请参阅使用设备接口。 设备接口充当设备堆栈 PDO 的符号链接。 通过在 INF 中指定 SDDL 字符串来控制对 PDO 的访问的一种方法。 如果 SDDL 字符串不在 INF 文件中,Windows 将应用默认的安全描述符。 有关详细信息,请参阅保护设备对象和设备对象的 SDDL。
本节包含以下小节: