Помогите с DRIVER_IRQL_NOT_LESS_OR_EQUAL

Тема в разделе "WASM.BEGINNERS", создана пользователем Igi, 9 янв 2008.

  1. Igi

    Igi New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2005
    Сообщения:
    35
    Написал драйвер. Работал нормально, но сегодня вдруг вывалился в синий экран. И работает дальше опять нормально - в чем дело не пойму. Загнал дамп в WinDBG, вот что он выдал:
    Код (Text):
    1. DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
    2. An attempt was made to access a pageable (or completely invalid) address at an
    3. interrupt request level (IRQL) that is too high.  This is usually
    4. caused by drivers using improper addresses.
    5. If kernel debugger is available get stack backtrace.
    6. Arguments:
    7. Arg1: e2e31494, memory referenced
    8. Arg2: 000000ff, IRQL
    9. Arg3: 00000000, value 0 = read operation, 1 = write operation
    10. Arg4: a9c7a2b6, address which referenced memory
    11.  
    12. READ_ADDRESS:  e2e31494 Paged pool
    13. CURRENT_IRQL:  ff
    14. FAULTING_IP:
    15. a9c7a2b6 39500c          cmp     dword ptr [eax+0Ch],edx
    16.  
    17. DEFAULT_BUCKET_ID:  DRIVER_FAULT
    18. BUGCHECK_STR:  0xD1
    19.  
    20. TRAP_FRAME:  a96d8ce0 -- (.trap 0xffffffffa96d8ce0)
    21. ErrCode = 00000000
    22. eax=e2e31488 ebx=c0000002 ecx=88e22a94 edx=000005d0 esi=88e22a90 edi=88e22aa0
    23. eip=a9c7a2b6 esp=a96d8d54 ebp=0012fc94 iopl=0         nv up di pl nz na po nc
    24. cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010002
    25. suhenter!BooksList2BookStructureBPID+0x26:
    26. a9c7a2b6 39500c          cmp     dword ptr [eax+0Ch],edx ds:0023:e2e31494=????????
    27. Resetting default scope
    28.  
    29. LAST_CONTROL_TRANSFER:  from a9c7a2b6 to 804e0aac
    30.  
    31. FAULTING_SOURCE_CODE:  
    32.    143:         PBOOK_STRUCTURE book_struc = (PBOOK_STRUCTURE)(BooksList->ListHead.Flink);
    33.    144:         while(TRUE){
    34.    145:             if (&book_struc->ListEntry == &BooksList->ListHead)
    35.    146:                 break;
    36. >  147:             if (book_struc->BookPid == BookPid)
    37.    148:             {
    38.    149:                 *BookStructure = book_struc;
    39.    150:                 ns = STATUS_SUCCESS;
    40.    151:                 break;
    41.    152:             }
    Этот код вызывается в обработчике INT3. book_struc создаю следующим образом:

    Код (Text):
    1. NTSTATUS NewBooksList(OUT PBOOKS_LIST *BooksList){
    2.     *BooksList = (PBOOKS_LIST)ExAllocatePool(NonPagedPool, sizeof(BOOKS_LIST));
    3.     (*BooksList)->Count = 5;
    4.     (*BooksList)->pPagedLookasideList = (PPAGED_LOOKASIDE_LIST)ExAllocatePool(NonPagedPool, sizeof(PAGED_LOOKASIDE_LIST));
    5.     ExInitializePagedLookasideList((*BooksList)->pPagedLookasideList, NULL, NULL, 0, sizeof(BOOK_STRUCTURE), 0, 0);
    6.     InitializeListHead(&(*BooksList)->ListHead);
    7.     NTSTATUS ns = ExInitializeResourceLite(&(*BooksList)->Resource);
    8.     DPRINT("BOOKS_LIST: New BOOKS_LIST Created");
    9.     if(!NT_SUCCESS(ns)){
    10.         DPRINT("Error ExInitializeResourceLite in NewBooksList");
    11.         ExDeletePagedLookasideList((*BooksList)->pPagedLookasideList);
    12.         ExFreePool(&(*BooksList)->pPagedLookasideList);
    13.         ExFreePool((*BooksList));
    14.     }
    15.     return ns;
    16. }
    Я так понял: из-за чего-то сбросился мой список в файл подкачки, и из-за этого все проблемы... Подскажите, правильно ли я понял и как этого избежать в будущем?