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 |