вылезает бсод при DbgPrint. ObjectAttributes->RootDirectory – это handle key реестра, полученный перехватом NtOpenKey. Он правильный, так как ZwQueryKey работает нормально, но не возвращает полного пути до key. Код (Text): POBJECT_NAME_INFORMATION info; ULONG length = 0; ZwQueryObject(ObjectAttributes->RootDirectory, ObjectNameInformation, NULL, 0, &length); if (length > 0) { info = (POBJECT_NAME_INFORMATION) ExAllocatePool(PagedPool, length); ZwQueryObject(ObjectAttributes->RootDirectory, ObjectNameInformation, info, length, &length); DbgPrint("Additional info: %wZ", info->Name); }
info == NULL || info->Name == NULL? для начала результат вызова ZwQueryObject стоит проверить на равенство 0 и таинство дзена почти наверняка откроется во всей красе.
Нет, они не равны NULL, но я нашел в чем проблема. %wZ означает, что нужно передавать PUNICODE_STRING, а не UNICODE_STRING, то есть правильно Код (Text): DbgPrint("Additional info: %wZ", &info->Name); Я раньше много раз пользовался %wZ и всегда указывал правильно, сейчас мозг мне отказал.... Кстати полное имя ключа реестра берется отлично, всем спасибо!