Как мне подключить собственные API-интерфейсы Windows из управляемого кода C#?
Я хочу использовать следующие нативные API:
NtOpenProcess
NtOpenThread
NtReadVirtualMemory
NtWriteVirtualMemory
PsCreateSystemThread
KiAttachProcess
Можно ли подключить эти API из управляемого кода C#? Если да, может ли кто-нибудь привести пример того, как это будет сделано?
1 ответ
Вы можете объявить NtOpenProcess с оригинальными аргументами, а затем DllImport("kernel32.dll") непосредственно перед его объявлением (вы можете использовать этот метод практически для любой комбинации DLL / процедуры).
Именно так:
[DllImport("kernel32.dll")]
internal static extern int NtOpenProcess(IntPtr32 arguments...);
Вот объяснение на MSDN.
Обновление: на самом деле то, что вы хотите сделать, выполнимо из C#, но с помощью C++. Если вы хотите перехватывать вызовы API из других программ, проще написать API-код, перехватывающий код на C++ (с использованием собственных функций Windows), а затем DllImport
-включая вашу C++ DLL в ваше приложение C#, делая только вызовы функций из кода C#.