用户管理  |   用户注册                                                                                    首 页软件下载教程中心办公指南flash动画文档下载办公公文

www.4oa.com - 中科软件园

投递文章 用户管理 投稿指南 资讯通告 :
站内搜索: 您的位置中科软件园 > 教程中心 > 操作系统 > Windows 2000 > 原理开发 > 教程内容

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

2005-5-21 8:48:09  来源:本站整理  作者:不详 【 投递文章
内容提要:下载PDF格式的Pentium手册。讲解这些机器码指令集的手册是:IntelArchitectureSoftWareDeveloper'sManual.Volume2:InstructionSetRe...
下载 PDF 格式的 Pentium 手册。讲解这些机器码指令集的手册是: Intel Architecture SoftWare Developer's Manual . Volume 2 : Instruction Set Reference ( Intel 1999b )。

其它的 API 函数

附录 B 2-1 列出的函数外, ntdll.dll 和 ntoskrnl.exe 还为多个内核组件导出了为数众多的函数。为了避免更长的表格,我这里仅列出可用函数的名称前缀及其所属类别( 2-2 )。

表 2-2 函数名前缀及其所属分类

前缀

ntdll.dll

ntoskrnl.exe

分类

_e

N/A

浮点模拟器

Cc

N/A

Cache 管理器

Csr

Client-Server 运行时库

Dbg

N/A

调试支持

Ex

N/A

执行支持( Executive Support )

FsRtl

N/A

文件系统运行时库

Hal

N/A

硬件抽象层调度器

Inbv

N/A

系统初始化 /VGA 启动驱动( bootvid.dll )

Init

N/A

系统初始化

Interlocked

N/A

处理线程安全的变量

Io

N/A

I/O 管理器

Kd

N/A

内核调试支持

Ke

N/A

内核例程

Ki

内核中断例程

Ldr

映像加载器

Lpc

N/A

本地过程调用( LPC )设备

Lsa

N/A

本地安全授权

Mm

N/A

内存管理器

Nls

National Language Support (NLS)

Nt

NT Native API

Ob

N/A

对象管理器

Pfx

前缀处理

Po

N/A

电源管理器

Ps

N/A

进程支持

READ_REGISTER_

N/A

从寄存器地址中读取

Rtl

Windows 2000 运行时库

Se

N/A

安全处理

WRITE_REGISTER_

N/A

向寄存器地址中写入

Zw

另一组 Native API

<other>

帮助函数和 C 运行时库

很多内核函数都使用统一的命名规则 ----PrefixOperationObject() 。例如, NtQueryInformationFile() 函数属于 Native API ,这是因为其 Nt 前缀,而且该函数显然针对一个文件对象执行了 QueryInformation 操作。但并不是所有函数都遵循这一规则,不过绝大多数都是如此。因此,可以很容易的通过函数的名称猜测其功能。

经常使用的数据类型

当编写与 Windows 2000 内核有关的软件时 --- 不管是和用户模式的 ntdll.dll 还是和内核模式的 ntoskrnl.exe ,你都必须处理几个基本的数据类型,而这些数据类型在 Win32 世界里非常少见。它们中的多数都会在本书中反复出现。下面的章节将介绍使用频率最高的数据类型。

整型

一般说来,整数类型有多个不同的变体。 Win32 SDK 的头文件和 SDK 文档使用了其专有的术语,这些术语很容易和 C/C++ 的基本类型以及一些派生类型相混淆。 2-3 列出了这些整数类型,以及它们之间的等价关系。在“ MASM ”列中,给出了微软宏汇编语言( MASM )使用的类型名称。 Win32 SDK 为 C/C++ 的基本数据类型定义了对应的 BYTE 、 WORD 、 DWORD 别名。“别名 1 ”和“别名 2 ”两列包含其经常使用的别名。例如, WCHAR 代表基础的 Unicode 字符类型。最后一列“有符号的”,列出了对应的有符号类型的常见别名。一定要记住 ANSI 字符类型 CHAR 是有符号的,而 Unicode 类型 WCHAR 是无符号的。当编译器将表达式或计算中的这些类型转换为整数类型时,这种不一致性将导致意外的错误。

表 2-3 最后一行的 MASM 的 TBYTE 类型(读做“ 10-byte ”)是一个 80 位的浮点数,用于高精度的浮点运算操作。 Microsoft Visual C/C++ 没有为 Win32 程序员提供对应的数据类型。需要注意的是, MASM 的 TBYTE 和 Win32 的 TBYTE (读做“ text byte ”)没有任何关系,后者只是一个用于转换的宏,根据源文件中是否有 #define UNICODE 而分别对应 CHAR 或 WCHAR 。

表 2-3. 等价的整数类型

位数

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 位编程环境中较难处理 64 位整数, Windows 2000 通常不提供 64 位的基本类型,如 __int64 或其派生类型。替代的, DDK 头文件 ntdef.h 中定义了一个精巧的 union 结构,可以将一个 64 位数解释为一对 32 位数或一个完整的 64 位数,参见 列表 2-3 给出了 LARGE_INTEGER 和 ULARGE_INTEGER 类型定义。该类型可分别表示有符号和无符号的整数。通过使用 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;

上一页  [1] [2] [3] [4]  下一页

(评论内容只代表网友观点,与本站立场无关!)[ 全部评论 ]

网友评论:

    用户名:

    评   分:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

                 (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -有事点这里