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

📄 w2k_img.h

📁 Undocumented WIndows 2000 Secrets 完整简体中文版!!NT架构windows(20000、xp)Kernel Hacking必备!!附cd iso与完整附录!
💻 H
📖 第 1 页 / 共 3 页
字号:

// w2k_img.h
// 08-27-2000 Sven B. Schreiber
// sbs@orgon.com

////////////////////////////////////////////////////////////////////
#ifdef _W2K_IMG_DLL_
////////////////////////////////////////////////////////////////////

// =================================================================
// PROGRAM IDENTIFICATION
// =================================================================

#define MAIN_BUILD              2
#define MAIN_VERSION_HIGH       1
#define MAIN_VERSION_LOW        1

// -----------------------------------------------------------------

#define MAIN_DAY                27
#define MAIN_MONTH              08
#define MAIN_YEAR               2000

// -----------------------------------------------------------------

#define MAIN_PREFIX             SBS
#define MAIN_MODULE             w2k_img
#define MAIN_NAME               SBS Windows 2000 Image Library
#define MAIN_COMPANY            Sven B. Schreiber
#define MAIN_AUTHOR             Sven B. Schreiber
#define MAIN_EMAIL              sbs@orgon.com
#define MAIN_DLL

////////////////////////////////////////////////////////////////////
#endif // #ifdef _W2K_IMG_DLL_
////////////////////////////////////////////////////////////////////

// =================================================================
// HEADER FILES
// =================================================================

#include <proginfo.h>

////////////////////////////////////////////////////////////////////
#ifndef _RC_PASS_
////////////////////////////////////////////////////////////////////

// =================================================================
// MACROS
// =================================================================

#define LCASEA(_c) ((BYTE) CharLowerA ((PBYTE) (_c)))
#define LCASEW(_c) ((WORD) CharLowerW ((PWORD) (_c)))

#define UCASEA(_c) ((BYTE) CharUpperA ((PBYTE) (_c)))
#define UCASEW(_c) ((WORD) CharUpperW ((PWORD) (_c)))

// =================================================================
// CONSTANTS
// =================================================================

#define YEARS_1600_TO_1970 ((DWORD) (1970-1600))
#define YEARS_400          ((DWORD) 400)
#define YEARS_100          ((DWORD) 100)
#define YEARS_004          ((DWORD) 4)

#define DAYS_1600_TO_1970  ((YEARS_1600_TO_1970 * 365) +25+24+24+17)
#define DAYS_PER_400_YEARS ((YEARS_400          * 365) +25+24+24+24)
#define DAYS_PER_100_YEARS ((YEARS_100          * 365) +25)
#define DAYS_PER_4_YEARS   ((YEARS_004          * 365) + 1)
#define DAYS_PER_YEAR      ((DWORD)               365)

#define MAX_PATH_EX        (100 * MAX_PATH)

// =================================================================
// SYMBOL TYPES
// =================================================================

#define IMG_CONVENTION_UNDEFINED    0
#define IMG_CONVENTION_STDCALL      1
#define IMG_CONVENTION_CDECL        2
#define IMG_CONVENTION_FASTCALL     3

// =================================================================
// STRUCTURE SIZES
// =================================================================

#define FPO_DATA_ \
        sizeof (FPO_DATA)

#define IMAGE_DEBUG_DIRECTORY_ \
        sizeof (IMAGE_DEBUG_DIRECTORY)

#define IMAGE_DEBUG_MISC_ \
        sizeof (IMAGE_DEBUG_MISC)

#define IMAGE_SECTION_HEADER_ \
        sizeof (IMAGE_SECTION_HEADER)

#define IMAGE_SEPARATE_DEBUG_HEADER_ \
        sizeof (IMAGE_SEPARATE_DEBUG_HEADER)

// =================================================================
// OMF STRUCTURES
// =================================================================

typedef struct _OMF_HEADER
    {
    WORD wRecordSize; // in bytes, not including this member
    WORD wRecordType;
    }
    OMF_HEADER, *POMF_HEADER, **PPOMF_HEADER;

#define OMF_HEADER_ sizeof (OMF_HEADER)

// -----------------------------------------------------------------

typedef struct _OMF_NAME
    {
    BYTE bLength;     // in bytes, not including this member
    BYTE abName [];
    }
    OMF_NAME, *POMF_NAME, **PPOMF_NAME;

#define OMF_NAME_ sizeof (OMF_NAME)

