NDIS Debugging Tips 0x01 how ndis miniport connect its ISR to system ?

NDIS 小端口驱动 miniport driver 以太网卡 实现一个千兆以太网卡的NDIS的miniport驱动实例源代码 对于那些希望写一个NDIS 6.0的miniport设备驱动的开发人员来说,实例实在是太少了,只有一个DDK中的E100BEX。这里,我将选择一个当前比较流行的以太网控制器(Realtek 8111/8168/8169/8110等PCI的千兆以太网控制器),针对它们写一个NDIS6的驱动-The realization of a Gigabit Ethernet card, the NDIS driver miniport instance of the source code for those who wish to write an NDIS 6.0 of the miniport device driver developers, the example is too small, there is only one DDK in E100BEX. Here, I will choose a more popular current Ethernet controller (Realtek 8111/8168/8169/8110, such as PCI Gigabit Ethernet controller), for them to write a driver NDIS6 立即下载

kd> !idt

Dumping IDT:

37: 80a6e030 hal!PicSpuriousService37
3d: 80a6f2d4 hal!HalpApcInterrupt
41: 80a6f128 hal!HalpDispatchInterrupt
50: 80a6e108 hal!HalpApicRebootService
51: 810ecdd4 serial!SerialCIsrSw (KINTERRUPT 810ecd98)
52: 810f6544 i8042prt!I8042MouseInterruptService (KINTERRUPT 810f6508)
72: 81216bcc atapi!IdePortInterrupt (KINTERRUPT 81216b90)
83: 8110f2ac USBPORT!USBPORT_InterruptService (KINTERRUPT 8110f270)
92: 81276dd4 atapi!IdePortInterrupt (KINTERRUPT 81276d98)
93: 81152044 NDIS!ndisMIsr (KINTERRUPT 81152008)
a3: 8126b044 SCSIPORT!ScsiPortInterrupt (KINTERRUPT 8126b008)
b1: 81231044 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 81231008)
b3: 810f79ac i8042prt!I8042KeyboardInterruptService (KINTERRUPT 810f7970)
c1: 80a6e290 hal!HalpBroadcastCallService
d1: 80a6d624 hal!HalpClockInterrupt
e1: 80a6e6a0 hal!HalpIpiHandler
e3: 80a6e4c8 hal!HalpLocalApicErrorService
fd: 80a6ec0c hal!HalpProfileInterrupt

ndis!ndisMIsr 是ndis driver的universal ISR, 且看它如何dispatch ndis interrupt.

kd> bp ndis!ndisMIsr
kd> g
Breakpoint 0 hit
NDIS!ndisMIsr:
fc6db0aa  mov     edi,edi

kd> dds @esp L10
fc0f4730  8081f170 nt!KiInterruptDispatch+0x40
fc0f4734  81152008 ; _KINTERRUPT
fc0f4738  810d45dc ; _KINTERRUPT.ServiceContext
fc0f473c  00010008 ; it seems 1 is SharedVector, 8 is Irql, but i'm not sure... 
fc0f4740  00000193 ; interrupt vector
fc0f4744  00000000
fc0f4748  81152002
fc0f474c  00000193
fc0f4750  fc0f47dc
fc0f4754  80a6ea8a hal!KfLowerIrql+0x12
fc0f4758  badb0d00
fc0f475c  00001090
fc0f4760  00000000
fc0f4764  00000000
fc0f4768  00000000
fc0f476c  00000000

kd> dt nt!_KINTERRUPT 81152008
   +0x000 Type             : 22
   +0x002 Size             : 484
   +0x004 InterruptListEntry : _LIST_ENTRY [ 0x8115200c - 0x8115200c ]
   +0x00c ServiceRoutine   : 0xfc6db0aa     NDIS!ndisMIsr+0
   +0x010 ServiceContext   : 0x810d45dc ; here, the ServiceContext is actually a 
                           ; ndis!_NDIS_MINIPORT_INTERRUPT structure
   +0x014 SpinLock         : 0
   +0x018 TickCount        : 0xffffffff
   +0x01c ActualLock       : 0x8115226c  -> 0
   +0x020 DispatchAddress  : 0x8081f130     nt!KiInterruptDispatch+0
   +0x024 Vector           : 0x193
   +0x028 Irql             : 0x8 ''
   +0x029 SynchronizeIrql  : 0x8 ''
   +0x02a FloatingSave     : 0 ''
   +0x02b Connected        : 0x1 ''
   +0x02c Number           : 0 ''
   +0x02d ShareVector      : 0x1 ''
   +0x030 Mode             : 0 ( LevelSensitive )
   +0x034 ServiceCount     : 0
   +0x038 DispatchCount    : 0xffffffff
   +0x03c DispatchCode     : [106] 0x56535554

kd> dt 0x810d45dc ndis!_NDIS_MINIPORT_INTERRUPT
   +0x000 InterruptObject  : 0x81152008
   +0x004 DpcCountLock     : 0
   +0x008 Reserved         : 0x810d4500
   +0x00c MiniportIsr      : 0xfca576c6     pcntpci5!LanceISR+0
   +0x010 MiniportDpc      : 0xfca57e8a     pcntpci5!LanceHandleInterruptWithLock+0
   +0x014 InterruptDpc     : _KDPC
   +0x034 Miniport         : 0x810ee838
   +0x038 DpcCount         : 0 ''
   +0x039 Filler1          : 0 ''
   +0x03c DpcsCompletedEvent : _KEVENT
   +0x04c SharedInterrupt  : 0x1 ''
   +0x04d IsrRequested     : 0 ''


let's take a look at what ndis!ndisMIsr does...

kd> uf NDIS!ndisMIsr
NDIS!ndisMIsr:
fc6db0aa  mov     edi,edi
fc6db0ac  push    ebp
fc6db0ad  mov     ebp,esp
fc6db0af  push    ecx
fc6db0b0  push    esi
fc6db0b1  mov     esi,[ebp+0xc]  ;_KINTERRUPT.ServiceContext
fc6db0b4  mov     eax,[esi+0x34] ;@eax should be _NDIS_MINIPORT_INTERRUPT.Miniport, 
                                 ;just dt _NDIS_MINIPORT_INTERRUPT can get this fact,
                                 ;which is _NDIS_MINIPORT_BLOCK type
                                 ;let's abbreviate this block as NMB)
                                 ;abbreviate _NDIS_MINIPORT_INTERRUPT as NMI

fc6db0b7  push    edi
fc6db0b8  push    dword ptr [esi+0x8]
fc6db0bb  mov     byte ptr [ebp+0xf],0x0
fc6db0bf  test    byte ptr [eax+0x3c],0x1 ; 0
fc6db0c3  jne     NDIS!ndisMIsr+0x1b (fc6dd5ee) ; no jmp

NDIS!ndisMIsr+0x1b:
fc6dd5ee  mov     eax,[eax+0x8]
fc6dd5f1  call    dword ptr [eax+0x2c]
fc6dd5f4  mov     byte ptr [ebp+0xf],0x1
fc6dd5f8  mov     byte ptr [ebp-0x1],0x1
fc6dd5fc  jmp     NDIS!ndisMIsr+0x3c (fc6db0da)

NDIS!ndisMIsr+0x2b:
fc6db0c9  lea     eax,[ebp+0xf]
fc6db0cc  push    eax                 ; QueueMiniportHandleInterrupt

fc6db0cd  lea     eax,[ebp-0x1]
fc6db0d0  push    eax                 ; InterruptRecognized

fc6db0d1  call    dword ptr [esi+0xc] ; call pcntpci5!LanceISR+0, NMI.MiniportIsr

fc6db0d4  cmp     byte ptr [ebp+0xf],0x0 ; QueueMiniportHandleInterrupt == TRUE ?

fc6db0d8  jz      NDIS!ndisMIsr+0x5f (fc6db0fa) ; QueueMiniportHandleInterrupt == FALSE
                                                ; jmp to exit ndisMIsr

