ioCheckShareAccess 函数 (wdm.h)

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

语法

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 的所需共享访问类型。 此参数的值通常与发出打开请求时由 I/O 管理器传递给文件系统或最高级别驱动程序的 ShareAccess 相同。 此值可以是零,也可以是以下任意组合:

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

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

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

要求

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

另请参阅

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess