Отображение высокоуровневых функций в 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" на странице)

Другие вопросы по тегам