;
;
QueueMiniportHandleInterrupt == TRUE, according to DDK, NDIS will
; queue a DPC (in term of NDIS, it's NdisHandleInterrupt routine,
; which is set in NDIS_MINIPORT_CHARACTERISTICS.HandleInterruptHandler)
;


NDIS!ndisMIsr+0x3c:
fc6db0da  xor     eax,eax
fc6db0dc  lea     edi,[esi+0x38]
fc6db0df  inc     eax
fc6db0e0  lock    xadd [edi],eax ; increase DPC count
fc6db0e4  push    0x0
fc6db0e6  push    0x0
fc6db0e8  add     esi,0x14
fc6db0eb  push    esi            ; NDIS!ndisMDpcX
fc6db0ec  call    dword ptr [NDIS!_imp__KeInsertQueueDpc (fc6c5198)] ; Queue DPC routine
fc6db0f2  test    al,al
fc6db0f4  je      NDIS!ndisMIsr+0x58 (fc6dd601)

NDIS!ndisMIsr+0x58:
fc6dd601  or      eax,0xffffffff  ; DPC is already in DPC Queue, so decrease DPC count
                                  ; return FALSE

fc6dd604  lock    xadd [edi],eax
fc6dd608  jmp     NDIS!ndisMIsr+0x5f (fc6db0fa)

NDIS!ndisMIsr+0x5f:
fc6db0fa  mov     al,[ebp-0x1]
fc6db0fd  pop     edi
fc6db0fe  pop     esi
fc6db0ff  leave
fc6db100  ret     0x8

kd> dt ndis!_NDIS_MINIPORT_INTERRUPT  @esi -r1
   +0x000 InterruptObject  : 0x81152008
   +0x004 DpcCountLock     : 0
   +0x008 Reserved         : 0x810d4500 
   +0x00c MiniportIsr      : 0xfca576c6     pcntpci5!LanceISR+0
   +0x010 MiniportDpc      : 0xfca57e8a     pcntpci5!LanceHandleInterruptWithLock+0
   +0x014 InterruptDpc     : _KDPC
      +0x000 Type             : 0x13 ''
      +0x001 Importance       : 0 ''
      +0x002 Number           : 0 ''
      +0x003 Expedite         : 0 ''
      +0x004 DpcListEntry     : _LIST_ENTRY [ 0x810f2234 - 0xffdffa40 ]
      +0x00c DeferredRoutine  : 0xfc6db108        NDIS!ndisMDpcX+0
      +0x010 DeferredContext  : 0x810d45dc
      +0x014 SystemArgument1  : (null)
      +0x018 SystemArgument2  : (null)
      +0x01c DpcData          : (null) 
   +0x034 Miniport         : 0x810ee838 
      +0x000 Signature        : 0x504d444e
      +0x004 NextMiniport     : (null)
      +0x008 DriverHandle     : 0x8111c708
      +0x00c MiniportAdapterContext : 0x810d4500
      +0x010 MiniportName     : _UNICODE_STRING "/DEVICE/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x018 BindPaths        : 0x81114a78
      +0x01c OpenQueue        : 0xffa298d8
      +0x020 ShortRef         : _REFERENCE
      +0x028 DeviceContext    : (null)
      +0x02c Padding1         : 0 ''
      +0x02d LockAcquired     : 0 ''
      +0x02e PmodeOpens       : 0 ''
      +0x02f AssignedProcessor : 0 ''
      +0x030 Lock             : 0
      +0x034 MediaRequest     : (null)
      +0x038 Interrupt        : 0x810d45dc
      +0x03c Flags            : 0x2c452008
      +0x040 PnPFlags         : 0x210000
      +0x044 PacketList       : _LIST_ENTRY [ 0x810ee87c - 0x810ee87c ]
      +0x04c FirstPendingPacket : (null)
      +0x050 ReturnPacketsQueue : (null)
      +0x054 RequestBuffer    : 0xb
      +0x058 SetMCastBuffer   : (null)
      +0x05c PrimaryMiniport  : 0x810ee838
      +0x060 WrapperContext   : 0x810ee7f0
      +0x064 BusDataContext   : 0x81218898
      +0x068 PnPCapabilities  : 0x30
      +0x06c Resources        : (null)
      +0x070 WakeUpDpcTimer   : _NDIS_TIMER
      +0x0b8 BaseName         : _UNICODE_STRING "{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x0c0 SymbolicLinkName : _UNICODE_STRING "/??/PCI#VEN_1022&DEV_2000&SUBSYS_20001022&REV_10#3&61aaa01&0&88#{ad498944-762f-11d0-8dcb-00c04fc3358c}/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x0c8 CheckForHangSeconds : 2
      +0x0cc CFHangTicks      : 1
      +0x0ce CFHangCurrentTick : 1
      +0x0d0 ResetStatus      : 0
      +0x0d4 ResetOpen        : (null)
      +0x0d8 EthDB            : 0x810dca68
      +0x0d8 NullDB           : 0x810dca68
      +0x0dc TrDB             : (null)
      +0x0e0 FddiDB           : (null)
      +0x0e4 ArcDB            : (null)
      +0x0e8 PacketIndicateHandler : 0xfc6e6005        NDIS!ethFilterDprIndicateReceivePacket+0
      +0x0ec SendCompleteHandler : 0xfc6d7180        NDIS!ndisMSendCompleteX+0
      +0x0f0 SendResourcesHandler : 0xfc6dd86d        NDIS!NdisMSendResourcesAvailable+0
      +0x0f4 ResetCompleteHandler : 0xfc6dff74        NDIS!NdisMResetComplete+0
      +0x0f8 MediaType        : 0 ( NdisMedium802_3 )
      +0x0fc BusNumber        : 0
      +0x100 BusType          : 5 ( NdisInterfacePci )
      +0x104 AdapterType      : 5 ( NdisInterfacePci )
      +0x108 DeviceObject     : 0x810ee738
      +0x10c PhysicalDeviceObject : 0x812187e0
      +0x110 NextDeviceObject : 0x812187e0
      +0x114 MapRegisters     : 0x811414e8
      +0x118 CallMgrAfList    : (null)
      +0x11c MiniportThread   : (null)
      +0x120 SetInfoBuf       : (null)
      +0x124 SetInfoBufLen    : 0
      +0x126 MaxSendPackets   : 4
      +0x128 FakeStatus       : 0
      +0x12c LockHandler      : 0xfc6dc9fd
      +0x130 pAdapterInstanceName : 0x81117268  "AMD PCNET Family PCI Ethernet Adapter"
      +0x134 TimerQueue       : (null)
      +0x138 MacOptions       : 0x8f
      +0x13c PendingRequest   : (null)
      +0x140 MaximumLongAddresses : 0x20
      +0x144 MaximumShortAddresses : 0
      +0x148 CurrentLookahead : 0x80
      +0x14c MaximumLookahead : 0x200
      +0x150 HandleInterruptHandler : 0xfca57e8a        pcntpci5!LanceHandleInterruptWithLock+0
      +0x154 DisableInterruptHandler : 0xfca57676        pcntpci5!LanceDisableInterrupt+0
      +0x158 EnableInterruptHandler : 0xfca57626        pcntpci5!LanceEnableInterrupt+0
      +0x15c SendPacketsHandler : 0xfc6d764c        NDIS!ndisMSendPacketsX+0
      +0x160 DeferredSendHandler : 0xfc6d789a        NDIS!ndisMStartSendPackets+0
      +0x164 EthRxIndicateHandler : 0xfc6e6ef1        NDIS!EthFilterDprIndicateReceive+0
      +0x168 TrRxIndicateHandler : 0xfc6e853f        NDIS!TrFilterDprIndicateReceive+0
      +0x16c FddiRxIndicateHandler : 0xfc6e5044        NDIS!FddiFilterDprIndicateReceive+0
      +0x170 EthRxCompleteHandler : 0xfc6e646d        NDIS!EthFilterDprIndicateReceiveComplete+0
      +0x174 TrRxCompleteHandler : 0xfc6e83eb        NDIS!TrFilterDprIndicateReceiveComplete+0
      +0x178 FddiRxCompleteHandler : 0xfc6e45f8        NDIS!FddiFilterDprIndicateReceiveComplete+0
      +0x17c StatusHandler    : 0xfc6dc3c2        NDIS!NdisMIndicateStatus+0
      +0x180 StatusCompleteHandler : 0xfc6dd270        NDIS!NdisMIndicateStatusComplete+0
      +0x184 TDCompleteHandler : 0xfc6d8715        NDIS!NdisMTransferDataComplete+0
      +0x188 QueryCompleteHandler : 0xfc6de0f3        NDIS!NdisMQueryInformationComplete+0
      +0x18c SetCompleteHandler : 0xfc6deda3        NDIS!NdisMSetInformationComplete+0
      +0x190 WanSendCompleteHandler : 0xfc6d7e92        NDIS!NdisMWanSendComplete+0
      +0x194 WanRcvHandler    : 0xfc6dc1e8        NDIS!NdisMWanIndicateReceive+0
      +0x198 WanRcvCompleteHandler : 0xfc6dc18f        NDIS!NdisMWanIndicateReceiveComplete+0
      +0x19c NextGlobalMiniport : (null)
      +0x1a0 WorkQueue        : [7] _SINGLE_LIST_ENTRY
      +0x1bc SingleWorkItems  : [6] _SINGLE_LIST_ENTRY
      +0x1d4 SendFlags        : 0x1 ''
      +0x1d5 TrResetRing      : 0 ''
      +0x1d6 ArcnetAddress    : 0 ''
      +0x1d7 XState           : 0 ''
      +0x1d8 ArcBuf           : (null)
      +0x1d8 BusInterface     : (null)
      +0x1dc Log              : (null)
      +0x1e0 SlotNumber       : 0xffffffff
      +0x1e4 AllocatedResources : 0x810e75a0
      +0x1e8 AllocatedResourcesTranslated : 0x810e75e4
      +0x1ec PatternList      : _SINGLE_LIST_ENTRY
      +0x1f0 PMCapabilities   : _NDIS_PNP_CAPABILITIES
      +0x200 DeviceCaps       : _DEVICE_CAPABILITIES
      +0x240 WakeUpEnable     : 0
      +0x244 CurrentDevicePowerState : 1 ( PowerDeviceD0 )
      +0x248 pIrpWaitWake     : (null)
      +0x24c WaitWakeSystemState : 0 ( PowerSystemUnspecified )
      +0x250 VcIndex          : _LARGE_INTEGER 0x0
      +0x258 VcCountLock      : 0
      +0x25c WmiEnabledVcs    : _LIST_ENTRY [ 0x810eea94 - 0x810eea94 ]
      +0x264 pNdisGuidMap     : 0xffa6d870
      +0x268 pCustomGuidMap   : 0xffa6df70
      +0x26c VcCount          : 0
      +0x26e cNdisGuidMap     : 0x45
      +0x270 cCustomGuidMap   : 5
      +0x272 CurrentMapRegister : 0
      +0x274 AllocationEvent  : 0xfcd6e58c
      +0x278 BaseMapRegistersNeeded : 0x40
      +0x27a SGMapRegistersNeeded : 0x10
      +0x27c MaximumPhysicalMapping : 0x600
      +0x280 MediaDisconnectTimer : _NDIS_TIMER
      +0x2c8 MediaDisconnectTimeOut : 0xffff
      +0x2ca InstanceNumber   : 1
      +0x2cc OpenReadyEvent   : _NDIS_EVENT
      +0x2dc PnPDeviceState   : 1 ( NdisPnPDeviceStarted )
      +0x2e0 OldPnPDeviceState : 0 ( NdisPnPDeviceAdded )
      +0x2e4 SetBusData       : 0xfc89e030        pci!PciPnpWriteConfig+0
      +0x2e8 GetBusData       : 0xfc89e006        pci!PciPnpReadConfig+0
      +0x2ec DeferredDpc      : _KDPC
      +0x310 NdisStats        : _NDIS_STATS
      +0x328 IndicatedPacket  : [32] (null)
      +0x3a8 RemoveReadyEvent : (null)
      +0x3ac AllOpensClosedEvent : (null)
      +0x3b0 AllRequestsCompletedEvent : (null)
      +0x3b4 InitTimeMs       : 0xda
      +0x3b8 WorkItemBuffer   : [6] _NDIS_MINIPORT_WORK_ITEM
      +0x400 SystemAdapterObject : 0x810d4490
      +0x404 DriverVerifyFlags : 0
      +0x408 OidList          : 0xffa0a008
      +0x40c InternalResetCount : 0
      +0x40e MiniportResetCount : 0
      +0x410 MediaSenseConnectCount : 1
      +0x412 MediaSenseDisconnectCount : 0
      +0x414 xPackets         : (null)
      +0x418 UserModeOpenReferences : 0
      +0x41c SavedSendHandler : 0xfc6bf2b6
      +0x41c SavedWanSendHandler : 0xfc6bf2b6
      +0x420 SavedSendPacketsHandler : 0xfc6d764c        NDIS!ndisMSendPacketsX+0
      +0x424 SavedCancelSendPacketsHandler : (null)
      +0x428 WSendPacketsHandler : 0xfca5a332        pcntpci5!LanceSendPackets+0
      +0x42c MiniportAttributes : 0x28
      +0x430 SavedSystemAdapterObject : (null)
      +0x434 NumOpens         : 2
      +0x436 CFHangXTicks     : 0
      +0x438 RequestCount     : 0
      +0x43c IndicatedPacketsCount : 0
      +0x440 PhysicalMediumType : 0
      +0x444 LastRequest      : 0xff837cd0
      +0x448 DmaAdapterRefCount : 3
      +0x44c FakeMac          : 0x810cda30
      +0x450 LockDbg          : 0
      +0x454 LockDbgX         : 0
      +0x458 LockThread       : (null)
      +0x45c InfoFlags        : 0xa010a11
      +0x460 TimerQueueLock   : 0
      +0x464 ResetCompletedEvent : (null)
      +0x468 QueuedBindingCompletedEvent : (null)
      +0x46c DmaResourcesReleasedEvent : (null)
      +0x470 SavedPacketIndicateHandler : 0xfc6e6005        NDIS!ethFilterDprIndicateReceivePacket+0
      +0x474 RegisteredInterrupts : 1
      +0x478 SGListLookasideList : (null)
      +0x47c ScatterGatherListSize : 0
      +0x480 WakeUpTimerEvent : (null)
      +0x484 SecurityDescriptor : 0x81137e90
      +0x488 NumUserOpens     : 0
      +0x48c NumAdminOpens    : 0
      +0x490 Ref              : _ULONG_REFERENCE
   +0x038 DpcCount         : 0 ''
   +0x039 Filler1          : 0 ''
   +0x03c DpcsCompletedEvent : _KEVENT
      +0x000 Header           : _DISPATCHER_HEADER
   +0x04c SharedInterrupt  : 0x1 ''
   +0x04d IsrRequested     : 0 ''

windbg/kd has a ndis extension called ndiskd.dll, let's use it to
dump some shit...

kd> !ndiskd.miniports
Miniport Driver Block: 8111c708, Version 0.1024
  Miniport: 810ee838, NetLuidIndex: 0, IfIndex: 0, AMD PCNET Family PCI Ethernet Adapter

it's easy to know that 810ee838 is _NDIS_MINIPORT_BLOCK, coz we ever saw the number
in the above analysis:

