2010-06-20 3 views
1

Мне очень интересно, какой API-интерфейс для Windows. Я искал сеть и не смог найти пример вызова функции Native API из пользовательского режима. Я считаю, что у меня есть общее понимание того, что это влечет за собой - в частности, я должен определить константы и собственную функцию API в своей программе и использовать GetProcAddress для поиска функции в файле ntdll.dll, а затем вызвать функцию.Доступ к внутреннему API-интерфейсу Windows из пользовательского режима

Это правильно, и может ли кто-нибудь направить меня в правильном направлении? Образец кода сделает мой день, поскольку я не могу найти абсолютно ничего.

Я наткнулся на этот код здесь (http://www.eggheadcafe.com/software/aspnet/31520494/native-application--ntc.aspx), но мне кажется, что он предназначен для работы в режиме ядра:

NTSTATUS ntStatus = STATUS_SUCCESS; 
UNICODE_STRING szPath = {0}; 
OBJECT_ATTRIBUTES Attr = {0}; 
IO_STATUS_BLOCK IoStatusBlock = {0}; 
HANDLE  hBeep = 0; 

RtlInitUnicodeString(&szPath, L"\\??\\C:\\A.TXT"); 
InitializeObjectAttributes(&Attr, &szPath, 0, NULL, NULL); 

ntStatus = NtCreateFile(&hBeep, GENERIC_READ, &Attr, &IoStatusBlock, NULL, 
0, FILE_SHARE_READ, FILE_OPEN, 0, NULL, 0); 

if (hBeep != NULL) 
{ 
NtClose(ntStatus); 

Как этот код будет изменен, чтобы работать в пользовательском режиме? Я работаю на C++, так как вы, вероятно, догадались об этом.

Заранее спасибо.

ответ

2

Я не большой поклонник использования недокументированных API, но иногда вам нужно сделать что-то, что не отображается в Win32 API. Некоторые из встроенных API были задокументированы в MSDN (вероятно, из-за урегулирования в то время как обратно). Обычно я использую ссылку на NTinternals.net, хотя она не обновлялась через некоторое время, и она использует ужасный Java-апплет для навигации. Вероятно, есть некоторые примеры кода в таких местах, как Code Project и др.

5

NtCreateFile() уже является функцией пользовательского режима. Версия драйвера - ZwCreateFile(). Фактически это documented, объявление доступно в файле заголовка winternl.h SDK. Однако отсутствует библиотека импорта для ntdll.dll, вам нужно использовать LoadLibrary и GetProcAddress, чтобы получить точку входа для этой функции.

Помимо проблемы со звонком, обычное предостережение заключается в том, что эти собственные функции API могут меняться без уведомления в следующей версии Windows.

 Смежные вопросы

  • Нет связанных вопросов^_^