共用方式為


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

另請參閱

FILE_FULL_EA_INFORMATION

IRP_MJ_QUERY_EA

IRP_MJ_SET_EA