庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>操作系统>Windows 2000>原理与开发>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

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

 作者:本站收集   日期:2005-4-8
字号选择〖 〗/ 双击滚屏 单击停止   

序号

函数名称

ImageHlp.DLL

DbgHelp.DLL

1

Bindlmage

 

N/A

2

BindlmageEx

 

N/A

3

CheckSumMappedFile

 

N/A

4

EnumerateLoadedModules

   

5

EnumerateLoadedModules64

   

6

ExtensionApiVersion

N/A

 

7

FindDebuglnfoFile

   

8

FindDebuglnfoFileEx

   

9

FindExecutablelmage

   

10

FindExecutablelmageEx

   

11

FindFilelnSearchPath

   

12

GetlmageConfiglnformation

 

N/A

13

GetlmageUnusedHeaderBytes

 

N/A

14

GetTimestampForLoadedLibrary

   

15

ImageAddCertificate

 

N/A

16

ImageDirectoryEntryToData

   

17

ImageDirectoryEntryToDataEx

   

18

ImageEnumerateCertificates

 

N/A

19

ImageGetCertificateData

 

N/A

20

ImageGetCertificateHeader

 

N/A

21

ImageGetDigestStream

 

N/A

22

ImagehlpApiVersion

   

23

ImagehlpApiVersionEx

   

24

ImageLoad

 

N/A

25

ImageNtHeader

   

26

ImageRemoveCertificate

 

N/A

27

ImageRvaToSection

   

28

ImageRvaToVa

   

29

ImageUnload

 

N/A

30

MakeSureDirectoryPathExists

   

31

MapAndLoad

 

N/A

32

MapDebuglnformation

   

33

MapFileAndCheckSumA

 

N/A

34

MapFileAndCheckSumW

 

N/A

35

ReBaselmage

 

N/A

36

ReBaseImage64

 

N/A

37

RemovePrivateCvSymbolic

 

N/A

38

RemovePrivateCvSymbolicEx

 

N/A

39

RemoveRelocations

 

N/A

40

SearchTreeForFile

   

41

SetlmageConfiglnformation

 

N/A

42

SplitSymbols

 

N/A

43

StackWalk

   

44

StackWalk64

   

45

Sym

N/A

 

46

SymCleanup

   

47

SymEnumerateModules

   

48

SymEnumerateModules64

   

49

SymEnumerateSymbols

   

50

SymEnumerateSymbols64

   

51

SymEnumerateSymbolsW

   

52

SymFunctionTableAccess

   

53

SymFunctionTa ble Access64

   

54

SymGetLineFromAddr

   

55

SymGetLineFromAddr64

   

56

SymGetLineFromName

   

57

SymGetLineFromName64

   

58

SymGetLineNext

   

59

SymGetLineNext64

   

60

SymGetLinePrev

   

61

SymGetLinePrev64

   

62

SymGetModuleBase

   

63

SymGetModuleBase64

   

64

SymGetModulelnfo

   

65

SymGetModuleInfo64

   

66

SymGetModulelnfo Ex

   

67

SymGetModulelnfo Ex64

   

68

SymGetModulelnfoW

   

69

SymGetModulelnfo W64

   

70

SymGetOptions

   

71

SymGetSearchPath

   

72

SymGetSymbolInfo

   

73

SymGetSymbolInfo64

   

74

SymGetSymFromAddr

   

75

SymGetSymFromAddr64

   

76

SymGetSymFromName

   

77

SymGetSymFromName64

   

78

SymGetSymNext

   

79

SymGetSymNext64

   

80

SymGetSymPrev

   

81

SymGetSymPrev64

   

82

Symlnitialize

   

83

SymLoadModule

   

84

SymLoadModule64

   

85

SymMatchFileName

   

86

SymEnumerateSymbolsW64

   

87

SymRegisterCallback

   

88

SymRegisterCallback64

   

89

SymRegisterFunctionEntryCallback

   

90

SymRegisterFunctionEntryCallback64

   

91

SymSetOptions

   

92

SymSetSearchPath

   

93

SymUnDName

   

94

SymUnDName64

   

95

SymUnloadModule

   

96

SymUnloadModule64

   

97

TouchFileTimes

 

N/A

98

UnDecorateSymbolName

   

99

UnMapAndLoad

 

N/A

100

UnmapDebuglnformation

   

101

UpdateDebuglnfoFile

 

N/A

102

UpdateDebuglnfoFileEx

 

N/A

103

WinDbgExtensionDllInit

N/A

 

在本节的示例代码中,我会演示如何使用psapi.dll和imagehlp.dll完成如下任务:

l         枚举所有内核组件和驱动程序

l         枚举系统当前管理的所有进程

l         枚举加载到进程地址空间的所有模块(modules)

l         枚举一个给定组件的所有符号(如果其符号文件可用的话)

psapi.dll的接口并不像其设计的那样好。它提供了最小的功能集,尽管它曾试图增加一些便利性。虽然,它能从内核获取一些信息但却扔掉了其中的大多数,只留下很少一部分。

 

由于psapi.dllimagehlp.dll函数并不是标准Win32 API的一部分,它们所需的头文件和导入库不会自动包括在Visual C/C++工程中。因此,列表1-2中列出的四个指示符(directives)应该在你的原文件中出现。第一部分是所需的头文件,剩余部分用于和这两个DLL中的导出函数建立动态链接

 

  #include <imagehlp.h>

  #include <psapi.h>

 

  #pragma comment (linker,”/defaultlib:imagehlp.dll”)

  #pragma comment (linker,”/defaultlib:psapi.dll”)

列表1-2   增加psapi.dll和imagehlp.dll到Visual C/C++工程

译注:

其实,也可以采用静态链接,如下:

#pragma comment(lib,”psapi.lib”)

#pragma comment(lib,”imagehlp.lib”)

这样,就不需要目标平台必须有这两个DLL了。

光盘中的示列代码

在本书的附带光盘中,有两个工程是构建与psapi.dll和imagehlp.dll之上。其中一个示例工程是w2k_sym.exe----一个Windows 2000符号浏览器,它可以从任意符号文件中提取符号名称(假如你已经安装了的话)。它输出的符号表可以按照名称、地址和大小来排序,同时接受一个采用通配符的过滤器。作为附送功能,w2k_sym.exe还可列出当前活动的系统模块/驱动程序的名称,运行的进程和每个进程加载的模块。另一个示例工程是调试支持库w2k_dbg.dll,这个库包含几个便于使用的针对psapi.dll和imagehlp.dll的外包函数。w2k_sym.exe完全依赖这个DLL。这些工程的源代码分别位于光盘的\src\w2k_dbg和\src\w2k_sym目录。

表1-2列出了w2k_dbg.dll用到的函数名称。A./W列表示对ANSI和Unicode的支持情况。稍早提示过,psapi.dll同时支持ANSI和Unicode。不幸的是,imagehlp.dll和dbghelp.dll没有这么聪明,其中几个函数只能接受ANSI字符串。这有些烦人,因为Windows 2000的调试程序通常不能运行在Windows 9x上,所以不该限制使用Unicode。若将imagehlp.dll假如你的工程中,你就必须选择是使用ANSI还是来回转化Unicode字符串。因为我很讨厌在一个可处理16位字符串的系统中使用8位的字符串,所以我选择后一种方法。w2k_dbg.dll导出的所有函数中涉及的字符串默认都是Unicode。所以,如果你在自己的Windows 2000工程中使用这个DLL不需要再关心字符大小问题。

另一方面,imagehlp.dll和dbghelp.dll有一个psapi.dll没有的特性:他们同样适用于Win64----让每个开发人员恐惧的64位Windows,这是因为没人知道将Win32程序移植到Win64有多困难。这些DLL导出了Win64 API函数,好吧----或许有一天我们会用到他们。

名称

A/W

EnumDeviceDrivers

psapi.dll

EnumProcesses

psapi.dll

EnumProcessModules

psapi.dll

GetDeviceDriverFileName

A/W

psapi.dll

GetModuleFileNameEx

A/W

psapi.dll

GetModulelnformation

psapi.dll

ImageLoad

A

imagehlp.dll

ImageUnload

imagehlp.dll

SymCleanup

imagehlp.dll

SymEnumerateSymbols

A/W

imagehlp.dll

Symlnitialize

A

imagehlp.dll

SymLoadModule

A

imagehlp.dll

SymUnloadModule

imagehlp.dll

表1-2  w2k_dbg.dll使用的调试函数

我没有深入的探究psapi.dll和imagehlp.dll。本书的焦点在于未文档化的接口,而且在SDK中与这两个DLL的接口有关的文档还算不错。可是,我并不打算完全绕过它们,因为它们和Windows 2000 Native API(将在第2章讨论)紧密联系在一起。而且,psapi.dll是证明为什么未文档化的接口比文档化的那个更好的最佳实例。该DLL的接口不仅仅只是看上去的简单和笨拙---在某些地方它竟然会返回明显矛盾的数据。如果我不得不编写一个专业的调试工具来出售,我是不会指望这个DLL的。Windows 2000内核提供了强大、通用和更加合适的调试API函数。然而,这些几乎都没有文档化。幸运的是,微软提供的许多系统工具都广泛的使用了这些API,so it has undergone only slight changes across Windows NT versions。是的,如果你使用了这些API,每当发布了新版的NT,你就必须修订和小心的测试你的软件,但是它们带来的好处远大于这些障碍。

本章随后的大多数示例代码都来自w2k_dbg.dll,你可以在光盘的\src\w2k_dbg\w2k_dbg.c中发现它们。这个DLL封装了多个步骤,以返回更丰富的信息。数据会以合适的大小、链表(包括可选的索引值)返回,以便于对它们进行排序等操作。表1-3列出了w2k_dbg.dll导出的所有API函数。这些函数很多,详细讨论每个函数已经超出了本章的范围,因此我鼓励你去参考w2k_sym.exe的源代码(位于光盘\src\w2k_sym\x),来学习它们的典型用法。

