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