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 を変更するには、カーネルにヒントとして POOL_COLD_ALLOCATION フラグを付けてビットごとの OR を使用して、ページアウトされる可能性が高いページからメモリを割り当てることができます。 常駐プール メモリの量をできるだけ減らすには、これらの割り当てを頻繁に参照しないでください。 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 を使用してください。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | wdm.h (Wdm.h、Ntddk.h、Ntifs.h、Classpnp.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDDIs(storport)、SpNoWait(storport)、StorPortStartIo(storport)、UnsafeAllocatePool(kmdf) |
関連項目
ExAllocatePoolWithQuotaTag の
ExAllocatePoolWithTag の