次の方法で共有


ExFreePool2 関数 (wdm.h)

ExFreePool2 ルーチンは、プール メモリの以前に割り当てられたブロックの割り当てを解除します。 ExCreatePool を使用して作成されたセキュリティで保護されたプールに関連付けられている割り当てを解放するために、オプションの拡張パラメーターを受け入れることで ExFreePool を拡張します

構文

VOID ExFreePool2(
  [in]           PVOID                     P,
  [in]           ULONG                     Tag,
  [in, optional] PCPOOL_EXTENDED_PARAMETER ExtendedParameters,
  [in]           ULONG                     ExtendedParametersCount
);

パラメーター

[in] P

解放する割り当ての開始を指すポインター。 ExAllocatePool2ExAllocatePool3 などのプール割り当てルーチンによって返される正確なアドレスである必要があります。 このパラメーターは NULL にすることはできません。

[in] Tag

プール タグは、割り当てが行われたときに最初に指定されました。

[in, optional] ExtendedParameters

拡張パラメーター記述子 (型 POOL_EXTENDED_PARAMETER) の配列へのポインター。 「解説」を参照してください。

[in] ExtendedParametersCount

ExtendedParameters 配列内のエントリの数。 「解説」を参照してください。

戻り値

何一つ

注釈

次の表は、さまざまな種類の割り当てで ExFreePool2 を使用するための要件を示しています。

割り当ての種類 ExtendedParametersCount ExtendedParameters
通常 (セキュリティで保護されていない) 0 ヌル
Secure 1 POOL_EXTENDED_PARAMS_SECURE_POOL構造体へのポインター

セキュリティで保護されたプールを解放する場合、関連付けられているPOOL_EXTENDED_PARAMS_SECURE_POOL構造体は次の手順 を実行 する必要があります。

  • セキュリティで保護されたプールに関連付けられた正常な割り当てから取得された有効なセキュリティで保護されたプール ハンドルが含まれています。
  • 解放される割り当てに対して正しい Cookie を指定します。
  • すべての予約済みフィールド (Buffer、SecurePoolFlags など) を NULL/0 に設定します。
  • 唯一のエントリである (ExtendedParametersCount == 1)。

検証エラー (間違ったカウント、サポートされていないパラメーターの種類、0 以外の予約フィールド、無効なハンドル、またはセキュリティで保護されたカーネル通信エラー) により、エラー状態が返されるのではなく、バグ チェック (BAD_POOL_CALLER) が発生します。

このルーチンは NTSTATUS 値を返しません。それは常に無料またはバグチェックを完了します。 二重空きヘッダー、破損したヘッダー、タグの不一致、または不適切なセキュリティで保護されたプール メタデータによる解放によって、システム診断に応じてプールの整合性バグ チェックがトリガーされる場合もあります。

ExFreePool2 は IRQL <= DISPATCH_LEVEL で呼び出す必要があります。 ページ プールから割り当てられた場合、呼び出し元は IRQL <= APC_LEVELである必要があります。 セキュリティで保護されたプールの割り当ては、非ページ メモリに存在し、DISPATCH_LEVELで解放できます。

割り当て元での分岐を回避するために、標準またはセキュリティで保護されたプールの割り当てを解放する可能性があるコードには 、ExFreePool2 を使用します。

必要条件

要件 価値
サポートされる最小サーバー Windows Server 2022
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
図書館 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)

関連項目

ExFreePool

ExFreePoolWithTag

ExAllocatePool2

ExAllocatePool3

ExCreatePool