Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /trunk/TTXSamples/TTXResizeWin/TTXResizeWin.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 108 by doda, Thu Feb 12 09:27:44 2009 UTC revision 109 by maya, Tue Feb 17 13:53:56 2009 UTC
# Line 6  Line 6 
6  #include <stdio.h>  #include <stdio.h>
7  #include <string.h>  #include <string.h>
8    
9    // VS2005でビルドされたバイナリが Windows95 でも起動できるようにするために、
10    // IsDebuggerPresent()のシンボル定義を追加する。
11    //
12    // cf.http://jet2.u-abel.net/program/tips/forceimp.htm
13    // 装飾された名前のアドレスを作るための仮定義
14    // (これだけでインポートを横取りしている)
15    EXTERN_C int WINAPI _imp__IsDebuggerPresent()
16        { return PtrToInt((void*) &_imp__IsDebuggerPresent); }
17    // 実際に横取り処理を行う関数
18    EXTERN_C BOOL WINAPI Cover_IsDebuggerPresent()
19        { return FALSE; }
20    // 関数が実際に呼び出されたときに備えて
21    // 横取り処理関数を呼び出させるための下準備
22    EXTERN_C void __stdcall DoCover_IsDebuggerPresent()
23    {
24        DWORD dw;
25        DWORD_PTR FAR* lpdw;
26        // 横取り関数を設定するアドレスを取得
27        lpdw = (DWORD_PTR FAR*) &_imp__IsDebuggerPresent;
28        // このアドレスを書き込めるように設定
29        // (同じプログラム内なので障害なく行える)
30        VirtualProtect(lpdw, sizeof(DWORD_PTR), PAGE_READWRITE, &dw);
31        // 横取り関数を設定
32        *lpdw = (DWORD_PTR)(FARPROC) Cover_IsDebuggerPresent;
33        // 読み書きの状態を元に戻す
34        VirtualProtect(lpdw, sizeof(DWORD_PTR), dw, NULL);
35    }
36    // アプリケーションが初期化される前に下準備を呼び出す
37    // ※ かなり早くに初期化したいときは、このコードを
38    //  ファイルの末尾に書いて「#pragma init_seg(lib)」を、
39    //  この変数宣言の手前に書きます。
40    //  初期化を急ぐ必要が無い場合は WinMain 内から
41    //  DoCover_IsDebuggerPresent を呼び出して構いません。
42    EXTERN_C int s_DoCover_IsDebuggerPresent
43        = (int) (DoCover_IsDebuggerPresent(), 0);
44    
45  #define ORDER 5800  #define ORDER 5800
46  #define ID_MENUITEM 55199  #define ID_MENUITEM 55199
47    

Legend:
Removed from v.108  
changed lines
  Added in v.109

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26