IoCheckShareAccess 函数 (wdm.h)

IoCheckShareAccess 例程由文件系统驱动程序(FSDs)或其他最高级别的驱动程序调用,以检查是否允许对文件对象的共享访问。

语法

NTSTATUS IoCheckShareAccess(
  [in]      ACCESS_MASK   DesiredAccess,
  [in]      ULONG         DesiredShareAccess,
  [in, out] PFILE_OBJECT  FileObject,
  [in, out] PSHARE_ACCESS ShareAccess,
  [in]      BOOLEAN       Update
);

参数

[in] DesiredAccess

指定一个 ACCESS_MASK 值,该值指示对当前打开请求的给定 FileObject 所需的访问类型。 驱动程序通过在 IRP_MJ_CREATE 请求中获取请求的访问权限,然后为每个安全描述符应用 SeAccessCheck 来确定授予的实际访问权限,从而计算此参数的值。 如果授予的访问权限比所需的访问更严格,则这是一个错误,并且驱动程序应以STATUS_ACCESS_DENIED状态完成当前 IRP。 (请注意,SeAccessCheck 清除已授予访问权限中的MAXIMUM_ALLOWED位;请确保在比较所需的访问权限与授予的访问权限时不使用该位。然后,驱动程序将授予的访问权限作为 DesiredAccess的值传递。

[in] DesiredShareAccess

指定对当前打开请求 FileObject 的共享访问的所需类型。 此参数的值通常与 ShareAccess 在发出打开请求时传递给文件系统或 I/O 管理器的最高级别驱动程序相同。 此值可以是零,也可以是以下任意组合:

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

[in, out] FileObject

指向要检查当前打开请求访问权限的文件对象的指针。

[in, out] ShareAccess

指向与 fileObject 关联的常见共享访问数据结构的指针。 驱动程序应将此结构视为不透明。

[in] Update

指定是否更新 FileObject的共享访问状态。 TRUE 的布尔值表示,如果允许打开的请求,此例程将更新文件对象的共享访问信息。

返回值

如果请求者对文件对象的访问与当前打开的方式兼容,则 IoCheckShareAccess 返回STATUS_SUCCESS。 如果由于共享冲突而拒绝请求,则返回STATUS_SHARING_VIOLATION。

言论

IoCheckShareAccess 检查文件对象打开请求,以确定指定的所需和共享访问的类型是否与其他打开的文件对象当前访问的方式兼容。

文件系统通过称为文件控制块(FCB)的结构维护有关文件的状态。 SHARE_ACCESS是描述文件当前如何由所有打开访问的结构。 此状态包含在 FCB 中,作为每个文件对象的打开状态的一部分。 每个文件对象应只有一个共享访问结构。 其他最高级别驱动程序可能会调用此例程来检查在打开表示此类驱动程序设备对象的文件对象时请求的访问。

IoCheckShareAccess 不是原子作。 因此,调用此例程的驱动程序必须保护传递给 IoCheckShareAccess 的共享文件对象(例如互斥体或资源锁),以防止共享访问计数损坏。

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIs(storport)IrqlIoPassive2(wdm)PowerIrpDDis(wdm)

另请参阅

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess