Maveric либо ошибка в заполнении ирп, либо повреждение занимаемой им памяти, либо ошибки в передаче между средними драйверами, либо ошибочная передача ирп от нижнего драйвера ниже по стеку, когда уже некуда передавать
!irp Код (Text): 0: kd> !irp 0x818c64b8 Irp is active with 0 stacks 0 is current (= 0x818c6528) No Mdl: System buffer=81905df0: Thread 821c6b30: Irp stack trace. cmd flg cl Device File Completion-Context dt nt!_irp r 0x818c64b8 Код (Text): 0: kd> dt nt!_IRP -r 0x818c64b8 +0x000 Type : 6 +0x002 Size : 0x190 +0x004 MdlAddress : (null) +0x008 Flags : 0x70 +0x00c AssociatedIrp : __unnamed +0x000 MasterIrp : 0x81905df0 _IRP +0x000 Type : 512 +0x002 Size : 0 +0x004 MdlAddress : 0x00010100 _MDL +0x008 Flags : 0xeca000 +0x00c AssociatedIrp : __unnamed +0x010 ThreadListEntry : _LIST_ENTRY [ 0x0 - 0x0 ] +0x018 IoStatus : _IO_STATUS_BLOCK +0x020 RequestorMode : 117 'u' +0x021 PendingReturned : 0xb '' +0x022 StackCount : 0 '' +0x023 CurrentLocation : 0 '' +0x024 Cancel : 0x9 '' +0x025 CancelIrql : 0 '' +0x026 ApcEnvironment : 0 '' +0x027 AllocationFlags : 0x6 '' +0x028 UserIosb : 0x821e2e10 _IO_STATUS_BLOCK +0x02c UserEvent : 0x821e2e10 _KEVENT +0x030 Overlay : __unnamed +0x038 CancelRoutine : 0x81905e60 void +ffffffff81905e60 +0x03c UserBuffer : 0x00010000 +0x040 Tail : __unnamed +0x000 IrpCount : -2121245200 +0x000 SystemBuffer : 0x81905df0 +0x010 ThreadListEntry : _LIST_ENTRY [ 0x821c6d40 - 0x821c6d40 ] +0x000 Flink : 0x821c6d40 _LIST_ENTRY [ 0x818c64c8 - 0x818c64c8 ] +0x000 Flink : 0x818c64c8 _LIST_ENTRY [ 0x821c6d40 - 0x821c6d40 ] +0x004 Blink : 0x818c64c8 _LIST_ENTRY [ 0x821c6d40 - 0x821c6d40 ] +0x004 Blink : 0x821c6d40 _LIST_ENTRY [ 0x818c64c8 - 0x818c64c8 ] +0x000 Flink : 0x818c64c8 _LIST_ENTRY [ 0x821c6d40 - 0x821c6d40 ] +0x004 Blink : 0x818c64c8 _LIST_ENTRY [ 0x821c6d40 - 0x821c6d40 ] +0x018 IoStatus : _IO_STATUS_BLOCK +0x000 Status : 0 +0x000 Pointer : (null) +0x004 Information : 0 +0x020 RequestorMode : 0 '' +0x021 PendingReturned : 0 '' +0x022 StackCount : 0 '' +0x023 CurrentLocation : 0 '' +0x024 Cancel : 0 '' +0x025 CancelIrql : 0 '' +0x026 ApcEnvironment : 0 '' +0x027 AllocationFlags : 0x4 '' +0x028 UserIosb : 0xf88c7808 _IO_STATUS_BLOCK +0x000 Status : 0 +0x000 Pointer : (null) +0x004 Information : 0x18 +0x02c UserEvent : 0xf88c77f8 _KEVENT +0x000 Header : _DISPATCHER_HEADER +0x000 Type : 0 '' +0x001 Absolute : 0xb5 '' +0x002 Size : 0x4 '' +0x003 Inserted : 0xe1 '' +0x004 SignalState : 0 +0x008 WaitListHead : _LIST_ENTRY [ 0xf88c7800 - 0xf88c7800 ] +0x030 Overlay : __unnamed +0x000 AsynchronousParameters : __unnamed +0x000 UserApcRoutine : (null) +0x004 UserApcContext : (null) +0x000 AllocationSize : _LARGE_INTEGER 0x0 +0x000 LowPart : 0 +0x004 HighPart : 0 +0x000 u : __unnamed +0x000 QuadPart : 0 +0x038 CancelRoutine : (null) +0x03c UserBuffer : 0xf88c757c +0x040 Tail : __unnamed +0x000 Overlay : __unnamed +0x000 DeviceQueueEntry : _KDEVICE_QUEUE_ENTRY +0x000 DriverContext : [4] (null) +0x010 Thread : 0x821c6b30 _ETHREAD +0x014 AuxiliaryBuffer : 0x00000020 "" +0x018 ListEntry : _LIST_ENTRY [ 0x7c088 - 0x0 ] +0x020 CurrentStackLocation : 0x818c6528 _IO_STACK_LOCATION +0x020 PacketType : 0x818c6528 +0x024 OriginalFileObject : 0x817f5548 _FILE_OBJECT +0x000 Apc : _KAPC +0x000 Type : 0 +0x002 Size : 0 +0x004 Spare0 : 0 +0x008 Thread : (null) +0x00c ApcListEntry : _LIST_ENTRY [ 0xe - 0x821c6b30 ] +0x014 KernelRoutine : 0x00000020 void +20 +0x018 RundownRoutine : 0x0007c088 void +7c088 +0x01c NormalRoutine : (null) +0x020 NormalContext : 0x818c6528 +0x024 SystemArgument1 : 0x817f5548 +0x028 SystemArgument2 : (null) +0x02c ApcStateIndex : 0 '' +0x02d ApcMode : 0 '' +0x02e Inserted : 0 '' +0x000 CompletionKey : (null)
Ещё такой момент выяснился. Если багчек происходит при загрузке системы, то это либо 0x7e, 0x7f, 0x8e и крэшдамп не создаётся. Если система загрузилась(высокая вероятность) и в диспетчере устройств отключать/включать усстройство ,то иногда возникает багчек NO_MORE_IRP_STACK_LOCATIONS и создаётся дамп.
Great убрал всё между IoBuildDeviceIoControlRequest и IoCallDriver. Написал скрипт который включает/выключает устройство. Работает несколько часов полёт нормальный...
ну.. я не шибко разбираюсь в заполнении irp пакета, но раз ты убрал и работает, значит ты заполнял неправильно ) может быть в pNextStack = IoGetNextIrpStackLocation(pIRP) получался какойто левый адрес