BSOD при создании irp

Тема в разделе "WASM.NT.KERNEL", создана пользователем Llirik, 24 дек 2010.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Пожалуйста, подскажите, что здесь не так.
    Код (Text):
    1.  QueryPnpDeviceState proc uses esi edi ebx pDeviceObject:PDEVICE_OBJECT
    2.  
    3.  local iosb:IO_STATUS_BLOCK
    4.  
    5.      mov esi, pDeviceObject
    6.      assume esi:ptr DEVICE_OBJECT
    7.  
    8.      .if ( esi != NULL  &&  [esi]._Type == IO_TYPE_DEVICE )
    9.  
    10.          movzx eax, [esi].StackSize
    11.          invoke IoAllocateIrp, eax, FALSE
    12.  
    13.          assume esi:nothing
    14.                
    15.          .if eax != NULL
    16.  
    17.              mov edi, eax
    18.              assume edi:ptr _IRP
    19.  
    20.              mov [edi].IoStatus.Status, STATUS_NOT_SUPPORTED
    21.              and [edi].IoStatus.Information, 0
    22.  
    23.              mov iosb.Status, STATUS_NOT_SUPPORTED
    24.              and iosb.Information, 0
    25.  
    26.              lea eax, iosb
    27.              mov [edi].UserIosb, eax
    28.  
    29.              assume edi:nothing
    30.  
    31.              IoGetNextIrpStackLocation edi
    32.              mov ebx, eax
    33.              assume ebx:ptr IO_STACK_LOCATION
    34.  
    35.              mov [ebx].MajorFunction, IRP_MJ_PNP
    36.              mov [ebx].MinorFunction, IRP_MN_QUERY_PNP_DEVICE_STATE
    37.  
    38.              assume ebx:nothing
    39.  
    40.              invoke IoCallDriver, esi, edi
    41. .endif
    42. .endif
    43.      ret
    44.    
    45.  QueryPnpDeviceState endp
    46.  
    47.  
    48.  
    49. DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
    50.  local status:NTSTATUS
    51.  
    52.      mov status, STATUS_DEVICE_CONFIGURATION_ERROR
    53.  
    54. invoke IoCreateDevice, pDriverObject, sizeof FiDO_DEVICE_EXTENSION, addr g_usDeviceName, FILE_DEVICE_UNKNOWN, \
    55.                                               0, FALSE, addr KeyDeviceObject
    56. .if eax == STATUS_SUCCESS
    57.          invoke IoCreateSymbolicLink, addr g_usSymbolicLinkName, addr g_usDeviceName
    58.  
    59.          .if eax == STATUS_SUCCESS
    60.  
    61.      invoke IoGetDeviceObjectPointer, addr g_usTargetDeviceName, FILE_READ_DATA, \
    62.                                       addr pTargetFileObject, addr pTargetDeviceObject
    63.             mov eax, pDriverObject
    64.              assume eax:PTR DRIVER_OBJECT
    65.     mov ecx, IRP_MJ_MAXIMUM_FUNCTION + 1
    66.     .while ecx
    67.     dec ecx
    68.     mov [eax].MajorFunction[ecx*(sizeof PVOID)], offset DriverDispatch
    69.     .endw
    70.              mov [eax].DriverUnload, offset DriverUnload
    71.              assume eax:nothing
    72. ;;;     invoke QueryValueKey
    73. ;;  invoke IoAttachDeviceToDeviceStack, KeyDeviceObject, pTargetDeviceObject   
    74. ;;;             .if eax != NULL
    75.   and gggfSpy, TRUE
    76.                     mov edx, eax
    77.  
    78.                     ; Fill filter device object extension
    79.  
    80.                     mov ecx, KeyDeviceObject
    81.                     mov eax, (DEVICE_OBJECT ptr [ecx]).DeviceExtension
    82.                     assume eax:ptr FiDO_DEVICE_EXTENSION
    83.                     mov [eax].pNextLowerDeviceObject, edx
    84.                     push pTargetFileObject
    85.                     pop [eax].pTargetFileObject
    86.                     assume eax:nothing
    87.  
    88.                     assume edx:ptr DEVICE_OBJECT
    89.                     assume ecx:ptr DEVICE_OBJECT
    90.  
    91.                     mov eax, [edx].DeviceType
    92.                     mov [ecx].DeviceType, eax
    93.  
    94.                     mov eax, [edx].Flags
    95.                     and eax, DO_DIRECT_IO + DO_BUFFERED_IO + DO_POWER_PAGABLE
    96.                     or [ecx].Flags, eax
    97.                     and [ecx].Flags, not DO_DEVICE_INITIALIZING
    98.                     assume edx:nothing
    99.                     assume ecx:nothing
    100.         invoke QueryPnpDeviceState, pTargetDeviceObject
     
  2. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    Dump в студию ...