none
タスクマネージャでアプリを強制終了したときのwindowメッセージ RRS feed

  • 質問

  • MFCアプリ VC++8.0

    windowsXp

     

    質問です。

     

    タスクマネージャで強制終了したときに、windowメッセージ(または何らかのアクション)を取得することは可能でしょうか?

     

    ためしに、WM_QUIT や WM_CLOSE等いろいろ試したのですが、アプリを強制終了瞬間に何のメッセージを受け取ることなく終了するみたいなのですが・・・・

     

    強制終了すると、そのアプリに関わるメモリー?は全て破棄されるようになっているのかぁ?window側でなにかしているのかな?とか思っているのですが。。(ありえないような)

     

    ご存知の方いらっしゃいましたら、ご教授お願いします。

     

    2007年9月27日 11:10

すべての返信

  •  ガンバルマン さんからの引用

    タスクマネージャで強制終了したときに、windowメッセージ(または何らかのアクション)を取得することは可能でしょうか?

    できません。

    強制」終了というだけあって、アプリに何かを通知することなくプロセスをkillされます。

     

     ガンバルマン さんからの引用

    強制終了すると、そのアプリに関わるメモリー?は全て破棄されるようになっているのかぁ?window側でなにかしているのかな?とか思っているのですが。。(ありえないような)

    基本的には強制終了すると、そのアプリに関わるメモリーは全て破棄されます。

    アプリの確保した領域はWindowsの管理下にあるため、OS側で解放されます。

     

    ※アプリがドライバを通して、ドライバ側で確保したメモリなどは対象外です。

    2007年9月27日 11:42
  • 強制終了ですからこれをやられてしまうと全く手を打つ余地は無いと思います。

    基本的に強制終了は最後の手段と言う事で通常の運用で使う事が無いようにお願いするしかないですね。

    アプリの終了処理は勿論、処理中の内容も全て飛んでしまいますので処置無しです。

    もともと、プロセスが終了する時にはそのプロセスで利用していたメモリ等は強制的に開放されるはずなので

    意味合い的には変わらないと思います。

    問題なのはアプリケーションの正規の終了処理が全くできないことでしょうね。

     

    2007年9月28日 3:01
  • Windowsメッセージから更にLowレベルの話です。

     

    ※アプリがドライバを通して、ドライバ側で確保したメモリなどは対象外です。

    (フィルタドライバ上で確認した限りは)この点に関しては、タスクマネージャ上から

    プロセスが強制終了されようとも、IRP_MJ_CLOSEがドライバに通知されるのでドライバが

    ハンドルをオープンした以降のメモリ分を適切に解放する設計であれば恐らく心配する必要は

    ないと思います。

    (ドライバがなるべくそうあるべきだと思いたいです。)

     

     

    タスクマネージャでアプリを強制終了させた際をハンドルしたい場合は、madshi辺りの

    ライブラリを使ってハンドルすることができるでは、と思っていますが確認はしてません。

    ハンドルするにもシステムワイドなAPIフックを行わないといけないので、恐らくデバッグ

    権限が必要など背景的な敷居が高そうですが。

    (Windowsメッセージに関しては既に書かれているとおりです)

     

    2007年9月30日 23:43