Книга Справочник по собственному API Windows NT / 2000 предоставляет исчерпывающую документацию (хотя и устаревшую) недокументированных (Microsoft) собственных API-интерфейсов. Но мне любопытно, есть ли в любом случае соответствие между низкоуровневыми функциями, объявленными в ntdll.dll, и функциями пользовательского режима в kernel32.dll, advapi.dll и т. Д.
Например:
Я знаю функцию CreateFile
карты для NtCreateFile
, Но у меня нет точной функции в ntdll.dll для MoveFileWithProgressW
функция в kernel32.dll
Вы можете вывести экспорт из системных библиотек пользовательского режима, используя 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» на странице)