問題タブ [openprocess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - x64 用にコンパイルされた C# の VirtualQueryEx でのオーバーフローの問題
CodeProjectで見たいくつかの記事に基づいて、C# で独自のメモリ リーダーを作成しようとしています。32 ビット Windows 用にコンパイルした場合はすべてが正常に動作しましたが、64 ビット ビルドに変換しようとしたときに問題が発生しました。
がVirtualQueryEx
すでにMEMORY_BASIC_INFORMATION
定義されており、BaseAddress
メンバーがPVOID
.
C# に移行しようとしたときMEMORY_BASIC_INFORMATION
、ガイドとして使用している上記の CodeProject の例に示されているように、自分自身を定義する必要があります。
以下のコードはメモリ プロファイルが小さいアプリケーションでは機能しますが、大規模なアプリケーションでは、以下の変数がMI.BaseAddress
2,147,356,672 に切り捨てられたように見え、プログラムは無限ループに陥ります。currentAddress
MI.BaseAddress + MI.RegionSize
ulong
ガイダンスをいただければ幸いです。ありがとうございました!
-
-
java - Java 外部プログラムを開き、Java プログラムを閉じます
わかりました。閉じるたびに接続を適切に閉じるためのシャットダウン フックがあります。私が今しなければならないことは、別のプログラム(端末エミュレーター)を開いてから、端末エミュレーターを開いたままにして私のプログラムを閉じることです。エミュレーターを開くことはできますが、エミュレーターが閉じるまで Java プログラムが閉じません。何かを実行してプログラムを閉じるにはどうすればよいですか?
windows - OpenProcess: Windows 8.1 でのみアクセス拒否エラーが発生する
SeDebugPrivilege を調整し、システム プロセスを反復処理して OpenProcess を呼び出すプログラムがあります (その他の処理も行いますが、今は重要ではありません)。また、プログラムはもちろん管理者モードで実行されます。Windows XP および Windows 7では問題なく動作しますが、Windows 8.1 では、次のシステム プロセスで OpenProcess が ERROR_ACCESS_DENIED(5) で失敗します: smss.exe、csrss.exe、services.exe。私が SeDebugPrivilege で知っているように、これらのプロセスを開いて、それらのハンドルを取得できるはずです。Windows 8.1でのみこのエラーを引き起こす魔法の種類は何ですか?
(とにかく、CreateToolhelp32Snapshot の同じプロセスで同じエラーが発生します)
c# - C# ReadProcessMemory の代替
ReadProcessMemory
特定のプロセスを実行しようとしていますがObRegisterCallbacks
、別のプロセスがそのプロセスでハンドルを作成するのを防ぐために使用されます ( OpenProcess
)。ReadProcessMemory
またはを使用せずに C# で独自のメモリ読み取りユーティリティを作成している人を聞いたことがありOpenProcess
ます。素晴らしいライブラリを作成する方法を誰かに教えてもらえたら (または、既存のライブラリにリンクできれば)。
これは厳密にメモリの読み取りです。プロセスにメモリを書き込む必要はありません
c++ - ユーザーがアプリケーションを終了した場合、Win32 C++ OpenProceess は null を返す必要がありますが、そうではありませんか?
EVENT_SYSTEM_FOREGROUND イベント (つまり、ユーザーがウィンドウを切り替えたとき) をキャプチャするためのフックをインストールしたプログラム (バックグラウンド プロセスとして実行) があります。フックに登録されているコールバックは、基本的に、ユーザーが切り替えたアプリケーション (プロセス exe ファイル名) と、切り替えたアプリケーションをログに記録します。
切り替え元のアプリケーションがまだアクティブであるかどうかを確認するコードを追加したいと思います(そうでない場合は、アプリケーションを閉じており、それが新しいウィンドウを前面に表示したと仮定します)。OpenProcessを使用して以前のPIDへのハンドルを作成しようとすることで、その存在をテストしています
上記のコードでの仮定:
g_prevPid には PID が入力されています - この
prevProcStillRunning が true に初期化されていることを確認しました
上記のコードの問題は、ユーザーがアプリ (たとえば、notepad.exe など) を終了した場合でも、何らかの理由で発生することです。それらが終了してから最大 10 秒間、このテストは引き続きパスします (つまり、hPrevProc が初期化されます)。タスク マネージャーで Notepad.exe プロセスが消えたことを確認できますが (もちろん、開いているインスタンスは 1 つしかありません)、どういうわけか、OpenProcess 行はその PID のハンドルを取得できます。どういうわけかPIDは実際にはまだ存在していると推測していますが、終了している状態になっている可能性があります。このコードがさらに数回呼び出されると、最終的に null が返されることがわかりました。
hPrevProc がまだアクティブであるかどうかをテストできるより良い方法を見つけたいと思います。GetExitCodeProcess関数を使用してこれをテストしようとしましたが、これは単に PID を提供しているように見え、いずれにせよそれが正しいアプローチであるかどうかさえわかりません。
どんな助けでも感謝します。
c# - OpenProcess がエラー コード 6 (ERROR_INVALID_HANDLE) を返す
関数を使用して、実行中のプロセスへのハンドルを取得しようとしていOpenProcess
ます。ただし、エラー コードを確認すると、エラー コード 6 (ERROR_INVALID_HANDLE) が表示されます。
以下は縮小されたサンプルです。
なぜうまくいかないのか、よくわかりません。エラー コード 6 が返されるだけです。
アクセスしているプログラムが原因であると感じていますが、他のすべては正常に実行されており、他のエラーは返されません。