DbgkpCloseObject
void __fastcall DbgkpCloseObject(__int64 a1, __int64 a2, __int64 a3, unsigned __int64 a4){
_QWORD *v5;
int v6;
UINT64 v7;
__int64 NextProcess;
OBJECT_ATTRIBUTES *v9;
UINT64 v10;
char v11;
_QWORD *v12;
if( a4 <= 1 )
{
ExAcquireFastMutex((FAST_MUTEX *)(a2 + 24));
*(_DWORD *)(a2 + 96) |= 1u;
v5 = *(_QWORD **)(a2 + 80);
*(_QWORD *)(a2 + 80) = a2 + 80;
*(_QWORD *)(a2 + 88) = a2 + 80;
KeReleaseGuardedMutex((_FAST_MUTEX *)(a2 + 24));
KeSetEvent((PRKEVENT)a2, 0);
v6 = *(_DWORD *)(a2 + 96) & 2;
NextProcess = PsGetNextProcess(0i64);
if( NextProcess )
{
v11 = v6 != 0 ? 2 : 0;
do
{
if( *(_QWORD *)(NextProcess + 1400) == a2 )
{
v11 &= ~1u;
ExAcquireFastMutex(&DbgkpProcessDebugPortMutex);
if( *(_QWORD *)(NextProcess + 1400) == a2 )
{
*(_QWORD *)(NextProcess + 1400) = 0i64;
v11 |= 1u;
}
KeReleaseGuardedMutex(&DbgkpProcessDebugPortMutex);
if( (v11 & 1) != 0 )
{
DbgkpMarkProcessPeb((PEPROCESS)NextProcess);
if( (v11 & 2) != 0 )
PsTerminateProcess(NextProcess, 0xC0000354);
HalPutDmaAdapter((PADAPTER_OBJECT)a2);
}
}
NextProcess = PsGetNextProcess((PVOID)NextProcess);
}
while( NextProcess );
}
while( v5 != (_QWORD *)(a2 + 80) )
{
v12 = v5;
v5 = (_QWORD *)*v5;
*((_DWORD *)v12 + 18) = -1073740972;
DbgkpWakeTarget((PVOID *)v12, v7, v9, v10);
}
}
}Referenced by:
No references.