diff --git a/samples/km/__init__.py b/samples/km/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/samples/km/drvobj.py b/samples/km/drvobj.py
index 6defd16..2a6a606 100644
--- a/samples/km/drvobj.py
+++ b/samples/km/drvobj.py
@@ -67,13 +67,15 @@ def printDrvMajorTable( drvName ):
for i in range( len(drvObj.MajorFunction) ):
dprintln( "MajorFunction[%d] = %s" % ( i, findSymbol( drvObj.MajorFunction[i] ) ) )
+def run():
+ loadSymbols();
+ printDrvMajorTable( "afd" )
if __name__ == "__main__":
- if not isWindbgExt():
- loadDump( sys.argv[1] )
+ if not isWindbgExt():
+ loadDump( sys.argv[1] )
- loadSymbols();
+ run()
- printDrvMajorTable( "afd" )
\ No newline at end of file
diff --git a/samples/km/proclist.py b/samples/km/proclist.py
index 70f2f0c..70c1d42 100644
--- a/samples/km/proclist.py
+++ b/samples/km/proclist.py
@@ -2,7 +2,6 @@
import sys
from pykd import *
-
def processInfo():
nt = module( "nt" )
@@ -12,6 +11,8 @@ def processInfo():
for process in processList:
print "".join( [chr(i) for i in process.ImageFileName if i != 0] )
+def run():
+ processInfo()
def main():
diff --git a/samples/km/ssdt.py b/samples/km/ssdt.py
index 45adbbb..b4c9d56 100644
--- a/samples/km/ssdt.py
+++ b/samples/km/ssdt.py
@@ -43,11 +43,12 @@ def checkSSDT():
for i in range( 0, serviceCount ):
dprintln( "[%u] " % i + findSymbol( serviceTable[i] ) )
+def run():
+ checkSSDT()
if __name__ == "__main__":
-
while True:
if not isWindbgExt():
@@ -58,8 +59,7 @@ if __name__ == "__main__":
if not isKernelDebugging():
dprintln( "not a kernel debugging" )
break
-
- checkSSDT()
- break
+
+ run()
-
\ No newline at end of file
+ break
diff --git a/samples/samples.py b/samples/samples.py
index 0714417..9a87d6c 100644
--- a/samples/samples.py
+++ b/samples/samples.py
@@ -1,11 +1,71 @@
+
+import sys
+import os.path
+
from pykd import dprintln
+from pykd import dprint
+
+def printAllSamples():
+ dprintln( "Kernel mode", True )
+ dprintln( "Get process list Run Source", True)
+ dprintln( "Get kernel service list Run Source", True)
+ dprintln( "Get driver object Run Source", True)
+ dprintln( "" )
+
+def runSample( sampleName ):
+
+ try:
+ packageName, moduleName = sampleName.split(".")
+
+ module = __import__( name = sampleName, fromlist = moduleName )
+
+ module.__dict__[ "run" ]()
+
+ except ImportError:
+ dprintln("import error")
+ pass
+
+ dprintln( "" )
+ dprintln( "Sample list", True )
+ dprintln( "" )
+
+def printSample( sampleName ):
+
+ try:
+ packageName, moduleName = sampleName.split(".")
+
+ module = __import__( name = sampleName, fromlist = moduleName )
+
+ fileName = os.path.dirname( module.__dict__["__file__"] )
+ fileName = os.path.join( fileName, moduleName + ".py" )
+
+ with open( fileName ) as f:
+ for line in f:
+ dprint( line )
+
+ except ImportError:
+ dprintln("import error")
+ pass
+
+ dprintln( "" )
+ dprintln( "Sample list", True )
+ dprintln( "" )
+
+
+def main():
+ if len(sys.argv) <= 2:
+ return printAllSamples()
+
+ if sys.argv[1] == "run":
+ runSample( sys.argv[2] )
+
+ if sys.argv[1] == "source":
+ printSample( sys.argv[2] )
+
+
+if __name__ == "__main__":
+ main()
+
-dprintln( "Kernel mode", True )
-dprintln( "Get process list", True )
-dprintln( "Get kernel service list (SDT)", True )
-dprintln( "Get driver object", True )
-dprintln("")
-dprintln( "User mode", True )
-dprintln("")