次の方法で共有


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 の値は 0 より大きく、ULONG 境界に収まる必要があります。

さらに、 IoCheckEaBufferValidity は EA バッファーをチェックして、次の条件が満たされていることを確認します。

  • EaLength で渡される長さは、バッファーの実際の長さと一致します。

  • 実際のバッファー長は負の値ではない。

有効にするには、EA バッファーがこれらすべての条件を満たしている必要があります。

IoCheckEaBufferValidity は、 EaBuffer の内容が非同期的に変更されないように同期を実行しません。 ユーザー モード アプリケーションが別のスレッドのバッファーにアクセスできる場合、 IoCheckEaBufferValidity の実行中にアプリケーションによってバッファーが変更される可能性があります。 この変更により、ルーチンが正しくない情報を返す可能性があります。 このシナリオを回避するには、 ドライバーは IoCheckEaBufferValidity を呼び出す前にバッファーをコピーする必要があります。 バッファーが検証された後、呼び出し元は、元のバッファーではなく、検証されたコピーのみを使用する必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL < DISPATCH_LEVEL

こちらもご覧ください

FILE_FULL_EA_INFORMATION

IRP_MJ_QUERY_EA

IRP_MJ_SET_EA