ちょっと前にMemoryMappedFileを使うことがあったのですが、「確保したサイズを超えないようにチェック処理を追加しようとしたらどうなる?」ということを思いついたので、サンプルをC#で作成。
SymGetLineFromAddrが示す行数
久しぶりにWin32API関連の覚書です。
CreateProcessの第1引数って
「WindowStationとDesktopと」の関連で、CreateProcess()の引数を調べてました。
(dwCreationFlagsとか)
手元に「Advanced Windows 第5版(上)」があったので、そちらも参照してました。
(そういえば、昔(第3版だったかな?)は1巻だけだったのに、最近は上下巻に分かれてるんですね)
その中で、昔から気になっていた「第1引数」の正体が・・・・
「このpszApplicationName(MSDNではlpApplicationNameってなってます)パラメータによって実現される機能は、WindowsのPOSIXサブシステムをサポートするためにCreateProcess関数に追加されたものです」
ってことは、第1引数は気にするなと。
っていうか、
第1引数として『追加』ってどういうこと!!
普通、『追加』って言えばケツにつけるでしょ。
WindowStationとDesktopと
一般保護違反(General Protection Fault)のメッセージボックスのOKボタンをプログラムから押させたいというリクエストがあったので、
EnumWindowとかSendMessageとか使ったプログラムを作成。
(今時Win32API使うんかい!!ってツッコミは無しで(^^ゞ)
しかし、対象プログラムはサーバ上でサービスから別プロセスで起動されてるとのこと。
・・・デスクトップ空間違うじゃん!!
とりあえず、ネット検索しまくりで「OpenWindowStation()」と「OpenDesktop()」のサンプル見つけたまではいいけど、
テスト環境作ってみて、「実環境と一緒なのかどうか不明!」ってことに気付く。
となると、いろんなデスクトップ空間で動かせるかチェックしたいところ。
「Desktop Heap Information Monitor Tool 」とかで、"WinSta0/Default"とか"SAWinSta/SADesktop"とかが存在するのは
確認できたけど、
どーやってGPFエラーメッセージボックスを意図的に違うデスクトップ空間に出力すんの!!
いや、サービスのプロパティで「デスクトップとの対話をサービスに許可」チェックを入れるとか入れないとかは知ってますけど、
逆に"SAWinSta/SADesktop"に出そうとするとどうすればいいの???
(サービスプログラム自身は"SAWinSta/SADesktop"とかに表示してるのは確認してますよ。
でも、GPFエラーのメッセージボックスはログインしていると"WinSta0/Default"に表示するんですよね)
プログラムのサブシステム(Console/Window)とかでも動作が違うのかな??
まぁ、結論は"WinSta0/Winlogon"にはアクセスできないから100%はあきらめろってことで。(;一_一)