2012-05-06 5 views
-2

Я хочу использовать следующие собственные API-интерфейсы:Как подключить собственные API окон от управляемого кода C#?

NtOpenProcess 
NtOpenThread 
NtReadVirtualMemory 
NtWriteVirtualMemory 
PsCreateSystemThread 
KiAttachProcess 

Можно ли подключить эти API-интерфейсы из управляемого кода C#? Если да, может ли кто-нибудь привести пример того, как это будет сделано?

+2

Все возможно. Пойдите, получите хорошую книгу о системном программировании Windows. –

+0

Вы уже пытались подключить некоторые другие API? если «Да», как только вы попытаетесь зацепить их выше того, что происходит? –

+0

Популярность SO означает, что люди больше не беспокоятся о самых фундаментальных исследованиях. Делает меня длинными для дней CodeProject. –

ответ

0

Вы можете объявить NtOpenProcess с исходными аргументами, а затем DllImport ("kernel32.dll") непосредственно перед его объявлением (вы можете использовать этот метод практически для любой комбинации dll/procedure).

Так же, как это:

[DllImport("kernel32.dll")] 
internal static extern int NtOpenProcess(IntPtr32 arguments...); 

Вот explanation on MSDN.

Обновление: На самом деле то, что вы хотите сделать, можно выполнять с C#, но с помощью C++. Если вы хотите перехватывать вызовы API из других программ, проще всего написать код перехвата API в C++ (с использованием встроенных функций Windows), а затем DllImport -в вашу C++ DLL в ваше приложение C#, выполняя только вызовы функций из кода C#.

+0

Благодарим вас за ответ. Я не хочу использовать некоторые api. как вы сказали в своем обновлении, я хочу перехватить api. Я должен использовать C++ для перехвата api? Если нет, то как перехватить api с помощью C#? – unbalanced

+0

Он хочет * перехватить * вызовы этих функций, то есть получать * уведомление * всякий раз, когда называет их другое приложение *. Это невозможно из управляемого кода, такого как C#, и вы не можете сделать это просто P/Вызов функции. (Я бы отказался, но кто-то изменил вопрос, чтобы сказать что-то еще, пока он был закрыт. Теперь он был снова открыт, поэтому я исправил его.) –

+0

На самом деле, мой ответ включает в себя руководство по перехвату вызовов API других программ , Это должно быть сделано в библиотеке C++, которая должна быть DllImport-ed в коде C#. Он будет P/вызывать собственный код на C++, который делает это для него. Может быть, я недостаточно объяснил, возможно, вы не прочитали ее полностью. –