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。 驗證緩衝區之後,呼叫端應該只使用已驗證的複本,而不是原始緩衝區。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |