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

另請參閱

FILE_FULL_EA_INFORMATION

IRP_MJ_QUERY_EA

IRP_MJ_SET_EA