ExAllocatePoolWithQuota 関数 (wdm.h)
警告
ExAllocatePoolWithQuota ルーチンは廃止され、Windows 10 バージョン 2004 では非推奨となり、ExAllocatePool2 に置き換えられました。 詳細については、「 ExAllocatePool2 と ExAllocatePool3 に対する非推奨の ExAllocatePool 呼び出しの更新」を参照してください。
Windows 10 バージョン 2004 より前のバージョンの Windows 用ドライバーを開発する場合は、ExAllocatePoolQuotaZero を使用します。
ExAllocatePoolWithQuota はプール メモリを割り当て、現在のプロセスに対してクォータを充電します。
構文
PVOID ExAllocatePoolWithQuota(
[in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
[in] SIZE_T NumberOfBytes
);
パラメーター
[in] PoolType
割り当てるプール メモリの種類を指定します。 使用可能なプール メモリの種類の説明については、「 POOL_TYPE」を参照してください。
PoolType を変更するには、ビットごとの OR を使用し、POOL_COLD_ALLOCATION フラグをカーネルにヒントとして使用して、ページアウトされる可能性が高いページからメモリを割り当てることができます。 常駐プールのメモリ量をできるだけ減らすには、これらの割り当てを頻繁に参照しないでください。 POOL_COLD_ALLOCATION フラグは、Windows XP 以降のバージョンの Windows オペレーティング システムでのみ使用できます。
[in] NumberOfBytes
割り当てるバイト数を指定します。
戻り値
ExAllocatePoolWithQuota は、割り当てられたプールへのポインターを返します。
要求を満たすことができない場合、 ExAllocatePoolWithQuota は例外を発生させます。
注釈
このルーチンは、最初に I/O 要求を行ったプロセスのコンテキストで要求を満たすためにメモリを割り当てる最上位レベルのドライバーによって呼び出されます。 下位レベルのドライバーでは、代わりに ExAllocatePoolWithTag が呼び出されます。
NumberOfBytes がPAGE_SIZE以上の場合は、ページアラインバッファーが割り当てられます。 クォータは、PAGE_SIZE以上の割り当てに対してプロセスに課金されません。
PAGE_SIZE未満のメモリ割り当てはページ内で割り当てられ、ページ境界を越えるものではありません。 PAGE_SIZE以下のメモリ割り当ては、必ずしもページアラインとは限りませんが、32 ビット システムでは 8 バイト境界、64 ビット システムでは 16 バイト境界にアラインされます。
NumberOfBytes = 0 を設定しないでください。 長さ 0 の割り当ては避けてください。プール ヘッダー領域が無駄になり、多くの場合、呼び出し元のコードで検証の問題が発生する可能性があることを示しています。 このため、 ドライバー検証ツール は、このような割り当てを可能なエラーとしてフラグを設定します。
プールの量 (ページまたは非ページ) が高いか低い場合、システムは特定の標準イベント オブジェクトを自動的に設定します。 ドライバーは、これらのイベントがプールの使用状況を調整するのを待つことができます。 詳細については、「 標準イベント オブジェクト」を参照してください。
ExAllocatePoolWithQuota が割り当てるメモリは初期化されていません。 カーネル モード ドライバーは、このメモリをユーザー モード ソフトウェアに表示する場合 (特権のある可能性のあるコンテンツのリークを回避するため) 最初にゼロにする必要があります。
ExAllocatePoolWithQuota の呼び出し元は、IRQL <= DISPATCH_LEVELで実行されている必要があります。 DISPATCH_LEVELで実行する呼び出し元は、PoolType に NonPagedXxx 値を指定する必要があります。 IRQL <= APC_LEVEL で実行される呼び出し元は、任意 のPOOL_TYPE 値を指定できますが、IRQL と環境もプールの種類を決定するために考慮する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 互換性のために残されています。 このルーチンは、既存のドライバー バイナリに対してのみエクスポートされます。 代わりに ExAllocatePoolWithQuotaTag を使用してください。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Classpnp.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport)、 SpNoWait(storport)、 StorPortStartIo(storport)、 UnsafeAllocatePool(kmdf) |