指定对设备对象的独占访问权限

如果启用了对设备的独占访问,则一次只能打开该设备的一个句柄。 若要使 I/O 管理器强制执行对设备的独占访问,必须在设备堆栈中为命名设备对象设置独占属性。

对于同时具有 PDO 和 FDO 的 WDM 设备堆栈,独占属性只能由 INF 文件使用 INF AddReg 指令进行设置。 PDO 是堆栈中的命名对象,但总线驱动程序 (不是函数驱动程序本身,) 代表函数驱动程序创建 PDO。 引导总线驱动程序为 PDO 设置独占标志的唯一方法是使用类或设备 INF 文件。 (调用 IoCreateDevice 例程会创建 FDO;设置 FDO 的独占标志不起作用。)

设备对象未堆叠的驱动程序(例如非 WDM 驱动程序和在原始模式下运行的设备)可以使用 IoCreateDeviceSecure 例程为其命名设备对象设置独占属性。

无论尾随名称如何,I/O 管理器都会根据命名设备对象对每个名称强制实施排他性。 例如,假设设备对象的名称为“\Device\DeviceName”。 然后,I/O 管理器对请求强制实施排他性,以打开“\Device\DeviceName\Filename1”后跟“\Device\DeviceName\Filename2”。 如果设备堆栈中的两个对象 (不建议) ,则 I/O 管理器允许为每个对象打开单个句柄。 在这种情况下,驱动程序必须在其 DRIVER_DISPATCH 回调函数中自行强制实施排他性。 I/O 管理器也不会对相对于另一个文件句柄的打开强制执行排他性。 有关设备命名空间中的文件打开请求的详细信息,请参阅 控制设备命名空间访问