使用に同意するものと見なされます。結果的には、工夫して動かしているのでそれほど困っている問題ではないのですが、KernelModeで確保しているメモリをUserModeの空間へマップする方法についての疑問です。よる方法」についてなのですが、この方法には下記のような制約があります。中で行わなければなりません。自分の作っているドライバはDeviceIoControlを処理するIRPキュー(CSQ)とその処理スレッドで構成されているので、可能であればこの流れに乗せて処理をしたいのですが、そうすると処理スレッドの中では呼び出し側プロセスのコンテキストではないためマップすることができません。仕方ないので工夫して、ディスパッチルーチンと処理スレッドとでイベントで同期を取ることで、UserMode空間へのマップとIRPキューによるIRP処理のシリアライズとを両立しています。処理が完了するまでディスパッチルーチンがリターンしないことになるため、アプリ見えにはオーバーラップ処理ができていないことになります。してもであれば、セクションを使う手段もありますが。できれば前者のように自然な処理の流れに乗せたいので、例えばプロセスを特定できればマップできるはずですから、MmMapLockedPages()ルーチンに引数でプロセスID等を指定できるようにすればよいのでは・・?と思うのですが何故そうなっていないのでしょうか。「仕様」として受け取るしかないでしょうか。ちなみに、実際にはMmMapLockedPagesSpecifyCache()ルーチンを使っています。読んだことがないです。回答0サインインして投票>できれば前者のように自然な処理の流れに乗せたいので、例えばプロセスを特定できればマップできるはずですから、>MmMapLockedPages()ルーチンに引数でプロセスID等を指定できるようにすればよいのでは・・?と思うのですが何故そうなっていないのでしょうか。>「仕様」として受け取るしかないでしょうか。マップは、そのプロセスのコンテキストで行う必要があるから...ということがすべてではないでしょうか?たとえ呼び出しプロセスを特定できたとしても、他のプロセスから「自分以外の」プロセスのアドレス空間を勝手に操作することはできないと思います。等を指定できたとしても、メモリのマップ処理は呼び出し側プロセスのコンテキストに戻って行う必要がある...で、結局先の制限につながる...と言うことで、私は「仕様」として納得することにしてます。4:33返信|引用すべての返信0サインインして投票>できれば前者のように自然な処理の流れに乗せたいので、例えばプロセスを特定できればマップできるはずですから、>MmMapLockedPages()ルーチンに引数でプロセスID等を指定できるようにすればよいのでは・・?と思うのですが何故そうなっていないのでしょうか。>「仕様」として受け取るしかないでしょうか。マップは、そのプロセスのコンテキストで行う必要があるから...ということがすべてではないでしょうか?たとえ呼び出しプロセスを特定できたとしても、他のプロセスから「自分以外の」プロセスのアドレス空間を勝手に操作することはできないと思います。等を指定できたとしても、メモリのマップ処理は呼び出し側プロセスのコンテキストに戻って行う必要がある...で、結局先の制限につながる...と言うことで、私は「仕様」として納得することにしてます。使い勝手が悪い事この上ないのですが、どうにか工夫するしかないですよね・・。他プロセスのコンテキストから操作する、というのもセキュリティ上の観点とかでダメなんでしょうかね。思えば、「前処理をするIoControl(MDLを作るとか色々)」と、「作ったMDLをMmMapLockecPages()を呼んでマップする"だけ"のIoControl」という風に2つに分けるっていう方法もありますよね。