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


译注:
你需要安装 Windows 2000 DDK 才能获得 ntdll.lib
可以到 http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ 下载最新的 SDK
将 NTDLL.DLL 导入库添加到工程中
在你能成功的编译和链接在用户模式下使用 ntdll.dll 导出函数的代码之前,你必须考虑如下的四个重点:
1. SDK 的头文件中,没有包含这些函数的原型 。
2. SDK 文件中缺少这些函数使用的几个基本的数据类型 。
3. SDK 和 DDK 头文件并不兼容,你不能将 #include 加入你的 Win32 C 源代码文件中 。
4. ntdll.lib 并没有加入 Visual C/C默认的导入库列表中
最后一个问题很容易解决,只需要编辑工程的设置属性,或者将如下内容加入你的源代码中,#pragma comment(linker,”defaultlib:ntdll.lib”) ,像在前面的 Windows 2000 运行时库一节解释的那样,这会在编译时,将 ntdll.dll 加入链接器的 /defaultlib 设置中 。解决缺失的定义比较困难 。因为不可能将 SDK 和 DDK 头文件整合到 C 程序中,最简易的解决方法是写一格自定义的头文件,在该头文件中包含所有调用 ntdll.dll 导出函数必须的定义 。幸运的是,你不需要开始这项工作了,在本书光盘的 srccommoninclude 目录下的 w2k_def.h 文件包含了你所需要的所有基本信息 。该头文件将在第六、七两章中扮演重要角色 。因为它被设计为可同时兼容用户模式和内核模式的工程,在用户模式代码中,你必须在 #include 之前插入 #define _USER_MODE_ ,以加入仅出现在 DDK 中的一些定义 。
有关 Native API 编程的很多详细信息都已经出版,目前看来,针对 Windows 2000 平台的好书是 Gary Nebbett"s 的《 Windows NT/2000 Native API Reference 》 。该书提供的示例程序较少,但它覆盖了 Windows NT/2000 平台上的所有 Native API ,还包括这些函数需要的数据结构定义以及其他必须的一些结构定义 。
【2 《Undocumented Windows 2000 Secrets》翻译 --- 第二章】将在第六章介绍的 w2k_call.dll 示例库,演示了 w2k_def.h 的典型用法 。第六章还将讨论另一种在用户模式进入 Windows 2000 内核的方法,此种方法不受限于 Native API。事实上,这种技巧也可用于 ntoskrnl.exe ,对于所有加载到内核空间的模块,只要它们导出了函数或者可以和 .dbg 或 .pdb 符号文件相匹配都可以使用此方法 。如你所见,在本书剩余章节中还有很多有趣的信息 。但是,在我们到达那儿之前,我们会继续讨论一些基本的概念和技术 。

推荐阅读