次の方法で共有


ExAllocatePoolZero 関数 (wdm.h)

注意事項

Microsoft は ExAllocatePoolZero に関する問題を認識しています。この問題により、バージョン 1909 Windows 10で割り当てがゼロになる可能性があります。 この問題は、2020 年 12 月 16 日に、WINDOWS 10 バージョン 2004 の WDK と、Windows 10 バージョン 2004 の Enterprise WDK (EWDK) のセキュリティ更新で修正されました。 最新の WDK のダウンロードの詳細については、「 Windows ドライバー キット (WDK) のダウンロード」を参照してください。

このルーチンは のラッパーであり、 ExAllocatePoolWithTag に推奨される置換オプションです。

ExAllocatePoolZero は、指定した型のプール メモリを割り当て、割り当てられたブロックへのポインターを返します。 ExAllocatePoolWithTag と同じですが、割り当てられたメモリは 0 で初期化されます。

構文

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

パラメーター

PoolType

割り当てるプール メモリの種類。 使用可能なプール メモリの種類の詳細については、「 POOL_TYPE」を参照してください。

で定義されているPOOL_RAISE_IF_ALLOCATION_FAILURE フラグを使用してビットごとの OR を実行することで、列挙値を wdm.h変更できます。 このフラグを指定すると、要求を満たすことができない場合に例外が発生します。 このフラグはコストがかかるため、このフラグの使用はお勧めしません。

同様に、この値を POOL_COLD_ALLOCATION フラグ (で定義wdm.h) でビット単位で ORing することで、カーネルへのヒントとして PoolType 値を変更して、ページアウトされる可能性が高いページからメモリを割り当てることができます。 常駐プール メモリの量をできるだけ減らすには、これらの割り当てを頻繁に参照しないでください。 POOL_COLD_ALLOCATION フラグは、アドバイザリのみです。

NumberOfBytes

割り当てるバイト数。

Tag

割り当てられたメモリに使用するプール タグ。 単一引用符で区切られた 1 から 4 文字の 0 以外の文字リテラルとしてプール タグを指定します (例: Tag1)。 文字列は通常、逆の順序で指定されます (例: 1gaT)。 タグ内の各 ASCII 文字は、0x7E (チルダ) 0x20 (スペース) の範囲内の値である必要があります。 各割り当てコード パスでは、デバッガーと検証者がコード パスを識別するのに役立つ一意のプール タグを使用する必要があります。

戻り値

要求を満たすために空きプールにメモリが不足している場合、ExAllocatePoolZero は NULL を 返します。 それ以外の場合、ルーチンは割り当てられたメモリへのポインターを返します。

注釈

このルーチンは、メモリの一般的なプール割り当てに使用されます。

バージョン 2004 より前のバージョンの Windows で実行するには、ドライバーで Windows 10 POOL_ZERO_DOWN_LEVEL_SUPPORTを定義し、この関数を呼び出す前に ExInitializeDriverRuntime を呼び出す必要があります。

この関数と ExAllocatePoolWithTag の唯一の違いは、メモリが 0 初期化されていることです。 これが望ましくない場合は、代わりに ExAllocatePoolUninitialized を使用します。これは ExAllocatePoolWithTag のラッパーです。

ドライバーは、割り当てるバイト範囲内のメモリにのみアクセスする必要があります。 この範囲外のメモリにアクセスすると、プールが破損し、システムがクラッシュする可能性があります。

追加のガイダンスについては、「 ExAllocatePoolWithTag 」の「解説」セクションを参照してください。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 2004 に WDK が必要です。 Windows 7 以降のバージョンの Windows オペレーティング システムを対象としています。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 CheckDeviceObjectFlags、HwStorPortProhibitedDIs、IrqlExAllocatePool、IrqlExFree1、PowerDownAllocate、PowerUpFail、SpNoWait、StorPortStartIo

こちらもご覧ください

ExAllocatePoolUninitialized