dt ndis!_NDIS_MINIPORT_BLOCK 810ee838
   +0x000 Signature        : 0x504d444e
   +0x004 NextMiniport     : (null)
   +0x008 DriverHandle     : 0x8111c708 
   +0x00c MiniportAdapterContext : 0x810d4500
   +0x010 MiniportName     : _UNICODE_STRING "/DEVICE/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
   +0x018 BindPaths        : 0x81114a78
   +0x01c OpenQueue        : 0xffa298d8
   +0x020 ShortRef         : _REFERENCE
   +0x028 DeviceContext    : (null)
   +0x02c Padding1         : 0 ''
   +0x02d LockAcquired     : 0 ''
   +0x02e PmodeOpens       : 0 ''
   +0x02f AssignedProcessor : 0 ''
   +0x030 Lock             : 0
   +0x034 MediaRequest     : (null)
   +0x038 Interrupt        : 0x810d45dc
   +0x03c Flags            : 0x2c452008
   +0x040 PnPFlags         : 0x210000
   +0x044 PacketList       : _LIST_ENTRY [ 0x810ee87c - 0x810ee87c ]
   +0x04c FirstPendingPacket : (null)
   +0x050 ReturnPacketsQueue : (null)
   +0x054 RequestBuffer    : 0xb
   +0x058 SetMCastBuffer   : (null)
   +0x05c PrimaryMiniport  : 0x810ee838
   +0x060 WrapperContext   : 0x810ee7f0
   +0x064 BusDataContext   : 0x81218898
   +0x068 PnPCapabilities  : 0x30
   +0x06c Resources        : (null)
   +0x070 WakeUpDpcTimer   : _NDIS_TIMER
   +0x0b8 BaseName         : _UNICODE_STRING "{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
   +0x0c0 SymbolicLinkName : _UNICODE_STRING "/??/PCI#VEN_1022&DEV_2000&SUBSYS_20001022&REV_10#3&61aaa01&0&88#{ad498944-762f-11d0-8dcb-00c04fc3358c}/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
   +0x0c8 CheckForHangSeconds : 2
   +0x0cc CFHangTicks      : 1
   +0x0ce CFHangCurrentTick : 1
   +0x0d0 ResetStatus      : 0
   +0x0d4 ResetOpen        : (null)
   +0x0d8 EthDB            : 0x810dca68
   +0x0d8 NullDB           : 0x810dca68
   +0x0dc TrDB             : (null)
   +0x0e0 FddiDB           : (null)
   +0x0e4 ArcDB            : (null)
   +0x0e8 PacketIndicateHandler : 0xfc6e6005     NDIS!ethFilterDprIndicateReceivePacket+0
   +0x0ec SendCompleteHandler : 0xfc6d7180     NDIS!ndisMSendCompleteX+0
   +0x0f0 SendResourcesHandler : 0xfc6dd86d     NDIS!NdisMSendResourcesAvailable+0
   +0x0f4 ResetCompleteHandler : 0xfc6dff74     NDIS!NdisMResetComplete+0
   +0x0f8 MediaType        : 0 ( NdisMedium802_3 )
   +0x0fc BusNumber        : 0
   +0x100 BusType          : 5 ( NdisInterfacePci )
   +0x104 AdapterType      : 5 ( NdisInterfacePci )
   +0x108 DeviceObject     : 0x810ee738
   +0x10c PhysicalDeviceObject : 0x812187e0
   +0x110 NextDeviceObject : 0x812187e0
   +0x114 MapRegisters     : 0x811414e8
   +0x118 CallMgrAfList    : (null)
   +0x11c MiniportThread   : (null)
   +0x120 SetInfoBuf       : (null)
   +0x124 SetInfoBufLen    : 0
   +0x126 MaxSendPackets   : 4
   +0x128 FakeStatus       : 0
   +0x12c LockHandler      : 0xfc6dc9fd
   +0x130 pAdapterInstanceName : 0x81117268  "AMD PCNET Family PCI Ethernet Adapter"
   +0x134 TimerQueue       : (null)
   +0x138 MacOptions       : 0x8f
   +0x13c PendingRequest   : (null)
   +0x140 MaximumLongAddresses : 0x20
   +0x144 MaximumShortAddresses : 0
   +0x148 CurrentLookahead : 0x80
   +0x14c MaximumLookahead : 0x200
   +0x150 HandleInterruptHandler : 0xfca57e8a     pcntpci5!LanceHandleInterruptWithLock+0
   +0x154 DisableInterruptHandler : 0xfca57676     pcntpci5!LanceDisableInterrupt+0
   +0x158 EnableInterruptHandler : 0xfca57626     pcntpci5!LanceEnableInterrupt+0
   +0x15c SendPacketsHandler : 0xfc6d764c     NDIS!ndisMSendPacketsX+0
   +0x160 DeferredSendHandler : 0xfc6d789a     NDIS!ndisMStartSendPackets+0
   +0x164 EthRxIndicateHandler : 0xfc6e6ef1     NDIS!EthFilterDprIndicateReceive+0
   +0x168 TrRxIndicateHandler : 0xfc6e853f     NDIS!TrFilterDprIndicateReceive+0
   +0x16c FddiRxIndicateHandler : 0xfc6e5044     NDIS!FddiFilterDprIndicateReceive+0
   +0x170 EthRxCompleteHandler : 0xfc6e646d     NDIS!EthFilterDprIndicateReceiveComplete+0
   +0x174 TrRxCompleteHandler : 0xfc6e83eb     NDIS!TrFilterDprIndicateReceiveComplete+0
   +0x178 FddiRxCompleteHandler : 0xfc6e45f8     NDIS!FddiFilterDprIndicateReceiveComplete+0
   +0x17c StatusHandler    : 0xfc6dc3c2     NDIS!NdisMIndicateStatus+0
   +0x180 StatusCompleteHandler : 0xfc6dd270     NDIS!NdisMIndicateStatusComplete+0
   +0x184 TDCompleteHandler : 0xfc6d8715     NDIS!NdisMTransferDataComplete+0
   +0x188 QueryCompleteHandler : 0xfc6de0f3     NDIS!NdisMQueryInformationComplete+0
   +0x18c SetCompleteHandler : 0xfc6deda3     NDIS!NdisMSetInformationComplete+0
   +0x190 WanSendCompleteHandler : 0xfc6d7e92     NDIS!NdisMWanSendComplete+0
   +0x194 WanRcvHandler    : 0xfc6dc1e8     NDIS!NdisMWanIndicateReceive+0
   +0x198 WanRcvCompleteHandler : 0xfc6dc18f     NDIS!NdisMWanIndicateReceiveComplete+0
   +0x19c NextGlobalMiniport : (null)
   +0x1a0 WorkQueue        : [7] _SINGLE_LIST_ENTRY
   +0x1bc SingleWorkItems  : [6] _SINGLE_LIST_ENTRY
   +0x1d4 SendFlags        : 0x1 ''
   +0x1d5 TrResetRing      : 0 ''
   +0x1d6 ArcnetAddress    : 0 ''
   +0x1d7 XState           : 0 ''
   +0x1d8 ArcBuf           : (null)
   +0x1d8 BusInterface     : (null)
   +0x1dc Log              : (null)
   +0x1e0 SlotNumber       : 0xffffffff
   +0x1e4 AllocatedResources : 0x810e75a0
   +0x1e8 AllocatedResourcesTranslated : 0x810e75e4
   +0x1ec PatternList      : _SINGLE_LIST_ENTRY
   +0x1f0 PMCapabilities   : _NDIS_PNP_CAPABILITIES
   +0x200 DeviceCaps       : _DEVICE_CAPABILITIES
   +0x240 WakeUpEnable     : 0
   +0x244 CurrentDevicePowerState : 1 ( PowerDeviceD0 )
   +0x248 pIrpWaitWake     : (null)
   +0x24c WaitWakeSystemState : 0 ( PowerSystemUnspecified )
   +0x250 VcIndex          : _LARGE_INTEGER 0x0
   +0x258 VcCountLock      : 0
   +0x25c WmiEnabledVcs    : _LIST_ENTRY [ 0x810eea94 - 0x810eea94 ]
   +0x264 pNdisGuidMap     : 0xffa6d870
   +0x268 pCustomGuidMap   : 0xffa6df70
   +0x26c VcCount          : 0
   +0x26e cNdisGuidMap     : 0x45
   +0x270 cCustomGuidMap   : 5
   +0x272 CurrentMapRegister : 0
   +0x274 AllocationEvent  : 0xfcd6e58c
   +0x278 BaseMapRegistersNeeded : 0x40
   +0x27a SGMapRegistersNeeded : 0x10
   +0x27c MaximumPhysicalMapping : 0x600
   +0x280 MediaDisconnectTimer : _NDIS_TIMER
   +0x2c8 MediaDisconnectTimeOut : 0xffff
   +0x2ca InstanceNumber   : 1
   +0x2cc OpenReadyEvent   : _NDIS_EVENT
   +0x2dc PnPDeviceState   : 1 ( NdisPnPDeviceStarted )
   +0x2e0 OldPnPDeviceState : 0 ( NdisPnPDeviceAdded )
   +0x2e4 SetBusData       : 0xfc89e030     pci!PciPnpWriteConfig+0
   +0x2e8 GetBusData       : 0xfc89e006     pci!PciPnpReadConfig+0
   +0x2ec DeferredDpc      : _KDPC
   +0x310 NdisStats        : _NDIS_STATS
   +0x328 IndicatedPacket  : [32] (null)
   +0x3a8 RemoveReadyEvent : (null)
   +0x3ac AllOpensClosedEvent : (null)
   +0x3b0 AllRequestsCompletedEvent : (null)
   +0x3b4 InitTimeMs       : 0xda
   +0x3b8 WorkItemBuffer   : [6] _NDIS_MINIPORT_WORK_ITEM
   +0x400 SystemAdapterObject : 0x810d4490
   +0x404 DriverVerifyFlags : 0
   +0x408 OidList          : 0xffa0a008
   +0x40c InternalResetCount : 0
   +0x40e MiniportResetCount : 0
   +0x410 MediaSenseConnectCount : 1
   +0x412 MediaSenseDisconnectCount : 0
   +0x414 xPackets         : (null)
   +0x418 UserModeOpenReferences : 0
   +0x41c SavedSendHandler : 0xfc6bf2b6
   +0x41c SavedWanSendHandler : 0xfc6bf2b6
   +0x420 SavedSendPacketsHandler : 0xfc6d764c     NDIS!ndisMSendPacketsX+0
   +0x424 SavedCancelSendPacketsHandler : (null)
   +0x428 WSendPacketsHandler : 0xfca5a332     pcntpci5!LanceSendPackets+0
   +0x42c MiniportAttributes : 0x28
   +0x430 SavedSystemAdapterObject : (null)
   +0x434 NumOpens         : 2
   +0x436 CFHangXTicks     : 0
   +0x438 RequestCount     : 0
   +0x43c IndicatedPacketsCount : 0
   +0x440 PhysicalMediumType : 0
   +0x444 LastRequest      : 0xff837cd0
   +0x448 DmaAdapterRefCount : 3
   +0x44c FakeMac          : 0x810cda30
   +0x450 LockDbg          : 0
   +0x454 LockDbgX         : 0
   +0x458 LockThread       : (null)
   +0x45c InfoFlags        : 0xa010a11
   +0x460 TimerQueueLock   : 0
   +0x464 ResetCompletedEvent : (null)
   +0x468 QueuedBindingCompletedEvent : (null)
   +0x46c DmaResourcesReleasedEvent : (null)
   +0x470 SavedPacketIndicateHandler : 0xfc6e6005     NDIS!ethFilterDprIndicateReceivePacket+0
   +0x474 RegisteredInterrupts : 1
   +0x478 SGListLookasideList : (null)
   +0x47c ScatterGatherListSize : 0
   +0x480 WakeUpTimerEvent : (null)
   +0x484 SecurityDescriptor : 0x81137e90
   +0x488 NumUserOpens     : 0
   +0x48c NumAdminOpens    : 0
   +0x490 Ref              : _ULONG_REFERENCE

