home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / Chapt_04 / Diver / Diver.h < prev    next >
C/C++ Source or Header  |  2000-05-11  |  3KB  |  141 lines

  1. //-----------------------------------------------------------------------------------//
  2. //              Windows Graphics Programming: Win32 GDI and DirectDraw               //
  3. //                             ISBN  0-13-086985-6                                   //
  4. //                                                                                   //
  5. //  Written            by  Yuan, Feng                             www.fengyuan.com   //
  6. //  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
  7. //  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
  8. //                                                                                   //
  9. //  FileName   : diver.h                                                             //
  10. //  Description: Spying DLL interface                                                //
  11. //  Version    : 1.00.000, May 31, 2000                                              //
  12. //-----------------------------------------------------------------------------------//
  13.  
  14. #define REPLY_DIVERSTART 101
  15. #define REPLY_DIVERSTOP  102
  16.  
  17. #define FUNC_WIN32API    0
  18. #define FUNC_COMMETHOD  1
  19. #define FUNC_SYSCALL    2
  20.  
  21. BOOL StopDiver(void);
  22.  
  23. // Commands from outside
  24.  
  25. typedef enum
  26. {
  27.     C_LOADMODULE,
  28.     C_ADDFUNC,
  29.     C_INTERCEPT
  30. } CommandMessageId;
  31.  
  32.  
  33.  
  34. class KLoadModule
  35. {
  36. public:
  37.  
  38.     char     m_caller[32];
  39.     char     m_callee[32];
  40.     char     m_intrfc[32];
  41.     
  42.     unsigned vtable;
  43.     unsigned queryinterface;
  44.     int         methodno;
  45.     GUID     iid;
  46.  
  47.     static KLoadModule * Parse(COPYDATASTRUCT * pcds)
  48.     {
  49.         assert(pcds);
  50.         assert(pcds->cbData == sizeof(KLoadModule));
  51.         
  52.         return (KLoadModule *) pcds->lpData;
  53.     }
  54.  
  55.     
  56. };
  57.  
  58.  
  59. // const int MAXPARANO = 15;
  60.                                     
  61. class KAddFunc
  62. {
  63. public:
  64.  
  65.     unsigned short m_ord;
  66.     unsigned short m_cls;
  67.     unsigned short m_kind;
  68.     const void *   m_oldaddress;
  69.  
  70.     char       m_name[64];
  71.     int        m_parano;
  72.     char       m_paratype[128];
  73.  
  74.     static KAddFunc * Parse(COPYDATASTRUCT * pcds)
  75.     {
  76.         assert(pcds);
  77.         assert(pcds->cbData == sizeof(KAddFunc));
  78.  
  79.         return (KAddFunc *) pcds->lpData;
  80.     }
  81.  
  82. };
  83.  
  84.  
  85. class KOptions
  86. {
  87. public:
  88.     BOOL    bLogCall;
  89.     BOOL    bDispCall;
  90.  
  91.     static KOptions * Parse(COPYDATASTRUCT * pcds)
  92.     {
  93.         assert(pcds);
  94.         assert(pcds->cbData == sizeof(KOptions));
  95.  
  96.         return (KOptions *) pcds->lpData;
  97.     }
  98.  
  99. };
  100.  
  101.  
  102. class KPost
  103. {
  104.     int     seq;
  105.  
  106. public:
  107.     HWND hSender;
  108.     HWND hReceiver;
  109.     
  110.     KPost(HWND Sender, HWND Receiver)
  111.     {
  112.         hSender   = Sender;
  113.         hReceiver = Receiver;
  114.         seq          = 0;
  115.     }
  116.     
  117.     int LoadModule(const char *caller, const char *callee,
  118.                       const char *intfc, unsigned vtable, unsigned queryinterface,
  119.                       int methodno, GUID & iid);
  120.        
  121.     int AddFunc(const char *name, unsigned cls, int parano, const char * paratype, int kind, const void * oldaddr);
  122.  
  123.     int Intercept(BOOL logcall, BOOL dispcall);
  124. };
  125.  
  126.  
  127. typedef enum
  128.     {
  129.         Diver_SetController,
  130.  
  131.         Diver_Install,
  132.         Diver_UnInstall
  133.     };
  134.  
  135.  
  136. #ifndef DIVER
  137.  
  138. void __declspec(dllexport) SetupDiver(int nOpt, HWND hWnd);
  139. BOOL __declspec(dllexport) StartDiver(void);
  140.  
  141. #endif