MmProtectDriverSection 関数 (wdm.h)
MmProtectDriverSection 読み取り専用では、読み込まれたドライバーのセクションが、仮想セキュア モード (VSM) によって提供されるサービスを使用して保護されます。
構文
NTSTATUS MmProtectDriverSection(
[in] PVOID AddressWithinSection,
[in] SIZE_T Size,
[in] ULONG Flags
);
パラメーター
[in] AddressWithinSection
ドライバー イメージに属する有効なデータ セクションへのポインター。 データ セクションを既に実行可能にしないでください。そうしないと、API は STATUS_INVALID_PAGE_PROTECTIONで失敗します。
[in] Size
このパラメーターは現在、将来の使用のために予約されており、0 に設定する必要があります。
[in] Flags
操作を制御するフラグを指定します: MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD – セクションが保護された後もドライバーをアンロードできることを指定するために使用します。
戻り値
MmProtectDriverSection は、操作の結果を示す NTSTATUS 値を返します。
戻り値 | 説明 |
---|---|
|
操作が正常に完了し、ドライバー セクションが正常に保護されました |
|
仮想セキュア モード (VSM) は現在無効になっているため、関数はドライバー セクションを保護できません。 |
|
無効なフラグ ビットマスク (または 0 以外のサイズ) が指定されています。 |
|
に含まれるアドレスで指定されたドライバーのセクションは、無効な保護によってマップされます (実行可能セクションはサポートされていません) |
|
指定したセクションは、この API でサポートされていないドライバーに属しています (「解説」を参照)。 |
|
指定されたセクションは破棄可能であるか、物理メモリによってサポートされていないギャップを含みます。 これは通常、セクションの配置がページ サイズよりも大きい場合に発生します。 |
|
指定したセクションは既に保護されています。 |
注釈
このルーチンは、VSM によって管理される SLAT テーブル (第 2 レベルのアドレス変換) を使用して、ドライバーのセクションをバックアップする物理メモリを保護します。 保護されたメモリは、オペレーティング システム全体に対して読み取り専用になります。
セクションが保護された後は、保護を削除する方法がないことに注意してください。 これは仕様です。この規則の唯一の例外は、呼び出し元がMM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD フラグを指定する場合です。 その場合、ターゲット ドライバーがアンロードされると、保護されたセクションが解放され、解放されます。
大きなページとセッション ドライバーにマップされたドライバーは、 MmProtectDriverSection API ではサポートされていません。 さらに、この API の呼び出し元は、破棄可能なセクションまたは IAT (インポート アドレス テーブル) を含むセクションを保護するように要求することはできません。
呼び出し元が読み込まれたドライバー イメージに属していないアドレスを指定した場合、システムはMEMORY_MANAGEMENTバグチェック (型 0x1100) でクラッシュします。
MmProtectDriverSection API の呼び出し元は、IRQL <= APC_LEVELで実行する必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Insider 19548 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= APC_LEVEL |