// =================================================================
// CodeView STRUCTURES
// =================================================================

#define CV_SIGNATURE_NB   'BN'
#define CV_SIGNATURE_NB09 '90BN'
#define CV_SIGNATURE_NB10 '01BN'

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef union _CV_SIGNATURE
    {
    WORD  wMagic;     // 'BN'
    DWORD dVersion;   // 'xxBN'
    BYTE  abText [4]; // "NBxx"
    }
    CV_SIGNATURE, *PCV_SIGNATURE, **PPCV_SIGNATURE;

#define CV_SIGNATURE_ sizeof (CV_SIGNATURE)

// -----------------------------------------------------------------

typedef struct _CV_HEADER
    {
    CV_SIGNATURE Signature;
    LONG         lOffset;
    }
    CV_HEADER, *PCV_HEADER, **PPCV_HEADER;

#define CV_HEADER_ sizeof (CV_HEADER)

// -----------------------------------------------------------------

typedef struct _CV_DIRECTORY
    {
    WORD  wSize;      // in bytes, including this member
    WORD  wEntrySize; // in bytes
    DWORD dEntries;
    LONG  lOffset;
    DWORD dFlags;
    }
    CV_DIRECTORY, *PCV_DIRECTORY, **PPCV_DIRECTORY;

#define CV_DIRECTORY_ sizeof (CV_DIRECTORY)

// -----------------------------------------------------------------

#define sstModule     0x0120 // CV_MODULE
#define sstGlobalPub  0x012A // CV_PUBSYM
#define sstSegMap     0x012D // SV_SEGMAP

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef struct _CV_ENTRY
    {
    WORD  wSubSectionType;   // sst*
    WORD  wModuleIndex;      // -1 if not applicable
    LONG  lSubSectionOffset; // relative to CV_HEADER
    DWORD dSubSectionSize;   // in bytes, not including padding
    }
    CV_ENTRY, *PCV_ENTRY, **PPCV_ENTRY;

#define CV_ENTRY_ sizeof (CV_ENTRY)

// -----------------------------------------------------------------

typedef struct _CV_NB09 // CodeView 4.10
    {
    CV_HEADER    Header;
    CV_DIRECTORY Directory;
    CV_ENTRY     Entries [];
    }
    CV_NB09, *PCV_NB09, **PPCV_NB09;

#define CV_NB09_ sizeof (CV_NB09)

// -----------------------------------------------------------------

typedef struct _CV_NB10 // PDB reference
    {
    CV_HEADER    Header;
    DWORD        dSignature;   // seconds since 01-01-1970
    DWORD        dAge;         // 1++
    BYTE         abPdbName []; // zero-terminated
    }
    CV_NB10, *PCV_NB10, **PPCV_NB10;

#define CV_NB10_ sizeof (CV_NB10)

// -----------------------------------------------------------------

typedef union _CV_DATA
    {
    CV_HEADER Header;
    CV_NB09   NB09;
    CV_NB10   NB10;
    }
    CV_DATA, *PCV_DATA, **PPCV_DATA;

#define CV_DATA_ sizeof (CV_DATA)

// -----------------------------------------------------------------

typedef struct _CV_SEGMENT
    {
    WORD  wSegment;
    WORD  wReserved;
    DWORD dOffset;
    DWORD dSize;
    }
    CV_SEGMENT, *PCV_SEGMENT, **PPCV_SEGMENT;

#define CV_SEGMENT_ sizeof (CV_SEGMENT)

// -----------------------------------------------------------------

typedef struct _CV_MODULE
    {
    WORD       wOverlay;
    WORD       wLibrary;
    WORD       wSegments;
    WORD       wStyle;      // "CV"
    CV_SEGMENT Segments []; // wSegments
 // OMF_NAME   Name;        // use CV_MODULE_NAME() to access
    }
    CV_MODULE, *PCV_MODULE, **PPCV_MODULE;

#define CV_MODULE_ sizeof (CV_MODULE)

#define CV_MODULE_NAME(_p) \
        ((POMF_NAME) ((PBYTE) (_p)->Segments + \
                      ((DWORD) (_p)->wSegments * CV_SEGMENT_)))

// -----------------------------------------------------------------

typedef struct _CV_SYMHASH
    {
    WORD  wSymbolHashIndex;
    WORD  wAddressHashIndex;
    DWORD dSymbolInfoSize;
    DWORD dSymbolHashSize;
    DWORD dAddressHashSize;
    }
    CV_SYMHASH, *PCV_SYMHASH, **PPCV_SYMHASH;

