次の方法で共有


ExAllocateFromLookasideListEx 関数 (wdm.h)

ExAllocateFromLookasideListEx ルーチンは、指定したルックアサイド リストから最初のエントリを削除するか、リストが空の場合は、新しいエントリのストレージを動的に割り当てます。

構文

PVOID ExAllocateFromLookasideListEx(
  [in, out] PLOOKASIDE_LIST_EX Lookaside
);

パラメーター

[in, out] Lookaside

ルックアサイド リストを記述する LOOKASIDE_LIST_EX 構造体へのポインター。 この構造体は、以前は ExInitializeLookasideListEx ルーチンによって初期化されていました。

戻り値

ExAllocateFromLookasideListEx は、リスト内でエントリが使用可能な場合、または動的に割り当てることができる場合に、lookaside-list エントリへのポインターを返します。 それ以外の場合、このルーチンは NULL を返します。

解説

注意事項

バージョン 22H2 Windows 11以降、この関数はインラインからエクスポートに変更されました。 その結果、最新バージョンの Windows を対象とするドライバーをビルドすると、古い OS バージョンでは読み込みに失敗します。 Visual Studio でターゲット OS のバージョンを変更するには、[ 構成プロパティ] - [ドライバーの設定] ->> [全般] を選択します。

このルーチンは、指定したルックアサイド リストから最初のエントリ (エントリが使用可能な場合) を削除し、このエントリへのポインターを返します。 リストが空の場合、ルーチンは新しいエントリにストレージを割り当て、このエントリへのポインターを返します。 この割り当てが失敗した場合、ルーチンは NULL を返します。

ルックアサイド リストが空の場合、 ExAllocateFromLookasideListExLookasideListAllocateEx ルーチンを呼び出して、ドライバーがそのようなルーチンを提供している場合に、新しいエントリの記憶域を割り当てます。 それ以外の場合は、エントリの割り当てに既定の割り当てルーチンが使用されます。

呼び出し元がエントリの使用を終了したら、 ExFreeToLookasideListEx ルーチンを呼び出してエントリを解放する必要があります。

現在の実装では、先入れ先出し (LIFO) スタックとしてルックアサイド リストが動作します。 したがって、解放される最後のエントリ (およびスタックにプッシュされる) は、リストから割り当てられる (ポップされる) 次のエントリです。

ルックアサイド リストの詳細については、「Lookaside Listsの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

ExFreeToLookasideListEx

ExInitializeLookasideListEx

LOOKASIDE_LIST_EX

LookasideListAllocateEx