VfIrpDatabaseEntryFindAndLock
volatile signed __int32 *__fastcall VfIrpDatabaseEntryFindAndLock(unsigned __int64 a1){
volatile signed __int32 *v1;
volatile signed __int32 *Pointer;
UINT8 v4;
UINT64 v5;
UINT8 OldIrql;
v1 = 0i64;
OldIrql = 0;
if( VfIrpDatabaseInitialized
&& VfUtilAddressRangeFitNoLock(
(__m128i *)(ViIrpDatabaseAddressRanges + 16i64 * (unsigned __int8)(-125 * (a1 >> 12))),
a1,
a1 + 208) )
{
ViIrpDatabaseAcquireLockShared(&OldIrql);
Pointer = (volatile signed __int32 *)ViIrpDatabaseFindPointer(a1);
v1 = Pointer;
if( Pointer )
{
_InterlockedIncrement(Pointer + 5);
v4 = OldIrql;
ViIrpDatabaseReleaseLockShared(OldIrql);
KeAcquireSpinLockRaiseToDpc((UINT64 *)v1 + 1, v5);
*((_BYTE *)v1 + 16) = v4;
_InterlockedDecrement(v1 + 5);
if( !*((_DWORD *)v1 + 6) )
{
VfIrpDatabaseEntryReleaseLock(v1);
return 0i64;
}
}
else
{
ViIrpDatabaseReleaseLockShared(OldIrql);
}
}
return v1;
}Referenced by:
IovCancelIrp
IovpCallDriver1
IovpCheckIrpForCriticalTracking
IovpCompleteRequest1
VfIoFreeIrp
VfIoInitializeIrp
VfIrpDatabaseEntryInsertAndLock
VfIrpWatermark
VfPendingMoreProcessingRequired
VfSetIoBuildRequest