Прозьба подсказать возможные причины падения системы (win serv 2003 sp2) ,пытаюсь реализовать tdi сервер . На данный момент нормально создаеться local address,connection endpoint, connection context , в обшем драйвер начинает слушать опред. порт и успешно позволяет приконектиться на случай обрыва соединения регестрирую событие : Код (Text): NTSTATUS TdiFuncs_SetEventHandler(...) { ... KeInitializeEvent(&Context, NotificationEvent, FALSE); pTdiDevice = IoGetRelatedDeviceObject(pFileObject); pIrp = TdiBuildInternalDeviceControlIrp(TDI_SET_EVENT_HANDLER, ..); if(pIrp) { TdiBuildSetEventHandler(pIrp, pTdiDevice, pFileObject, NULL, NULL, TDI_EVENT_DISCONNECT, ClientEventDisconnect, (PVOID)pData); status = IoCallDriver(pTdiDevice, pIrp); if(status == STATUS_PENDING) { KeWaitForSingleObject(&Context, Executive, KernelMode, FALSE, NULL); status = IoStatusBlock.Status; } ... } ... return status; } void ClientEventDisconnect(PVOID pData) { //KIRQL nirql = PASSIVE_LEVEL,oldirql; // пробовал понижать до PASSIVE_LEVEL , так вызываеться на DISPATCH_LEVEL //KeRaiseIrql(nirql,&oldirql); KeSetEvent (pDisconnectEvent,0,0); return ; } В момент разрыва соединения успешно вызываеться ClientEventDisconnect pData указывает на структ. ,пока не использую , падение происходит после выполнения KeSetEvent Код (Text): 1: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* ATTEMPTED_SWITCH_FROM_DPC (b8) A wait operation, attach process, or yield was attempted from a DPC routine. This is an illegal operation and the stack track will lead to the offending code and original DPC routine. Arguments: Arg1: f7732090, Original thread which is the cause of the failure Arg2: 8710cc40, New thread Arg3: f78b3000, Stack address of the original thread Arg4: 00000000 Debugging Details: ------------------ FAULTING_THREAD: f7732090 DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0xB8 PROCESS_NAME: csrss.exe CURRENT_IRQL: 1b LAST_CONTROL_TRANSFER: from 80a5c1ae to 8088dba1 STACK_TEXT: f78b2738 80a5c1ae f78b2784 f78b2800 00000002 nt!KiDispatchInterrupt+0xb1 f78b274c 80a5c3d9 00000002 f78b2784 f78b2784 hal!HalpDispatchSoftwareInterrupt+0x5e f78b2768 80a5c577 869285d8 f78b2784 80a59902 hal!HalpCheckForSoftwareInterrupt+0x81 f78b2774 80a59902 00000000 000000e1 f78b2804 hal!HalEndSystemInterrupt+0x67 f78b2774 80a5a3c0 00000000 000000e1 f78b2804 hal!HalpIpiHandler+0xd2 f78b27f4 f6a4a8a6 00000000 869285d8 f78b283c hal!KfAcquireSpinLock f78b2804 f6a4bb80 869285d8 00000000 00000000 tcpip!DelayDerefAO+0x15 f78b283c f6a39f95 86c11978 f78b2a24 c0000237 tcpip!NotifyOfDisc+0x19a f78b290c f6a43236 86d16648 2201a8c0 2101a8c0 tcpip!TCPRcv+0x15fd f78b296c f6a65cb9 00000020 86d16648 f6a469d2 tcpip!DeliverToUser+0x189 f78b29e8 f6a549d8 86b85158 86d16648 86c6100e tcpip!DeliverToUserEx+0x951 f78b2a7c f6a41684 86d16648 86c61022 0000001a tcpip!IPRcvPacket+0x6e1 f78b2abc f6a41517 00000000 86b48718 86c61000 tcpip!ARPRcvIndicationNew+0x167 f78b2b14 f713e208 874839d8 86b48718 86d61008 tcpip!ARPRcvPacket+0x2f9 f78b2b68 f6f2558d 86a73740 f78b2bac 00000001 NDIS!ethFilterDprIndicateReceivePacket+0x385 f78b2b88 f6f262bd 86d61008 f78b2bac 00000001 e1000325!ReceivePacketArrayIndicate+0x1d f78b2cbc f6f26393 86d61008 f78b2ceb 86a73740 e1000325!RxProcessReceiveArray+0x8d f78b2ce0 f7133466 00d61008 f772fa40 86d6135c e1000325!E1000HandleInterrupt+0xa7 f78b2cf8 808320f0 86d6135c 86d61348 00000000 NDIS!ndisMDpcX+0x21 f78b2d50 8088de1f 00000000 0000000e 00000000 nt!KiRetireDpcList+0xca f78b2d54 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x37 STACK_COMMAND: .thread 0xfffffffff7732090 ; kb FOLLOWUP_IP: e1000325!ReceivePacketArrayIndicate+1d f6f2558d 8b7514 mov esi,dword ptr [ebp+14h] SYMBOL_STACK_INDEX: f SYMBOL_NAME: e1000325!ReceivePacketArrayIndicate+1d FOLLOWUP_NAME: MachineOwner MODULE_NAME: e1000325 IMAGE_NAME: e1000325.sys DEBUG_FLR_IMAGE_TIMESTAMP: 3e230f8c FAILURE_BUCKET_ID: 0xB8_e1000325!ReceivePacketArrayIndicate+1d BUCKET_ID: 0xB8_e1000325!ReceivePacketArrayIndicate+1d Followup: MachineOwner --------- Может кто подскажет что за беда ? ps отлаживаю на wm ware 7.1
Во-первых, покажи стек потока 0x8710cc40, мало ли. Во-вторых, почему у твоей ClientEventDisconnect() только 1 параметр? Ну и в-третьих, нельзя понижать IRQL в DPC, т.е. в обрабочике Disconnect-а. Вообще, мне кажется, ты тупо где-нибудь в ClientEventXxx()-функции вызываешь ожидание или поднимаешь IRQL, проверь.
x64 ошибка как обычно лежала на поверхности - пункт 2, понижение я использовал уже от "под занавес" , но вот не понятно при чем тут e1000325.sys ,мой - testrw.sys.