From a7855ea4d182eb9bb724c2b3051a92b7e20f4f0a Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Wed, 28 Sep 2011 07:45:52 +0000
Subject: [PATCH] [pykd] added: debuggerPath routine ( Return full path to the
 process image that uses pykd )

git-svn-id: https://pykd.svn.codeplex.com/svn@70089 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/dbgext.cpp       |  4 +++-
 pykd/dbgsystem.cpp    | 12 ++++++++++++
 pykd/dbgsystem.h      |  4 ++++
 pykd/pykd.vcproj      |  8 ++++----
 pykd/pykd_2008.vcproj |  8 ++++----
 5 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp
index 9d6fc40..e93212f 100644
--- a/pykd/dbgext.cpp
+++ b/pykd/dbgext.cpp
@@ -221,6 +221,8 @@ BOOST_PYTHON_MODULE( pykd )
         "Delete synthetic symbols by virtual address" );
     boost::python::def( "delSynSymbolsMask", &delSyntheticSymbolsMask, 
         "Delete synthetic symbols by mask of module and symbol name");
+    boost::python::def( "debuggerPath", &getDebuggerImage,
+        "Return full path to the process image that uses pykd" );
 
     boost::python::class_<TypeInfo>( "typeInfo",
         "Class representing non-primitive type info: structure, union, etc. attributes is a fields of non-primitive type" )
@@ -253,7 +255,7 @@ BOOST_PYTHON_MODULE( pykd )
     DEF_PY_GLOBAL( "ulong_t", TypeInfo("", "unsigned long") );
     DEF_PY_GLOBAL( "int_t", TypeInfo("", "int") );
     DEF_PY_GLOBAL( "uint_t", TypeInfo("", "unsigned int") );
-    DEF_PY_GLOBAL( "ptr_t", TypeInfo("", "void*") );
+    //DEF_PY_GLOBAL( "ptr_t", TypeInfo("", "void*") );
     DEF_PY_GLOBAL( "double_t", TypeInfo("", "double") );
     DEF_PY_GLOBAL( "longlong_t", TypeInfo("", "int64") );
     DEF_PY_GLOBAL( "ulonglong_t", TypeInfo("", "unsigned int64") );
diff --git a/pykd/dbgsystem.cpp b/pykd/dbgsystem.cpp
index 069ef41..2cf890a 100644
--- a/pykd/dbgsystem.cpp
+++ b/pykd/dbgsystem.cpp
@@ -1,5 +1,7 @@
 #include "stdafx.h"
 
+#include <psapi.h>
+
 #include "dbgext.h"
 #include "dbgexcept.h"
 #include "dbgsystem.h"
@@ -124,3 +126,13 @@ isDumpAnalyzing()
 }
 
 ///////////////////////////////////////////////////////////////////////////////////
+
+std::string
+getDebuggerImage()
+{
+    std::vector<char>   buffer(MAX_PATH);
+    GetModuleFileNameExA( GetCurrentProcess(), NULL, &buffer[0], buffer.size() );
+    return std::string( &buffer[0] );
+}
+
+///////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/pykd/dbgsystem.h b/pykd/dbgsystem.h
index 7b52da9..88e337b 100644
--- a/pykd/dbgsystem.h
+++ b/pykd/dbgsystem.h
@@ -28,4 +28,8 @@ isKernelDebugging();
 bool
 isDumpAnalyzing();
 
+std::string
+getDebuggerImage();
+
+
 /////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/pykd/pykd.vcproj b/pykd/pykd.vcproj
index 41a9c66..d121df2 100644
--- a/pykd/pykd.vcproj
+++ b/pykd/pykd.vcproj
@@ -66,7 +66,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib "
+				AdditionalDependencies="dbgeng.lib dbghelp.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\i386&quot;;&quot;$(PYTHON_ROOT)\x86\libs&quot;;&quot;$(BOOST_ROOT)\stage\lib&quot;"
@@ -151,7 +151,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib dbghelp.lib"
+				AdditionalDependencies="dbgeng.lib dbghelp.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\amd64&quot;;&quot;$(PYTHON_ROOT)\x64\libs&quot;;&quot;$(BOOST_ROOT)\stage64\lib&quot;"
@@ -230,7 +230,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib"
+				AdditionalDependencies="dbgeng.lib dbghelp.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\i386&quot;;&quot;$(PYTHON_ROOT)\x86\libs&quot;;&quot;$(BOOST_ROOT)\stage\lib&quot;"
@@ -311,7 +311,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib dbghelp.lib"
+				AdditionalDependencies="dbgeng.lib dbghelp.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\amd64&quot;;&quot;$(PYTHON_ROOT)\x64\libs&quot;;&quot;$(BOOST_ROOT)\stage64\lib&quot;"
diff --git a/pykd/pykd_2008.vcproj b/pykd/pykd_2008.vcproj
index 6a58a96..f886eba 100644
--- a/pykd/pykd_2008.vcproj
+++ b/pykd/pykd_2008.vcproj
@@ -70,7 +70,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib "
+				AdditionalDependencies="dbgeng.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\i386&quot;;&quot;$(PYTHON_ROOT)\x86\libs&quot;;&quot;$(BOOST_ROOT)\stage\lib&quot;"
@@ -151,7 +151,7 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				AdditionalDependencies="dbgeng.lib"
+				AdditionalDependencies="dbgeng.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="2"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\amd64&quot;;&quot;$(PYTHON_ROOT)\x64\libs&quot;;&quot;$(BOOST_ROOT)\stage64\lib&quot;"
@@ -227,7 +227,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalOptions="/pdbpath:none"
-				AdditionalDependencies="dbgeng.lib"
+				AdditionalDependencies="dbgeng.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\i386&quot;;&quot;$(PYTHON_ROOT)\x86\libs&quot;;&quot;$(BOOST_ROOT)\stage\lib&quot;"
@@ -306,7 +306,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalOptions="/pdbpath:none"
-				AdditionalDependencies="dbgeng.lib"
+				AdditionalDependencies="dbgeng.lib psapi.lib"
 				OutputFile="$(OutDir)\$(ProjectName).pyd"
 				LinkIncremental="1"
 				AdditionalLibraryDirectories="&quot;$(DBG_SDK_ROOT)\lib\amd64&quot;;&quot;$(PYTHON_ROOT)\x64\libs&quot;;&quot;$(BOOST_ROOT)\stage64\lib&quot;"