PopFanWorker
VOID __stdcall PopFanWorker(PVOID Parameter){
__int64 v1;
_DEVICE_OBJECT *v3;
UINT8 v4;
char v5;
int v6;
UINT8 v7;
__int64 v8;
UINT64 InputSize;
UINT64 OutputSize;
v1 = *((_QWORD *)Parameter + 7);
v3 = (_DEVICE_OBJECT *)*((_QWORD *)Parameter + 6);
v4 = 0;
v5 = 0;
PopAcquireRwLockExclusive((_POP_RW_LOCK *)Parameter + 7);
if( !*((_BYTE *)Parameter + 152) )
{
v6 = *(_DWORD *)(v1 + 48);
if( v6 >= 0 )
{
v7 = *((_BYTE *)Parameter + 68);
if( *((_BYTE *)Parameter + 72) )
{
if( v7 )
goto LABEL_5;
}
else if( !v7 )
{
LABEL_5:
LODWORD(OutputSize) = 8;
LODWORD(InputSize) = 8;
PopPrepareIoctl(*((IRP **)Parameter + 7), 0x294240ui64, 1u, (char *)Parameter + 64, InputSize, OutputSize);
v8 = *(_QWORD *)(v1 + 184);
*(_QWORD *)(v8 - 16) = PopFanIrpComplete;
*(_QWORD *)(v8 - 8) = Parameter;
*(_BYTE *)(v8 - 69) = -32;
IofCallDriver(v3, (PIRP)v1);
goto LABEL_6;
}
v5 = 1;
*((_BYTE *)Parameter + 72) = v7;
v4 = v7;
goto LABEL_5;
}
if( v6 == -1073741667 || v6 == -1073741536 )
goto LABEL_5;
}
if( *((_BYTE *)Parameter + 72) )
{
v5 = 1;
*((_BYTE *)Parameter + 72) = 0;
}
KeSetEvent((PRKEVENT)((char *)Parameter + 128), 0);
LABEL_6:
if( v5 )
PopFanUpdateRunningState(v4);
PopReleaseRwLock((UINT64)Parameter + 112);
}Referenced by:
No references.