Перехватил через sst NtClose, и хочу посмотреть имена всех закрываемых объектов, но драйвр каждый раз выпадает Код (Text): POBJECT_NAME_INFORMATION GetHandleName( IN HANDLE ObjectHandle ) { NTSTATUS Status; PVOID Object; POBJECT_NAME_INFORMATION ObjectName; // получаем объект связанный с описателем if (!NT_SUCCESS(Status = ObReferenceObjectByHandle(ObjectHandle, GENERIC_READ, NULL, KernelMode, &Object, NULL))) { IFDEBUG(DbgPrint("GetHandleName: Status=0x%x\n", Status)); return NULL; } ObjectName = GetObjectName(Object); ObDereferenceObject(Object); //DbgPrint("GetHandleName: Name=%S\n",ObjectName->Name.Buffer); return ObjectName; } А так я его вывожу на экран Код (Text): NTSTATUS __stdcall MyNtClose( IN HANDLE Handle) { POBJECT_NAME_INFORMATION ObjectName = GetHandleName(Handle); DbgPrint("ObjectName %S", (ObjectName->Name).Buffer); return pNtClose(Handle); } в чем проблема? в нулевых строках или в чем то еще? pNtClose - оригинальный оработчик
А где код GetObjectName? Предположу, что валится именно там. К тому же, далеко не все объекты ядра именованные. Давай сюда код и !analyze -v.
В нежелании научится пользоваться отладчиком. Я тут ничего советовать не буду. Проблема настолько простая, что ты легко разберёшься самостоятельно при помощи отладчика. Удачи.
Юникод строчки как правило не нуль-терминированы, и выводятся через %wZ. Но мало ли, автор у себя обнуляет буфер. А вообще х64 прав.