Помогите BSOD разобарть...

Тема в разделе "WASM.NT.KERNEL", создана пользователем test555, 3 мар 2009.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Итак, либо я неправильно проверяю (забыл что-нибудь раскомментировать), но необходимо было сделать следующее:
    вместо тайм-аута для ожидания семафора
    LARGE_INTEGER Wait;

    Описать указатель, и выделить неподкачиваемую для него память.
    Сделал - вроде получилось, и работает..

    Но все равно при втыкании флеша на этого места кода не доходит 0_о

    Проблема вроде бы решена..
     
  2. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Фокусы продолжаются.

    Вот участок кода:
    Код (Text):
    1.            
    2. if ((RES1>0)&& (status ==0xc0000004 ))
    3. {
    4. Obj_name= (POBJECT_NAME_INFORMATION) ExAllocatePool(NonPagedPool, RES1);
    5. status = ObQueryNameString(pFileObject->DeviceObject, Obj_name , RES1 ,  &returned);
    6. DPRINT("%S %S, STatus = %x, need size = %ld, returned %ld", Obj_name->Name.Buffer,pFileObject->FileName.Buffer, status, RES1, returned);
    7.                          
    8.                         if (status==0)                 
    9.                         {
    10.                             Wait =(PLARGE_INTEGER)ExAllocatePool(NonPagedPool, sizeof(LARGE_INTEGER));         
    11.                             Wait->LowPart = SEMAPHORE_TIMEOUT;
    12.                             Wait->HighPart = -1;
    13.  
    14.                             KeWaitForSingleObject(pg_pksemaphore,Executive, KernelMode, FALSE, Wait);
    15.                             ExFreePool(Wait);
    16.  
    17.                             RtlUnicodeStringToAnsiString( &ansiStr, &Obj_name->Name, TRUE );
    18.                             RES1= (ansiStr.Length > MAX_PATH_2/2 ? MAX_PATH_2/2: ansiStr.Length);
    19.                             memset(g_buffer, 0 ,MAX_PATH_2);
    20.                             strncpy(g_buffer, ansiStr.Buffer, RES1);
    21.                             RtlFreeAnsiString(&ansiStr);
    22.                            
    23.                             RtlUnicodeStringToAnsiString( &ansiStr, &pFileObject->FileName, TRUE );
    24.                             strcat(g_buffer,ansiStr.Buffer);
    25.                             RtlFreeAnsiString(&ansiStr);
    26.                            
    27.                             KeSetEvent(g_pkEventObject, 0, FALSE);
    28.  
    29.                     }  
    30.                         ExFreePool(Obj_name);
    31.                        
    32.                         }
    В таком виде он работает, БСОДОВ не выдается.
    Однако если закомментировать
    Код (Text):
    1. 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? вроде так..)
    Как это понимать?
     
  3. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Чтобы БСОДА не было, пришлось добавить пару строк вместо DPRINT
    Код (Text):
    1. Wait =(PLARGE_INTEGER)ExAllocatePool(NonPagedPool, sizeof(LARGE_INTEGER));
    2. ExFreePool(Wait);
    Мда..
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    test555
    Поставь наконец отладчик и продебаж и посмотри. http://cracklab.ru/download.php?action=get&n=ODU1
    Дело пяти минут, не пойму что тебе мешает..
     
  5. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Скачиваю. Мешает наверное то что никогда этого не делал и слово отладчик для меня не очень приятно звучит из-за слабого знания ассемблера.
    Буду исправлять свой баг.
     
  6. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    в отладчике не только в машинных кодах, а еще и с исходником можно ладить
     
  7. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Скачал, первое знакомство произошло..
    Кажись - прикольная штука..
     
  8. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Ребята, всем спасибо. Разобрался. Была ошибка в исходнике,
    Код (Text):
    1. if (pFileObject!=NULL) ObDereferenceObject(&pFileObject);
    где
    Код (Text):
    1. PFILE_OBJECT pFileObject;
    Правильно будет
    Код (Text):
    1. if (pFileObject!=NULL) ObDereferenceObject(pFileObject);
    Помог syser. Не имел опыта в отладке, справился довольно быстро, даже понравилось...