日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

2 《Undocumented Windows 2000 Secrets》翻譯 --- 第二章( 三 )


經(jīng)常使用的數(shù)據(jù)類型
當(dāng)編寫與 Windows 2000 內(nèi)核有關(guān)的軟件時 --- 不管是和用戶模式的 ntdll.dll 還是和內(nèi)核模式的 ntoskrnl.exe ,你都必須處理幾個基本的數(shù)據(jù)類型,而這些數(shù)據(jù)類型在 Win32 世界里非常少見 。它們中的多數(shù)都會在本書中反復(fù)出現(xiàn) 。下面的章節(jié)將介紹使用頻率最高的數(shù)據(jù)類型 。
整型
一般說來,整數(shù)類型有多個不同的變體 。Win32 SDK 的頭文件和 SDK 文檔使用了其專有的術(shù)語,這些術(shù)語很容易和 C/C的基本類型以及一些派生類型相混淆 。表 2-3 列出了這些整數(shù)類型,以及它們之間的等價關(guān)系 。在“ MASM ”列中,給出了微軟宏匯編語言( MASM )使用的類型名稱 。Win32 SDK 為 C/C的基本數(shù)據(jù)類型定義了對應(yīng)的 BYTE 、 WORD 、 DWORD 別名 ?!皠e名 1 ”和“別名 2 ”兩列包含其經(jīng)常使用的別名 。例如,WCHAR 代表基礎(chǔ)的 Unicode 字符類型 。最后一列“有符號的”,列出了對應(yīng)的有符號類型的常見別名 。一定要記住 ANSI 字符類型 CHAR 是有符號的,而 Unicode 類型 WCHAR 是無符號的 。當(dāng)編譯器將表達式或計算中的這些類型轉(zhuǎn)換為整數(shù)類型時,這種不一致性將導(dǎo)致意外的錯誤 。
表 2-3 最后一行的 MASM 的 TBYTE 類型(讀做“ 10-byte ”)是一個 80 位的浮點數(shù),用于高精度的浮點運算操作 。Microsoft Visual C/C沒有為 Win32 程序員提供對應(yīng)的數(shù)據(jù)類型 。需要注意的是,MASM 的 TBYTE 和 Win32 的 TBYTE (讀做“ text byte ”)沒有任何關(guān)系,后者只是一個用于轉(zhuǎn)換的宏,根據(jù)源文件中是否有 #define UNICODE 而分別對應(yīng) CHAR 或 WCHAR。
表 2-3. 等價的整數(shù)類型
位數(shù)
MASM
基本類型
別名 1
別名 2
有符號的
8
BTYE
unsigned char
UCHAR
CHAR
16
WORD
unsigned short
USHORT
WCHAR
SHORT
32
DWORD
unsigned long
ULONG
LONG
32
DWORD
unsigned int
UINT
INT
64
QWORD
unsigned __int64
ULONGLONG
DWORDLONG
LONGLONG
80
TBYTE
N/A
由于在 32 位編程環(huán)境中較難處理 64 位整數(shù),Windows 2000 通常不提供 64 位的基本類型,如 __int64 或其派生類型 。替代的,DDK 頭文件 ntdef.h 中定義了一個精巧的 union 結(jié)構(gòu),可以將一個 64 位數(shù)解釋為一對 32 位數(shù)或一個完整的 64 位數(shù),參見 列表 2-3 給出了 LARGE_INTEGER 和 ULARGE_INTEGER 類型定義 。該類型可分別表示有符號和無符號的整數(shù) 。通過使用 LONGLONG/ULONGLONG (針對 64 位的 QuadPart 成員)或者 LONG/ULONG (針對 32 位的 HighPart 成員)來控制有無符號 。
typedef union _LARGE_INTEGER
{
struct
{
ULONG LowPart;
LONG HighPart;
}
LONGLONG QuadPart;
} LARGE_INTEGER,*PLARGE_INTEGER;
typedef union _ULARGE_INTEGER
{
struct
{
ULONG LowPart;
ULONG HighPat;
}
ULONGLONG QuadPat;
} ULARGE_INTEGER,*PULARGE_INTEGER;
列表 2-3. LARGE_INTEGER 和 ULARGE_INTEGER
字符串
在 Win32 程序設(shè)計中,常使用 PSTR 和 PWSTR 來分別代替 ANSI 和 Unicode 字符串 。PSTR 被定義為 CHAR* ,PWSTR 則定義為 WCHAR* (參見表 2-3 ) 。通過源文件中是否出現(xiàn) #define UNICODE 指示符,附加的 PTSTR 類型分別對應(yīng) PSTR 或 PWSTR ,這樣就可通過單一的源文件來維護應(yīng)用程序的 ANSI 和 Unicode 版本 ?;旧希@些字符串都是簡單的指向以零結(jié)尾的 CHAR 或 WCHAR 類型的數(shù)組 。如果你常和 Windows 2000 內(nèi)核打交道,你將必須處理一種很不同的字符串表示法 。最常見的類型是 UNICODE_STRING ,這是一個第三方類型,列表 2-4 給出了它的定義 。
typedef struct _UNICODE_STRING
{

推薦閱讀