ioCheckEaBufferValidity 函数 (ntifs.h)

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

语法

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

参数

[in] EaBuffer

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

[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