Bugcheck, что не так?

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 29 июн 2006.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    В очередной раз вылетила система, явно из-за моих действий, точнее драйвера.

    Присходит, это при работе с отложенными IRP пакетами,

    алгоритм следующий:

    - в диспечире, маркеруется IRP как отложенный;

    - в подзадаче, обрабатываю отложенный пакет и завершаю его



    но через какой-то промежуток времени система валиться(см. листинг ниже), скорей всего я что-то не доделываю с пакетом, но вот что?

    такое ощущение, что после IoCompleteRequest (irp, IO_NO_INCREMENT); Irp продолжает жить, но "полуразрушенным"



    работа драйвера проходит под verifier'ом.




    Код (Text):
    1.  
    2. ********************************************************************** *********
    3. *                                                                             *
    4. *                        Bugcheck Analysis                                    *
    5. *                                                                             *
    6. ********************************************************************** *********
    7.  
    8. DRIVER_VERIFIER_IOMANAGER_VIOLATION (c9)
    9. The IO manager has caught a misbehaving driver.
    10. Arguments:
    11. Arg1: 0000000c, Invalid IOSB in IRP at APC IopCompleteRequest (appears to be on
    12.     stack that was unwound)
    13. Arg2: f144773c, the IOSB pointer , 3/4 - 0
    14. Arg3: 00000000
    15. Arg4: 00000000
    16.  
    17. Debugging Details:
    18. ------------------
    19.  
    20.  
    21. OVERLAPPED_MODULE:  vpc_s3_ee959000
    22.  
    23. DRIVER_VERIFIER_IO_VIOLATION_TYPE:  c
    24.  
    25. DEFAULT_BUCKET_ID:  INTEL_CPU_MICROCODE_ZERO
    26.  
    27. BUGCHECK_STR:  0xC9
    28.  
    29. LAST_CONTROL_TRANSFER:  from 804255df to 804262a3
    30.  
    31. IRP_ADDRESS:  fae80e48
    32.  
    33. STACK_TEXT:  
    34. f1447c7c 804255df fae80e88 f1447d20 f1447d24 nt!IovpCompleteRequest+0x2f
    35. f1447cf0 804310fc fae80e88 f1447d28 f1447d1c nt!IopCompleteRequest+0x55
    36. f1447d2c 80404280 00000000 00000000 00000000 nt!KiDeliverApc+0x7c
    37. f1447d4c 8042f1a7 814152a8 8046dc20 814143a0 nt!KiSwapThread+0xfc
    38. f1447d70 80419165 00000000 00000200 00000000 nt!KeRemoveQueue+0x195
    39. f1447da8 80455a16 814152a8 00000000 00000000 nt!ExpWorkerThread+0x73
    40. f1447ddc 80469bb2 804190f0 00000000 00000000 nt!PspSystemThreadStartup+0x69
    41. 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
    42.  
    43.  
    44. FOLLOWUP_IP:
    45. nt!IovpCompleteRequest+2f
    46. 804262a3 8b4eec           mov     ecx,[esi-0x14]
    47.  
    48. SYMBOL_STACK_INDEX:  0
    49.  
    50. FOLLOWUP_NAME:  MachineOwner
    51.  
    52. SYMBOL_NAME:  nt!IovpCompleteRequest+2f
    53.  
    54. MODULE_NAME:  nt
    55.  
    56. IMAGE_NAME:  ntoskrnl.exe
    57.  
    58. DEBUG_FLR_IMAGE_TIMESTAMP:  3ee6c002
    59.  
    60. STACK_COMMAND:  kb
    61.  
    62. FAILURE_BUCKET_ID:  0xC9_nt!IovpCompleteRequest+2f
    63.  
    64. BUCKET_ID:  0xC9_nt!IovpCompleteRequest+2f
    65.  
    66. Followup: MachineOwner
    67. ---------
    68.  
     
  2. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    DRIVER_VERIFIER_IOMANAGER_VIOLATION (c9)

    The IO manager has caught a misbehaving driver.

    Arguments:

    Arg1: 0000000c, Invalid IOSB in IRP at APC IopCompleteRequest (appears to be on

    stack that was unwound)

    Arg2: f144773c, the IOSB pointer , 3/4 - 0

    Arg3: 00000000

    Arg4: 00000000







    I/O Status Block правильно заполняешь? Код в студию.
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Код (Text):
    1. IovpCompleteRequest(
    2.     IN PKAPC Apc,
    3.     IN PVOID *SystemArgument1,
    4.     IN PVOID *SystemArgument2
    5.     )
    6. {
    7.     PIRP    irp;
    8.     PUCHAR addr;
    9.     ULONG   BestStackOffset;
    10.  
    11.     irp = CONTAINING_RECORD( Apc, IRP, Tail.Apc );
    12.  
    13.     addr = (PUCHAR)irp->UserIosb;
    14.  
    15.     if ((addr > (PUCHAR)KeGetCurrentThread()->StackLimit) &&
    16.         (addr <= (PUCHAR)&BestStackOffset)) {
    17.  
    18.         KeBugCheckEx(DRIVER_VERIFIER_IOMANAGER_VIOLATION,
    19.                      IO_INVALID_STACK_IOSB,
    20.                      (ULONG_PTR)addr,
    21.                      0, 0);
    22.     }




    Адрес irp->UserIosb указывает на недействительную область стека потока. f144773c < f1447c7c.



    Ищи где ты делаешь irp->UserIosb = &ioStatus;
     
  4. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Four-F, да я уже глянул в исходники, только проблема была как раз в том, что я чучуть не верно работал с очередями, я думал, что IoCompleteRequest нужно делать мне, как показывает практика это не так.