IoCheckEaBufferValidity 函数 (ntifs.h)

IoCheckEaBufferValidity 例程检查 EA) 缓冲区 (指定的扩展属性是否有效。

语法

NTSTATUS IoCheckEaBufferValidity(
  [in]  PFILE_FULL_EA_INFORMATION EaBuffer,
  [in]  ULONG                     EaLength,
  [out] PULONG                    ErrorOffset
);

参数

[in] EaBuffer

指向包含要检查的 CA 的缓冲区的指针。

[in] EaLength

EaBuffer 的长度(以字节为单位)。

[out] ErrorOffset

指向变量的指针,该变量在发现错误时接收 EA 缓冲区中违规条目的偏移量。 仅当发生错误时,此变量才有效。

返回值

如果 EA 缓冲区有效,IoCheckEaBufferValidity 将返回STATUS_SUCCESS;否则返回STATUS_EA_LIST_INCONSISTENT。

注解

IoCheckEaBufferValidity 会检查指定 EA 缓冲区中的每个FILE_FULL_EA_INFORMATION条目,以确保满足以下条件:

  • 整个条目必须位于缓冲区内。

  • EaName 的值必须是以 null 结尾的字符数组。

  • EaNameLength 的值必须与 EaName 数组的长度(以字节为单位) (不包括零终止符) 。

  • 对于除最后一个之外的所有条目, NextEntryOffset 的值必须大于零,并且必须位于 ULONG 边界上。

此外, IoCheckEaBufferValidity 会检查 EA 缓冲区,以确保满足以下条件:

  • EaLength 中传递的长度与缓冲区的实际长度匹配。

  • 实际缓冲区长度是非否定的。

若要有效,EA 缓冲区必须满足所有这些条件。

IoCheckEaBufferValidity 不会执行任何同步,以确保 EaBuffer 的内容不会异步更改。 如果用户模式应用程序可以访问另一个线程中的缓冲区,则应用程序可以在 IoCheckEaBufferValidity 运行时更改缓冲区。 此更改可能会导致例程返回不正确的信息。 若要避免这种情况,驱动程序应在调用 IoCheckEaBufferValidity 之前复制缓冲区。 验证缓冲区后,调用方应仅使用已验证的副本,而不应使用原始缓冲区。

要求

要求
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

FILE_FULL_EA_INFORMATION

IRP_MJ_QUERY_EA

IRP_MJ_SET_EA