pykd

Форк
0
/
ndis.py 
95 строк · 3.2 Кб
1
#
2
#
3
#
4

5
import sys
6
from pykd import *
7

8

9
def printBreakLine():
10

11
    dprintln( "\n" + "="*80 + "\n" )
12

13

14
def printNdisObj():
15
                   
16
    ndis=module("ndis")
17

18
    ndisMajorVersion = ptrByte( ndis.NdisGetVersion + 1 )
19
    ndisMinorVersion = ptrByte( ndis.NdisGetVersion + 3 )
20

21
    mpList = ndis.typedVarList( ndis.ndisMiniportList, "_NDIS_MINIPORT_BLOCK", "NextGlobalMiniport" )
22

23
    printBreakLine()
24

25
    for m in mpList: 
26

27
        dprintln( "<u>Adapter:</u>", True )
28
        
29
        dprintln( "%s\t<link cmd=\"dt ndis!_NDIS_MINIPORT_BLOCK %x\">NDIS_MINIPORT_BLOCK( %x )</link>" % ( loadUnicodeString(m.pAdapterInstanceName), m.getAddress(), m.getAddress() ), True )
30
        
31
        if ndisMajorVersion  >= 6: 
32

33
            lwf = m.LowestFilter
34

35
            if lwf != 0:
36
                dprintln( "\n<u>Light-Weight Filters:</u>", True )
37

38
            while lwf != 0:
39

40
                filt = typedVar( "ndis!_NDIS_FILTER_BLOCK", lwf )
41

42
                dprintln( "%s\t<link cmd=\"dt ndis!_NDIS_FILTER_BLOCK %x\">NDIS_FILTER_BLOCK( %x )</link>" % ( loadUnicodeString(filt.FilterFriendlyName), filt.getAddress(), filt.getAddress() ), True )
43

44
                lwf = filt.HigherFilter     
45

46

47
            opn = m.OpenQueue
48

49
            if  opn != 0:
50
                dprintln( "\n<u>Bound protocols:</u>", True )
51

52
            while opn != 0:
53

54
                openBlock = typedVar( "ndis!_NDIS_OPEN_BLOCK", opn )
55

56
                proto = typedVar( "ndis!_NDIS_PROTOCOL_BLOCK", openBlock.ProtocolHandle )
57
                                                                                            
58
                dprint( "%s \t<link cmd=\"dt ndis!_NDIS_OPEN_BLOCK %x\">NDIS_OPEN_BLOCK( %x )</link>" % ( loadUnicodeString( proto.Name.getAddress() ), openBlock.getAddress(), openBlock.getAddress() ), True ) 
59
                dprintln( "\t<link cmd=\"dt ndis!_NDIS_PROTOCOL_BLOCK %x\">NDIS_PROTOCOL_BLOCK( %x )</link>" % ( proto.getAddress(), proto.getAddress() ), True ) 
60
           
61
                opn = openBlock.MiniportNextOpen
62
        else:
63

64
            opn = m.OpenQueue
65

66
            if  opn != 0:
67
                dprintln( "\n<u>Bound protocols:</u>", True )
68

69
            while opn != 0:
70

71
                openBlock = typedVar( "ndis!_NDIS_OPEN_BLOCK", opn )
72

73
                proto = typedVar( "ndis!_NDIS_PROTOCOL_BLOCK", openBlock.ProtocolHandle )
74
                                                                                            
75
                dprint( "%s \t<link cmd=\"dt ndis!_NDIS_OPEN_BLOCK %x\">NDIS_OPEN_BLOCK( %x )</link>" % ( loadUnicodeString( proto.ProtocolCharacteristics.Name.getAddress() ), openBlock.getAddress(), openBlock.getAddress() ), True ) 
76
                dprintln( "\t<link cmd=\"dt ndis!_NDIS_PROTOCOL_BLOCK %x\">NDIS_PROTOCOL_BLOCK( %x )</link>" % ( proto.getAddress(), proto.getAddress() ), True ) 
77
           
78
                opn = openBlock.MiniportNextOpen     
79

80

81
        printBreakLine()
82

83
def main():
84
    if not isWindbgExt():
85
        dprintln( "script is launch out of windbg" )
86
        quit(0)
87

88
    if not isKernelDebugging():
89
        dprintln( "script for kernel mode only" )
90
        quit(0)
91

92
    printNdisObj()
93

94
if __name__ == "__main__":
95
    main()
96

97

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.