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 (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |