CmpStopSiloKeyLockTracker
INT64 __stdcall CmpStopSiloKeyLockTracker(PVOID BugCheckParameter2){
_ETHREAD *CurrentThread;
_QWORD *v3;
PVOID *v4;
INT64 result;
PVOID *v6;
_QWORD *v7;
PVOID P;
PVOID *p_P;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)BugCheckParameter2, 0i64);
*((_DWORD *)BugCheckParameter2 + 2) = *((_DWORD *)BugCheckParameter2 + 2) & 0xFFFFFFFC | 2;
v3 = (_QWORD *)*((_QWORD *)BugCheckParameter2 + 2);
p_P = &P;
P = &P;
if( v3 != (_QWORD *)((char *)BugCheckParameter2 + 16) )
{
v4 = (PVOID *)*((_QWORD *)BugCheckParameter2 + 3);
P = v3;
p_P = v4;
v3[1] = &P;
*v4 = &P;
*((_QWORD *)BugCheckParameter2 + 3) = (char *)BugCheckParameter2 + 16;
*((_QWORD *)BugCheckParameter2 + 2) = (char *)BugCheckParameter2 + 16;
}
ExReleasePushLockEx((UINT64)BugCheckParameter2, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
result = (INT64)&P;
if( P != &P )
{
CmpLockRegistry();
v6 = (PVOID *)P;
v7 = *(_QWORD **)P;
if( *((PVOID **)P + 1) != &P )
LABEL_5:
__fastfail(3u);
while( 1 )
{
if( (PVOID *)v7[1] != v6 )
goto LABEL_5;
P = v7;
v7[1] = &P;
if( v6 == &P )
break;
CmpFreeSiloKeyLockEntry(v6);
v6 = (PVOID *)P;
if( *((PVOID **)P + 1) != &P )
goto LABEL_5;
v7 = *(_QWORD **)P;
}
CmpUnlockRegistry();
}
return result;
}Referenced by:
CmCleanupServerSiloState
CmpFreeSiloContextCallback