⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmdresource.cpp

📁 Programming the Microsoft Windows driver model.2nd 随书光盘。内有很多作者送的实用工具和随书源码。WDM编程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    DWORD       AddressOfEntryPoint;

    DWORD       BaseOfCode;

    ULONGLONG   ImageBase;

    DWORD       SectionAlignment;

    DWORD       FileAlignment;

    WORD        MajorOperatingSystemVersion;

    WORD        MinorOperatingSystemVersion;

    WORD        MajorImageVersion;

    WORD        MinorImageVersion;

    WORD        MajorSubsystemVersion;

    WORD        MinorSubsystemVersion;

    DWORD       Win32VersionValue;

    DWORD       SizeOfImage;

    DWORD       SizeOfHeaders;

    DWORD       CheckSum;

    WORD        Subsystem;

    WORD        DllCharacteristics;

    ULONGLONG   SizeOfStackReserve;

    ULONGLONG   SizeOfStackCommit;

    ULONGLONG   SizeOfHeapReserve;

    ULONGLONG   SizeOfHeapCommit;

    DWORD       LoaderFlags;

    DWORD       NumberOfRvaAndSizes;

    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];

} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64;



#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER      56

#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER      28

#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER    224

#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER    240



#define IMAGE_NT_OPTIONAL_HDR32_MAGIC      0x10b

#define IMAGE_NT_OPTIONAL_HDR64_MAGIC      0x20b

#define IMAGE_ROM_OPTIONAL_HDR_MAGIC       0x107



#ifdef _WIN64

typedef IMAGE_OPTIONAL_HEADER64             IMAGE_OPTIONAL_HEADER;

typedef PIMAGE_OPTIONAL_HEADER64            PIMAGE_OPTIONAL_HEADER;

#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER     IMAGE_SIZEOF_NT_OPTIONAL64_HEADER

#define IMAGE_NT_OPTIONAL_HDR_MAGIC         IMAGE_NT_OPTIONAL_HDR64_MAGIC

#else

typedef IMAGE_OPTIONAL_HEADER32             IMAGE_OPTIONAL_HEADER;

typedef PIMAGE_OPTIONAL_HEADER32            PIMAGE_OPTIONAL_HEADER;

#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER     IMAGE_SIZEOF_NT_OPTIONAL32_HEADER

#define IMAGE_NT_OPTIONAL_HDR_MAGIC         IMAGE_NT_OPTIONAL_HDR32_MAGIC

#endif



typedef struct _IMAGE_NT_HEADERS64 {

    DWORD Signature;

    IMAGE_FILE_HEADER FileHeader;

    IMAGE_OPTIONAL_HEADER64 OptionalHeader;

} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;



typedef struct _IMAGE_NT_HEADERS {

    DWORD Signature;

    IMAGE_FILE_HEADER FileHeader;

    IMAGE_OPTIONAL_HEADER32 OptionalHeader;

} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;



typedef struct _IMAGE_ROM_HEADERS {

    IMAGE_FILE_HEADER FileHeader;

    IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;

} IMAGE_ROM_HEADERS, *PIMAGE_ROM_HEADERS;



#ifdef _WIN64

typedef IMAGE_NT_HEADERS64                  IMAGE_NT_HEADERS;

typedef PIMAGE_NT_HEADERS64                 PIMAGE_NT_HEADERS;

#else

typedef IMAGE_NT_HEADERS32                  IMAGE_NT_HEADERS;

typedef PIMAGE_NT_HEADERS32                 PIMAGE_NT_HEADERS;

#endif



// IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.



#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)        \

    ((ULONG_PTR)ntheader +                                              \

     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 \

     ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader   \

    ))



// Subsystem Values



#define IMAGE_SUBSYSTEM_UNKNOWN              0   // Unknown subsystem.

#define IMAGE_SUBSYSTEM_NATIVE               1   // Image doesn't require a subsystem.

#define IMAGE_SUBSYSTEM_WINDOWS_GUI          2   // Image runs in the Windows GUI subsystem.

#define IMAGE_SUBSYSTEM_WINDOWS_CUI          3   // Image runs in the Windows character subsystem.

#define IMAGE_SUBSYSTEM_OS2_CUI              5   // image runs in the OS/2 character subsystem.

#define IMAGE_SUBSYSTEM_POSIX_CUI            7   // image runs in the Posix character subsystem.

#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS       8   // image is a native Win9x driver.

#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI       9   // Image runs in the Windows CE subsystem.

#define IMAGE_SUBSYSTEM_EFI_APPLICATION     10   //

#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER  11   //

#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER  12   //



// DllCharacteristics Entries



//      IMAGE_LIBRARY_PROCESS_INIT           0x0001     // Reserved.

//      IMAGE_LIBRARY_PROCESS_TERM           0x0002     // Reserved.

//      IMAGE_LIBRARY_THREAD_INIT            0x0004     // Reserved.

//      IMAGE_LIBRARY_THREAD_TERM            0x0008     // Reserved.

#define IMAGE_DLLCHARACTERISTICS_NO_BIND     0x0800     // Do not bind this image.

//                                           0x1000     // Reserved.

#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER  0x2000     // Driver uses WDM model

//                                           0x4000     // Reserved.

#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE     0x8000



// Directory Entries



#define IMAGE_DIRECTORY_ENTRY_EXPORT          0   // Export Directory

#define IMAGE_DIRECTORY_ENTRY_IMPORT          1   // Import Directory

#define IMAGE_DIRECTORY_ENTRY_RESOURCE        2   // Resource Directory

#define IMAGE_DIRECTORY_ENTRY_EXCEPTION       3   // Exception Directory

#define IMAGE_DIRECTORY_ENTRY_SECURITY        4   // Security Directory

#define IMAGE_DIRECTORY_ENTRY_BASERELOC       5   // Base Relocation Table

#define IMAGE_DIRECTORY_ENTRY_DEBUG           6   // Debug Directory

//      IMAGE_DIRECTORY_ENTRY_COPYRIGHT       7   // (X86 usage)

#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE    7   // Architecture Specific Data

#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR       8   // RVA of GP

#define IMAGE_DIRECTORY_ENTRY_TLS             9   // TLS Directory

#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    10   // Load Configuration Directory

#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   11   // Bound Import Directory in headers

#define IMAGE_DIRECTORY_ENTRY_IAT            12   // Import Address Table

#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   13   // Delay Load Import Descriptors

#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14   // COM Runtime descriptor



//

// Non-COFF Object file header

//



typedef struct ANON_OBJECT_HEADER {

    WORD    Sig1;            // Must be IMAGE_FILE_MACHINE_UNKNOWN

    WORD    Sig2;            // Must be 0xffff

    WORD    Version;         // >= 1 (implies the CLSID field is present)

    WORD    Machine;

    DWORD   TimeDateStamp;

    CLSID   ClassID;         // Used to invoke CoCreateInstance

    DWORD   SizeOfData;      // Size of data that follows the header

} ANON_OBJECT_HEADER;



//

// Section header format.

//



#define IMAGE_SIZEOF_SHORT_NAME              8



typedef struct _IMAGE_SECTION_HEADER {

    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];

    union {

            DWORD   PhysicalAddress;

            DWORD   VirtualSize;

    } Misc;

    DWORD   VirtualAddress;

    DWORD   SizeOfRawData;

    DWORD   PointerToRawData;

    DWORD   PointerToRelocations;

    DWORD   PointerToLinenumbers;

    WORD    NumberOfRelocations;

    WORD    NumberOfLinenumbers;

    DWORD   Characteristics;

} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;



#define IMAGE_SIZEOF_SECTION_HEADER          40



//

// Section characteristics.

//

//      IMAGE_SCN_TYPE_REG                   0x00000000  // Reserved.

//      IMAGE_SCN_TYPE_DSECT                 0x00000001  // Reserved.

//      IMAGE_SCN_TYPE_NOLOAD                0x00000002  // Reserved.

//      IMAGE_SCN_TYPE_GROUP                 0x00000004  // Reserved.

#define IMAGE_SCN_TYPE_NO_PAD                0x00000008  // Reserved.

//      IMAGE_SCN_TYPE_COPY                  0x00000010  // Reserved.



#define IMAGE_SCN_CNT_CODE                   0x00000020  // Section contains code.

#define IMAGE_SCN_CNT_INITIALIZED_DATA       0x00000040  // Section contains initialized data.

#define IMAGE_SCN_CNT_UNINITIALIZED_DATA     0x00000080  // Section contains uninitialized data.



#define IMAGE_SCN_LNK_OTHER                  0x00000100  // Reserved.

#define IMAGE_SCN_LNK_INFO                   0x00000200  // Section contains comments or some other type of information.

//      IMAGE_SCN_TYPE_OVER                  0x00000400  // Reserved.

#define IMAGE_SCN_LNK_REMOVE                 0x00000800  // Section contents will not become part of image.

#define IMAGE_SCN_LNK_COMDAT                 0x00001000  // Section contents comdat.

//                                           0x00002000  // Reserved.

//      IMAGE_SCN_MEM_PROTECTED - Obsolete   0x00004000

#define IMAGE_SCN_NO_DEFER_SPEC_EXC          0x00004000  // Reset speculative exceptions handling bits in the TLB entries for this section.

#define IMAGE_SCN_GPREL                      0x00008000  // Section content can be accessed relative to GP

#define IMAGE_SCN_MEM_FARDATA                0x00008000

//      IMAGE_SCN_MEM_SYSHEAP  - Obsolete    0x00010000

#define IMAGE_SCN_MEM_PURGEABLE              0x00020000

#define IMAGE_SCN_MEM_16BIT                  0x00020000

#define IMAGE_SCN_MEM_LOCKED                 0x00040000

#define IMAGE_SCN_MEM_PRELOAD                0x00080000



#define IMAGE_SCN_ALIGN_1BYTES               0x00100000  //

#define IMAGE_SCN_ALIGN_2BYTES               0x00200000  //

#define IMAGE_SCN_ALIGN_4BYTES               0x00300000  //

#define IMAGE_SCN_ALIGN_8BYTES               0x00400000  //

