none
WindowsServer2003でのTerminateProcessについて RRS feed

  • 質問

  • WindowsServer2003でのTerminateProcessについて
    お世話になります
    プロセスを強制終了させるプログラムを作っているのですが、Windows2000では動作OKなのに、WindowsServer2003ではTerminateしないので。
    対策方法を御存知でしたら、御教授のほど、よろしく御願します
    開発ツール:VisualStudio2005 ProfessionalEdition C++
    プログラムタイプ:win32コンソールアプリケーション MFCをスタティックでリンク
    対象のプログラムソース

     hProcess = OpenProcess(PROCESS_TERMINATE, false, プロセスID);
     TerminateProcess(hProcess,0);

    2011年7月27日 4:37

回答

すべての返信

  • 対象のプログラムソース

     hProcess = OpenProcess(PROCESS_TERMINATE, false, プロセスID);
     TerminateProcess(hProcess,0);


    OpenProcess で有効なプロセス ハンドルを取得できているのでしょうか?
    また、TerminateProcess の戻り値と、エラーであれば拡張エラー情報はどうなっているでしょうか?
    2011年7月27日 5:09
  • totojoさん

    早速の返信ありがとうございます。

    誠に申し訳ないのですが、プロセスハンドルと拡張エラーを取得する、サンプルソースを教えていただけるでしょうか?

    よろしくお願い致します

    ちなみに

    (1)Terminateしたいプロセス IISのCGIプロセスから起動したプロセスで、どうやらタイムアウトで宙吊りになっている

    (2)Terminateするプロセス administratorグループで、現在のログオンIDのプロセス。

    2011年7月27日 5:22
  • 誠に申し訳ないのですが、プロセスハンドルと拡張エラーを取得する、サンプルソースを教えていただけるでしょうか?


    さすがにこれはちょっと...。

    ヒントその1:OpenProcess とは、一体何をする API でしょうか?
    ヒントその2:TerminateProcess の英語のリファレンス(http://msdn.microsoft.com/en-us/library/ms686714(VS.85).aspx)をご覧ください。
    2011年7月27日 5:34
  • totojoさん
    エラーコードは5の「アクセスが拒否されました」でした。
    管理者権限のユーザでもTerminate出来ないって事ですか?

     

    2011年7月27日 5:38
  • SeDebugPrivilege が必要なはずですけど、"管理者権限のユーザー" ってのは権限持っていましたっけ。

    SeDebugPrivilege を使用して任意のプロセスへのハンドルを取得する方法
    http://support.microsoft.com/kb/131065/ja
    • 回答としてマーク bikke 2011年7月27日 7:21
    2011年7月27日 6:38
  • p.p1 {margin: 0.0px 0.0px 10.0px 0.0px; font: 10.0px Verdana} p.p2 {margin: 0.0px 0.0px 10.0px 0.0px; font: 10.0px 'Hiragino Kaku Gothic ProN'} span.s1 {font: 10.0px 'Hiragino Kaku Gothic ProN'}

    totojoさん

    丁寧な返信ありがとうございます。SeDubugPrivilegeを試してみたのですが、Windows系のプログラミングをしっかり覚えておらず、読み解くのに時間がかかってしょうがないので、該当ロジックをpskillにきりだしました。とりあえず動作しているので、しばらくこれで稼働させようと思います。

    御対応ありがとうございました。また、何かありましたら、よろしくお願い致します。

    2011年7月27日 7:21