From f1e249c61b88adce8217c09ce28281c0e43e59cb Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Thu, 17 May 2012 16:06:25 +0000
Subject: [PATCH] [0.1.x] updated: samples

git-svn-id: https://pykd.svn.codeplex.com/svn@76406 9b283d60-5439-405e-af05-b73fd8c4d996
---
 samples/km/__init__.py |  0
 samples/km/drvobj.py   | 10 +++---
 samples/km/proclist.py |  3 +-
 samples/km/ssdt.py     | 10 +++---
 samples/samples.py     | 74 ++++++++++++++++++++++++++++++++++++++----
 5 files changed, 80 insertions(+), 17 deletions(-)
 create mode 100644 samples/km/__init__.py

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( "<b>Kernel mode</b>", True )
+    dprintln( "Get process list <link cmd=\"!py samples run km.proclist\">Run</link> <link cmd=\"!py samples source km.proclist\">Source</link>", True)
+    dprintln( "Get kernel service list <link cmd=\"!py samples run km.ssdt\">Run</link> <link cmd=\"!py samples source km.ssdt\">Source</link>", True)
+    dprintln( "Get driver object <link cmd=\"!py samples run km.drvobj\">Run</link> <link cmd=\"!py samples source km.drvobj\">Source</link>", 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( "<link cmd=\"!py samples\">Sample list</link>", 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( "<link cmd=\"!py samples\">Sample list</link>", 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( "<b>Kernel mode</b>", True )
-dprintln( "<link cmd=\"!py proclist\">Get process list</link>", True )
-dprintln( "<link cmd=\"!py ssdt\">Get kernel service list (SDT)</link>", True )
-dprintln( "<link cmd=\"!py drvobj\">Get driver object</link>", True )
-dprintln("")
 
-dprintln( "<b>User mode</b>", True )
-dprintln("")