home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 24 / CD_ASCQ_24_0995.iso / dos / prg / dsik205 / dsik.dat / INCLUDE / PE.H < prev    next >
C/C++ Source or Header  |  1995-04-10  |  11KB  |  216 lines

  1. /****************************************************************************
  2. *
  3. *                   Digital Sound Interface Kit (DSIK)
  4. *                            Version 2.00
  5. *
  6. *                           by Carlos Hasan
  7. *
  8. * Filename:     pe.h
  9. * Version:      Revision 1.0 (EXPERIMENTAL)
  10. *
  11. * Language:     WATCOM C
  12. * Environment:  IBM PC (DOS/4GW)
  13. *
  14. * Description:  Portable Executable (PE) DLL loader header file.
  15. *
  16. * Revision History:
  17. * ----------------
  18. *
  19. * Revision 1.0  94/12/18  14:33:14  chv
  20. * Initial revision
  21. *
  22. ****************************************************************************/
  23.  
  24. #ifndef __PE_H
  25. #define __PE_H
  26.  
  27. #ifndef __AUDIO_H
  28. #include <audio.h>
  29. #endif
  30.  
  31. /* DOS/PE executable signatures */
  32. #define DOS_MAGIC       0x5A4D      /* MS-DOS executable signature      */
  33. #define PE_MAGIC        0x4550      /* COFF/PE executable signature     */
  34.  
  35. /* COFF file header bit flags */
  36. #define PE_F_RELFLG     0x0001      /* relocation info stripped         */
  37. #define PE_F_EXEC       0x0002      /* file is executable               */
  38. #define PE_F_LNNO       0x0004      /* line number info stripped        */
  39. #define PE_F_LSYMS      0x0008      /* local symbols stripped           */
  40. #define PE_F_AR16WR     0x0040      /* 16-bit architecture              */
  41. #define PE_F_SWAPLO     0x0080      /* low bytes swapped                */
  42. #define PE_F_AR32WR     0x0100      /* 32-bit architecture              */
  43. #define PE_F_NODBG      0x0200      /* debug info stripped              */
  44. #define PE_F_SYS        0x1000      /* system executable                */
  45. #define PE_F_DLL        0x2000      /* dynamic link library             */
  46. #define PE_F_SWAPHI     0x8000      /* high bytes swapped               */
  47.  
  48. /* COFF file header machine type */
  49. #define PE_M_I386       0x014C      /* intel 80386 machine              */
  50. #define PE_M_R3000      0x0162      /* RISC/3000 machine                */
  51. #define PE_M_R4000      0x0166      /* RISC/4000 machine                */
  52. #define PE_M_ALPHA      0x0184      /* ALPHA machine                    */
  53.  
  54. /* COFF section header names */
  55. #define PE_TEXT         ".text"     /* text section name                */
  56. #define PE_DATA         ".data"     /* data section name                */
  57. #define PE_BSS          ".bss"      /* bss section name                 */
  58. #define PE_IDATA        ".idata"    /* import data section name         */
  59. #define PE_EDATA        ".edata"    /* export data section name         */
  60. #define PE_RELOC        ".reloc"    /* relocation section name          */
  61.  
  62. /* COFF section bit flags */
  63. #define PE_S_TEXT       0x00000020  /* text segment                     */
  64. #define PE_S_DATA       0x00000040  /* data segment                     */
  65. #define PE_S_BSS        0x00000080  /* bss segment                      */
  66. #define PE_S_DISCARD    0x02000000  /* section is discardable           */
  67. #define PE_S_CACHED     0x04000000  /* section cannot be cached         */
  68. #define PE_S_PAGEABLE   0x08000000  /* section is not pageable          */
  69. #define PE_S_SHARED     0x10000000  /* section is shared                */
  70. #define PE_S_EXEC       0x20000000  /* executable section               */
  71. #define PE_S_READ       0x40000000  /* readable section                 */
  72. #define PE_S_WRITE      0x80000000  /* writable section                 */
  73.  
  74. /* COFF relocation section types */
  75. #define PE_R_MASK       0xF000      /* relocation type bitmask          */
  76. #define PE_R_OFFMASK    0x0FFF      /* relocation offset bitmask        */
  77. #define PE_R_ABS        0x0000      /* absolute relocation              */
  78. #define PE_R_HIGH       0x1000      /* high word relocation             */
  79. #define PE_R_LOW        0x2000      /* low word relocation              */
  80. #define PE_R_HIGHLOW    0x3000      /* 32-bit relocation                */
  81.  
  82. /* basic data types */
  83. typedef unsigned char   BYTE;       /* 8-bit integer value              */
  84. typedef unsigned short  WORD;       /* 16-bit integer value             */
  85. typedef unsigned long   DWORD;      /* 32-bit integer value             */
  86.  
  87. /* MS-DOS executable header */
  88. typedef struct {
  89.     WORD    Magic;                  /* magic number                     */
  90.     WORD    LastPage;               /* bytes on last page of file       */
  91.     WORD    NumPages;               /* pages in file                    */
  92.     WORD    NumRels;                /* number of relocations            */
  93.     WORD    HdrSize;                /* size of header in paragraphs     */
  94.     WORD    MinAlloc;               /* minimum extra paragraphs needed  */
  95.     WORD    MaxAlloc;               /* maximum extra paragraphs needed  */
  96.     WORD    SS;                     /* initial (relative) SS value      */
  97.     WORD    SP;                     /* initial SP value                 */
  98.     WORD    Checksum;               /* file checksum                    */
  99.     WORD    IP;                     /* initial IP value                 */
  100.     WORD    CS;                     /* initial (relative) CS value      */
  101.     WORD    RelTabPtr;              /* file address of relocation table */
  102.     WORD    OvlNo;                  /* overlay number                   */
  103.     WORD    Pad1[4];                /* reserved words                   */
  104.     WORD    OEMId;                  /* OEM identifier                   */
  105.     WORD    OEMInfo;                /* OEM information                  */
  106.     WORD    Pad2[10];               /* reserveddwords                   */
  107.     DWORD   NewHdrPtr;              /* file address of new exe header   */
  108. } DOSHDR;
  109.  
  110. /* COFF/PE file header */
  111. typedef struct {
  112.     DWORD   Magic;                  /* magic number                     */
  113.     WORD    Machine;                /* machine number                   */
  114.     WORD    NumScns;                /* number of sections               */
  115.     DWORD   TimeDate;               /* time/date stamp                  */
  116.     DWORD   SymTabPtr;              /* symbol table pointer             */
  117.     DWORD   NumSyms;                /* number of symbols                */
  118.     WORD    NtHdrSize;              /* size of optional header          */
  119.     WORD    Flags;                  /* flags                            */
  120. } PEHDR;
  121.  
  122. /* COFF/PE optional Windows NT file header */
  123. typedef struct {
  124.     WORD    Magic;                  /* type of file                     */
  125.     WORD    VStamp;                 /* linker version stamp             */
  126.     DWORD   TextSize;               /* text size in bytes               */
  127.     DWORD   DataSize;               /* initialized data size in bytes   */
  128.     DWORD   BssSize;                /* uninitialized data size in bytes */
  129.     DWORD   EntryPtr;               /* entry point                      */
  130.     DWORD   TextBase;               /* base of text used for this file  */
  131.     DWORD   DataBase;               /* base of data used for this file  */
  132.     DWORD   ImageBase;              /* base of the file image           */
  133.     DWORD   ScnAlign;               /* section alignment                */
  134.     DWORD   FileAlign;              /* file alignment                   */
  135.     DWORD   OsVersion;              /* operating system version stamp   */
  136.     DWORD   UserVersion;            /* user version stamp               */
  137.     DWORD   SubSysVersion;          /* subsystem version stamp          */
  138.     DWORD   Pad;                    /* reserved                         */
  139.     DWORD   ImageSize;              /* size of image file               */
  140.     DWORD   HdrSize;                /* size of executable headers       */
  141.     DWORD   Checksum;               /* file checksum                    */
  142.     WORD    SubSys;                 /* subsystem identifier             */
  143.     WORD    DLLFlags;               /* DLL flags                        */
  144.     DWORD   StackReserve;           /* size of stack reserve            */
  145.     DWORD   StackCommit;            /* size of stack commit             */
  146.     DWORD   HeapReserve;            /* size of heap reserve             */
  147.     DWORD   HeapCommit;             /* size of heap commit              */
  148.     DWORD   LoaderFlags;            /* loader flags                     */
  149.     DWORD   NumRVAs;                /* number of directory's entries    */
  150. } PENTHDR;
  151.  
  152. /* COFF/PE section header */
  153. typedef struct {
  154.     char    Name[8];                /* section name                     */
  155.     DWORD   PAddr;                  /* physical address                 */
  156.     DWORD   VAddr;                  /* virtual address                  */
  157.     DWORD   Size;                   /* section size                     */
  158.     DWORD   ScnPtr;                 /* section file ptr                 */
  159.     DWORD   RelPtr;                 /* relocation file ptr              */
  160.     DWORD   LnNoPtr;                /* line numbers file ptr            */
  161.     WORD    NumRels;                /* number of relocation entries     */
  162.     WORD    NumLnNo;                /* number of line number entries    */
  163.     DWORD   Flags;                  /* flags                            */
  164. } PESCN;
  165.  
  166. /* COFF/PE relocation section header */
  167. typedef struct {
  168.     DWORD   VAddr;                  /* virtual address of item          */
  169.     DWORD   Size;                   /* item size in bytes               */
  170.     WORD    Type[1];                /* relocation type                  */
  171. } PERLC;
  172.  
  173. /* COFF/PE export section directory */
  174. typedef struct {
  175.     DWORD   Flags;                  /* flags                            */
  176.     DWORD   TimeDate;               /* time/date stamp                  */
  177.     DWORD   VStamp;                 /* version stamp                    */
  178.     DWORD   NamePtr;                /* module name pointer              */
  179.     DWORD   OrdBase;                /* ordinal base number              */
  180.     DWORD   NumFuncs;               /* number of functions              */
  181.     DWORD   NumNames;               /* number of names                  */
  182.     DWORD   FuncTabPtr;             /* function table pointer           */
  183.     DWORD   NameTabPtr;             /* name table pointer               */
  184.     DWORD   OrdTabPtr;              /* ordinal table pointer            */
  185. } PEEXP;
  186.  
  187. /* COFF/PE DLL structures */
  188. typedef struct {
  189.     PEHDR   Hdr;
  190.     PENTHDR NtHdr;
  191.     PESCN   *Scn;
  192. } PEDLL;
  193.  
  194. typedef PEDLL *HANDLE;
  195. typedef void *(*pascal FARPROC)(void);
  196.  
  197. #ifdef  __cplusplus
  198. extern "C" {
  199. #endif
  200.  
  201. HANDLE  dLoadLibrary(char *Filename);
  202. void    dFreeLibrary(HANDLE Handle);
  203. FARPROC dGetProcAddress(HANDLE Handle, char *ProcName);
  204. Driver *dLoadDriver(SoundCard *SC);
  205.  
  206. #ifdef  __cplusplus
  207. }
  208. #endif
  209.  
  210. #pragma aux dLoadLibrary    "_*" parm [eax];
  211. #pragma aux dFreeLibrary    "_*" parm [eax];
  212. #pragma aux dGetProcAddress "_*" parm [eax] [edx];
  213. #pragma aux dLoadDriver     "_*" parm [eax];
  214.  
  215. #endif
  216.