home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l430 / 1.ddi / CHAP5.ZIP / THHOOK.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-13  |  2.5 KB  |  80 lines

  1. /*
  2.     THHOOK.C -- Exploring KERNEL's DS
  3.  
  4.     From Chapter 5 of "Undocumented Windows" (Addison-Wesley 1992)
  5.     by Andrew Schulman, Dave Maxey and Matt Pietrek
  6.  
  7.     Build using: WINIOBC THHOOK HANDLES (for Borland C++ v3.00)
  8.                  WINIOMS THHOOK HANDLES (for Microsoft C/SDK)
  9.                      
  10.     Changed slightly from code printed in book:  as text notes,
  11.     SelTableLen and SelTableStart are not in same location in 3.0.
  12.     As a last-minute change, we just stopped printing these fields!
  13.     For more information on SelTableLen and SelTableStart, see the
  14.     sample code in the Selector Table entry in Chapter 5.
  15. */
  16.  
  17. #include <windows.h>
  18. #include <stdlib.h>
  19. #include <dos.h>
  20. #include "winio.h"
  21. #include "handles.h"
  22.  
  23. typedef struct {
  24.     WORD hGlobalHeap;       // 0
  25.     WORD pGlobalHeap;       // 2
  26.     WORD hExeHead;          // 4
  27.     WORD hExeSweep;         // 6
  28.     WORD TopPDB;            // 8
  29.     WORD HeadPDB;           // 0a
  30.     WORD TopSizePDB;        // 0c
  31.     WORD HeadTDB;           // 0e
  32.     WORD CurTDB;            // 10
  33.     WORD LoadTDB;           // 12
  34.     WORD LockTDB;           // 14
  35.     } THHOOK;
  36.  
  37. main()
  38. {
  39.     THHOOK far *lpTHH;
  40.     WORD wVers;
  41.     
  42.     winio_about("THHOOK"
  43.         "\nExploring KERNEL's DS"
  44.         "\n\nFrom Chapter 5 of"
  45.         "\n\"Undocumented Windows\" (Addison-Wesley, 1992)"
  46.         "\nby Andrew Schulman, David Maxey and Matt Pietrek"
  47.         );
  48.     
  49.     wVers = GetVersion();
  50.     if (wVers == 0x0003)
  51.     {
  52.         WORD wKernel, wKernelDgroup;
  53.         wKernel = GetModuleHandle("KERNEL");
  54.         printf("KERNEL = %04x\n", wKernel);
  55.         if (! (wKernelDgroup = GetModuleDgroup(wKernel)))
  56.             fail("Can't get KERNEL DGROUP");
  57.         lpTHH = MK_FP(wKernelDgroup, 0x10);
  58.     }
  59.     else    // 3.1+
  60.     {
  61.         lpTHH = GetProcAddress(GetModuleHandle("KERNEL"), "THHOOK");
  62.         if (! lpTHH)
  63.             fail("Can't locate THHOOK");
  64.     }
  65.     
  66.     printf("hGlobalHeap = %04xh\n", lpTHH->hGlobalHeap);
  67.     printf("pGlobalHeap = %04xh\n", lpTHH->pGlobalHeap);
  68.     printf("hExeHead = %04xh\n", lpTHH->hExeHead);
  69.     printf("hExeSweep = %04xh\n", lpTHH->hExeSweep);
  70.     printf("TopPDB = %04xh\n", lpTHH->TopPDB);
  71.     printf("HeadPDB = %04xh\n", lpTHH->HeadPDB);
  72.     printf("TopSizePDB = %04xh\n", lpTHH->TopSizePDB);
  73.     printf("HeadTDB = %04xh\n", lpTHH->HeadTDB);
  74.     printf("CurTDB = %04xh\n", lpTHH->CurTDB);
  75.     printf("LoadTDB = %04xh\n", lpTHH->LoadTDB);
  76.     printf("LockTDB = %04xh\n", lpTHH->LockTDB);
  77.     
  78.     return 0;
  79. }
  80.