From 9ad5767580d474c6c1bc0324da111110cc550d24 Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Fri, 25 May 2012 08:35:31 +0000
Subject: [PATCH] [0.1.x] fixed : sample km/drvobj.py fixed for win7

git-svn-id: https://pykd.svn.codeplex.com/svn@76653 9b283d60-5439-405e-af05-b73fd8c4d996
---
 samples/km/drvobj.py | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/samples/km/drvobj.py b/samples/km/drvobj.py
index 2a6a606..bb5f4a1 100644
--- a/samples/km/drvobj.py
+++ b/samples/km/drvobj.py
@@ -6,6 +6,29 @@ def loadSymbols():
    global nt
    nt = loadModule( "nt" )
 
+def getObjNameFromObjHeader( objHeader ):
+
+    if hasattr( objHeader, "NameInfoOffset"):
+        objName = typedVar( "nt!_OBJECT_HEADER_NAME_INFO",  objHeader.getAddress() - objHeader.NameInfoOffset )
+    else:
+        if (0 == (objHeader.InfoMask & 2)):
+           return ""
+      
+        offsetNameInfo = ptrByte( nt.ObpInfoMaskToOffset + (objHeader.InfoMask & 3) )
+
+        if (0 == offsetNameInfo):
+            return ""
+
+        objName = nt.typedVar("_OBJECT_HEADER_NAME_INFO", objHeader.getAddress() - offsetNameInfo)
+
+    return loadUnicodeString( objName.Name.getAddress() )        
+
+def getObjTypeFromObjHeader( objHeader ):
+
+    if hasattr( objHeader, "Type"):
+        return objHeader.Type
+
+    return ptrPtr( nt.ObTypeIndexTable + ptrSize() * objHeader.TypeIndex )
 
 def getObjectInDir( dirObj, objName ):
 
@@ -21,22 +44,21 @@ def getObjectInDir( dirObj, objName ):
 
           while dirEntry != 0:
 
-              objHeader = containingRecord( dirEntry.Object, "nt!_OBJECT_HEADER", "Body" )
+            objHeader = containingRecord( dirEntry.Object, "nt!_OBJECT_HEADER", "Body" )
 
-              objName = typedVar( "nt!_OBJECT_HEADER_NAME_INFO",  objHeader.getAddress() - objHeader.NameInfoOffset )
-              name = loadUnicodeString( objName.Name.getAddress() )
+            objName = getObjNameFromObjHeader( objHeader )
 
-              if name.lower() == dirSubName.lower():
+            if objName.lower() == dirSubName.lower():
 
-                if objHeader.Type == ptrPtr( nt.ObpDirectoryObjectType ):
+                if getObjTypeFromObjHeader( objHeader ) == ptrPtr( nt.ObpDirectoryObjectType ):
                     return getObjectInDir( typedVar( "nt!_OBJECT_DIRECTORY", dirEntry.Object), objSubName )
                 else:
-                    return  dirEntry.Object
+                    return dirEntry.Object
 
-              if dirEntry.ChainLink != 0:
-                  dirEntry = typedVar( "nt!_OBJECT_DIRECTORY_ENTRY", dirEntry.ChainLink )
-              else:
-                  dirEntry = 0    
+            if dirEntry.ChainLink != 0:
+                dirEntry = typedVar( "nt!_OBJECT_DIRECTORY_ENTRY", dirEntry.ChainLink )
+            else:
+                dirEntry = 0    
 
 
 def getObjectByName( objName ):