問題タブ [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++ - VC++ 2008、OpenProcess が常にエラー 5 (アクセス拒否) を返す
PROCESS_ALL_ACCESS を目的のアクセスとして OpenProcess を呼び出そうとすると、MSVC++ 2008 が常に GetLastError() でエラー 5 を返す理由を知っている人はいますか? PROCESS_VM_READ は問題なく動作します。私はこのコンピューターの管理者であり、Dev C++ で正常に動作しています。
どこかにオプションを設定する必要がありますか?
c++ - OpenProcess / SetProcessAffinityMask on process start by my service
manager.exeで、service.exeによって起動されるworker.exeのCPU使用率を変更しようとしています。Service.exeはシステムアカウントで実行され、manager.exeはログインしたユーザーのアカウントで実行されます。
manager.exeでworker.exeのPIDを使用してOpenProcessを呼び出すと、procHandleに対してNULLが返されます。
HANDLE procHandle = OpenProcess(PROCESS_SET_INFORMATION、0、pid);
GetLastError()を使用すると、アクセス拒否エラーが発生したことがわかります。
これを回避する方法はありますか?どういうわけかworker.exeを変更して、他のプロセスにそれ自体を完全に制御できるようにすることはできますか?
c++ - Windows Vista/Windows 7 権限: SeDebugPrivilege & OpenProcess
必要に応じて適切な特権にエスカレートすることについて私が見つけたものはすべて、私の現在の方法と一致していますが、問題は存在します。誰かが Windows Vista/Windows 7 の内部の経験を持ち、暗闇しかないところに光を当てることができることを願っています。長くなると思いますが、ご了承ください。
環境
現在のマシン上の他のプロセスのメモリにアクセスする必要があるアプリケーションに取り組んでいます。これには、明らかに管理者権限が必要です。また、必要SeDebugPrivilege
です (いいえ、スペルミスではありませんSetDebugPrivilege
)。これは正しく取得していると思いますが、これ以上の特権が必要ないのか、それが問題の原因なのか疑問に思います。これまでのところ、コードは Windows XP のすべてのバージョン、および私のテスト用の Vista 32 ビット環境と Windows 7 64 ビット環境で正常に動作しています。
プロセス
- プログラムは常に管理者権限で実行されます。これは、この投稿全体で想定できます。
Access Token
現在のプロセスのインクルードSeDebugPrivilege
権をエスカレートしています。EnumProcesses
システム上の現在の PID のリストを作成するために使用する- アクセス権を使用
OpenProcess
してハンドルを開くPROCESS_ALL_ACCESS
ReadProcessMemory
他のプロセスのメモリを読み取るために使用します。
問題:
開発中および個人的なテスト中 (Windows XP 32 & 64、Windows Vista 32、および Windows 7 x64 を含む) はすべて正常に動作しています。ただし、同僚の Windows Vista (32 ビット) と Windows 7 (64 ビット) の両方のマシンへのテスト展開中に、一般的なエラーでOpenProcess
失敗する特権/権利の問題があるようです。Access Denied
これは、制限付きユーザーとして実行している場合 (予想どおり) と、管理者として明示的に実行している場合 (右クリック →管理者として実行、および管理者レベルのコマンド プロンプトから実行した場合) の両方で発生します。
ただし、この問題は、私のテスト環境では再現できませんでした。私は問題を直接目撃したので、問題が存在すると信じています。実際の環境とテスト環境で識別できる唯一の違いは、UAC プロンプトでドメイン管理者アカウントを使用すると実際のエラーが発生するのに対し、私のテスト (エラーなしで動作) ではローカル管理者アカウントを使用することです。 UAC プロンプト。
OpenProcess
使用されている資格情報により、UAC は「管理者として実行」できますが、プロセスは別のプロセスで実行できる正しい権限をまだ取得していないようです。私は、Vista/Windows 7 の内部構造に精通していないため、これが何であるかを知ることができません。誰かが原因を突き止めてくれることを願っています。
キッカー
RunWithDebugEnabled
このエラーを報告した人で、その環境で定期的にこのバグを再現できる人は、自分の権限をエスカレートし、渡された実行可能ファイルを起動するように見える小さなブートストラップ プログラムに沿って名前が付けられた小さなアプリケーションを持っていますエスカレートされた特権)。UAC プロンプトで同じドメイン管理者の資格情報を使用してこのプログラムを実行すると、プログラムは正常に動作し、意図したとおりに正常に呼び出しOpenProcess
て動作することができます。
したがって、これは間違いなく正しい権限を取得する際の問題であり、ドメイン管理者アカウントは正しい権限にアクセスできるはずの管理者アカウントであることがわかっています。(もちろん、このソース コードを入手できれば素晴らしいことですが、それが可能であれば私はここにいません)。
ノート
前述のとおり、失敗したOpenProcess
試行によって報告されるエラーは次のとおりAccess Denied
です。のMSDNドキュメントによるとOpenProcess
:
呼び出し元が SeDebugPrivilege 特権を有効にしている場合、セキュリティ記述子の内容に関係なく、要求されたアクセスが許可されます。
これにより、これらの条件下では、(1) 取得SeDebugPrivileges
または (2) MSDN ドキュメントで言及されていない他の権限の要求のいずれかで問題が発生し、ドメイン管理者アカウントとローカル管理者の間で異なる可能性があると思われます。アカウント
サンプルコード:
ありがとう!
上記の条件下でWindows VistaおよびWindows 7で別のプロセスを正しく開くために欠落している可能性のある許可、特権、権利などについて誰かが洞察を持っている場合(実行可能ファイルが適切に「管理者として実行」されていると仮定) 、それは非常に高く評価されます。
完全に困惑していなければ、私はここにいないでしょうが、グループの経験と知識が再び輝きを放つことを願っています. この長い文章を読んでいただき、ありがとうございます。善意だけでもありがたいです。スタック オーバーフローをすべての人にとって便利なものにしてくれていることに感謝します。
c++ - C++ の GetProcessName
ブローディテール付きの機能があります。
typedef 部分
/// GetProcessName 関数
この関数を以下の関数で使用したい
function を呼び出すとGetProcessName
、これはプロセス名を返す必要がありますが、それは??? いつでも。たとえば、この関数を PID で直接呼び出しますGetProcessName(2018,szProcessName,MAX_PATH);
。たとえば、2018年はpidであり、機能します。HandleToULong(hProcess) が機能しない理由がわかりません。私hProcess
は確かにハンドルタイプでなければなりません。どうすればこの問題を解決できますか?
c++ - C++ の OpenProcess での Vista/7 のコンパイルと XP/2000 の実行の問題
私は、次の関数に対して PROCESS_ALL_ACCESS 権限を持つ OpenProcess を使用し
て
い
ます
。ただし、Windows XP/2000 では、MSDN ライブラリによると、PROCESS_ALL_ACCESS でプロセスを開きません。
Windows Server 2008 および Windows Vista で、PROCESS_ALL_ACCESS フラグのサイズが増加しました。Windows Server 2008 および Windows Vista 用にコンパイルされたアプリケーションが Windows Server 2003 または Windows XP/2000 で実行される場合、PROCESS_ALL_ACCESS フラグが大きすぎるため、このフラグを指定する関数は ERROR_ACCESS_DENIED で失敗します。この問題を回避するには、操作に必要な最小限のアクセス権セットを指定してください。PROCESS_ALL_ACCESS を使用する必要がある場合は、_WIN32_WINNT をアプリケーションが対象とする最小のオペレーティング システムに設定します (たとえば、#define _WIN32_WINNT _WIN32_WINNT_WINXP)。
#define を使用して最小オペレーティング システムを設定する方法に慣れていません。上記の機能に対する代替アクセス権の組み合わせをいくつか試した後、すべて運が悪かったので、#define を使用して最小限のオペレーティング システムを定義する方法 (上記の例は機能しませんでした) および/またはプロセス権限を誰かに教えてもらえないかと尋ねました。それらの機能には必要になります。
どうもありがとう。
windows - プロセスアクセス権限に関する質問
私は次のシナリオを得ました:
プロセス A がプロセス B を作成し、次に B が OpenProcess() で A のハンドルを取得しようとします。B に A に対する PROCESS_ALL_ACCESS 権限を持たせたい。
どうすればこれを達成できますか?
ありがとう。
winapi - OpenProcess エラー 87 無効なパラメーター
現在のディレクトリで MinGW ディストリビューションの make.exe を実行し、その STDOUT データと終了コードを利用するプログラムを作成しようとしています。CreatePipe で作成された、データをフェッチする STDOUT を処理するためのハンドルがあります。そのパイプで ERROR_HANDLE_EOF を取得すると、プロセスが終了したと想定し、その終了コードを取得しようとします。
私のコードは、テストした他のすべての MinGW ユーティリティ (pwd、ls など) で動作し、問題なく STDOUT と終了コードを取得できます。しかし、make で試してみると、上記のコードは次のメッセージを表示します。
「OpenProcess(2032) に失敗しました。エラー: 87」
エラーコード87をグーグルで検索したところ、「無効なパラメーター」と表示されました。2032 のような正のプロセス ID について何が無効なのかわかりません。何かアイデアはありますか?
c++ - プロセスのアクセス権は、コンパイラから実行した場合とスタンドアロンexeとして実行した場合で異なるようです。
作成しているプログラムにWINAPIを使用しています。プログラムには別のプロセスのProcessIdがあり、そのハンドルを取得する必要があります(後で終了できるようにするため、またプロセスが稼働していて、WaitForSingleObjectを使用して応答しているかどうかを定期的に確認するため)。プログラムを(Embarcadero RAD Studio 2010 C ++ Builderで)コンパイルすると、うまく機能します。プログラムは正常にハンドルを取得しているようで、通常は意図したとおりに機能します。ただし、スタンドアロンexeとしてフォルダから起動すると、ハンドルを正しく取得できないようです。比較して確認しました(CompanionはHANDLEで、Companion_PIDはDWORDです)。
と
ここで、数行前に、Companionは次のコードのCompanion_PIDから取得されます。
また、「GetProcessId(Companion)」の結果は0になります(これは、OpenProcessが適切なハンドルを返さなかったことを示す良い兆候です。
このコードがコンパイラから実行された場合とスタンドアロンのexeとして実行された場合では、動作が異なることにかなり驚いています。最初のケースでは、セキュリティ属性はコンパイラ自体から継承されていると思いますが、特にWINAPIとセキュリティ属性の経験が豊富な人から、この動作のより良い説明を聞きたいと思います。
小さな更新:はい、私が思ったように、OpenProcessはエラー0x5=ERROR_ACCESS_DENIEDになります。