Отображение высокоуровневых функций в dll пользовательского режима на NTDLL.dll

Книга Справочник по собственному API Windows NT / 2000 предоставляет исчерпывающую документацию (хотя и устаревшую) недокументированных (Microsoft) собственных API-интерфейсов. Но мне любопытно, есть ли в любом случае соответствие между низкоуровневыми функциями, объявленными в ntdll.dll, и функциями пользовательского режима в kernel32.dll, advapi.dll и т. Д.

Например:

Я знаю функцию CreateFile карты для NtCreateFile, Но у меня нет точной функции в ntdll.dll для MoveFileWithProgressW функция в kernel32.dll

1

Решение

Вы можете вывести экспорт из системных библиотек пользовательского режима, используя 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)

и т.п.

3

Другие решения

NT native API — это API более низкого уровня по сравнению со стандартным API Windows (пользовательский режим). Так что во многих случаях нет однозначного соответствия. Я предполагаю, что MoveFileWithProgress реализуется в пространстве пользователя с использованием процедур открытия / чтения / записи / закрытия более низкого уровня.

Другими словами, если вы хотите использовать Native API, вам нужно будет повторно реализовать несколько удобных функций, таких как MoveFileWithProgress,

Проект Wine имеет повторные реализации Windows API. Ты можешь видеть их реализация чтобы понять, как это делается. (Ищите «MoveFileWithProgress» на странице)

3

По вопросам рекламы [email protected]