#define IMAGE_SCN_ALIGN_16BYTES              0x00500000  // Default alignment if no others are specified.

#define IMAGE_SCN_ALIGN_32BYTES              0x00600000  //

#define IMAGE_SCN_ALIGN_64BYTES              0x00700000  //

#define IMAGE_SCN_ALIGN_128BYTES             0x00800000  //

#define IMAGE_SCN_ALIGN_256BYTES             0x00900000  //

#define IMAGE_SCN_ALIGN_512BYTES             0x00A00000  //

#define IMAGE_SCN_ALIGN_1024BYTES            0x00B00000  //

#define IMAGE_SCN_ALIGN_2048BYTES            0x00C00000  //

#define IMAGE_SCN_ALIGN_4096BYTES            0x00D00000  //

#define IMAGE_SCN_ALIGN_8192BYTES            0x00E00000  //

// Unused                                    0x00F00000

#define IMAGE_SCN_ALIGN_MASK                 0x00F00000



#define IMAGE_SCN_LNK_NRELOC_OVFL            0x01000000  // Section contains extended relocations.

#define IMAGE_SCN_MEM_DISCARDABLE            0x02000000  // Section can be discarded.

#define IMAGE_SCN_MEM_NOT_CACHED             0x04000000  // Section is not cachable.

#define IMAGE_SCN_MEM_NOT_PAGED              0x08000000  // Section is not pageable.

#define IMAGE_SCN_MEM_SHARED                 0x10000000  // Section is shareable.

#define IMAGE_SCN_MEM_EXECUTE                0x20000000  // Section is executable.

#define IMAGE_SCN_MEM_READ                   0x40000000  // Section is readable.

#define IMAGE_SCN_MEM_WRITE                  0x80000000  // Section is writeable.



//

// TLS Chaacteristic Flags

//

#define IMAGE_SCN_SCALE_INDEX                0x00000001  // Tls index is scaled



#ifndef _MAC

#include "pshpack2.h"                       // Symbols, relocs, and linenumbers are 2 byte packed

#endif



//

// Symbol format.

//



typedef struct _IMAGE_SYMBOL {

    union {

        BYTE    ShortName[8];

        struct {

            DWORD   Short;     // if 0, use LongName

            DWORD   Long;      // offset into string table

        } Name;

        DWORD   LongName[2];    // PBYTE [2]

    } ;

    DWORD   Value;

    SHORT   SectionNumber;

    WORD    Type;

    BYTE    StorageClass;

    BYTE    NumberOfAuxSymbols;

} IMAGE_SYMBOL;

typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;





#define IMAGE_SIZEOF_SYMBOL                  18



//

// Section values.

//

// Symbols have a section number of the section in which they are

// defined. Otherwise, section numbers have the following meanings:

//



#define IMAGE_SYM_UNDEFINED           (SHORT)0          // Symbol is undefined or is common.

#define IMAGE_SYM_ABSOLUTE            (SHORT)-1         // Symbol is an absolute value.

#define IMAGE_SYM_DEBUG               (SHORT)-2         // Symbol is a special debug item.



//

// Type (fundamental) values.

//



#define IMAGE_SYM_TYPE_NULL                 0x0000  // no type.

#define IMAGE_SYM_TYPE_VOID                 0x0001  //

#define IMAGE_SYM_TYPE_CHAR                 0x0002  // type character.

#define IMAGE_SYM_TYPE_SHORT                0x0003  // type short integer.

#define IMAGE_SYM_TYPE_INT                  0x0004  //

#define IMAGE_SYM_TYPE_LONG                 0x0005  //

#define IMAGE_SYM_TYPE_FLOAT                0x0006  //

#define IMAGE_SYM_TYPE_DOUBLE               0x0007  //

#define IMAGE_SYM_TYPE_STRUCT               0x0008  //

#define IMAGE_SYM_TYPE_UNION                0x0009  //

#define IMAGE_SYM_TYPE_ENUM                 0x000A  // enumeration.

#define IMAGE_SYM_TYPE_MOE                  0x000B  // member of enumeration.

#define IMAGE_SYM_TYPE_BYTE                 0x000C  //

#define IMAGE_SYM_TYPE_WORD                 0x000D  //

#define IMAGE_SYM_TYPE_UINT                 0x000E  //

#define IMAGE_SYM_TYPE_DWORD                0x000F  //

#define IMAGE_SYM_TYPE_PCODE                0x8000  //

//

// Type (derived) values.

//



#define IMAGE_SYM_DTYPE_NULL                0       // no derived type.

#define IMAGE_SYM_DTYPE_POINTER             1       // pointer.

#define IMAGE_SYM_DTYPE_FUNCTION            2       // function.

#define IMAGE_SYM_DTYPE_ARRAY               3       // array.



//

// Storage classes.

//

#define IMAGE_SYM_CLASS_END_OF_FUNCTION     (BYTE )-1

#define IMAGE_SYM_CLASS_NULL                0x0000

#define IMAGE_SYM_CLASS_AUTOMATIC           0x0001

#define IMAGE_SYM_CLASS_EXTERNAL            0x0002

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -