PerfDiagpProxyWorker
VOID __stdcall PerfDiagpProxyWorker(PVOID Parameter){
int v1;
_ETHREAD *CurrentThread;
INT64 v3;
const wchar_t *v4;
int updated;
char v6;
const wchar_t *v7;
UINT64 OutBufferLen;
UINT64 ReturnLength;
if( !Parameter )
return;
LODWORD(ReturnLength) = 0;
v1 = *((_DWORD *)Parameter + 8);
ExFreePoolWithTag(Parameter, 0);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&qword_140C1A040, 0i64);
if( !(unsigned int)PerfDiagpIsTracingAllowed() )
goto LABEL_30;
if( dword_140C1A048 != v1 - 1 )
{
if( v1 == 3 )
{
if( dword_140C1A048 == 1 )
goto LABEL_11;
}
else if( ((v1 - 5) & 0xFFFFFFFD) == 0 )
{
goto LABEL_4;
}
if( v1 < dword_140C1A048 )
{
v1 = dword_140C1A048;
goto LABEL_11;
}
LABEL_30:
dword_140C1A048 = 8;
goto LABEL_12;
}
LABEL_4:
if( v1 == 1 )
{
v7 = L"Diagnostics\\Performance\\BootCKCLSettings";
}
else
{
v3 = (unsigned int)(v1 - 2);
if( v1 == 2 )
{
v4 = (const wchar_t *)L"WaitingForLogonEnableKernelFlags";
goto LABEL_9;
}
v3 = (unsigned int)(v1 - 3);
switch( v1 )
{
case 3:
v4 = L"EnableKernelFlags";
LABEL_9:
updated = PerfDiagpUpdatePerfDiagLoggerEnableFlags(v3, (INT64)v4);
goto LABEL_10;
case 4:
LABEL_16:
PerfDiagpInitializeLoggerInfo(0i64, 0i64);
LODWORD(OutBufferLen) = OutBuffer;
NtTraceControl(2ui64, &OutBuffer, (unsigned int)OutBuffer, &OutBuffer, OutBufferLen, &ReturnLength);
goto LABEL_11;
case 5:
v7 = L"Diagnostics\\Performance\\SecondaryLogonCKCLSettings";
break;
case 6:
goto LABEL_16;
case 7:
PerfDiagpSaveActiveDCLLogFileName();
v7 = L"Diagnostics\\Performance\\ShutdownCKCLSettings";
break;
default:
goto LABEL_11;
}
}
updated = PerfDiagpStartPerfDiagLogger(v7);
LABEL_10:
if( updated < 0 )
goto LABEL_30;
LABEL_11:
dword_140C1A048 = v1;
LABEL_12:
v6 = _InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C1A040, 0xFFFFFFFFFFFFFFFFui64);
if( (v6 & 2) != 0 && (v6 & 4) == 0 )
ExfTryToWakePushLock((volatile INT64 *)&qword_140C1A040);
KeAbPostRelease(&qword_140C1A040);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
No references.