diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index 7a6eff6..747922e 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -103,6 +103,8 @@ BOOST_PYTHON_MODULE( pykd ) "Return CPU's register value" ); boost::python::def( "rdmsr", &loadMSR, "Return MSR value" ); + boost::python::def( "wrmsr", &setMSR, + "Set MSR value" ); boost::python::def( "typedVarList", &loadTypedVarList, "Return list of typedVarClass instances. Each item represents one item of the linked list in the target memory" ); boost::python::def( "typedVarArray", &loadTypedVarArray, diff --git a/pykd/dbgreg.cpp b/pykd/dbgreg.cpp index 4a39b75..2fa2c42 100644 --- a/pykd/dbgreg.cpp +++ b/pykd/dbgreg.cpp @@ -11,8 +11,8 @@ using namespace std; boost::python::object loadRegister( const std::string ®isterName ) { - HRESULT hres; - + HRESULT hres; + ULONG registerIndex = 0; hres = dbgExt->registers->GetIndexByName( registerName.c_str(), ®isterIndex ); @@ -52,13 +52,24 @@ ULONG64 loadMSR( ULONG msr ) { HRESULT hres; - ULONG64 value; - + ULONG64 value; + hres = dbgExt->dataSpaces->ReadMsr( msr, &value ); if ( FAILED( hres ) ) - throw DbgException( "IDebugDataSpaces::ReadMsr failed" ); - - return value; + throw DbgException( "IDebugDataSpaces::ReadMsr failed" ); + + return value; +} + +/////////////////////////////////////////////////////////////////////////////////// + +void setMSR( ULONG msr, ULONG64 value) +{ + HRESULT hres; + + hres = dbgExt->dataSpaces->WriteMsr(msr, value); + if ( FAILED( hres ) ) + throw DbgException( "IDebugDataSpaces::WriteMsr failed" ); } /////////////////////////////////////////////////////////////////////////////////// diff --git a/pykd/dbgreg.h b/pykd/dbgreg.h index b915b7c..eeba89e 100644 --- a/pykd/dbgreg.h +++ b/pykd/dbgreg.h @@ -10,4 +10,6 @@ loadRegister( const std::string ®isterName ); ULONG64 loadMSR( ULONG msr ); +void setMSR( ULONG msr, ULONG64 val); + ///////////////////////////////////////////////////////////////////////////////// \ No newline at end of file