TDI BSOD в e1000325.sys при разрыве соединения

Тема в разделе "WASM.NT.KERNEL", создана пользователем simon, 25 янв 2011.

  1. simon

    simon New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2010
    Сообщения:
    19
    Прозьба подсказать возможные причины падения системы (win serv 2003 sp2) ,пытаюсь реализовать tdi сервер .
    На данный момент нормально создаеться local address,connection endpoint, connection context , в обшем драйвер начинает слушать опред. порт и успешно позволяет приконектиться на случай обрыва соединения регестрирую событие :
    Код (Text):
    1.   NTSTATUS TdiFuncs_SetEventHandler(...)
    2.   {
    3.       ...
    4.      KeInitializeEvent(&Context, NotificationEvent, FALSE);
    5.      pTdiDevice = IoGetRelatedDeviceObject(pFileObject);
    6.      pIrp = TdiBuildInternalDeviceControlIrp(TDI_SET_EVENT_HANDLER, ..);
    7.      if(pIrp)
    8.      {        
    9.          TdiBuildSetEventHandler(pIrp,
    10.                                           pTdiDevice,
    11.                                           pFileObject,
    12.                                           NULL,
    13.                                           NULL,
    14.                                           TDI_EVENT_DISCONNECT,
    15.                                           ClientEventDisconnect,
    16.                                           (PVOID)pData);
    17.  
    18.         status = IoCallDriver(pTdiDevice, pIrp);
    19.  
    20.         if(status == STATUS_PENDING)
    21.         {
    22.             KeWaitForSingleObject(&Context, Executive, KernelMode, FALSE, NULL);
    23.             status = IoStatusBlock.Status;
    24.         }
    25.                   ...
    26.        
    27.     }
    28.     ...
    29.     return status;  
    30. }
    31. void ClientEventDisconnect(PVOID pData)
    32. {
    33.     //KIRQL nirql = PASSIVE_LEVEL,oldirql;   // пробовал понижать до PASSIVE_LEVEL , так вызываеться на DISPATCH_LEVEL
    34.  
    35.     //KeRaiseIrql(nirql,&oldirql);                
    36.     KeSetEvent (pDisconnectEvent,0,0);
    37.     return ;
    38. }
    В момент разрыва соединения успешно вызываеться ClientEventDisconnect pData указывает на структ. ,пока не использую , падение происходит после выполнения KeSetEvent
    Код (Text):
    1. 1: kd> !analyze -v
    2. *******************************************************************************
    3. *                                                                             *
    4. *                        Bugcheck Analysis                                    *
    5. *                                                                             *
    6. *******************************************************************************
    7.  
    8. ATTEMPTED_SWITCH_FROM_DPC (b8)
    9. A wait operation, attach process, or yield was attempted from a DPC routine.
    10. This is an illegal operation and the stack track will lead to the offending
    11. code and original DPC routine.
    12. Arguments:
    13. Arg1: f7732090, Original thread which is the cause of the failure
    14. Arg2: 8710cc40, New thread
    15. Arg3: f78b3000, Stack address of the original thread
    16. Arg4: 00000000
    17.  
    18. Debugging Details:
    19. ------------------
    20. FAULTING_THREAD:  f7732090
    21.  
    22. DEFAULT_BUCKET_ID:  DRIVER_FAULT
    23.  
    24. BUGCHECK_STR:  0xB8
    25.  
    26. PROCESS_NAME:  csrss.exe
    27.  
    28. CURRENT_IRQL:  1b
    29.  
    30. LAST_CONTROL_TRANSFER:  from 80a5c1ae to 8088dba1
    31.  
    32. STACK_TEXT:  
    33. f78b2738 80a5c1ae f78b2784 f78b2800 00000002 nt!KiDispatchInterrupt+0xb1
    34. f78b274c 80a5c3d9 00000002 f78b2784 f78b2784 hal!HalpDispatchSoftwareInterrupt+0x5e
    35. f78b2768 80a5c577 869285d8 f78b2784 80a59902 hal!HalpCheckForSoftwareInterrupt+0x81
    36. f78b2774 80a59902 00000000 000000e1 f78b2804 hal!HalEndSystemInterrupt+0x67
    37. f78b2774 80a5a3c0 00000000 000000e1 f78b2804 hal!HalpIpiHandler+0xd2
    38. f78b27f4 f6a4a8a6 00000000 869285d8 f78b283c hal!KfAcquireSpinLock
    39. f78b2804 f6a4bb80 869285d8 00000000 00000000 tcpip!DelayDerefAO+0x15
    40. f78b283c f6a39f95 86c11978 f78b2a24 c0000237 tcpip!NotifyOfDisc+0x19a
    41. f78b290c f6a43236 86d16648 2201a8c0 2101a8c0 tcpip!TCPRcv+0x15fd
    42. f78b296c f6a65cb9 00000020 86d16648 f6a469d2 tcpip!DeliverToUser+0x189
    43. f78b29e8 f6a549d8 86b85158 86d16648 86c6100e tcpip!DeliverToUserEx+0x951
    44. f78b2a7c f6a41684 86d16648 86c61022 0000001a tcpip!IPRcvPacket+0x6e1
    45. f78b2abc f6a41517 00000000 86b48718 86c61000 tcpip!ARPRcvIndicationNew+0x167
    46. f78b2b14 f713e208 874839d8 86b48718 86d61008 tcpip!ARPRcvPacket+0x2f9
    47. f78b2b68 f6f2558d 86a73740 f78b2bac 00000001 NDIS!ethFilterDprIndicateReceivePacket+0x385
    48. f78b2b88 f6f262bd 86d61008 f78b2bac 00000001 e1000325!ReceivePacketArrayIndicate+0x1d
    49. f78b2cbc f6f26393 86d61008 f78b2ceb 86a73740 e1000325!RxProcessReceiveArray+0x8d
    50. f78b2ce0 f7133466 00d61008 f772fa40 86d6135c e1000325!E1000HandleInterrupt+0xa7
    51. f78b2cf8 808320f0 86d6135c 86d61348 00000000 NDIS!ndisMDpcX+0x21
    52. f78b2d50 8088de1f 00000000 0000000e 00000000 nt!KiRetireDpcList+0xca
    53. f78b2d54 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x37
    54.  
    55.  
    56. STACK_COMMAND:  .thread 0xfffffffff7732090 ; kb
    57.  
    58. FOLLOWUP_IP:
    59. e1000325!ReceivePacketArrayIndicate+1d
    60. f6f2558d 8b7514          mov     esi,dword ptr [ebp+14h]
    61.  
    62. SYMBOL_STACK_INDEX:  f
    63.  
    64. SYMBOL_NAME:  e1000325!ReceivePacketArrayIndicate+1d
    65.  
    66. FOLLOWUP_NAME:  MachineOwner
    67.  
    68. MODULE_NAME: e1000325
    69.  
    70. IMAGE_NAME:  e1000325.sys
    71.  
    72. DEBUG_FLR_IMAGE_TIMESTAMP:  3e230f8c
    73.  
    74. FAILURE_BUCKET_ID:  0xB8_e1000325!ReceivePacketArrayIndicate+1d
    75.  
    76. BUCKET_ID:  0xB8_e1000325!ReceivePacketArrayIndicate+1d
    77.  
    78. Followup: MachineOwner
    79. ---------
    Может кто подскажет что за беда ?
    ps отлаживаю на wm ware 7.1
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Во-первых, покажи стек потока 0x8710cc40, мало ли.
    Во-вторых, почему у твоей ClientEventDisconnect() только 1 параметр?
    Ну и в-третьих, нельзя понижать IRQL в DPC, т.е. в обрабочике Disconnect-а.
    Вообще, мне кажется, ты тупо где-нибудь в ClientEventXxx()-функции вызываешь ожидание или поднимаешь IRQL, проверь.
     
  3. simon

    simon New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2010
    Сообщения:
    19
    x64
    ошибка как обычно лежала на поверхности - пункт 2, понижение я использовал уже от "под занавес" , но вот не понятно при чем тут e1000325.sys ,мой - testrw.sys.