NdisInitializeNPagedLookasideList 関数 (ndis.h)

NdisInitializeNPagedLookasideList 関数は、ルックアサイド リストを初期化します。 初期化が正常に完了すると、非ページ固定サイズ ブロックを から割り当て、ルックアサイド リストに解放できます。

構文

void NdisInitializeNPagedLookasideList(
  [in]           PNPAGED_LOOKASIDE_LIST Lookaside,
  [in, optional] PALLOCATE_FUNCTION     Allocate,
  [in, optional] PFREE_FUNCTION         Free,
  [in]           ULONG                  Flags,
  [in]           SIZE_T                 Size,
  [in]           ULONG                  Tag,
  [in]           USHORT                 Depth
);

パラメーター

[in] Lookaside

初期化 する呼 び出し元指定のルックアサイド リスト ヘッドを含むNPAGED_LOOKASIDE_LIST構造体へのポインター。 構造体は、64 ビット プラットフォームで 16 バイトアラインされている必要があります。 ドライバーは、常駐するリスト ヘッド (つまり、非ページ システム空間) を提供する必要があります。

[in, optional] Allocate

呼び出し元が指定した Allocate 関数のエントリ ポイントを NULL または指定する関数エントリ ポイント。呼び出されるたびに Size メンバーで指定されたサイズのエントリを割り当てます。 AllocateNULL の場合、 NdisAllocateFromNPagedLookasideList 関数は、その後、呼び出し元の代わりにエントリを割り当てます。 呼び出し元が Allocate 関数を提供する場合は、 Free 関数も提供する必要があります。

[in, optional] Free

呼び出し元が指定した Free 関数のエントリ ポイントを NULL または指定する関数エントリ ポイント。呼び出されるたびに Size メンバーで指定されたサイズのエントリを解放します。 FreeNULL の場合、 NdisFreeToNPagedLookasideList 関数は、その後、呼び出し元の代わりにエントリを解放します。

[in] Flags

ゼロを指定してください。 このパラメーターは予約されています。

[in] Size

ルックアサイド リストから後で割り当てられる各エントリのサイズ (バイト単位)。

[in] Tag

ルックアサイド リスト エントリの呼び出し元から提供されるプール タグ。 Tag は、単一引用符で区切られた 4 文字の文字列です (例: 'derF')。 通常、これらの文字は逆の順序で指定されるため、デバッガーでプールをダンプするときやプールの使用状況を追跡するときに読みやすくなります。

[in] Depth

ゼロを指定してください。 このパラメーターも予約されています。

戻り値

なし

解説

NdisInitializeNPagedLookasideList は、呼び出し元が指定したリスト ヘッドを初期化しますが、リスト エントリにメモリを割り当てられません。 初期エントリは、必要に応じて、 への呼び出しで割り当てられます。 NdisAllocateFromNPagedLookasideList 関数、またはドライバーから提供された Allocate コールバック関数による Allocate パラメーター。 リストは、ドライバーがリストに戻ってエントリを解放すると設定されます。 NdisFreeToNPagedLookasideList 関数。 エントリは、システムによって決定されるが動的なサイズの制限に達するまで、一覧で収集されます。 その後、ルックアサイド リスト内の余分なエントリは、NdisFreeToNPagedLookasideList によって、または Free パラメーターでドライバーが提供する Free コールバック関数の呼び出しによって、非ページ プールに返されます。

ルックアサイド リスト内のすべてのエントリは、 Size パラメーターで指定された同じサイズです。 ルックアサイド リストは、未処理の I/O 操作に関する実行時の状態を維持するために、固定サイズのコンテキスト領域を動的に割り当てて解放する必要があるドライバーに特に役立ちます。 たとえば、接続指向の NDIS ドライバーは、特に便利なルックアサイド リストを見つける可能性があります。このようなドライバーは、通常、発信と着信の呼び出しを追跡するためのコンテキスト領域の動的なセットを維持するためです。

これは、ドライバーがを許可するより効率的です。 NdisAllocateFromNPagedLookasideList とエントリの割り当てと割り当て解除を管理するための NdisFreeToNPagedLookasideList 関数 (ExAllocatePoolWithTag 関数と ExFreePool 関数を参照)。 ただし、メモリ使用量に関する状態を内部的に追跡するドライバーは、NdisInitializeNPagedLookasideListAllocate 関数と Free 関数を提供する可能性があります。

NdisInitializeNPagedLookasideList の呼び出し元は IRQL <= DISPATCH_LEVELで実行されている必要がありますが、通常はPASSIVE_LEVELで実行されます。

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisInitializeNPagedLookasideList (NDIS 5.1)」を参照) でサポートされています。 Windows XP での NDIS 5.1 ドライバー (「NdisInitializeNPagedLookasideList (NDIS 5.1)」を参照) でサポートされています。
対象プラットフォーム デスクトップ
Header ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 Irql_Miscellaneous_Function(ndis)

こちらもご覧ください

ExAllocatePoolWithTag

ExFreePool

NPAGED_LOOKASIDE_LIST

NdisAllocateFromNPagedLookasideList NdisDeleteNPagedLookasideList NdisFreeToNPagedLookasideList