Есть драйвер, перехватывающий основные функции NDIS, работает он стабильно. При перехвате SendHandler, пытаюсь просто вместо оригинального пакета отправить его дубль. Код, (проверка sanity check убрана) Код (Text): InterceptSendHandler( IN OUT PNDIS_PACKET* pPacket ) { NTSTATUS status; PNDIS_BUFFER Buffer, NewBuffer = NULL; PNDIS_PACKET NewPacket = NULL; ULONG Size; PUCHAR Data = NULL; NdisQueryPacket( *pPacket, NULL, NULL, &Buffer, &Size); Data = ( PCHAR )ExAllocatePoolWithTag ( NonPagedPool, Size, 'p'); TdiCopyMdlToBuffer((PMDL) Buffer, 0, Data, 0, Size, &Size); NdisAllocateBuffer( &status, &NewBuffer, BufferPoolHandle, Data, Size ); NdisAllocatePacket( &status, &NewPacket, PacketPoolHandle ); NdisChainBufferAtFront( NewPacket, NewBuffer ); *pPacket = NewPacket; } Как результат - BSOD c DRIVER_IRQL_NOT_LESS_OR_EQUAL Код (Text): ErrCode = 00000000 eax=00000000 ebx=822cd130 ecx=f88a4caf edx=81540df0 esi=81540df0 edi=81fc8eb0 eip=f77c0b2a esp=f88a4c94 ebp=f88a4ca0 iopl=0 nv up ei pl zr na pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246 psched!ClSendComplete+0x28: f77c0b2a 8b18 mov ebx,dword ptr [eax] ds:0023:00000000=???????? Resetting default scope LAST_CONTROL_TRANSFER: from f77c0b2a to 80544718 STACK_TEXT: f88a4c20 f77c0b2a badb0d00 81540df0 f84b5f19 nt!KiTrap0E+0x238 f88a4ca0 f81eac2c 81fc83d0 00540df0 00000000 psched!ClSendComplete+0x28 f88a4cc4 f7958445 822cd130 81540df0 00000000 NDIS!ndisMSendCompleteX+0x8d WARNING: Stack unwind information not available. Following frames may be wrong. f88a4cf8 f7957708 02f1c000 822cd130 00000000 b57xp32+0x6445 00000000 00000000 00000000 00000000 00000000 b57xp32+0x5708 Причина в принципе ясна - драйвер пытается считать pageable-память на слишком высоком IRQL. Где я туплю?