From deedfd94e096bef8dbb97ce98ce26bf88f0e0d3b Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Wed, 15 Aug 2012 12:56:37 +0000
Subject: [PATCH] [0.2.x] added : fixed method size of module class

git-svn-id: https://pykd.svn.codeplex.com/svn@78864 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/dbgengine.h           |  1 +
 pykd/win/dbgeng.cpp        | 16 ++++++++++++++++
 test/scripts/moduletest.py |  4 +++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/pykd/dbgengine.h b/pykd/dbgengine.h
index 37accb8..cb3b5a1 100644
--- a/pykd/dbgengine.h
+++ b/pykd/dbgengine.h
@@ -34,6 +34,7 @@ ULONG64 findModuleBase( ULONG64 offset );
 ULONG64 findModuleBySymbol( const std::string &symbolName );
 std::string getModuleName( ULONG64 baseOffset );
 std::string getModuleImageName( ULONG64 baseOffset ); 
+ULONG getModuleSize( ULONG64 baseOffset );
 std::string getModuleSymbolFileName( ULONG64 baseOffset );
 ULONG getModuleTimeStamp( ULONG64 baseOffset );
 ULONG getModuleCheckSum( ULONG64 baseOffset );
diff --git a/pykd/win/dbgeng.cpp b/pykd/win/dbgeng.cpp
index b7a0ee8..8bd6d66 100644
--- a/pykd/win/dbgeng.cpp
+++ b/pykd/win/dbgeng.cpp
@@ -271,6 +271,22 @@ std::string getModuleImageName( ULONG64 baseOffset )
 
 ///////////////////////////////////////////////////////////////////////////////////
 
+ULONG getModuleSize( ULONG64 baseOffset )
+{
+    PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
+
+    HRESULT  hres;
+    DEBUG_MODULE_PARAMETERS     moduleParam = { 0 };
+
+    hres = g_dbgEng->symbols->GetModuleParameters( 1, &baseOffset, 0, &moduleParam );
+    if ( FAILED( hres ) )
+         throw DbgException( "IDebugSymbol::GetModuleParameters  failed" );    
+
+    return moduleParam.Size;
+}
+
+///////////////////////////////////////////////////////////////////////////////////
+
 std::string getModuleSymbolFileName( ULONG64 baseOffset )
 {
     PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py
index 90b974b..a1be47e 100644
--- a/test/scripts/moduletest.py
+++ b/test/scripts/moduletest.py
@@ -17,6 +17,7 @@ class ModuleTest( unittest.TestCase ):
         
     def testSize( self ):
         self.assertNotEqual( 0, target.module.size() )
+        self.assertTrue( pykd.isValid( target.module.begin() + target.module.size() - 1) )
          
     def testBegin( self ):
         self.assertNotEqual( 0, target.module.begin() )
@@ -25,6 +26,7 @@ class ModuleTest( unittest.TestCase ):
              
     def testEnd( self ):
         self.assertEqual( target.module.size(), target.module.end() - target.module.begin() )
+        self.assertTrue( pykd.isValid( target.module.end() - 1) )
          
     def testPdb( self ):
        self.assertNotEqual( "", target.module.symfile() )
@@ -33,7 +35,7 @@ class ModuleTest( unittest.TestCase ):
        self.assertEqual( target.module.name() + ".exe", target.module.image() )
 
     def testFindModule( self ):
-        self.assertRaises( pykd.BaseException, pykd.module, target.module.begin() - 0x10 )            
+        self.assertRaises( pykd.BaseException, pykd.module, target.module.begin() - 0x10 )
 
         self.assertNotEqual( None, pykd.module( target.module.begin() ) )
         self.assertNotEqual( None, pykd.module( target.module.begin() + 0x10) )