Как мне подключить собственные 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#.

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