次の方法で共有


IoAllocateMdl 関数 (wdm.h)

IoAllocateMdl ルーチンは、バッファーの開始アドレスと長さを指定して、バッファーをマップするのに十分な大きさのメモリ記述子リスト (MDL) を割り当てます。 必要に応じて、このルーチンは、MDL を IRP に関連付けます。

構文

PMDL IoAllocateMdl(
  [in, optional]      __drv_aliasesMem PVOID VirtualAddress,
  [in]                ULONG                  Length,
  [in]                BOOLEAN                SecondaryBuffer,
  [in]                BOOLEAN                ChargeQuota,
  [in, out, optional] PIRP                   Irp
);

パラメーター

[in, optional] VirtualAddress

MDL が記述するバッファーのベース仮想アドレスへのポインター。

[in] Length

MDL が記述するバッファーの長さをバイト単位で指定します。 詳細については、「解説」を参照してください。

[in] SecondaryBuffer

バッファーがプライマリ バッファーかセカンダリ バッファーかを示します。 このパラメーターは、MDL を IRP にリンクする方法を決定します。 IRP の MDL によって記述された最初のバッファーを除くすべてのバッファーは、セカンダリ バッファーと見なされます。 IRP が MDL に関連付けられていない場合、このフィールドは FALSE である必要があります。 詳細については、「解説」を参照してください。

[in] ChargeQuota

システムで使用するために予約されています。 ドライバーは、このパラメーターを FALSE に設定する必要があります。

[in, out, optional] Irp

MDL に関連付ける IRP へのポインター。 Irp ポインターが NULL 以外の場合、割り当てられた MDL は、SecondaryBuffer の値に従って、指定された IRP の MDL リストに関連付けられます。

戻り値

IoAllocateMdl は MDL へのポインターを返すか、MDL を割り当てることができない場合は NULL を返します。

注釈

IoAllocateMdl は、バッファーを分割して個別の MDL によってマップする必要があるドライバー、またはドライバーによって割り当てられたバッファーをマップする必要があるドライバーで使用できます。 ドライバーは、この呼び出しによって割り当てられた MDL を使用して MmBuildMdlForNonPagedPool を呼び出して、非ページ プール内のドライバー割り当てバッファーを記述する MDL を設定する必要があります。

Length パラメーターは、MDL によって記述されるバッファーのサイズを指定します。 Windows Server 2003、Windows XP、Windows 2000 では、このルーチンが割り当てることができる最大バッファー サイズ (バイト単位) PAGE_SIZE は、 * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR) です。 Windows Vista および Windows Server 2008 では、最大バッファー サイズは (2 ギガバイト - PAGE_SIZE) です。 Windows 7 および Windows Server 2008 R2 以降では、最大バッファー サイズは (4 ギガバイト - PAGE_SIZE) です。

SecondaryBuffer パラメーターが FALSE の場合、ルーチンは新しい MDL を指す Irp-MdlAddress> を更新します。 SecondaryBufferTRUE の場合、ルーチンは、Irp-MdlAddress> が指す MDL チェーンの末尾に MDL を追加します。

MDL の詳細については、「MDL の使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool