Отображение высокоуровневых функций в dll пользовательского режима на NTDLL.dll
В книге " Справочник по собственному API для Windows NT/2000" представлена исчерпывающая (даже устаревшая) документация недокументированных (Microsoft) собственных API. Но мне любопытно, есть ли в любом случае соответствие между низкоуровневыми функциями, объявленными в ntdll.dll, и функциями пользовательского режима в kernel32.dll, advapi.dll и т. Д.
Например:
Я знаю функцию CreateFile
карты для NtCreateFile
, Но у меня нет точной функции в ntdll.dll для MoveFileWithProgressW
функция в kernel32.dll
2 ответа
Вы можете выгрузить экспорт из системных библиотек пользовательского режима, используя dumpbin.exe
Утилита из Windows SDK/Visual Studio и ищет переадресованные функции:
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)
и т.п.
NT native API - это API более низкого уровня по сравнению со стандартным API Windows (пользовательский режим). Так что во многих случаях нет однозначного соответствия. Я предполагаю, что MoveFileWithProgress
реализуется в пространстве пользователя с использованием процедур открытия / чтения / записи / закрытия более низкого уровня.
Другими словами, если вы хотите использовать Native API, вам нужно будет повторно реализовать несколько удобных функций, таких как MoveFileWithProgress
,
Проект Wine имеет повторные реализации Windows API. Вы можете увидеть их реализацию, чтобы получить представление о том, как это делается. (Поиск "MoveFileWithProgress" на странице)