but what the heck is 8111c708 ??? the shit ndiskd calls it as
`Miniport Driver Block`, after checking with !object cmd, it proved
that this address is NOT any valid system standard object type, the
debugger will always give u junk values, okay, it's NOT nt!_DRIVER_OBJECT,
then what's it? ON EARTH? it should be some type defined by ndis?
let's kick out the invaluable `dt` cmd to scan ndis.sys, here u are ...

kd> dt ndis!_*driver*
          ndis!_NDIS_M_DRIVER_BLOCK
          ndis!_DRIVER_OBJECT
          ndis!_NDIS_M_DRIVER_BLOCK
          ndis!_DRIVER_EXTENSION
          ndis!_DRIVER_OBJECT
          ndis!_DRIVER_EXTENSION

ndis!_NDIS_M_DRIVER_BLOCK should be most likely to be the target we wanna shoot at...

kd> dt 8111c708 ndis!_NDIS_M_DRIVER_BLOCK -r1
   +0x000 NextDriver       : (null)
   +0x004 MiniportQueue    : 0x810ee838
      +0x000 Signature        : 0x504d444e
      +0x004 NextMiniport     : (null)
      +0x008 DriverHandle     : 0x8111c708
      +0x00c MiniportAdapterContext : 0x810d4500 
      +0x010 MiniportName     : _UNICODE_STRING "/DEVICE/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x018 BindPaths        : 0x81114a78
      +0x01c OpenQueue        : 0xffa298d8
      +0x020 ShortRef         : _REFERENCE
      +0x028 DeviceContext    : (null)
      +0x02c Padding1         : 0 ''
      +0x02d LockAcquired     : 0 ''
      +0x02e PmodeOpens       : 0 ''
      +0x02f AssignedProcessor : 0 ''
      +0x030 Lock             : 0
      +0x034 MediaRequest     : (null)
      +0x038 Interrupt        : 0x810d45dc
      +0x03c Flags            : 0x2c452008
      +0x040 PnPFlags         : 0x210000
      +0x044 PacketList       : _LIST_ENTRY [ 0x810ee87c - 0x810ee87c ]
      +0x04c FirstPendingPacket : (null)
      +0x050 ReturnPacketsQueue : (null)
      +0x054 RequestBuffer    : 0xb
      +0x058 SetMCastBuffer   : (null)
      +0x05c PrimaryMiniport  : 0x810ee838
      +0x060 WrapperContext   : 0x810ee7f0
      +0x064 BusDataContext   : 0x81218898
      +0x068 PnPCapabilities  : 0x30
      +0x06c Resources        : (null)
      +0x070 WakeUpDpcTimer   : _NDIS_TIMER
      +0x0b8 BaseName         : _UNICODE_STRING "{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x0c0 SymbolicLinkName : _UNICODE_STRING "/??/PCI#VEN_1022&DEV_2000&SUBSYS_20001022&REV_10#3&61aaa01&0&88#{ad498944-762f-11d0-8dcb-00c04fc3358c}/{D0F0BDEF-43D7-4DED-BF6F-FA040B787796}"
      +0x0c8 CheckForHangSeconds : 2
      +0x0cc CFHangTicks      : 1
      +0x0ce CFHangCurrentTick : 1
      +0x0d0 ResetStatus      : 0
      +0x0d4 ResetOpen        : (null)
      +0x0d8 EthDB            : 0x810dca68
      +0x0d8 NullDB           : 0x810dca68
      +0x0dc TrDB             : (null)
      +0x0e0 FddiDB           : (null)
      +0x0e4 ArcDB            : (null)
      +0x0e8 PacketIndicateHandler : 0xfc6e6005        NDIS!ethFilterDprIndicateReceivePacket+0
      +0x0ec SendCompleteHandler : 0xfc6d7180        NDIS!ndisMSendCompleteX+0
      +0x0f0 SendResourcesHandler : 0xfc6dd86d        NDIS!NdisMSendResourcesAvailable+0
      +0x0f4 ResetCompleteHandler : 0xfc6dff74        NDIS!NdisMResetComplete+0
     
