ZwMapViewOfSectionEx 関数 (wdm.h)

ZwMapViewOfSectionEx ルーチンは、セクションのビューをサブジェクト プロセスの仮想アドレス空間にマップします。

構文

NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
  [in]                HANDLE                  SectionHandle,
  [in]                HANDLE                  ProcessHandle,
  [in, out]           PVOID                   *BaseAddress,
  [in, out, optional] PLARGE_INTEGER          SectionOffset,
  [in, out]           PSIZE_T                 ViewSize,
  [in]                ULONG                   AllocationType,
  [in]                ULONG                   PageProtection,
  [in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
  [in]                ULONG                   ExtendedParameterCount
);

パラメーター

[in] SectionHandle

セクション オブジェクトへのハンドル。 このハンドルは、 ZwCreateSection または ZwOpenSection を正常に呼び出すことによって作成 されます

[in] ProcessHandle

ビューをマップする必要があるプロセスを表す オブジェクトを処理します。 現在のプロセスを指定するには、 ZwCurrentProcess マクロを使用します。 ハンドルは、 PROCESS_VM_OPERATION アクセスで開かれている必要があります。

[in, out] BaseAddress

ビューのベース アドレスを受け取る変数へのポインター。 このパラメーターの値が NULL でない場合、ビューは、次の 64 キロバイトのアドレス境界に切り捨てられた指定された仮想アドレスから開始して割り当てられます。

[in, out, optional] SectionOffset

セクションの先頭からビューまでのオフセットをバイト単位で受け取る変数へのポインター。 このポインターが NULL でない場合、オフセットは次の割り当て粒度サイズ境界に切り捨てられます。

[in, out] ViewSize

SIZE_T変数へのポインター。 この変数の初期値が 0 の場合、 ZwMapViewOfSectionExSectionOffset から始まり、セクションの末尾まで続くセクションのビューをマップします。 それ以外の場合、初期値はビューのサイズをバイト単位で指定します。 ZwMapViewOfSectionEx は 常に、ビューをマッピングする前に、この値を最も近いPAGE_SIZEの倍数に切り上げます。

戻り値は、ビューの実際のサイズ (バイト単位) を受け取ります。

[in] AllocationType

指定したページ領域に対して実行される割り当ての種類を記述するフラグのセットを指定します。 有効なフラグは、MEM_RESERVE、MEM_TOP_DOWN、MEM_LARGE_PAGES、MEM_DIFFERENT_IMAGE_BASE_OK、およびMEM_REPLACE_PLACEHOLDERです。 MEM_COMMITは許可されませんが、MEM_RESERVEが指定されていない限り、暗黙的に指定されます。 MEM_XXX フラグの詳細については、 VirtualAlloc ルーチンと MapViewOfFile3 ルーチンの説明を参照してください。

[in] PageProtection

マップされたビューに適用する ページ保護 を指定します。

SEC_IMAGE属性を使用して作成されたセクション オブジェクトの場合、PageProtection パラメーターは無効であり、PAGE_READONLYなどの任意の有効な値に設定できます。

SEC_IMAGE_NO_EXECUTE属性を使用して作成されたセクション オブジェクトの場合、PageProtection 値を PAGE_READONLY に設定する必要があります。

イメージ以外のセクションの場合、PageProtection パラメーターの値は、ZwCreateSection が呼び出されたときに指定されたセクションのページ保護と互換性がある必要があります。

ZwMapViewOfSectionEx は 、セクション オブジェクトの作成時に指定されたキャッシュの種類と一致するように、マップされたページのキャッシュの種類を常に設定します。 たとえば、ZwCreateSection が SEC_NOCACHE フラグを使用して呼び出された場合、PageProtection パラメーターに PAGE_NOCACHE フラグが含まれているかどうかにかかわらず、 ZwMapViewOfSectionEx はキャッシュされていないページをマップします。

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER型の 1 つ以上の拡張パラメーターへの省略可能なポインター。 拡張パラメーターの詳細については、 MapViewOfFile3 ルーチンの説明を参照してください。

[in] ExtendedParameterCount

ExtendedParameters 配列内の要素の数を指定します。

戻り値

ZwMapViewOfSectionEx は NTSTATUS 値を返します。 可能な戻り値は次のとおりです。

リターン コード 説明
STATUS_SUCCESS ルーチンは、要求された操作を正常に実行しました。
STATUS_CONFLICTING_ADDRESSES 指定したアドレス範囲が、既に予約されている範囲と競合しています。
STATUS_INVALID_PAGE_PROTECTION PageProtection パラメーターに指定された値が無効です。
STATUS_SECTION_PROTECTION PageProtection パラメーターに指定された値は、セクションの作成時に指定されたページ保護と互換性がありません。

注釈

セクションのいくつかの異なるビューを、1 つ以上のプロセスの仮想アドレス空間に同時にマップできます。

ZwMapViewOfSectionEx を使用して、\Device\PhysicalMemory のメモリ範囲をユーザー モードにマップしないでください。ただし、ドライバーが MmAllocatePagesForMdlEx を介してメモリ範囲を直接割り当てたり、他のシステム コンポーネントが同じメモリ範囲を異なるMEMORY_CACHING_TYPE値でマップしていないことが保証されている場合を除きます。

ユーザー アプリケーションは、Windows Server 2003 Service Pack 1 (SP1) 以降の \Device\PhysicalMemory に直接アクセスできず、ドライバーがアプリケーションにハンドルを渡した場合にのみアクセスできます。

セクション オブジェクトの詳細については、「セクション オブジェクト とビュー」を参照してください。

この関数の呼び出しがユーザー モードで行われる場合は、"ZwMapViewOfSectionEx" ではなく"NtMapViewOfSectionEx" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx バージョンと ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 11 バージョン 24H2
Header wdm.h

こちらもご覧ください

Nt および Zw バージョンのネイティブ システム サービス ルーチンの使用

ZwCreateSection

ZwOpenSection

ZwMapViewOfSection

ZwUnmapViewOfSection

MapViewOfFile3