PiSwIrpGetLifetime

INT64 __stdcall PiSwIrpGetLifetime(PIRP Irp){
  __int64 v1; 
  unsigned int v2; 
  _DWORD *v3; 
  INT64 v5; 
  _ETHREAD *CurrentThread; 
  v1 = *((_QWORD *)Irp + 23);
  v2 = 0;
  v3 = (_DWORD *)*((_QWORD *)Irp + 3);
  v5 = *(_QWORD *)(*(_QWORD *)(v1 + 48) + 32i64);
  if( *(_DWORD *)(v1 + 8) >= 4u )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquireResourceExclusiveLite((ERESOURCE *)PiSwLockObj, 1u);
    if( PiSwDeviceOperationsAllowed(v5) )
    {
      *v3 = *(_DWORD *)(v5 + 180);
      *((_QWORD *)Irp + 7) = 4i64;
    }
    else
    {
      v2 = -1073741637;
    }
    ExReleaseResourceLite((PERESOURCE)PiSwLockObj);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  }
  else
  {
    v2 = -1073741811;
  }
  *((_DWORD *)Irp + 12) = v2;
  IofCompleteRequest(Irp, 0);
  return v2;
}

Referenced by:

PiSwDispatch