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.