#define CV_SYMHASH_ sizeof (CV_SYMHASH)

// -----------------------------------------------------------------

#define S_PUB32  0x0203
#define S_ALIGN  0x0402

#define CV_PUB32 S_PUB32

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef struct _CV_PUBSYM
    {
    OMF_HEADER Header;
    DWORD      dOffset;
    WORD       wSegment;    // 1-based section index
    WORD       wTypeIndex;  // 0
    OMF_NAME   Name;        // zero-padded to next DWORD
    }
    CV_PUBSYM, *PCV_PUBSYM, **PPCV_PUBSYM;

#define CV_PUBSYM_ sizeof (CV_PUBSYM)

#define CV_PUBSYM_DATA(_p) \
        ((PCV_PUBSYM) ((PBYTE) (_p) + CV_SYMHASH_))

#define CV_PUBSYM_SIZE(_p) \
        ((DWORD) (_p)->Header.wRecordSize + sizeof (WORD))

#define CV_PUBSYM_NEXT(_p) \
        ((PCV_PUBSYM) ((PBYTE) (_p) + CV_PUBSYM_SIZE (_p)))

// -----------------------------------------------------------------

typedef struct _CV_SEGMAPDESC
    {
    WORD  wFlags;
    WORD  wOverlay;   // 0
    WORD  wGroup;     // 0
    WORD  wFrame;     // 1-based section index
    WORD  wName;      // -1
    WORD  wClassName; // -1
    DWORD dOffset;    // 0
    DWORD dSize;      // in bytes
    }
    CV_SEGMAPDESC, *PCV_SEGMAPDESC, **PPCV_SEGMAPDESC;

#define CV_SEGMAPDESC_ sizeof (CV_SEGMAPDESC)

// -----------------------------------------------------------------

typedef struct _CV_SEGMAP
    {
    WORD          wTotal;
    WORD          wLogical;
    CV_SEGMAPDESC Descriptors [];
    }
    CV_SEGMAP, *PCV_SEGMAP, **PPCV_SEGMAP;

#define CV_SEGMAP_ sizeof (CV_SEGMAP)

// =================================================================
// PDB STRUCTURES
// =================================================================

#define PDB_SIGNATURE_100 \
        "Microsoft C/C++ program database 1.00\r\n\x1AJG\0"

#define PDB_SIGNATURE_200 \
        "Microsoft C/C++ program database 2.00\r\n\x1AJG\0"

#define PDB_SIGNATURE_TEXT 40

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef struct _PDB_SIGNATURE
    {
    BYTE abSignature [PDB_SIGNATURE_TEXT+4]; // PDB_SIGNATURE_nnn
    }
    PDB_SIGNATURE, *PPDB_SIGNATURE, **PPPDB_SIGNATURE;

#define PDB_SIGNATURE_ sizeof (PDB_SIGNATURE)

// -----------------------------------------------------------------

#define PDB_STREAM_FREE -1

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef struct _PDB_STREAM
    {
    DWORD dStreamSize;   // in bytes, -1 = free stream
    PWORD pwStreamPages; // array of page numbers
    }
    PDB_STREAM, *PPDB_STREAM, **PPPDB_STREAM;

#define PDB_STREAM_ sizeof (PDB_STREAM)

// -----------------------------------------------------------------

#define PDB_STREAM_MASK 0x0000FFFF
#define PDB_STREAM_MAX  (PDB_STREAM_MASK+1)

#define PDB_STREAM_DIRECTORY 0
#define PDB_STREAM_PDB       1
#define PDB_STREAM_TPI       2
#define PDB_STREAM_DBI       3
#define PDB_STREAM_PUBSYM    7

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

typedef struct _PDB_ROOT
    {
    WORD       wCount;      // < PDB_STREAM_MAX
    WORD       wReserved;   // 0
    PDB_STREAM aStreams []; // stream #0 reserved for stream table
    }
    PDB_ROOT, *PPDB_ROOT, **PPPDB_ROOT;

#define PDB_ROOT_ sizeof (PDB_ROOT)

#define PDB_PAGES(_r) \
        ((PWORD) ((PBYTE) (_r) \
                  + PDB_ROOT_ \
                  + ((DWORD) (_r)->wCount * PDB_STREAM_)))

// -----------------------------------------------------------------

⌨️ 快捷键说明

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