+0x0f8 MediaType        : 0 ( NdisMedium802_3 )
      +0x0fc BusNumber        : 0
      +0x100 BusType          : 5 ( NdisInterfacePci )
      +0x104 AdapterType      : 5 ( NdisInterfacePci )
      +0x108 DeviceObject     : 0x810ee738
      +0x10c PhysicalDeviceObject : 0x812187e0
      +0x110 NextDeviceObject : 0x812187e0
      +0x114 MapRegisters     : 0x811414e8
      +0x118 CallMgrAfList    : (null)
      +0x11c MiniportThread   : (null)
      +0x120 SetInfoBuf       : (null)
      +0x124 SetInfoBufLen    : 0
      +0x126 MaxSendPackets   : 4
      +0x128 FakeStatus       : 0
      +0x12c LockHandler      : 0xfc6dc9fd 
     +0x130 pAdapterInstanceName : 0x81117268  "AMD PCNET Family PCI Ethernet Adapter"
     
+0x134 TimerQueue       : (null)
      +0x138 MacOptions       : 0x8f
      +0x13c PendingRequest   : (null)
      +0x140 MaximumLongAddresses : 0x20
      +0x144 MaximumShortAddresses : 0
      +0x148 CurrentLookahead : 0x80
      +0x14c MaximumLookahead : 0x200
      +0x150 HandleInterruptHandler : 0xfca57e8a        pcntpci5!LanceHandleInterruptWithLock+0
      +0x154 DisableInterruptHandler : 0xfca57676        pcntpci5!LanceDisableInterrupt+0
      +0x158 EnableInterruptHandler : 0xfca57626        pcntpci5!LanceEnableInterrupt+0
      +0x15c SendPacketsHandler : 0xfc6d764c        NDIS!ndisMSendPacketsX+0
      +0x160 DeferredSendHandler : 0xfc6d789a        NDIS!ndisMStartSendPackets+0
      +0x164 EthRxIndicateHandler : 0xfc6e6ef1        NDIS!EthFilterDprIndicateReceive+0
      +0x168 TrRxIndicateHandler : 0xfc6e853f        NDIS!TrFilterDprIndicateReceive+0
      +0x16c FddiRxIndicateHandler : 0xfc6e5044        NDIS!FddiFilterDprIndicateReceive+0
      +0x170 EthRxCompleteHandler : 0xfc6e646d        NDIS!EthFilterDprIndicateReceiveComplete+0
      +0x174 TrRxCompleteHandler : 0xfc6e83eb        NDIS!TrFilterDprIndicateReceiveComplete+0
      +0x178 FddiRxCompleteHandler : 0xfc6e45f8        NDIS!FddiFilterDprIndicateReceiveComplete+0
      +0x17c StatusHandler    : 0xfc6dc3c2        NDIS!NdisMIndicateStatus+0
      +0x180 StatusCompleteHandler : 0xfc6dd270        NDIS!NdisMIndicateStatusComplete+0
      +0x184 TDCompleteHandler : 0xfc6d8715        NDIS!NdisMTransferDataComplete+0
      +0x188 QueryCompleteHandler : 0xfc6de0f3        NDIS!NdisMQueryInformationComplete+0
      +0x18c SetCompleteHandler : 0xfc6deda3        NDIS!NdisMSetInformationComplete+0
      +0x190 WanSendCompleteHandler : 0xfc6d7e92        NDIS!NdisMWanSendComplete+0
      +0x194 WanRcvHandler    : 0xfc6dc1e8        NDIS!NdisMWanIndicateReceive+0
      +0x198 WanRcvCompleteHandler : 0xfc6dc18f        NDIS!NdisMWanIndicateReceiveComplete+0
      +0x19c NextGlobalMiniport : (null)
      +0x1a0 WorkQueue        : [7] _SINGLE_LIST_ENTRY
      +0x1bc SingleWorkItems  : [6] _SINGLE_LIST_ENTRY
      +0x1d4 SendFlags        : 0x1 ''
      +0x1d5 TrResetRing      : 0 ''
      +0x1d6 ArcnetAddress    : 0 ''
      +0x1d7 XState           : 0 ''
      +0x1d8 ArcBuf           : (null)
      +0x1d8 BusInterface     : (null)
      +0x1dc Log              : (null)
      +0x1e0 SlotNumber       : 0xffffffff
      +0x1e4 AllocatedResources : 0x810e75a0
      +0x1e8 AllocatedResourcesTranslated : 0x810e75e4
      +0x1ec PatternList      : _SINGLE_LIST_ENTRY
      +0x1f0 PMCapabilities   : _NDIS_PNP_CAPABILITIES
      +0x200 DeviceCaps       : _DEVICE_CAPABILITIES
      +0x240 WakeUpEnable     : 0
      +0x244 CurrentDevicePowerState : 1 ( PowerDeviceD0 )
      +0x248 pIrpWaitWake     : (null)
      +0x24c WaitWakeSystemState : 0 ( PowerSystemUnspecified )
      +0x250 VcIndex          : _LARGE_INTEGER 0x0
      +0x258 VcCountLock      : 0
      +0x25c WmiEnabledVcs    : _LIST_ENTRY [ 0x810eea94 - 0x810eea94 ]
      +0x264 pNdisGuidMap     : 0xffa6d870
      +0x268 pCustomGuidMap   : 0xffa6df70
      +0x26c VcCount          : 0
      +0x26e cNdisGuidMap     : 0x45
      +0x270 cCustomGuidMap   : 5
      +0x272 CurrentMapRegister : 0
      +0x274 AllocationEvent  : 0xfcd6e58c
      +0x278 BaseMapRegistersNeeded : 0x40
      +0x27a SGMapRegistersNeeded : 0x10
      +0x27c MaximumPhysicalMapping : 0x600
      +0x280 MediaDisconnectTimer : _NDIS_TIMER
      +0x2c8 MediaDisconnectTimeOut : 0xffff
      +0x2ca InstanceNumber   : 1
      +0x2cc OpenReadyEvent   : _NDIS_EVENT
      +0x2dc PnPDeviceState   : 1 ( NdisPnPDeviceStarted )
      +0x2e0 OldPnPDeviceState : 0 ( NdisPnPDeviceAdded )
      +0x2e4 SetBusData       : 0xfc89e030        pci!PciPnpWriteConfig+0
      +0x2e8 GetBusData       : 0xfc89e006        pci!PciPnpReadConfig+0
      +0x2ec DeferredDpc      : _KDPC
      +0x310 NdisStats        : _NDIS_STATS
      +0x328 IndicatedPacket  : [32] (null)
      +0x3a8 RemoveReadyEvent : (null)
      +0x3ac AllOpensClosedEvent : (null)
      +0x3b0 AllRequestsCompletedEvent : (null)
      +0x3b4 InitTimeMs       : 0xda
      +0x3b8 WorkItemBuffer   : [6] _NDIS_MINIPORT_WORK_ITEM
      +0x400 SystemAdapterObject : 0x810d4490
      +0x404 DriverVerifyFlags : 0
      +0x408 OidList          : 0xffa0a008
      +0x40c InternalResetCount : 0
      +0x40e MiniportResetCount : 0
      +0x410 MediaSenseConnectCount : 1
      +0x412 MediaSenseDisconnectCount : 0
      +0x414 xPackets         : (null)
      +0x418 UserModeOpenReferences : 0
      +0x41c SavedSendHandler : 0xfc6bf2b6
      +0x41c SavedWanSendHandler : 0xfc6bf2b6
      +0x420 SavedSendPacketsHandler : 0xfc6d764c        NDIS!ndisMSendPacketsX+0
      +0x424 SavedCancelSendPacketsHandler : (null)
      +0x428 WSendPacketsHandler : 0xfca5a332        pcntpci5!LanceSendPackets+0
      +0x42c MiniportAttributes : 0x28
      +0x430 SavedSystemAdapterObject : (null)
      +0x434 NumOpens         : 2
      +0x436 CFHangXTicks     : 0
      +0x438 RequestCount     : 0
      +0x43c IndicatedPacketsCount : 0
      +0x440 PhysicalMediumType : 0
      +0x444 LastRequest      : 0xff837cd0
      +0x448 DmaAdapterRefCount : 3
      +0x44c FakeMac          : 0x810cda30
      +0x450 LockDbg          : 0
      +0x454 LockDbgX         : 0
      +0x458 LockThread       : (null)
      +0x45c InfoFlags        : 0xa010a11
      +0x460 TimerQueueLock   : 0
      +0x464 ResetCompletedEvent : (null)
      +0x468 QueuedBindingCompletedEvent : (null)
      +0x46c DmaResourcesReleasedEvent : (null)
      +0x470 SavedPacketIndicateHandler : 0xfc6e6005        NDIS!ethFilterDprIndicateReceivePacket+0
      +0x474 RegisteredInterrupts : 1
      +0x478 SGListLookasideList : (null)
      +0x47c ScatterGatherListSize : 0
      +0x480 WakeUpTimerEvent : (null)
      +0x484 SecurityDescriptor : 0x81137e90
      +0x488 NumUserOpens     : 0
      +0x48c NumAdminOpens    : 0
      +0x490 Ref              : _ULONG_REFERENCE
   +0x008 NdisDriverInfo   : 0x811b3110
      +0x000 DriverObject     : 0x811324b8
      +0x004 ServiceRegPath   : _UNICODE_STRING "/REGISTRY/MACHINE/SYSTEM/ControlSet001/Services/PCnet"
   +0x00c AssociatedProtocol : (null)
   +0x010 DeviceList       : _LIST_ENTRY [ 0x8111c718 - 0x8111c718 ]
      +0x000 Flink            : 0x8111c718  [ 0x8111c718 - 0x8111c718 ]
      +0x004 Blink            : 0x8111c718  [ 0x8111c718 - 0x8111c718 ]
   +0x018 PendingDeviceList : (null)
   +0x01c UnloadHandler    : (null)
   +0x020 MiniportCharacteristics : _NDIS51_MINIPORT_CHARACTERISTICS
      +0x000 MajorNdisVersion : 0x5 ''
      +0x001 MinorNdisVersion : 0 ''
      +0x002 Filler           : 0
      +0x004 Reserved         : 0
      +0x008 CheckForHangHandler : (null)
      +0x00c DisableInterruptHandler : 0xfca57676        pcntpci5!LanceDisableInterrupt+0
      +0x010 EnableInterruptHandler : 0xfca57626        pcntpci5!LanceEnableInterrupt+0
      +0x014 HaltHandler      : 0xfca5c8fe        pcntpci5!LanceHalt+0
      +0x018 HandleInterruptHandler : 0xfca57e8a        pcntpci5!LanceHandleInterruptWithLock+0
      +0x01c InitializeHandler : 0xfca5d29a        pcntpci5!LanceInitialize+0
      +0x020 ISRHandler       : 0xfca576c6        pcntpci5!LanceISR+0
      +0x024 QueryInformationHandler : 0xfca5915c        pcntpci5!LanceQueryInformation+0
      +0x028 ReconfigureHandler : (null)
      +0x02c ResetHandler     : 0xfca5c868        pcntpci5!LanceReset+0
      +0x030 SendHandler      : (null)
      +0x030 WanSendHandler   : (null)
      +0x034 SetInformationHandler : 0xfca597c2        pcntpci5!LanceSetInformation+0
      +0x038 TransferDataHandler : 0xfca5c1bc        pcntpci5!LanceTransferData+0
      +0x038 WanTransferDataHandler : 0xfca5c1bc        pcntpci5!LanceTransferData+0
      +0x03c ReturnPacketHandler : 0xfca57822        pcntpci5!LanceReturnPacket+0
      +0x040 SendPacketsHandler : 0xfca5a332        pcntpci5!LanceSendPackets+0
      +0x044 AllocateCompleteHandler : (null)
      +0x048 CoCreateVcHandler : (null)
      +0x04c CoDeleteVcHandler : (null)
      +0x050 CoActivateVcHandler : (null)
      +0x054 CoDeactivateVcHandler : (null)
      +0x058 CoSendPacketsHandler : (null)
      +0x05c CoRequestHandler : (null)
      +0x060 CancelSendPacketsHandler : (null)
      +0x064 PnPEventNotifyHandler : (null)
      +0x068 AdapterShutdownHandler : (null)
      +0x06c Reserved1        : (null)
      +0x070 Reserved2        : (null)
      +0x074 Reserved3        : (null)
      +0x078 Reserved4        : (null)
   +0x09c MiniportsRemovedEvent : _KEVENT
      +0x000 Header           : _DISPATCHER_HEADER
   +0x0ac Ref              : _REFERENCE
      +0x000 SpinLock         : 0
      +0x004 ReferenceCount   : 2
      +0x006 Closing          : 0 ''
   +0x0b4 Flags            : 0
   +0x0b8 IMStartRemoveMutex : _KMUTANT
      +0x000 Header           : _DISPATCHER_HEADER
      +0x010 MutantListEntry  : _LIST_ENTRY [ 0x0 - 0x0 ]
      +0x018 OwnerThread      : (null)
      +0x01c Abandoned        : 0 ''
      +0x01d ApcDisable       : 0 ''
   +0x0d8 DriverVersion    : 0x400

