home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 40 / IOPROG_40.ISO / SOFT / NETFrameworkSDK.exe / comsdk.cab / samples1.exe / smc / Win32.h < prev   
Encoding:
C/C++ Source or Header  |  2000-06-23  |  44.1 KB  |  1,363 lines

  1. /****************************************************************************/
  2. #ifdef _MSC_VER
  3. #error  Don't include this header when building with VC!
  4. #endif
  5. /****************************************************************************/
  6. /*                   The basic typedefs from various headers                */
  7. /****************************************************************************/
  8.  
  9. typedef wchar           wchar_t;
  10.  
  11. typedef unsigned        size_t;
  12. typedef __int32         time_t;
  13.  
  14. typedef unsigned        DWORD;
  15. typedef int             BOOL;
  16. typedef void            VOID;
  17. typedef unsigned char   BYTE;
  18. typedef unsigned short  WORD;
  19. typedef float           FLOAT;
  20. typedef FLOAT          *PFLOAT;
  21. typedef BOOL           *PBOOL;
  22. typedef BOOL           *LPBOOL;
  23. typedef BYTE           *PBYTE;
  24. typedef BYTE           *LPBYTE;
  25. typedef int            *PINT;
  26. typedef int            *LPINT;
  27. typedef WORD           *PWORD;
  28. typedef WORD           *LPWORD;
  29. typedef __int32        *LPLONG;
  30. typedef DWORD          *PDWORD;
  31. typedef DWORD          *LPDWORD;
  32. typedef void           *LPVOID;
  33. typedef const void     *LPCVOID;
  34.  
  35. typedef unsigned __int32 ULONG32;
  36.  
  37. typedef          __int64  LONGLONG;
  38. typedef unsigned __int64 ULONGLONG;
  39.  
  40. typedef int             INT;
  41. typedef unsigned int    UINT;
  42. typedef unsigned int   *PUINT;
  43. typedef unsigned int    UINT_PTR;
  44.  
  45. typedef SHORT          *PSHORT;
  46. typedef LONG           *PLONG;
  47.  
  48. typedef int             HINSTANCE;
  49. typedef int             HRESULT;
  50. typedef int             HANDLE;
  51.  
  52. typedef BYTE            BOOLEAN;
  53. typedef BOOLEAN        *PBOOLEAN;
  54.  
  55. typedef unsigned char   UCHAR;
  56. typedef short           SHORT;
  57. typedef unsigned short  USHORT;
  58. typedef DWORD           ULONG;
  59. typedef double          DOUBLE;
  60.  
  61. typedef void           *PVOID;
  62. typedef void           *PVOID64;
  63. typedef char            CHAR;
  64. typedef __int32         LONG;
  65. typedef wchar_t         WCHAR;
  66. typedef WCHAR          *PWCHAR;
  67. typedef WCHAR          *LPWCH;
  68. typedef WCHAR          *PWCH;
  69. typedef const WCHAR    *LPCWCH;
  70. typedef const WCHAR    *PCWCH;
  71. typedef WCHAR          *NWPSTR;
  72. typedef WCHAR          *LPWSTR;
  73. typedef WCHAR          *PWSTR;
  74. typedef const WCHAR    *LPCWSTR;
  75. typedef const WCHAR    *PCWSTR;
  76. typedef CHAR           *PCHAR;
  77. typedef CHAR           *LPCH;
  78. typedef CHAR           *PCH;
  79. typedef const CHAR     *LPCCH;
  80. typedef const CHAR     *PCCH;
  81. typedef CHAR           *NPSTR;
  82. typedef CHAR           *LPSTR;
  83. typedef CHAR           *PSTR;
  84. typedef const CHAR     *LPCSTR;
  85. typedef const CHAR     *PCSTR;
  86.  
  87. typedef void *          LPSTGMEDIUM;
  88.  
  89. typedef int             LCID;
  90.  
  91. const   int             S_OK = 0;
  92. const   int             E_NOTIMPL = 0x80004001;
  93. const   int             E_NOINTERFACE = 0x80004002;
  94.  
  95. struct GUID
  96. {
  97.     DWORD  Data1;
  98.     WORD   Data2;
  99.     WORD   Data3;
  100.     BYTE   Data4[8];
  101. };
  102.  
  103. typedef GUID            IID;
  104. typedef GUID            CLSID;
  105. typedef  IID    *       REFIID;
  106. typedef const CLSID *   REFCLSID;
  107. struct                  STATSTG        {};
  108.  
  109. static  REFIID          IID_IUnknown;
  110.  
  111. struct                   LARGE_INTEGER {};
  112. struct                  ULARGE_INTEGER {};
  113.  
  114. struct                  VARIANT        {};
  115.  
  116. typedef DWORD           ACCESS_MASK;
  117. typedef ACCESS_MASK   *PACCESS_MASK;
  118.  
  119. typedef ACCESS_MASK     REGSAM;
  120.  
  121. /****************************************************************************/
  122. /*                        PE file format definitions                        */
  123. /****************************************************************************/
  124.  
  125. //
  126. //  The following are masks for the predefined standard access types
  127. //
  128.  
  129. const uint DELETE                           = (0x00010000);
  130. const uint READ_CONTROL                     = (0x00020000);
  131. const uint WRITE_DAC                        = (0x00040000);
  132. const uint WRITE_OWNER                      = (0x00080000);
  133. const uint SYNCHRONIZE                      = (0x00100000);
  134.  
  135. const uint STANDARD_RIGHTS_REQUIRED         = (0x000F0000);
  136.  
  137. const uint STANDARD_RIGHTS_READ             = (READ_CONTROL);
  138. const uint STANDARD_RIGHTS_WRITE            = (READ_CONTROL);
  139. const uint STANDARD_RIGHTS_EXECUTE          = (READ_CONTROL);
  140.  
  141. const uint STANDARD_RIGHTS_ALL              = (0x001F0000);
  142.  
  143. const uint SPECIFIC_RIGHTS_ALL              = (0x0000FFFF);
  144.  
  145. //
  146. // AccessSystemAcl access type
  147. //
  148.  
  149. const uint ACCESS_SYSTEM_SECURITY           = (0x01000000);
  150.  
  151. //
  152. // MaximumAllowed access type
  153. //
  154.  
  155. const uint MAXIMUM_ALLOWED                  = (0x02000000);
  156.  
  157. //
  158. //  These are the generic rights.
  159. //
  160.  
  161. const uint GENERIC_READ                     = (0x80000000);
  162. const uint GENERIC_WRITE                    = (0x40000000);
  163. const uint GENERIC_EXECUTE                  = (0x20000000);
  164. const uint GENERIC_ALL                      = (0x10000000);
  165.  
  166. const uint IMAGE_DOS_SIGNATURE                  = 0x4D5A;      // MZ
  167. const uint IMAGE_OS2_SIGNATURE                  = 0x4E45;      // NE
  168. const uint IMAGE_OS2_SIGNATURE_LE               = 0x4C45;      // LE
  169. const uint IMAGE_NT_SIGNATURE                   = 0x50450000; // PE00
  170.  
  171. const uint IMAGE_SIZEOF_FILE_HEADER             = 20;
  172.  
  173. const uint IMAGE_SIZEOF_ROM_OPTIONAL_HEADER     =  56;
  174. const uint IMAGE_SIZEOF_STD_OPTIONAL_HEADER     =  28;
  175. const uint IMAGE_SIZEOF_NT_OPTIONAL32_HEADER    = 224;
  176. const uint IMAGE_SIZEOF_NT_OPTIONAL64_HEADER    = 240;
  177.  
  178. const uint IMAGE_NT_OPTIONAL_HDR32_MAGIC        = 0x10b;
  179. const uint IMAGE_NT_OPTIONAL_HDR64_MAGIC        = 0x20b;
  180. const uint IMAGE_ROM_OPTIONAL_HDR_MAGIC         = 0x107;
  181.  
  182. const uint IMAGE_SIZEOF_NT_OPTIONAL_HEADER      = IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
  183. const uint IMAGE_NT_OPTIONAL_HDR_MAGIC          = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
  184.  
  185. const uint IMAGE_NUMBEROF_DIRECTORY_ENTRIES     = 16;
  186.  
  187. // Subsystem Values
  188.  
  189. const uint IMAGE_SUBSYSTEM_UNKNOWN              = 0;   // Unknown subsystem.
  190. const uint IMAGE_SUBSYSTEM_NATIVE               = 1;   // Image doesn't require a subsystem.
  191. const uint IMAGE_SUBSYSTEM_WINDOWS_GUI          = 2;   // Image runs in the Windows GUI subsystem.
  192. const uint IMAGE_SUBSYSTEM_WINDOWS_CUI          = 3;   // Image runs in the Windows character subsystem.
  193. const uint IMAGE_SUBSYSTEM_OS2_CUI              = 5;   // image runs in the OS/2 character subsystem.
  194. const uint IMAGE_SUBSYSTEM_POSIX_CUI            = 7;   // image runs in the Posix character subsystem.
  195. const uint IMAGE_SUBSYSTEM_NATIVE_WINDOWS       = 8;   // image is a native Win9x driver.
  196. const uint IMAGE_SUBSYSTEM_WINDOWS_CE_GUI       = 9;   // Image runs in the Windows CE subsystem.
  197.  
  198. // DllCharacteristics Entries
  199.  
  200. //      IMAGE_LIBRARY_PROCESS_INIT              = 0x0001;     // Reserved.
  201. //      IMAGE_LIBRARY_PROCESS_TERM              = 0x0002;     // Reserved.
  202. //      IMAGE_LIBRARY_THREAD_INIT               = 0x0004;     // Reserved.
  203. //      IMAGE_LIBRARY_THREAD_TERM               = 0x0008;     // Reserved.
  204. const uint IMAGE_DLLCHARACTERISTICS_WDM_DRIVER  = 0x2000;     // Driver uses WDM model
  205.  
  206. // Directory Entries
  207.  
  208. const uint IMAGE_DIRECTORY_ENTRY_EXPORT         =  0;   // Export Directory
  209. const uint IMAGE_DIRECTORY_ENTRY_IMPORT         =  1;   // Import Directory
  210. const uint IMAGE_DIRECTORY_ENTRY_RESOURCE       =  2;   // Resource Directory
  211. const uint IMAGE_DIRECTORY_ENTRY_EXCEPTION      =  3;   // Exception Directory
  212. const uint IMAGE_DIRECTORY_ENTRY_SECURITY       =  4;   // Security Directory
  213. const uint IMAGE_DIRECTORY_ENTRY_BASERELOC      =  5;   // Base Relocation Table
  214. const uint IMAGE_DIRECTORY_ENTRY_DEBUG          =  6;   // Debug Directory
  215. const uint IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   =  7;   // Architecture Specific Data
  216. const uint IMAGE_DIRECTORY_ENTRY_GLOBALPTR      =  8;   // RVA of GP
  217. const uint IMAGE_DIRECTORY_ENTRY_TLS            =  9;   // TLS Directory
  218. const uint IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10;   // Load Configuration Directory
  219. const uint IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11;   // Bound Import Directory in headers
  220. const uint IMAGE_DIRECTORY_ENTRY_IAT            = 12;   // Import Address Table
  221. const uint IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13;   // Delay Load Import Descriptors
  222. const uint IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14;   // COM Runtime descriptor
  223.  
  224. const uint IMAGE_SIZEOF_SHORT_NAME              = 8;
  225.  
  226. const uint IMAGE_SIZEOF_SECTION_HEADER          = 40;
  227.  
  228. const uint IMAGE_FILE_RELOCS_STRIPPED           = 0x0001;  // Relocation info stripped from file.
  229. const uint IMAGE_FILE_EXECUTABLE_IMAGE          = 0x0002;  // File is executable  (i.e. no unresolved externel references).
  230. const uint IMAGE_FILE_LINE_NUMS_STRIPPED        = 0x0004;  // Line nunbers stripped from file.
  231. const uint IMAGE_FILE_LOCAL_SYMS_STRIPPED       = 0x0008;  // Local symbols stripped from file.
  232. const uint IMAGE_FILE_AGGRESIVE_WS_TRIM         = 0x0010;  // Agressively trim working set
  233. const uint IMAGE_FILE_LARGE_ADDRESS_AWARE       = 0x0020;  // App can handle >2gb addresses
  234. const uint IMAGE_FILE_BYTES_REVERSED_LO         = 0x0080;  // Bytes of machine word are reversed.
  235. const uint IMAGE_FILE_32BIT_MACHINE             = 0x0100;  // 32 bit word machine.
  236. const uint IMAGE_FILE_DEBUG_STRIPPED            = 0x0200;  // Debugging info stripped from file in .DBG file
  237. const uint IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP   = 0x0400;  // If Image is on removable media, copy and run from the swap file.
  238. const uint IMAGE_FILE_NET_RUN_FROM_SWAP         = 0x0800;  // If Image is on Net, copy and run from the swap file.
  239. const uint IMAGE_FILE_SYSTEM                    = 0x1000;  // System File.
  240. const uint IMAGE_FILE_DLL                       = 0x2000;  // File is a DLL.
  241. const uint IMAGE_FILE_UP_SYSTEM_ONLY            = 0x4000;  // File should only be run on a UP machine
  242. const uint IMAGE_FILE_BYTES_REVERSED_HI         = 0x8000;  // Bytes of machine word are reversed.
  243.  
  244. const uint IMAGE_FILE_MACHINE_UNKNOWN           = 0;
  245. const uint IMAGE_FILE_MACHINE_I386              = 0x014c;  // Intel 386.
  246. const uint IMAGE_FILE_MACHINE_R3000             = 0x0162;  // MIPS little-endian, 0x160 big-endian
  247. const uint IMAGE_FILE_MACHINE_R4000             = 0x0166;  // MIPS little-endian
  248. const uint IMAGE_FILE_MACHINE_R10000            = 0x0168;  // MIPS little-endian
  249. const uint IMAGE_FILE_MACHINE_WCEMIPSV2         = 0x0169;  // MIPS little-endian WCE v2
  250. const uint IMAGE_FILE_MACHINE_ALPHA             = 0x0184;  // Alpha_AXP
  251. const uint IMAGE_FILE_MACHINE_POWERPC           = 0x01F0;  // IBM PowerPC Little-Endian
  252. const uint IMAGE_FILE_MACHINE_SH3               = 0x01a2;  // SH3 little-endian
  253. const uint IMAGE_FILE_MACHINE_SH3E              = 0x01a4;  // SH3E little-endian
  254. const uint IMAGE_FILE_MACHINE_SH4               = 0x01a6;  // SH4 little-endian
  255. const uint IMAGE_FILE_MACHINE_ARM               = 0x01c0;  // ARM Little-Endian
  256. const uint IMAGE_FILE_MACHINE_THUMB             = 0x01c2;
  257. const uint IMAGE_FILE_MACHINE_IA64              = 0x0200;  // Intel 64
  258. const uint IMAGE_FILE_MACHINE_MIPS16            = 0x0266;  // MIPS
  259. const uint IMAGE_FILE_MACHINE_MIPSFPU           = 0x0366;  // MIPS
  260. const uint IMAGE_FILE_MACHINE_MIPSFPU16         = 0x0466;  // MIPS
  261. const uint IMAGE_FILE_MACHINE_ALPHA64           = 0x0284;  // ALPHA64
  262. const uint IMAGE_FILE_MACHINE_AXP64             = IMAGE_FILE_MACHINE_ALPHA64;
  263.  
  264. //
  265. // Section characteristics.
  266. //
  267. //      IMAGE_SCN_TYPE_REG                      = 0x00000000;  // Reserved.
  268. //      IMAGE_SCN_TYPE_DSECT                    = 0x00000001;  // Reserved.
  269. //      IMAGE_SCN_TYPE_NOLOAD                   = 0x00000002;  // Reserved.
  270. //      IMAGE_SCN_TYPE_GROUP                    = 0x00000004;  // Reserved.
  271. const uint IMAGE_SCN_TYPE_NO_PAD                = 0x00000008;  // Reserved.
  272. //      IMAGE_SCN_TYPE_COPY                     = 0x00000010;  // Reserved.
  273.  
  274. const uint IMAGE_SCN_CNT_CODE                   = 0x00000020;  // Section contains code.
  275. const uint IMAGE_SCN_CNT_INITIALIZED_DATA       = 0x00000040;  // Section contains initialized data.
  276. const uint IMAGE_SCN_CNT_UNINITIALIZED_DATA     = 0x00000080;  // Section contains uninitialized data.
  277.  
  278. const uint IMAGE_SCN_LNK_OTHER                  = 0x00000100;  // Reserved.
  279. const uint IMAGE_SCN_LNK_INFO                   = 0x00000200;  // Section contains comments or some other type of information.
  280. //      IMAGE_SCN_TYPE_OVER                     = 0x00000400;  // Reserved.
  281. const uint IMAGE_SCN_LNK_REMOVE                 = 0x00000800;  // Section contents will not become part of image.
  282. const uint IMAGE_SCN_LNK_COMDAT                 = 0x00001000;  // Section contents comdat.
  283. //                                              = 0x00002000;  // Reserved.
  284. //      IMAGE_SCN_MEM_PROTECTED - Obsolete      = 0x00004000;
  285. const uint IMAGE_SCN_NO_DEFER_SPEC_EXC          = 0x00004000;  // Reset speculative exceptions handling bits in the TLB entries for this section.
  286. const uint IMAGE_SCN_GPREL                      = 0x00008000;  // Section content can be accessed relative to GP
  287. const uint IMAGE_SCN_MEM_FARDATA                = 0x00008000;
  288. //      IMAGE_SCN_MEM_SYSHEAP  - Obsolete       = 0x00010000;
  289. const uint IMAGE_SCN_MEM_PURGEABLE              = 0x00020000;
  290. const uint IMAGE_SCN_MEM_16BIT                  = 0x00020000;
  291. const uint IMAGE_SCN_MEM_LOCKED                 = 0x00040000;
  292. const uint IMAGE_SCN_MEM_PRELOAD                = 0x00080000;
  293.  
  294. const uint IMAGE_SCN_ALIGN_1BYTES               = 0x00100000;  //
  295. const uint IMAGE_SCN_ALIGN_2BYTES               = 0x00200000;  //
  296. const uint IMAGE_SCN_ALIGN_4BYTES               = 0x00300000;  //
  297. const uint IMAGE_SCN_ALIGN_8BYTES               = 0x00400000;  //
  298. const uint IMAGE_SCN_ALIGN_16BYTES              = 0x00500000;  // Default alignment if no others are specified.
  299. const uint IMAGE_SCN_ALIGN_32BYTES              = 0x00600000;  //
  300. const uint IMAGE_SCN_ALIGN_64BYTES              = 0x00700000;  //
  301. const uint IMAGE_SCN_ALIGN_128BYTES             = 0x00800000;  //
  302. const uint IMAGE_SCN_ALIGN_256BYTES             = 0x00900000;  //
  303. const uint IMAGE_SCN_ALIGN_512BYTES             = 0x00A00000;  //
  304. const uint IMAGE_SCN_ALIGN_1024BYTES            = 0x00B00000;  //
  305. const uint IMAGE_SCN_ALIGN_2048BYTES            = 0x00C00000;  //
  306. const uint IMAGE_SCN_ALIGN_4096BYTES            = 0x00D00000;  //
  307. const uint IMAGE_SCN_ALIGN_8192BYTES            = 0x00E00000;  //
  308. // Unused                                       = 0x00F00000;
  309.  
  310. const uint IMAGE_SCN_LNK_NRELOC_OVFL            = 0x01000000;  // Section contains extended relocations.
  311. const uint IMAGE_SCN_MEM_DISCARDABLE            = 0x02000000;  // Section can be discarded.
  312. const uint IMAGE_SCN_MEM_NOT_CACHED             = 0x04000000;  // Section is not cachable.
  313. const uint IMAGE_SCN_MEM_NOT_PAGED              = 0x08000000;  // Section is not pageable.
  314. const uint IMAGE_SCN_MEM_SHARED                 = 0x10000000;  // Section is shareable.
  315. const uint IMAGE_SCN_MEM_EXECUTE                = 0x20000000;  // Section is executable.
  316. const uint IMAGE_SCN_MEM_READ                   = 0x40000000;  // Section is readable.
  317. const uint IMAGE_SCN_MEM_WRITE                  = 0x80000000;  // Section is writeable.
  318.  
  319. const uint SECTION_QUERY       = 0x0001;
  320. const uint SECTION_MAP_WRITE   = 0x0002;
  321. const uint SECTION_MAP_READ    = 0x0004;
  322. const uint SECTION_MAP_EXECUTE = 0x0008;
  323. const uint SECTION_EXTEND_SIZE = 0x0010;
  324.  
  325. const uint SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|
  326.                                  SECTION_MAP_WRITE |
  327.                                  SECTION_MAP_READ |
  328.                                  SECTION_MAP_EXECUTE |
  329.                                  SECTION_EXTEND_SIZE);
  330.  
  331. const uint FILE_MAP_COPY       = SECTION_QUERY;
  332. const uint FILE_MAP_WRITE      = SECTION_MAP_WRITE;
  333. const uint FILE_MAP_READ       = SECTION_MAP_READ;
  334. const uint FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS;
  335.  
  336. const uint FILE_SHARE_READ                     = 0x00000001;
  337. const uint FILE_SHARE_WRITE                    = 0x00000002;
  338. const uint FILE_SHARE_DELETE                   = 0x00000004;
  339. const uint FILE_ATTRIBUTE_READONLY             = 0x00000001;
  340. const uint FILE_ATTRIBUTE_HIDDEN               = 0x00000002;
  341. const uint FILE_ATTRIBUTE_SYSTEM               = 0x00000004;
  342. const uint FILE_ATTRIBUTE_DIRECTORY            = 0x00000010;
  343. const uint FILE_ATTRIBUTE_ARCHIVE              = 0x00000020;
  344. const uint FILE_ATTRIBUTE_ENCRYPTED            = 0x00000040;
  345. const uint FILE_ATTRIBUTE_NORMAL               = 0x00000080;
  346. const uint FILE_ATTRIBUTE_TEMPORARY            = 0x00000100;
  347. const uint FILE_ATTRIBUTE_SPARSE_FILE          = 0x00000200;
  348. const uint FILE_ATTRIBUTE_REPARSE_POINT        = 0x00000400;
  349. const uint FILE_ATTRIBUTE_COMPRESSED           = 0x00000800;
  350. const uint FILE_ATTRIBUTE_OFFLINE              = 0x00001000;
  351. const uint FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  = 0x00002000;
  352.  
  353. //
  354. // TLS Chaacteristic Flags
  355. //
  356. const uint IMAGE_SCN_SCALE_INDEX                = 0x00000001;  // Tls index is scaled
  357.  
  358. struct IMAGE_DOS_HEADER {
  359.     WORD   e_magic;
  360.     WORD   e_cblp;
  361.     WORD   e_cp;
  362.     WORD   e_crlc;
  363.     WORD   e_cparhdr;
  364.     WORD   e_minalloc;
  365.     WORD   e_maxalloc;
  366.     WORD   e_ss;
  367.     WORD   e_sp;
  368.     WORD   e_csum;
  369.     WORD   e_ip;
  370.     WORD   e_cs;
  371.     WORD   e_lfarlc;
  372.     WORD   e_ovno;
  373.     WORD   e_res[4];
  374.     WORD   e_oemid;
  375.     WORD   e_oeminfo;
  376.     WORD   e_res2[10];
  377.     LONG   e_lfanew;
  378.   };
  379.  
  380. struct IMAGE_OS2_HEADER {
  381.     WORD   ne_magic;
  382.     CHAR   ne_ver;
  383.     CHAR   ne_rev;
  384.     WORD   ne_enttab;
  385.     WORD   ne_cbenttab;
  386.     LONG   ne_crc;
  387.     WORD   ne_flags;
  388.     WORD   ne_autodata;
  389.     WORD   ne_heap;
  390.     WORD   ne_stack;
  391.     LONG   ne_csip;
  392.     LONG   ne_sssp;
  393.     WORD   ne_cseg;
  394.     WORD   ne_cmod;
  395.     WORD   ne_cbnrestab;
  396.     WORD   ne_segtab;
  397.     WORD   ne_rsrctab;
  398.     WORD   ne_restab;
  399.     WORD   ne_modtab;
  400.     WORD   ne_imptab;
  401.     LONG   ne_nrestab;
  402.     WORD   ne_cmovent;
  403.     WORD   ne_align;
  404.     WORD   ne_cres;
  405.     BYTE   ne_exetyp;
  406.     BYTE   ne_flagsothers;
  407.     WORD   ne_pretthunks;
  408.     WORD   ne_psegrefbytes;
  409.     WORD   ne_swaparea;
  410.     WORD   ne_expver;
  411.   };
  412.  
  413. struct IMAGE_VXD_HEADER {
  414.     WORD   e32_magic;
  415.     BYTE   e32_border;
  416.     BYTE   e32_worder;
  417.     DWORD  e32_level;
  418.     WORD   e32_cpu;
  419.     WORD   e32_os;
  420.     DWORD  e32_ver;
  421.     DWORD  e32_mflags;
  422.     DWORD  e32_mpages;
  423.     DWORD  e32_startobj;
  424.     DWORD  e32_eip;
  425.     DWORD  e32_stackobj;
  426.     DWORD  e32_esp;
  427.     DWORD  e32_pagesize;
  428.     DWORD  e32_lastpagesize;
  429.     DWORD  e32_fixupsize;
  430.     DWORD  e32_fixupsum;
  431.     DWORD  e32_ldrsize;
  432.     DWORD  e32_ldrsum;
  433.     DWORD  e32_objtab;
  434.     DWORD  e32_objcnt;
  435.     DWORD  e32_objmap;
  436.     DWORD  e32_itermap;
  437.     DWORD  e32_rsrctab;
  438.     DWORD  e32_rsrccnt;
  439.     DWORD  e32_restab;
  440.     DWORD  e32_enttab;
  441.     DWORD  e32_dirtab;
  442.     DWORD  e32_dircnt;
  443.     DWORD  e32_fpagetab;
  444.     DWORD  e32_frectab;
  445.     DWORD  e32_impmod;
  446.     DWORD  e32_impmodcnt;
  447.     DWORD  e32_impproc;
  448.     DWORD  e32_pagesum;
  449.     DWORD  e32_datapage;
  450.     DWORD  e32_preload;
  451.     DWORD  e32_nrestab;
  452.     DWORD  e32_cbnrestab;
  453.     DWORD  e32_nressum;
  454.     DWORD  e32_autodata;
  455.     DWORD  e32_debuginfo;
  456.     DWORD  e32_debuglen;
  457.     DWORD  e32_instpreload;
  458.     DWORD  e32_instdemand;
  459.     DWORD  e32_heapsize;
  460.     BYTE   e32_res3[12];
  461.     DWORD  e32_winresoff;
  462.     DWORD  e32_winreslen;
  463.     WORD   e32_devid;
  464.     WORD   e32_ddkver;
  465.   };
  466.  
  467. #pragma pack(pop)
  468.  
  469. struct IMAGE_FILE_HEADER {
  470.     WORD    Machine;
  471.     WORD    NumberOfSections;
  472.     DWORD   TimeDateStamp;
  473.     DWORD   PointerToSymbolTable;
  474.     DWORD   NumberOfSymbols;
  475.     WORD    SizeOfOptionalHeader;
  476.     WORD    Characteristics;
  477. };
  478.  
  479. struct IMAGE_DATA_DIRECTORY {
  480.     DWORD   VirtualAddress;
  481.     DWORD   Size;
  482. };
  483.  
  484. struct IMAGE_OPTIONAL_HEADER {
  485.  
  486.     WORD    Magic;
  487.     BYTE    MajorLinkerVersion;
  488.     BYTE    MinorLinkerVersion;
  489.     DWORD   SizeOfCode;
  490.     DWORD   SizeOfInitializedData;
  491.     DWORD   SizeOfUninitializedData;
  492.     DWORD   AddressOfEntryPoint;
  493.     DWORD   BaseOfCode;
  494.     DWORD   BaseOfData;
  495.  
  496.     DWORD   ImageBase;
  497.     DWORD   SectionAlignment;
  498.     DWORD   FileAlignment;
  499.     WORD    MajorOperatingSystemVersion;
  500.     WORD    MinorOperatingSystemVersion;
  501.     WORD    MajorImageVersion;
  502.     WORD    MinorImageVersion;
  503.     WORD    MajorSubsystemVersion;
  504.     WORD    MinorSubsystemVersion;
  505.     DWORD   Win32VersionValue;
  506.     DWORD   SizeOfImage;
  507.     DWORD   SizeOfHeaders;
  508.     DWORD   CheckSum;
  509.     WORD    Subsystem;
  510.     WORD    DllCharacteristics;
  511.     DWORD   SizeOfStackReserve;
  512.     DWORD   SizeOfStackCommit;
  513.     DWORD   SizeOfHeapReserve;
  514.     DWORD   SizeOfHeapCommit;
  515.     DWORD   LoaderFlags;
  516.     DWORD   NumberOfRvaAndSizes;
  517.     IMAGE_DATA_DIRECTORY DataDirectory[16];
  518. };
  519.  
  520. typedef IMAGE_OPTIONAL_HEADER IMAGE_OPTIONAL_HEADER32;
  521.  
  522. struct IMAGE_ROM_OPTIONAL_HEADER {
  523.     WORD   Magic;
  524.     BYTE   MajorLinkerVersion;
  525.     BYTE   MinorLinkerVersion;
  526.     DWORD  SizeOfCode;
  527.     DWORD  SizeOfInitializedData;
  528.     DWORD  SizeOfUninitializedData;
  529.     DWORD  AddressOfEntryPoint;
  530.     DWORD  BaseOfCode;
  531.     DWORD  BaseOfData;
  532.     DWORD  BaseOfBss;
  533.     DWORD  GprMask;
  534.     DWORD  CprMask[4];
  535.     DWORD  GpValue;
  536. };
  537.  
  538. struct IMAGE_OPTIONAL_HEADER64 {
  539.     WORD        Magic;
  540.     BYTE        MajorLinkerVersion;
  541.     BYTE        MinorLinkerVersion;
  542.     DWORD       SizeOfCode;
  543.     DWORD       SizeOfInitializedData;
  544.     DWORD       SizeOfUninitializedData;
  545.     DWORD       AddressOfEntryPoint;
  546.     DWORD       BaseOfCode;
  547.     ULONGLONG   ImageBase;
  548.     DWORD       SectionAlignment;
  549.     DWORD       FileAlignment;
  550.     WORD        MajorOperatingSystemVersion;
  551.     WORD        MinorOperatingSystemVersion;
  552.     WORD        MajorImageVersion;
  553.     WORD        MinorImageVersion;
  554.     WORD        MajorSubsystemVersion;
  555.     WORD        MinorSubsystemVersion;
  556.     DWORD       Win32VersionValue;
  557.     DWORD       SizeOfImage;
  558.     DWORD       SizeOfHeaders;
  559.     DWORD       CheckSum;
  560.     WORD        Subsystem;
  561.     WORD        DllCharacteristics;
  562.     ULONGLONG   SizeOfStackReserve;
  563.     ULONGLONG   SizeOfStackCommit;
  564.     ULONGLONG   SizeOfHeapReserve;
  565.     ULONGLONG   SizeOfHeapCommit;
  566.     DWORD       LoaderFlags;
  567.     DWORD       NumberOfRvaAndSizes;
  568.     IMAGE_DATA_DIRECTORY DataDirectory[16];
  569. };
  570.  
  571. struct IMAGE_NT_HEADERS64 {
  572.     DWORD Signature;
  573.     IMAGE_FILE_HEADER FileHeader;
  574.     IMAGE_OPTIONAL_HEADER64 OptionalHeader;
  575. };
  576.  
  577. struct IMAGE_NT_HEADERS {
  578.     DWORD Signature;
  579.     IMAGE_FILE_HEADER FileHeader;
  580.     IMAGE_OPTIONAL_HEADER32 OptionalHeader;
  581. };
  582.  
  583. struct IMAGE_ROM_HEADERS {
  584.     IMAGE_FILE_HEADER FileHeader;
  585.     IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
  586. };
  587.  
  588. struct IMAGE_SECTION_HEADER {
  589.     BYTE    Name[8];
  590.     union {
  591.             DWORD   PhysicalAddress;
  592.             DWORD   VirtualSize;
  593.     } Misc;
  594.     DWORD   VirtualAddress;
  595.     DWORD   SizeOfRawData;
  596.     DWORD   PointerToRawData;
  597.     DWORD   PointerToRelocations;
  598.     DWORD   PointerToLinenumbers;
  599.     WORD    NumberOfRelocations;
  600.     WORD    NumberOfLinenumbers;
  601.     DWORD   Characteristics;
  602. };
  603.  
  604. struct IMAGE_SYMBOL {
  605.     union {
  606.         BYTE    ShortName[8];
  607.         struct {
  608.             DWORD   Short;
  609.             DWORD   Long;
  610.         } Name;
  611.         PBYTE   LongName[2];
  612.     } N;
  613.     DWORD   Value;
  614.     SHORT   SectionNumber;
  615.     WORD    Type;
  616.     BYTE    StorageClass;
  617.     BYTE    NumberOfAuxSymbols;
  618. };
  619. typedef IMAGE_SYMBOL  *PIMAGE_SYMBOL;
  620.  
  621. union IMAGE_AUX_SYMBOL {
  622.     struct {
  623.         DWORD    TagIndex;
  624.         union {
  625.             struct {
  626.                 WORD    Linenumber;
  627.                 WORD    Size;
  628.             } LnSz;
  629.            DWORD    TotalSize;
  630.         } Misc;
  631.         union {
  632.             struct {
  633.                 DWORD    PointerToLinenumber;
  634.                 DWORD    PointerToNextFunction;
  635.             } Function;
  636.             struct {
  637.                 WORD     Dimension[4];
  638.             } Array;
  639.         } FcnAry;
  640.         WORD    TvIndex;
  641.     } Sym;
  642.     struct {
  643.         BYTE    Name[18];
  644.     } File;
  645.     struct {
  646.         DWORD   Length;
  647.         WORD    NumberOfRelocations;
  648.         WORD    NumberOfLinenumbers;
  649.         DWORD   CheckSum;
  650.         SHORT   Number;
  651.         BYTE    Selection;
  652.     } Section;
  653. };
  654. typedef IMAGE_AUX_SYMBOL  *PIMAGE_AUX_SYMBOL;
  655.  
  656. //
  657. // I386 relocation types.
  658. //
  659. const   uint    IMAGE_REL_I386_ABSOLUTE             = 0x0000;
  660. const   uint    IMAGE_REL_I386_DIR16                = 0x0001;
  661. const   uint    IMAGE_REL_I386_REL16                = 0x0002;
  662. const   uint    IMAGE_REL_I386_DIR32                = 0x0006;
  663. const   uint    IMAGE_REL_I386_DIR32NB              = 0x0007;
  664. const   uint    IMAGE_REL_I386_SEG12                = 0x0009;
  665. const   uint    IMAGE_REL_I386_SECTION              = 0x000A;
  666. const   uint    IMAGE_REL_I386_SECREL               = 0x000B;
  667. const   uint    IMAGE_REL_I386_REL32                = 0x0014;
  668.  
  669. //
  670. // Storage classes.
  671. //
  672. const   uint    IMAGE_SYM_CLASS_END_OF_FUNCTION     = (BYTE )-1;
  673. const   uint    IMAGE_SYM_CLASS_NULL                = 0x0000;
  674. const   uint    IMAGE_SYM_CLASS_AUTOMATIC           = 0x0001;
  675. const   uint    IMAGE_SYM_CLASS_EXTERNAL            = 0x0002;
  676. const   uint    IMAGE_SYM_CLASS_STATIC              = 0x0003;
  677. const   uint    IMAGE_SYM_CLASS_REGISTER            = 0x0004;
  678. const   uint    IMAGE_SYM_CLASS_EXTERNAL_DEF        = 0x0005;
  679. const   uint    IMAGE_SYM_CLASS_LABEL               = 0x0006;
  680. const   uint    IMAGE_SYM_CLASS_UNDEFINED_LABEL     = 0x0007;
  681. const   uint    IMAGE_SYM_CLASS_MEMBER_OF_STRUCT    = 0x0008;
  682. const   uint    IMAGE_SYM_CLASS_ARGUMENT            = 0x0009;
  683. const   uint    IMAGE_SYM_CLASS_STRUCT_TAG          = 0x000A;
  684. const   uint    IMAGE_SYM_CLASS_MEMBER_OF_UNION     = 0x000B;
  685. const   uint    IMAGE_SYM_CLASS_UNION_TAG           = 0x000C;
  686. const   uint    IMAGE_SYM_CLASS_TYPE_DEFINITION     = 0x000D;
  687. const   uint    IMAGE_SYM_CLASS_UNDEFINED_STATIC    = 0x000E;
  688. const   uint    IMAGE_SYM_CLASS_ENUM_TAG            = 0x000F;
  689. const   uint    IMAGE_SYM_CLASS_MEMBER_OF_ENUM      = 0x0010;
  690. const   uint    IMAGE_SYM_CLASS_REGISTER_PARAM      = 0x0011;
  691. const   uint    IMAGE_SYM_CLASS_BIT_FIELD           = 0x0012;
  692.  
  693. struct IMAGE_RELOCATION {
  694.     union {
  695.         DWORD   VirtualAddress;
  696.         DWORD   RelocCount;
  697.     };
  698.     DWORD   SymbolTableIndex;
  699.     WORD    Type;
  700. };
  701. typedef IMAGE_RELOCATION  *PIMAGE_RELOCATION;
  702.  
  703. //
  704. // Based relocation types.
  705. //
  706.  
  707. const   uint    IMAGE_REL_BASED_ABSOLUTE            =  0;
  708. const   uint    IMAGE_REL_BASED_HIGH                =  1;
  709. const   uint    IMAGE_REL_BASED_LOW                 =  2;
  710. const   uint    IMAGE_REL_BASED_HIGHLOW             =  3;
  711. const   uint    IMAGE_REL_BASED_HIGHADJ             =  4;
  712. const   uint    IMAGE_REL_BASED_MIPS_JMPADDR        =  5;
  713. const   uint    IMAGE_REL_BASED_SECTION             =  6;
  714. const   uint    IMAGE_REL_BASED_REL32               =  7;
  715.  
  716. const   uint    IMAGE_REL_BASED_MIPS_JMPADDR16      =  9;
  717. const   uint    IMAGE_REL_BASED_IA64_IMM64          =  9;
  718. const   uint    IMAGE_REL_BASED_DIR64               = 10;
  719. const   uint    IMAGE_REL_BASED_HIGH3ADJ            = 11;
  720.  
  721. struct IMAGE_LINENUMBER {
  722.     union {
  723.         DWORD   SymbolTableIndex;
  724.         DWORD   VirtualAddress;
  725.     } Type;
  726.     WORD    Linenumber;
  727. };
  728. typedef IMAGE_LINENUMBER  *PIMAGE_LINENUMBER;
  729.  
  730. #pragma pack(pop)
  731.  
  732. struct IMAGE_BASE_RELOCATION {
  733.     DWORD   VirtualAddress;
  734.     DWORD   SizeOfBlock;
  735.  
  736. };
  737. typedef IMAGE_BASE_RELOCATION  * PIMAGE_BASE_RELOCATION;
  738.  
  739. struct IMAGE_ARCHIVE_MEMBER_HEADER {
  740.     BYTE     Name[16];
  741.     BYTE     Date[12];
  742.     BYTE     UserID[6];
  743.     BYTE     GroupID[6];
  744.     BYTE     Mode[8];
  745.     BYTE     Size[10];
  746.     BYTE     EndHeader[2];
  747. };
  748.  
  749. struct IMAGE_EXPORT_DIRECTORY {
  750.     DWORD   Characteristics;
  751.     DWORD   TimeDateStamp;
  752.     WORD    MajorVersion;
  753.     WORD    MinorVersion;
  754.     DWORD   Name;
  755.     DWORD   Base;
  756.     DWORD   NumberOfFunctions;
  757.     DWORD   NumberOfNames;
  758.     DWORD   AddressOfFunctions;
  759.     DWORD   AddressOfNames;
  760.     DWORD   AddressOfNameOrdinals;
  761. };
  762.  
  763. struct IMAGE_IMPORT_BY_NAME {
  764.     WORD    Hint;
  765.     BYTE    Name[1];
  766. };
  767.  
  768. typedef IMAGE_IMPORT_BY_NAME * PIMAGE_IMPORT_BY_NAME;
  769.  
  770. #pragma pack(push)
  771. #line 28 "N:\\VStudio\\VC98\\Include\\pshpack8.h"
  772. #pragma pack(8)
  773.  
  774. struct IMAGE_THUNK_DATA64 {
  775.     union {
  776.         PBYTE  ForwarderString;
  777.         PDWORD Function;
  778.         ULONGLONG Ordinal;
  779.         PIMAGE_IMPORT_BY_NAME  AddressOfData;
  780.     } u1;
  781. };
  782. typedef IMAGE_THUNK_DATA64 * PIMAGE_THUNK_DATA64;
  783.  
  784. #pragma pack(pop)
  785.  
  786. struct IMAGE_THUNK_DATA32 {
  787.     union {
  788.         PBYTE  ForwarderString;
  789.         PDWORD Function;
  790.         DWORD Ordinal;
  791.         PIMAGE_IMPORT_BY_NAME  AddressOfData;
  792.     } u1;
  793. };
  794. typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;
  795.  
  796. typedef void
  797. (__stdcall *PIMAGE_TLS_CALLBACK) (
  798.     PVOID DllHandle,
  799.     DWORD Reason,
  800.     PVOID Reserved
  801.     );
  802.  
  803. struct IMAGE_TLS_DIRECTORY64 {
  804.     ULONGLONG   StartAddressOfRawData;
  805.     ULONGLONG   EndAddressOfRawData;
  806.     PDWORD  AddressOfIndex;
  807.     PIMAGE_TLS_CALLBACK *AddressOfCallBacks;
  808.     DWORD   SizeOfZeroFill;
  809.     DWORD   Characteristics;
  810. };
  811. typedef IMAGE_TLS_DIRECTORY64 * PIMAGE_TLS_DIRECTORY64;
  812.  
  813. struct IMAGE_TLS_DIRECTORY32 {
  814.     DWORD   StartAddressOfRawData;
  815.     DWORD   EndAddressOfRawData;
  816.     PDWORD  AddressOfIndex;
  817.     PIMAGE_TLS_CALLBACK *AddressOfCallBacks;
  818.     DWORD   SizeOfZeroFill;
  819.     DWORD   Characteristics;
  820. };
  821. typedef IMAGE_TLS_DIRECTORY32 * PIMAGE_TLS_DIRECTORY32;
  822.  
  823. typedef IMAGE_THUNK_DATA32              IMAGE_THUNK_DATA;
  824. typedef PIMAGE_THUNK_DATA32             PIMAGE_THUNK_DATA;
  825.  
  826. typedef IMAGE_TLS_DIRECTORY32           IMAGE_TLS_DIRECTORY;
  827. typedef PIMAGE_TLS_DIRECTORY32          PIMAGE_TLS_DIRECTORY;
  828. #line 6031 "N:\\VStudio\\VC98\\Include\\winnt.h"
  829.  
  830. struct IMAGE_IMPORT_DESCRIPTOR {
  831.     union {
  832.         DWORD   Characteristics;
  833.         DWORD   OriginalFirstThunk;
  834.     };
  835.     DWORD   TimeDateStamp;
  836.  
  837.     DWORD   ForwarderChain;
  838.     DWORD   Name;
  839.     DWORD   FirstThunk;
  840. };
  841. typedef IMAGE_IMPORT_DESCRIPTOR  *PIMAGE_IMPORT_DESCRIPTOR;
  842.  
  843. struct IMAGE_BOUND_IMPORT_DESCRIPTOR {
  844.     DWORD   TimeDateStamp;
  845.     WORD    OffsetModuleName;
  846.     WORD    NumberOfModuleForwarderRefs;
  847.  
  848. };
  849.  
  850. struct IMAGE_BOUND_FORWARDER_REF {
  851.     DWORD   TimeDateStamp;
  852.     WORD    OffsetModuleName;
  853.     WORD    Reserved;
  854. };
  855.  
  856. struct IMAGE_STUB_DIRECTORY {
  857.     DWORD   SecondaryImportAddressTable;
  858.     WORD    ExpectedISA[2];
  859.     DWORD   StubAddressTable[2];
  860. };
  861.  
  862. struct IMAGE_RESOURCE_DIRECTORY {
  863.     DWORD   Characteristics;
  864.     DWORD   TimeDateStamp;
  865.     WORD    MajorVersion;
  866.     WORD    MinorVersion;
  867.     WORD    NumberOfNamedEntries;
  868.     WORD    NumberOfIdEntries;
  869.  
  870. };
  871.  
  872. struct IMAGE_RESOURCE_DIRECTORY_ENTRY {
  873.     union {
  874.         struct {
  875.             DWORD NameOffset:31;
  876.             DWORD NameIsString:1;
  877.         }x;
  878.         DWORD   Name;
  879.         WORD    Id;
  880.     };
  881.     union {
  882.         DWORD   OffsetToData;
  883.         struct {
  884.             DWORD   OffsetToDirectory:31;
  885.             DWORD   DataIsDirectory:1;
  886.         }y;
  887.     };
  888. };
  889.  
  890. struct IMAGE_RESOURCE_DIRECTORY_STRING {
  891.     WORD    Length;
  892.     CHAR    NameString[ 1 ];
  893. };
  894.  
  895. struct IMAGE_RESOURCE_DIR_STRING_U {
  896.     WORD    Length;
  897.     WCHAR   NameString[ 1 ];
  898. };
  899.  
  900. struct IMAGE_RESOURCE_DATA_ENTRY {
  901.     DWORD   OffsetToData;
  902.     DWORD   Size;
  903.     DWORD   CodePage;
  904.     DWORD   Reserved;
  905. };
  906.  
  907. struct IMAGE_LOAD_CONFIG_DIRECTORY {
  908.     DWORD   Characteristics;
  909.     DWORD   TimeDateStamp;
  910.     WORD    MajorVersion;
  911.     WORD    MinorVersion;
  912.     DWORD   GlobalFlagsClear;
  913.     DWORD   GlobalFlagsSet;
  914.     DWORD   CriticalSectionDefaultTimeout;
  915.     DWORD   DeCommitFreeBlockThreshold;
  916.     DWORD   DeCommitTotalFreeThreshold;
  917.     PVOID   LockPrefixTable;
  918.     DWORD   MaximumAllocationSize;
  919.     DWORD   VirtualMemoryThreshold;
  920.     DWORD   ProcessHeapFlags;
  921.     DWORD   ProcessAffinityMask;
  922.     WORD    CSDVersion;
  923.     WORD    Reserved1;
  924.     PVOID   EditList;
  925.     DWORD   Reserved[ 1 ];
  926. };
  927.  
  928. struct IMAGE_IA64_RUNTIME_FUNCTION_ENTRY {
  929.     DWORD BeginAddress;
  930.     DWORD EndAddress;
  931.     DWORD UnwindInfoAddress;
  932. };
  933.  
  934. struct IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
  935.     DWORD BeginAddress;
  936.     DWORD EndAddress;
  937.     DWORD ExceptionHandler;
  938.     DWORD HandlerData;
  939.     DWORD PrologEndAddress;
  940. };
  941.  
  942. typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY * PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
  943.  
  944. struct IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
  945.     ULONGLONG BeginAddress;
  946.     ULONGLONG EndAddress;
  947.     ULONGLONG ExceptionHandler;
  948.     ULONGLONG HandlerData;
  949.     ULONGLONG PrologEndAddress;
  950. };
  951.  
  952. typedef  IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY*PIMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
  953.  
  954. struct IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
  955.     DWORD FuncStart;
  956.     DWORD PrologLen : 8;
  957.     DWORD FuncLen : 22;
  958.     DWORD ThirtyTwoBit : 1;
  959.     DWORD ExceptionFlag : 1;
  960. };
  961.  
  962. #line 6263 "N:\\VStudio\\VC98\\Include\\winnt.h"
  963.  
  964. typedef  IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY  IMAGE_RUNTIME_FUNCTION_ENTRY;
  965. typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
  966.  
  967. #line 6268 "N:\\VStudio\\VC98\\Include\\winnt.h"
  968.  
  969. struct IMAGE_DEBUG_DIRECTORY {
  970.     DWORD   Characteristics;
  971.     DWORD   TimeDateStamp;
  972.     WORD    MajorVersion;
  973.     WORD    MinorVersion;
  974.     DWORD   Type;
  975.     DWORD   SizeOfData;
  976.     DWORD   AddressOfRawData;
  977.     DWORD   PointerToRawData;
  978. };
  979.  
  980. struct IMAGE_COFF_SYMBOLS_HEADER {
  981.     DWORD   NumberOfSymbols;
  982.     DWORD   LvaToFirstSymbol;
  983.     DWORD   NumberOfLinenumbers;
  984.     DWORD   LvaToFirstLinenumber;
  985.     DWORD   RvaToFirstByteOfCode;
  986.     DWORD   RvaToLastByteOfCode;
  987.     DWORD   RvaToFirstByteOfData;
  988.     DWORD   RvaToLastByteOfData;
  989. };
  990.  
  991. struct FPO_DATA {
  992.     DWORD       ulOffStart;
  993.     DWORD       cbProcSize;
  994.     DWORD       cdwLocals;
  995.     WORD        cdwParams;
  996.     WORD        cbProlog : 8;
  997.     WORD        cbRegs   : 3;
  998.     WORD        fHasSEH  : 1;
  999.     WORD        fUseBP   : 1;
  1000.     WORD        reserved : 1;
  1001.     WORD        cbFrame  : 2;
  1002. };
  1003.  
  1004. struct IMAGE_DEBUG_MISC {
  1005.     DWORD       DataType;
  1006.     DWORD       Length;
  1007.  
  1008.     BOOLEAN     Unicode;
  1009.     BYTE        Reserved[ 3 ];
  1010.     BYTE        Data[ 1 ];
  1011. };
  1012.  
  1013. struct IMAGE_FUNCTION_ENTRY {
  1014.     DWORD   StartingAddress;
  1015.     DWORD   EndingAddress;
  1016.     DWORD   EndOfPrologue;
  1017. };
  1018.  
  1019. #line 6363 "N:\\VStudio\\VC98\\Include\\winnt.h"
  1020. struct IMAGE_FUNCTION_ENTRY64 {
  1021.     ULONGLONG   StartingAddress;
  1022.     ULONGLONG   EndingAddress;
  1023.     ULONGLONG   EndOfPrologue;
  1024. };
  1025.  
  1026. struct IMAGE_SEPARATE_DEBUG_HEADER {
  1027.     WORD        Signature;
  1028.     WORD        Flags;
  1029.     WORD        Machine;
  1030.     WORD        Characteristics;
  1031.     DWORD       TimeDateStamp;
  1032.     DWORD       CheckSum;
  1033.     DWORD       ImageBase;
  1034.     DWORD       SizeOfImage;
  1035.     DWORD       NumberOfSections;
  1036.     DWORD       ExportedNamesSize;
  1037.     DWORD       DebugDirectorySize;
  1038.     DWORD       SectionAlignment;
  1039.     DWORD       Reserved[2];
  1040. };
  1041.  
  1042. struct ImageArchitectureHeader {
  1043.     unsigned int AmaskValue: 1;
  1044.  
  1045.     int :7;
  1046.     unsigned int AmaskShift: 8;
  1047.     int :16;
  1048.     DWORD FirstEntryRVA;
  1049. };
  1050.  
  1051. struct ImageArchitectureEntry {
  1052.     DWORD FixupInstRVA;
  1053.     DWORD NewInst;
  1054. };
  1055.  
  1056. #pragma pack(pop)
  1057.  
  1058. struct IMPORT_OBJECT_HEADER {
  1059.     WORD    Sig1;
  1060.     WORD    Sig2;
  1061.     WORD    Version;
  1062.     WORD    Machine;
  1063.     DWORD   TimeDateStamp;
  1064.     DWORD   SizeOfData;
  1065.  
  1066.     union {
  1067.         WORD    Ordinal;
  1068.         WORD    Hint;
  1069.     };
  1070.  
  1071.     WORD    Type : 2;
  1072.     WORD    NameType : 3;
  1073.     WORD    Reserved : 11;
  1074. };
  1075.  
  1076. enum IMPORT_OBJECT_TYPE
  1077. {
  1078.     IMPORT_OBJECT_CODE = 0,
  1079.     IMPORT_OBJECT_DATA = 1,
  1080.     IMPORT_OBJECT_CONST = 2,
  1081. };
  1082.  
  1083. enum IMPORT_OBJECT_NAME_TYPE
  1084. {
  1085.     IMPORT_OBJECT_ORDINAL = 0,
  1086.     IMPORT_OBJECT_NAME = 1,
  1087.     IMPORT_OBJECT_NAME_NO_PREFIX = 2,
  1088.     IMPORT_OBJECT_NAME_UNDECORATE = 3,
  1089.  
  1090. };
  1091.  
  1092. struct SECURITY_ATTRIBUTES {
  1093.     DWORD nLength;
  1094.     LPVOID lpSecurityDescriptor;
  1095.     BOOL bInheritHandle;
  1096. };
  1097. typedef SECURITY_ATTRIBUTES *LPSECURITY_ATTRIBUTES;
  1098.  
  1099. struct HKEY__
  1100. {
  1101.     int unused;
  1102. };
  1103. typedef HKEY__ * HKEY;
  1104. typedef HKEY   *PHKEY;
  1105.  
  1106. /****************************************************************************/
  1107. /*                           file I/O, memory alloc, etc.                   */
  1108. /****************************************************************************/
  1109.  
  1110. const uint PAGE_NOACCESS         = 0x01;
  1111. const uint PAGE_READONLY         = 0x02;
  1112. const uint PAGE_READWRITE        = 0x04;
  1113. const uint PAGE_WRITECOPY        = 0x08;
  1114. const uint PAGE_EXECUTE          = 0x10;
  1115. const uint PAGE_EXECUTE_READ     = 0x20;
  1116. const uint PAGE_EXECUTE_READWRITE= 0x40;
  1117. const uint PAGE_EXECUTE_WRITECOPY= 0x80;
  1118. const uint PAGE_GUARD           = 0x100;
  1119. const uint PAGE_NOCACHE         = 0x200;
  1120. const uint PAGE_WRITECOMBINE    = 0x400;
  1121. const uint MEM_COMMIT          = 0x1000;
  1122. const uint MEM_RESERVE         = 0x2000;
  1123. const uint MEM_DECOMMIT        = 0x4000;
  1124. const uint MEM_RELEASE         = 0x8000;
  1125. const uint MEM_FREE           = 0x10000;
  1126. const uint MEM_PRIVATE        = 0x20000;
  1127. const uint MEM_MAPPED         = 0x40000;
  1128. const uint MEM_RESET          = 0x80000;
  1129. const uint MEM_TOP_DOWN      = 0x100000;
  1130.  
  1131. const uint CREATE_NEW        =  1;
  1132. const uint CREATE_ALWAYS     =  2;
  1133. const uint OPEN_EXISTING     =  3;
  1134. const uint OPEN_ALWAYS       =  4;
  1135. const uint TRUNCATE_EXISTING =  5;
  1136.  
  1137. const uint FILE_FLAG_WRITE_THROUGH      = 0x80000000;
  1138. const uint FILE_FLAG_OVERLAPPED         = 0x40000000;
  1139. const uint FILE_FLAG_NO_BUFFERING       = 0x20000000;
  1140. const uint FILE_FLAG_RANDOM_ACCESS      = 0x10000000;
  1141. const uint FILE_FLAG_SEQUENTIAL_SCAN    = 0x08000000;
  1142. const uint FILE_FLAG_DELETE_ON_CLOSE    = 0x04000000;
  1143. const uint FILE_FLAG_BACKUP_SEMANTICS   = 0x02000000;
  1144. const uint FILE_FLAG_POSIX_SEMANTICS    = 0x01000000;
  1145. const uint FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;
  1146. const uint FILE_FLAG_OPEN_NO_RECALL     = 0x00100000;
  1147.  
  1148. [sysimport(dll="kernel32.dll", name="CreateFileA")]
  1149. HANDLE  CreateFileA(
  1150.     LPCSTR lpFileName,
  1151.     DWORD dwDesiredAccess,
  1152.     DWORD dwShareMode,
  1153.     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  1154.     DWORD dwCreationDisposition,
  1155.     DWORD dwFlagsAndAttributes,
  1156.     HANDLE hTemplateFile
  1157.     );
  1158.  
  1159. [sysimport(dll="kernel32.dll", name="ReadFile")]
  1160. BOOL    ReadFile(
  1161.     HANDLE hFile,
  1162.     LPVOID lpBuffer,
  1163.     DWORD nNumberOfBytesToRead,
  1164.     LPDWORD lpNumberOfBytesRead,
  1165.     LPVOID  lpOverlapped
  1166.     );
  1167.  
  1168. [sysimport(dll="kernel32.dll", name="CreateFileMappingA")]
  1169. HANDLE  CreateFileMappingA(
  1170.     HANDLE hFile,
  1171.     LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
  1172.     DWORD flProtect,
  1173.     DWORD dwMaximumSizeHigh,
  1174.     DWORD dwMaximumSizeLow,
  1175.     LPCSTR lpName
  1176.     );
  1177.  
  1178. [sysimport(dll="kernel32.dll", name="MapViewOfFileEx")]
  1179. LPVOID  MapViewOfFileEx(
  1180.     HANDLE hFileMappingObject,
  1181.     DWORD dwDesiredAccess,
  1182.     DWORD dwFileOffsetHigh,
  1183.     DWORD dwFileOffsetLow,
  1184.     DWORD dwNumberOfBytesToMap,
  1185.     LPVOID lpBaseAddress
  1186.     );
  1187.  
  1188. [sysimport(dll="kernel32.dll", name="VirtualAlloc")]
  1189. LPVOID  VirtualAlloc(
  1190.     LPVOID lpAddress,
  1191.     DWORD dwSize,
  1192.     DWORD flAllocationType,
  1193.     DWORD flProtect
  1194.     );
  1195.  
  1196. [sysimport(dll="kernel32.dll", name="VirtualFree")]
  1197. BOOL    VirtualFree(
  1198.     LPVOID lpAddress,
  1199.     DWORD dwSize,
  1200.     DWORD dwFreeType
  1201.     );
  1202.  
  1203. /****************************************************************************/
  1204. /*                            synchronization                               */
  1205. /****************************************************************************/
  1206.  
  1207. const  unsigned WAIT_TIMEOUT        = 0x102;
  1208. const  unsigned WAIT_IO_COMPLETION  = 0x0C0;
  1209.  
  1210. struct OVERLAPPED
  1211. {
  1212.     DWORD   Internal;
  1213.     DWORD   InternalHigh;
  1214.     DWORD   Offset;
  1215.     DWORD   OffsetHigh;
  1216.     HANDLE  hEvent;
  1217. };
  1218.  
  1219. struct CRITICAL_SECTION
  1220. {
  1221.     void *  DebugInfo;
  1222.     LONG    LockCount;
  1223.     LONG    RecursionCount;
  1224.     HANDLE  OwningThread;
  1225.     HANDLE  LockSemaphore;
  1226.     DWORD   SpinCount;
  1227. };
  1228.  
  1229. /****************************************************************************/
  1230. /*                                misc                                      */
  1231. /****************************************************************************/
  1232.  
  1233. [sysimport(dll="kernel32.dll", name="RaiseException")]
  1234. VOID    RaiseException(
  1235.     DWORD dwExceptionCode,
  1236.     DWORD dwExceptionFlags,
  1237.     DWORD nNumberOfArguments,
  1238.     DWORD *lpArguments
  1239.     );
  1240.  
  1241. [sysimport(dll="kernel32.dll", name="GetSystemDirectoryA")]
  1242. UINT    GetSystemDirectoryA(
  1243.     LPSTR lpBuffer,
  1244.     UINT uSize
  1245.     );
  1246.  
  1247. [sysimport(dll="kernel32.dll", name="SearchPathA")]
  1248. DWORD   SearchPathA(
  1249.     LPCSTR lpPath,
  1250.     LPCSTR lpFileName,
  1251.     LPCSTR lpExtension,
  1252.     DWORD nBufferLength,
  1253.     LPSTR lpBuffer,
  1254.     LPSTR *lpFilePart
  1255.     );
  1256.  
  1257. [sysimport(dll="kernel32.dll", name="GetLastError")]
  1258. DWORD   GetLastError();
  1259.  
  1260. [sysimport(dll="kernel32.dll", name="CloseHandle")]
  1261. BOOL    CloseHandle(HANDLE hObject);
  1262.  
  1263. [sysimport(dll="kernel32.dll", name="GetCurrentProcessId")]
  1264. DWORD   GetCurrentProcessId();
  1265.  
  1266. const   uint    STATUS_STACK_OVERFLOW          = 0xC00000FD;
  1267.  
  1268. /****************************************************************************/
  1269. /*                               Registry                                   */
  1270. /****************************************************************************/
  1271.  
  1272. const   uint    REG_NONE                       = 0;
  1273. const   uint    REG_SZ                         = 1;
  1274. const   uint    REG_EXPAND_SZ                  = 2;
  1275.  
  1276. const   uint    REG_BINARY                     = 3;
  1277. const   uint    REG_DWORD                      = 4;
  1278. const   uint    REG_DWORD_LITTLE_ENDIAN        = 4;
  1279. const   uint    REG_DWORD_BIG_ENDIAN           = 5;
  1280. const   uint    REG_LINK                       = 6;
  1281. const   uint    REG_MULTI_SZ                   = 7;
  1282. const   uint    REG_RESOURCE_LIST              = 8;
  1283. const   uint    REG_FULL_RESOURCE_DESCRIPTOR   = 9;
  1284. const   uint    REG_RESOURCE_REQUIREMENTS_LIST = 10;
  1285.  
  1286. const   uint    KEY_QUERY_VALUE                = 0x0001;
  1287. const   uint    KEY_SET_VALUE                  = 0x0002;
  1288. const   uint    KEY_CREATE_SUB_KEY             = 0x0004;
  1289. const   uint    KEY_ENUMERATE_SUB_KEYS         = 0x0008;
  1290. const   uint    KEY_NOTIFY                     = 0x0010;
  1291. const   uint    KEY_CREATE_LINK                = 0x0020;
  1292.  
  1293. const   HKEY    HKEY_CLASSES_ROOT              = (HKEY)0x80000000;
  1294. const   HKEY    HKEY_CURRENT_USER              = (HKEY)0x80000001;
  1295. const   HKEY    HKEY_LOCAL_MACHINE             = (HKEY)0x80000002;
  1296. const   HKEY    HKEY_USERS                     = (HKEY)0x80000003;
  1297. const   HKEY    HKEY_PERFORMANCE_DATA          = (HKEY)0x80000004;
  1298. const   HKEY    HKEY_CURRENT_CONFIG            = (HKEY)0x80000005;
  1299. const   HKEY    HKEY_DYN_DATA                  = (HKEY)0x80000006;
  1300.  
  1301. [sysimport(dll="kernel32.dll", name="RegOpenKeyA")]
  1302. LONG    RegOpenKeyExA(HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);
  1303.  
  1304. [sysimport(dll="kernel32.dll", name="RegQueryValueA")]
  1305. LONG    RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
  1306.  
  1307. [sysimport(dll="kernel32.dll", name="RegCloseKey")]
  1308. LONG    RegCloseKey(HKEY hKey);
  1309.  
  1310. /****************************************************************************/
  1311. /*                                 COM                                      */
  1312. /****************************************************************************/
  1313.  
  1314. struct   IUnknown
  1315. {
  1316. public:
  1317.  
  1318.     virtual abstract HRESULT __stdcall QueryInterface(INOUT const IID REF riid, void  * *ppvObject);
  1319.     virtual abstract ULONG   __stdcall AddRef();
  1320.     virtual abstract ULONG   __stdcall Release();
  1321. };
  1322.  
  1323. enum CLSCTX
  1324. {
  1325.     CLSCTX_INPROC_SERVER    = 0x1,
  1326.     CLSCTX_INPROC_HANDLER   = 0x2,
  1327.     CLSCTX_LOCAL_SERVER     = 0x4,
  1328.     CLSCTX_INPROC_SERVER16  = 0x8,
  1329.     CLSCTX_REMOTE_SERVER    = 0x10,
  1330.     CLSCTX_INPROC_HANDLER16 = 0x20,
  1331.     CLSCTX_INPROC_SERVERX86 = 0x40,
  1332.     CLSCTX_INPROC_HANDLERX86        = 0x80,
  1333.     CLSCTX_ESERVER_HANDLER  = 0x100
  1334. };
  1335.  
  1336. typedef IUnknown  * LPUNKNOWN;
  1337.  
  1338. struct  IStream     {};
  1339.  
  1340. [sysimport(dll="ole32.dll", name="CoInitialize")]
  1341. HRESULT    CoInitialize(LPVOID pvReserved);
  1342.  
  1343. [sysimport(dll="ole32.dll", name="CoUninitialize")]
  1344. void     CoUninitialize();
  1345.  
  1346. [sysimport(dll="ole32.dll", name="CoCreateInstance")]
  1347. HRESULT     CoCreateInstance(
  1348.                 void * rclsid,
  1349.                 LPUNKNOWN pUnkOuter,
  1350.                 DWORD dwClsContext,
  1351.                 void * riid,
  1352.                 LPVOID * ppv);
  1353.  
  1354. /****************************************************************************/
  1355.  
  1356. inline
  1357. bool                FAILED(HRESULT Status)
  1358. {
  1359.     return  (Status < 0);
  1360. }
  1361.  
  1362. /****************************************************************************/
  1363.