DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34939 / inTopicNo.1)  ProcessクラスMainModuleプロパティでアクセス拒否
  
□投稿者/ 東風 一般人(1回)-(2021/10/14(Thu) 02:16:21)
  • アイコン環境/言語:[C# Windows10 Framework4.8 ] 
    分類:[.NET] 

    初投稿失礼します。
    ProcessクラスのインスタンスのMainModuleプロパティに
    アクセスしようとすると
    Win32Exception、「アクセスが拒否されました。」NativeErrorCode = 5 が発生します。
    どうすればMainModule を取得できますか?
    何卒よろしくお願い申し上げます。

マルチポストを報告
違反を報告
引用返信 削除キー/
■34940 / inTopicNo.2)  Re[1]: ProcessクラスMainModuleプロパティでアクセス拒否
□投稿者/ 東風 一般人(3回)-(2021/10/14(Thu) 09:30:53)
  • アイコン【補足】スタックトレースです

    at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
    at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
    at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
    at System.Diagnostics.Process.get_MainModule()
    at TestCnsole2.Class3.GetProcessesByFileName(String searchFileName, String pcName) in C:\Users\toufu\source\repos\TestCnsole2\TestCnsole2\Class3.cs:line 77
違反を報告
引用返信 削除キー/
■34941 / inTopicNo.3)  Re[1]: ProcessクラスMainModuleプロパティでアクセス拒否
□投稿者/ 魔界の仮面弁士 大御所(1405回)-(2021/10/14(Thu) 10:47:24)
  • アイコンNo34939に返信(東風さんの記事)
    > Win32Exception、「アクセスが拒否されました。」NativeErrorCode = 5 が発生します。
    > どうすればMainModule を取得できますか?

    具体的には、なんというプロセスを起動していますか?
    プロセスによっては、そもそも取得できないケースもあるので…。



    No34940に返信(東風さんの記事)
    > at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
    この時点で processId = 0 だった場合に、throw new Win32Exception(5); されます。


    > at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
    > at System.Diagnostics.NtProcessManager.GetFirstModuleInfo(Int32 processId)
    > at System.Diagnostics.Process.get_MainModule()
    MainModule プロパティの getter が GetFirstModuleInfo メソッドを呼ぶ際には、
    processId の決定のため、NtQueryInformationProcess API を通じて
    PROCESS_BASIC_INFORMATION 構造体の UniqueProcessId を得るようになっています。
    UniqueProcessId が NULL だった場合には、processId = 0 ということになるでしょう。


    もしも processId != 0 なのにエラーになった場合は、
    ProcessManager.OpenProcess メソッドから呼ばれている
    kernel32.dll の方の OpenProcess API の LastDllError が
    ERROR_ACCESS_DENIED となったということになりそうです。
違反を報告
引用返信 削除キー/
■34942 / inTopicNo.4)  Re[2]: ProcessクラスMainModuleプロパティでアクセス拒否
□投稿者/ 東風 一般人(4回)-(2021/10/14(Thu) 11:33:08)
  • アイコンすみません。
    申し訳ありません。
    問題を起こしていたのはその例外ではありませんでした。
    私が引数をタイプミスしておりました。
    以後は気を付けますのでご容赦ください。
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -