PROCESS_ALL_ACCESS を目的のアクセスとして OpenProcess を呼び出そうとすると、MSVC++ 2008 が常に GetLastError() でエラー 5 を返す理由を知っている人はいますか? PROCESS_VM_READ は問題なく動作します。私はこのコンピューターの管理者であり、Dev C++ で正常に動作しています。
どこかにオプションを設定する必要がありますか?
PROCESS_ALL_ACCESS を目的のアクセスとして OpenProcess を呼び出そうとすると、MSVC++ 2008 が常に GetLastError() でエラー 5 を返す理由を知っている人はいますか? PROCESS_VM_READ は問題なく動作します。私はこのコンピューターの管理者であり、Dev C++ で正常に動作しています。
どこかにオプションを設定する必要がありますか?
資格情報またはログオン セッションで実行されているプロセスでない場合、完全なアクセス権でプロセスを開くことは、非常に特権的な操作になる可能性があります。MSDN の次のドキュメントに従う必要があります。
別のプロセスへのハンドルを開き、完全なアクセス権を取得するには、SeDebugPrivilege 特権を有効にする必要があります。詳細については、トークンの権限の変更を参照してください。
特権を持っている場合でも、ほとんどの場合、特権は有効になっていないことに注意してください。特権を使用しようとしているコードで特別に有効にする必要があります。
これを引き起こしている可能性のあるもう 1 つのことは、Vista の新機能です。
Windows Vista では、保護されたプロセスが導入され、デジタル著作権管理のサポートが強化されています。システムは、保護されたプロセスおよび保護されたプロセスのスレッドへのアクセスを制限します。
プロセスから保護されたプロセスへの次の標準アクセス権は許可されていません。
DELETE
READ_CONTROL
WRITE_DAC
WRITE_OWNER
どのプロセスですか?別のユーザー セッションでサービスまたはプロセスを開くと、Access Denied (5) が返される可能性があります。別のセッションのプロセスは読み取り用に開きますが、デバッグすることはできません。これが、Windbg が非侵入型アタッチを備えている理由の 1 つです。ユーザーセッション全体で機能します。あなたは実際にデバッグしていません。すべてのスレッドを中断し、メモリを読み取っています。