mmm, not bad, we always are lucky guys when playing such game, right? :p,
exactly match..., oh, it's time BRAZIL V.S. GERMANY, SOCCER...BYE...

IDA Pro told me about the code path of ISR/DPC of ndis:
when ndis miniport driver calls ndis!NdisMRegisterInterrupt to register its ISR, NdisMRegisterInterrupt will
call ndis!ndisMRegisterInterruptCommon ( an internal ndis routine) which calls nt!IoConnectInterrupt to
register ndis!ndisMIsr as the common ISR, ndis!ndisMDpcX as the common DPC routine, that's the
story how ndis miniport connects its ISR to system)

 from jonh lan
Matlab2024a安装教程 点击【下一步】。8.选择解压后的【MATLAB R2024a(64bit)】文件夹中【Crack】文件夹下的【licese.lic】,点击【打开】。 阅读详情

相关推荐

C#连接数据库报Authentication to host ‘127.0.0.1‘ for user ‘root‘ using method ‘caching_sha2_password‘ fail

所以导致的,除了上边的办法,还可以把这个加密规则修改一下,这个的修改方式有很多,具体原因是因为MySQL8.0以前的加密规则是。

weixin_42209881的博客 4131

Win10 Microsoft Store 微软商店 Error 0x00000193 解决方法

Win10 Microsoft Store 微软商店 Error 0x00000193 解决方法

asdfgh0077的博客 1296

从ADS到Origin:高效绘制负载牵引Smith圆图的完整指南

本文提供了一份从ADS导出负载牵引数据并在Origin中绘制专业Smith圆图的完整指南。详细介绍了数据导出、导入、关键的数据解释步骤,以及高效处理多组曲线的技巧,帮助射频工程师快速生成用于报告和论文的出版级图表。

tgb3456789的博客 1138

对一个虚拟网卡驱动程序的剖析(三):网卡的初始化函数MiniportInitialize

 前面的驱动程序入口函数DriverEntry的作用是向系统说明这个驱动程序的结构。初始化函数则是为了使我们的网卡能够正常工作而进行各种准备工作。    系统在调用网卡的初始化函数的时候,会传进来一个输入参数MediumArray,这是一个包含一系列介质类型的数组,初始化函数要在这个数组中间选一种类型返回给系统,告诉系统该驱动支持的类型。做法就是将系统传进来的一个输出参数SelectedMediu

