Итак, либо я неправильно проверяю (забыл что-нибудь раскомментировать), но необходимо было сделать следующее: вместо тайм-аута для ожидания семафора LARGE_INTEGER Wait; Описать указатель, и выделить неподкачиваемую для него память. Сделал - вроде получилось, и работает.. Но все равно при втыкании флеша на этого места кода не доходит 0_о Проблема вроде бы решена..
Фокусы продолжаются. Вот участок кода: Код (Text): if ((RES1>0)&& (status ==0xc0000004 )) { Obj_name= (POBJECT_NAME_INFORMATION) ExAllocatePool(NonPagedPool, RES1); status = ObQueryNameString(pFileObject->DeviceObject, Obj_name , RES1 , &returned); DPRINT("%S %S, STatus = %x, need size = %ld, returned %ld", Obj_name->Name.Buffer,pFileObject->FileName.Buffer, status, RES1, returned); if (status==0) { Wait =(PLARGE_INTEGER)ExAllocatePool(NonPagedPool, sizeof(LARGE_INTEGER)); Wait->LowPart = SEMAPHORE_TIMEOUT; Wait->HighPart = -1; KeWaitForSingleObject(pg_pksemaphore,Executive, KernelMode, FALSE, Wait); ExFreePool(Wait); RtlUnicodeStringToAnsiString( &ansiStr, &Obj_name->Name, TRUE ); RES1= (ansiStr.Length > MAX_PATH_2/2 ? MAX_PATH_2/2: ansiStr.Length); memset(g_buffer, 0 ,MAX_PATH_2); strncpy(g_buffer, ansiStr.Buffer, RES1); RtlFreeAnsiString(&ansiStr); RtlUnicodeStringToAnsiString( &ansiStr, &pFileObject->FileName, TRUE ); strcat(g_buffer,ansiStr.Buffer); RtlFreeAnsiString(&ansiStr); KeSetEvent(g_pkEventObject, 0, FALSE); } ExFreePool(Obj_name); } В таком виде он работает, БСОДОВ не выдается. Однако если закомментировать Код (Text): DPRINT("%S %S, STatus = %x, need size = %ld, returned %ld", Obj_name->Name.Buffer,pFileObject->FileName.Buffer, status, RES1, returned); То получаю БСОД (PAGE_FAILT_IN_NONPAGED_AREA? вроде так..) Как это понимать?
Чтобы БСОДА не было, пришлось добавить пару строк вместо DPRINT Код (Text): Wait =(PLARGE_INTEGER)ExAllocatePool(NonPagedPool, sizeof(LARGE_INTEGER)); ExFreePool(Wait); Мда..
test555 Поставь наконец отладчик и продебаж и посмотри. http://cracklab.ru/download.php?action=get&n=ODU1 Дело пяти минут, не пойму что тебе мешает..
Скачиваю. Мешает наверное то что никогда этого не делал и слово отладчик для меня не очень приятно звучит из-за слабого знания ассемблера. Буду исправлять свой баг.
Ребята, всем спасибо. Разобрался. Была ошибка в исходнике, Код (Text): if (pFileObject!=NULL) ObDereferenceObject(&pFileObject); где Код (Text): PFILE_OBJECT pFileObject; Правильно будет Код (Text): if (pFileObject!=NULL) ObDereferenceObject(pFileObject); Помог syser. Не имел опыта в отладке, справился довольно быстро, даже понравилось...