表1-3

函数名称

   

dbgBaseDriver

Return the base address and size of a driver, given its path

dbgBaseModule

Return the base address and size of a DLL module

dbgCrc32Block

Compute the CRC32 of a memory block

dbgCrc32Byte

Bytewise computation of a CRC32

dbgCrc32Start

CRC32 preconditioning

dbgCrc32Stop

CRC32 postconditioning

dbgDriverAdd

Add a driver entry to a list of drivers

dbgDriverAddresses

Return an array of driver addresses (EnumDeviceDrivers ( ) wrapper)

dbgDriverlndex

Create an indexed (and optionally sorted) driver list

dbgDriverList

Create a flat driver list

dbgFileClose

Close a disk file

dbgFileLoad

Load the contents of a disk file to a memory block

dbgFileNew

Create a new disk file

dbgFileOpen

Open an existing disk file

dbgFileRoot

Get the offset of the root token in a file path

dbgFileSave

Save a memory block to a disk file

dbgFileUnload

Free a memory block created by dbgFileLoad ( )

dbglndexCompare

Compare two entries referenced by an index (used by dbgindexsort ( ) )

dbglndexCreate

Create a pointer index on an object list

dbglndexCreateEx

Create a sorted pointer index on an object list

dbglndexDestroy

Free the memory used by an index and its associated list

dbglndexDestroyEx

Free the memory used by a two-dimensional index and its associated lists

dbglndexList

Create a flat copy of a list from its index

dbglndexListEx

Create a flat copy of a two-dimensional list from its index

dbglndexReverse

Reverse the order of the list entries referenced by an index

dbglndexSave

Save the memory image of an indexed list to a disk file

dbglndexSaveEx

Save the memory image of a two-dimensional indexed list to a disk file

dbglndexSort

Sort the list entries referenced by an index by address, size, ID, or name

dbgListCreate

Create an empty list

dbgListCreateEx

Create an empty list with reserved space

dbgListDestroy

Free the memory used by a list

dbgListFinish

Terminate a sequentially built list and trim any unused memory

dbgListlndex

Create a pointer index on an object list

dbgListLoad

Create a list from a disk file image

dbgListNext

Update the list header after adding an entry

dbgListResize

Reserve memory for additional list entries

dbgListSave

Save the memory image of a list to a disk file

dbgMemory

Align Round up a byte count to the next 64-bit boundary

dbgMemoryAlignEx

Round up a string character count to the next 64-bit boundary

dbgMemoryBase

Query the internal base address of a heap memory block

dbgMemoryBaseEx

Query the internal base address of an individually tagged heap memory block

dbgMemoryCreate

Allocate a memory block from the heap

dbgMemoryCreateEx

Allocate an individually tagged memory block from the heap

dbgMemoryDestroy

Return a memory block to the heap

dbgMemoryDestroyEx

Return an individually tagged memory block to the heap

dbgMemoryReset

Reset the memory usage statistics

dbgMemoryResize

Change the allocated size of a heap memory block

dbgMemoryResizeEx

Change the allocated size of an individually tagged heap memory block

dbgMemoryStatus

Query the memory usage statistics

dbgMemory

Track Update the memory usage statistics

dbgModulelndex

Create an indexed (and optionally sorted) process module sub-list

dbgModuleList

Create a flat process module sub-list

dbgPathDriver

Build a default driver path specification

dbgPathFile

Get the offset of the file name token in a file path

dbgPrivilegeDebug

Request the debug privilege for the calling process

dbgPrivilegeSet

Request the specified privilege for the calling process

dbgProcessAdd

Add a process entry to a list of processes

dbgProcessGuess

Guess the default display name of an anonymous system process

dbgProcessIds

Return an array of process IDs (EnumProcesses ( ) wrapper)

dbgProcessIndex

Create an indexed (and optionally sorted) process list

dbgProcessIndexEx

Create a two-dimensional indexed (and optionally sorted) process/module list

dbgProcessList

Create a flat process list

dbgProcessModules

Return a list of process module handles (EnumProcessModules ( )wrapper)

dbgSizeDivide

Divide a byte count by a power of two, optionally rounding up or down

dbgSizeKB

Convert bytes to KB, optionally rounding up or down

dbgSizeMB

Convert bytes to MB, optionally rounding up or down

dbgStringAnsi

Convert a Unicode string to ANSI

dbgStringDay

Get the name of a day given a day-of-week number

dbgStringMatch

Apply a wildcard filter to a string

dbgSymbolCallback

Add a symbol entry to a list of symbols (called by SymEnumerateSymbols ( ) )

dbgSymbolIndex

Create an indexed (and optionally sorted) symbol list

dbgSymbolList

Create a flat symbol list

dbgSymbolLoad

Load a module's symbol table

dbgSymbolLookup

Look up a symbol name and optional offset given a memory address

dbgSymbolUnload

Unload a module's symbol table

上一篇:《Undocumented Windows 2000 Secrets》翻译 --- 3    下一篇:《Undocumented Windows 2000 Secrets》翻译 --- 2(1)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-4-8
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