Получение списка объектов ядра windows

  • ПРИВЕТ!

Я держу пари больше недели и не могу составить полную картину того, как можно получить список объектов ядра. Мой алгоритм выглядит следующим образом:

  • 1) Подключение NTDLL.dll (LoadLibrary)
  • 2) GetProcAddress (variable_Library_name, "NtQueryDirectoryObject") и структуры предварительного объявления: _OBJDIR_INFORMATION, _OBJECT_ATTRIBUTES
  • 3) Попытка применить функцию NtOpenDirectoryObject для списка объектов

Вот фрагмент кода, который отвечает за использование функции NtOpenDirectoryObject: http://pastebin.com/pDNb3GTn

При вызове функции с параметрами NtOpenDirectoryObject получают исключение c0000005, что означает, что доступ заблокирован.

скажите, пожалуйста, я что-то делаю неправильно и где моя ошибка? Можно ли не использовать родной API? Спасибо за помощь

1 ответ

Исключение c0000005 является нарушением прав доступа. Это не значит, что доступ был заблокирован. Это означает, что к недопустимой памяти обращались, например, если был получен доступ к NULL/ неинициализированному указателю, или если вы неправильно выравниваете данные и обращаетесь к чему-то вне границ того, что вы выделили.

Как упоминал Эндрю, вы не инициализируете UNICODE_STRING совсем. Попробуйте это вместо этого:

hNtdll = LoadLibrary("ntdll.dll");
NtOpenDirectoryObject = (NTOPENDIRECTORYOBJECT) GetProcAddress(hNtdll, "NtOpenDirectoryObject");
...
if (NtOpenDirectoryObject)
{ 
    // add these three lines
    str.Length = lstrlenW(uString) * sizeof(WCHAR);  
    str.MaximumLength = str.Length; 
    str.Buffer = uString;

    InitializeObjectAttributes (&obj, &str, 0, NULL, NULL);
    NtOpenDirectoryObject(&hFile, 0x20001, &obj);
}
Другие вопросы по тегам