VfIrpDatabaseEntryFindAndLock
_IOV_DATABASE_HEADER *__stdcall VfIrpDatabaseEntryFindAndLock(_IRP *Irp){
_LIST_ENTRY *v1;
_LIST_ENTRY *Pointer;
UINT8 v4;
UINT8 OldIrql;
v1 = 0i64;
OldIrql = 0;
if( VfIrpDatabaseInitialized
&& (unsigned int)VfUtilAddressRangeFitNoLock(
(_VF_ADDRESS_RANGE *)(ViIrpDatabaseAddressRanges
+ 16i64 * (unsigned __int8)(-125 * ((unsigned __int64)Irp >> 12))),
(UINT8 *)Irp,
(UINT8 *)&Irp[1]) )
{
ViIrpDatabaseAcquireLockShared(&OldIrql);
Pointer = ViIrpDatabaseFindPointer(Irp);
v1 = Pointer;
if( Pointer )
{
_InterlockedIncrement((volatile signed __int32 *)&Pointer[1].Flink + 1);
v4 = OldIrql;
ViIrpDatabaseReleaseLockShared(OldIrql);
KeAcquireSpinLockRaiseToDpc((UINT64 *)&v1->Blink);
LOBYTE(v1[1].Flink) = v4;
_InterlockedDecrement((volatile signed __int32 *)&v1[1].Flink + 1);
if( !LODWORD(v1[1].Blink) )
{
VfIrpDatabaseEntryReleaseLock((_IOV_DATABASE_HEADER *)v1);
return 0i64;
}
}
else
{
ViIrpDatabaseReleaseLockShared(OldIrql);
}
}
return(_IOV_DATABASE_HEADER *)v1;
}Referenced by:
IovCancelIrp
IovpCallDriver1
IovpCheckIrpForCriticalTracking
IovpCompleteRequest1
VfIoFreeIrp
VfIoInitializeIrp
VfIrpDatabaseEntryInsertAndLock
VfIrpWatermark
VfPendingMoreProcessingRequired
VfSetIoBuildRequest