KdEnableDebuggerWithLock
VOID __fastcall KdEnableDebuggerWithLock(UINT8 TakeLock){
unsigned __int8 CurrentIrql;
int v3;
CurrentIrql = 0;
if( !KdPitchDebugger && !KdBlockEnable )
{
if( TakeLock )
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
KxAcquireSpinLock(&KdDebuggerLock);
}
v3 = KdDisableCount;
if( !KdDisableCount )
{
if( !TakeLock )
{
KdInitSystem(0i64, 0i64);
return;
}
goto LABEL_14;
}
--KdDisableCount;
if( v3 == 1 && KdPreviouslyEnabled )
{
if( TakeLock )
{
KdPowerTransitionEx(1073741825i64, 0);
dword_140C50A74 = 1;
LOBYTE(KdDebuggerEnabled) = 1;
KUSER_SHARED_DATA.KdDebuggerEnabled = 1;
KdpRestoreAllBreakpoints();
}
else
{
PoHiberInProgress = 1;
KdInitSystem(0i64, 0i64);
KdpRestoreAllBreakpoints();
PoHiberInProgress = 0;
}
}
if( TakeLock )
{
LABEL_14:
KxReleaseSpinLock(&KdDebuggerLock);
__writecr8(CurrentIrql);
}
}
}Referenced by:
KdEnableDebugger
KeBugCheck2