将用户模式dll中的高级函数映射到NTDLL.dll

时间:2012-10-25 21:02:56

标签: c++ api dll ntdll nt-native-api

本书Windows NT/2000 Native API Reference提供了未记录(由Microsoft)Native API的全面文档(即使已过时)。但我很好奇,无论如何找到ntdll.dll中声明的低级函数和kernel32.dll,advapi.dll等中的用户模式函数之间的映射。

例如:

我知道函数CreateFile映射到NtCreateFile。但是我没有ntdll.dll中针对kernel32.dll中的MoveFileWithProgressW函数的确切函数

2 个答案:

答案 0 :(得分:3)

与标准Windows(用户模式)API相比,NT本机API是一种较低级别的API。因此在许多情况下没有一对一的通信。我猜测MoveFileWithProgress是使用较低级别的开放/读/写/关闭例程在用户空间中实现的。

换句话说,如果你想使用Native API,你需要重新实现一堆便利功能,如MoveFileWithProgress

Wine项目重新实现了Windows API。您可以看到their implementation来了解它是如何完成的。 (在页面中搜索“MoveFileWithProgress”)

答案 1 :(得分:3)

您可以使用Windows SDK / Visual Studio中的dumpbin.exe实用程序从用户模式系统DLL转储导出,并查找转发的函数:

dumpbin -exports kernel32.dll | find/I "forwarded" > fwd.txt

这将创建包含转发函数列表的fwd.txt文件,如下所示:

151   96  EnterCriticalSection (forwarded to NTDLL.RtlEnterCriticalSection)
361  168  GetLastError (forwarded to NTDLL.RtlGetLastWin32Error)
518  205  HeapAlloc (forwarded to NTDLL.RtlAllocateHeap)
524  20B  HeapFree (forwarded to NTDLL.RtlFreeHeap)
528  20F  HeapReAlloc (forwarded to NTDLL.RtlReAllocateHeap)
530  211  HeapSize (forwarded to NTDLL.RtlSizeHeap)