BSOD в NDIS-драйвере

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

  1. JhanGhuangxi

    JhanGhuangxi New Member

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