pykd/pykd/win/windbg.h
SND\kernelnet_cp b06fe5b226 [0.2.x] added : windbg commands
git-svn-id: https://pykd.svn.codeplex.com/svn@78848 9b283d60-5439-405e-af05-b73fd8c4d996
2017-11-08 17:42:50 +04:00

74 lines
1.5 KiB
C++

#pragma once
namespace pykd {
///////////////////////////////////////////////////////////////////////////////////
class WindbgGlobalSession
{
public:
static
boost::python::object
global() {
return windbgGlobalSession->main.attr("__dict__");
}
static
VOID
StartWindbgSession() {
if ( 1 == InterlockedIncrement( &sessionCount ) )
{
windbgGlobalSession = new WindbgGlobalSession();
}
}
static
VOID
StopWindbgSession() {
if ( 0 == InterlockedDecrement( &sessionCount ) )
{
delete windbgGlobalSession;
windbgGlobalSession = NULL;
}
}
static
bool isInit() {
return windbgGlobalSession != NULL;
}
static
VOID
RestorePyState() {
PyEval_RestoreThread( windbgGlobalSession->pyState );
}
static
VOID
SavePyState() {
windbgGlobalSession->pyState = PyEval_SaveThread();
}
private:
WindbgGlobalSession();
~WindbgGlobalSession() {
}
python::object main;
PyThreadState *pyState;
static volatile LONG sessionCount;
static WindbgGlobalSession *windbgGlobalSession;
};
///////////////////////////////////////////////////////////////////////////////////
}; // namespace pykd