xu的blog 3954

VOWIFI--相关的协议文档

一、3GPP相关协议文档 3GPP 23.402 Architecture enhancements for non-3GPP accesse- //重要 整体框架结构和流程,3GPP和NON-3GPP切换 3GPP 36.304  User Equipment (UE) procedures in idle mode //重要,终端在空闲状态下3GPP与NON-3GPP之间的重选方法   3GP

时九博客 3581

Grok 3国内怎么用?超详细使用指南+实用指令模板

主要是用于快速分析学术论文,提取关键信息,总结研究成果。Analyze the following research paper: [粘贴或上传论文内容]1. Extract key findings, methodologies, and conclusions. (提取主要发现、方法和结论。2. Identify statistical significance and data points. (识别统计显著性和数据点。

Survivor_sl的博客 1万+

NDIS小端口驱动ndisEdge学习二——小端口驱动的初始化

目录 1 首先进入DriverEntry检查版本号(可选) 2 WDF_NO_EVENT_CALLBACK初始化驱动标志 3设置WdfDriverInitNoDispatchOverride表示框架不能拦截IO直接发给驱动的Irps 4创建WDFDriver对象 5初始化一个包装句柄(WrapperHandler) 6填写小端口特征 7注册小端口其中因为要保护全局变量所以需要有一个锁另外需要有一个链表储存需要的信息所以要初始化它们 8小端口驱动的Adapter结...

苞米地里捉小鸡的博客 1432

【Java核心高阶进阶】44-Java8核心新特性

模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。

gaochufukanyongren的博客 24

miniport hook ethFilterDprIndicateReceivePacket 接收拦截时包处理问题

XP环境: 1。研究了在my_ethFilterDprIndicateReceivePacket中丢包情况 //要想drop packet_arrays这些packet,使用miniportblock对应的ReturnPacketHandler来return //不能用ndis!ndisReturnpacket这函数。因为里面一些变量在我们现在拦截的这里还没设置好 //调用ndis!...

weixin_30649641的博客 143

word多级列表为什么会变成黑块解决思路

今天在写文档时,发现WORD5级的标题都变黑块了,找了度娘的资料,终于解决了。 第一种 1、光标bai放在黑快的右边,按向左的箭头,然后ctrl+shift+s,点击重新应用。 2、点击“定义新的多级列表”(不知道从哪儿找这个按钮的百度下),直接点确定。 3、这里很重要!!!不要直接保存,而是直接关掉word,会提示保存还是不保存,这个地方再点击保存。 第二种 Word2016 使用宏代码修复方法 1.找到视图-宏,打开 查看宏 2.创建宏 3.贴...

霍力强的专栏 8585

RK3568平台(USB篇)USB HUB集线器

hub,集线器,连接在host与device之间的一种用于usb接口扩展的usb设备。可以将一个usb上行接口扩展为多个下行接口,使得一个host可以同时与多个device连接。一般来说,一块hub桥接芯片可扩展4个usb接口,而市面上的一拖七hub,其实使用了两块hub桥接芯片,其中一块hub桥接芯片的上行端口连接到另一块hub桥接芯片的下行端口。hub的上行端口面向host,下行端口面向device。在下行端口上,hub提供了设备接入检测和设备移除检测的能力,并给下行端口供电。

weixin_49303682的博客 967

miniport, port driver,disk.sys 之间的关系(转)

miniport, port driver,disk.sys 之间关系驱动程序由CLASS DRIVER,PORT DRIVER,MINIPORT,三部分组成,从层次上来说,LCASS DRIVER是针对几大类设备的驱动,比如存储设备驱动,就可以通过一个CLASS DRIVER来统一管理,完成一些这类设备共有的操作,主要是与设备无关的操作.PORT DRIVER从层次上来说,是在CLA

大坡3D软件开发 3428

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

CVE-2016-0059 IE信息泄露漏洞分析

netwind · 2016/04/20 10:10From:blog.fortinet.com/post/analys…0x00 概要本文将对CVE-2016-0059进行深度分析,该漏洞是由于微软超链接对象库内存数据泄露造成的,成功利用该漏洞可以获得一些信息从而对用户系统造成进一步威胁。要利用该漏洞,攻击者必须诱导用户点击一个email里的或者一个office文档里的超链接。起初是把该漏洞作为...

weixin_33985507的博客 373

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?

第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。

wo_jack的博客 259

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

list

的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。迭代到该位置,在这段位置上迭代需要线性的时间开销;最大的缺陷是不支持任意位置的随机访问,比如:要访问。还需要一些额外的空间,以保存每个节点的相关联信息。个元素,必须从已知的位置。

xie0510_的博客 295

【C++】【STL】list_OJ题

本文系统解析了8道C++链表经典OJ题,按“算数操作”与“指针重连”分为两组,强调指针操作与数据结构解耦的重要性。通过手写ListNode、std::list及带头双向循环链表三类载体验证算法普适性,重点剖析空链、单节点、全相同值等6类边界情况,并给出统一编译与调试方案(g++11 + -Wall -O2),确保零告警、可追踪。所有题目时间复杂度均为O(N),常数差异源于遍历次数与操作开销,代码实现兼顾正确性与面试可用性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 5165

Redis 数据类型详解:Hash 哈希与 List 列表

大 key 指单个 key 对应的 value 过大(如 Hash 字段数极多、List 元素极多)。危害包括:单次全量命令(

2303_77004089的博客 126

Java 集合框架(List、Set、Map)与常用基础

本文整理Java集合框架核心知识,涵盖集合体系、Collection接口API、List(ArrayList、LinkedList、Vector)、Set(HashSet、TreeSet)、Map(HashMap、TreeMap、Hashtable)实现类原理、泛型、增强for循环、可变参数与工具类,并附核心易错点速查表。

既然你都点开这里了,那可以给我点个关注吗?可以吗?可以吗? 494

List(下):LPOP / RPOP、BLPOP / BRPOP 与 LINDEX、LINSERT

这是《Redis C++ 实战笔记》系列的第 07 篇。上一篇是往列表里放,这一篇是往外拿——包括那个会"等"的弹出。

wbs_scy的博客 126

List、Set、Map 之间的区别是什么?

在实际开发中,先根据业务语义选择接口,再根据性能和顺序需求选择具体实现。是最贴近数组的集合类型,元素按插入顺序排列,并且可以通过下标精确访问。典型使用场景:数据去重、判断元素是否存在、集合运算(交集、并集、差集)。典型使用场景:需要保持元素顺序、需要按索引访问、需要记录重复数据,例如日志列表、待办事项、查询结果集。存储的是 key 到 value 的映射关系,key 不允许重复。中放入相同的 key 时,新的 value 会覆盖旧的 value。体系,它是独立的顶层接口。,集合本身不会发生变化。

2601_96129122的博客 214

CListCtrl 第一列为什么不能居中

/ 你满怀期待写下这段代码m_list.InsertColumn(0, _T("序号"), LVCFMT_CENTER, 80);m_list.InsertColumn(1, _T("名称"), LVCFMT_LEFT, 160);m_list.InsertColumn(2, _T("数值"), LVCFMT_RIGHT, 100);运行后傻眼:第 1、2 列对齐完全正常,唯独索引 0 这一列,无论你写还是,文字永远靠左。反复调试、怀疑自己参数写错、怀疑扩展样式、怀疑资源模板,折腾半小时 ——

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 279

To-Do List 的「修改」功能与 CSS 定位

买牛奶</td><td index="1">写作业</td><td index="2">跑步

2401_89953644的博客 322

【C++初阶】list使用及相关实现,思路顺滑流畅!

list使用及相关实现

Severus_black的博客 226
上一篇: [Please don't DEP me, Sir] 0x00 The First Peer Inside DEP (Data Execution Prevention)
下一篇: NDIS Debugging Tips 0x02 What's the system routine used to flush DMA cache of Windows?
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值