From f3fbb0c9c85706ba53e9bea4b7de1ca4d2bcc0ec Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Fri, 22 Apr 2011 08:43:57 +0000
Subject: [PATCH] [pykd] added : loadWChars function

git-svn-id: https://pykd.svn.codeplex.com/svn@64327 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/dbgext.cpp |  3 +++
 pykd/dbgmem.cpp | 15 +++++++++++++++
 pykd/dbgmem.h   |  3 +++
 3 files changed, 21 insertions(+)

diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp
index 548d44a..0f257c1 100644
--- a/pykd/dbgext.cpp
+++ b/pykd/dbgext.cpp
@@ -43,6 +43,7 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( dprint, DbgPrint::dprint, 1, 2 )
 BOOST_PYTHON_FUNCTION_OVERLOADS( dprintln, DbgPrint::dprintln, 1, 2 )
 
 BOOST_PYTHON_FUNCTION_OVERLOADS( loadCharsOv, loadChars, 2, 3 )
+BOOST_PYTHON_FUNCTION_OVERLOADS( loadWCharsOv, loadWChars, 2, 3 )
 BOOST_PYTHON_FUNCTION_OVERLOADS( loadBytes, loadArray<unsigned char>, 2, 3 )
 BOOST_PYTHON_FUNCTION_OVERLOADS( loadWords, loadArray<unsigned short>, 2, 3 )
 BOOST_PYTHON_FUNCTION_OVERLOADS( loadDWords, loadArray<unsigned long>, 2, 3 )
@@ -118,6 +119,8 @@ BOOST_PYTHON_MODULE( pykd )
         "Extend address to 64 bits formats ( for x86 )" );
     boost::python::def( "loadChars", loadChars, loadCharsOv( boost::python::args( "address", "number",  "phyAddr" ),
         "Load string from the target buffer" ) );
+    boost::python::def( "loadWChars", loadWChars, loadWCharsOv( boost::python::args( "address", "number",  "phyAddr" ),        
+        "Load unicode string from the target buffer" ) );
     boost::python::def( "loadBytes", &loadArray<unsigned char>, loadBytes( boost::python::args( "address", "number",  "phyAddr"  ), 
         "Return list of unsigned bytes" ) );
     boost::python::def( "loadWords", &loadArray<unsigned short>, loadWords( boost::python::args( "address", "number",  "phyAddr"  ), 
diff --git a/pykd/dbgmem.cpp b/pykd/dbgmem.cpp
index d93f838..189267f 100644
--- a/pykd/dbgmem.cpp
+++ b/pykd/dbgmem.cpp
@@ -198,6 +198,21 @@ loadChars( ULONG64 address, ULONG  number, BOOLEAN phyAddr  )
 
 ///////////////////////////////////////////////////////////////////////////////////
 
+boost::python::object
+loadWChars( ULONG64 address, ULONG  number, BOOLEAN phyAddr  )
+{
+    std::vector<wchar_t>   buffer(number);
+    
+    if ( loadMemory( address, &buffer[0], (ULONG)buffer.size(), phyAddr ) ) 
+    {
+        return boost::python::object(std::wstring( buffer.begin(), buffer.end() ) );
+    }
+    
+  	return boost::python::object();
+}
+
+///////////////////////////////////////////////////////////////////////////////////
+
 ULONG64
 loadPtrByPtr( ULONG64 address )
 {
diff --git a/pykd/dbgmem.h b/pykd/dbgmem.h
index b82547c..4a3e2a2 100644
--- a/pykd/dbgmem.h
+++ b/pykd/dbgmem.h
@@ -39,6 +39,9 @@ loadArray( ULONG64 address, ULONG  number, BOOLEAN phyAddr = FALSE )
 boost::python::object
 loadChars( ULONG64 address, ULONG  number, BOOLEAN phyAddr = FALSE );
 
+boost::python::object
+loadWChars( ULONG64 address, ULONG  number, BOOLEAN phyAddr = FALSE );
+
 template<typename T>
 boost::python::object
 loadByPtr( ULONG64 address )