?? w2k_img.h
字號:
// 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 + -