Получение списка объектов ядра 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);
}