FsRtlPrivateCancelFileLockIrp
VOID __stdcall FsRtlPrivateCancelFileLockIrp(_DEVICE_OBJECT *DeviceObject, _IRP *Irp){
unsigned __int64 Information;
char v3;
UINT64 *v4;
unsigned __int8 CancelIrql;
VOID **i;
_IRP *v8;
_IRP *v9;
UINT64 *v10;
int v11;
Information = Irp->IoStatus.Information;
v3 = 0;
v11 = 0;
v4 = (UINT64 *)(Information + 24);
CancelIrql = Irp->CancelIrql;
if( !DeviceObject )
goto LABEL_3;
KeReleaseQueuedSpinLock(LockQueueIoCancelLock, Irp->CancelIrql);
CancelIrql = KeAcquireSpinLockRaiseToDpc(&FsRtlFileLockCancelCollideLock);
v3 = 1;
for( i = (VOID **)&FsRtlFileLockCancelCollideList; ; i = (VOID **)(v4 + 3) )
{
v8 = (_IRP *)*i;
if( *i )
break;
LABEL_7:
if( !v3 )
{
KxReleaseSpinLock(v4);
__writecr8(CancelIrql);
return;
}
v3 = 0;
KxAcquireSpinLock(v4);
KxReleaseSpinLock(&FsRtlFileLockCancelCollideLock);
LABEL_3:
;
}
while( 1 )
{
v9 = *(_IRP **)&v8->Type;
if( v8->AssociatedIrp.MasterIrp == Irp )
break;
i = (VOID **)v8;
v8 = *(_IRP **)&v8->Type;
if( !v9 )
goto LABEL_7;
}
*i = v9;
if( !v3 && v8 == (_IRP *)v4[4] )
v4[4] = (UINT64)i;
Irp->IoStatus.Information = 0i64;
v10 = &FsRtlFileLockCancelCollideLock;
if( !v3 )
v10 = v4;
KxReleaseSpinLock(v10);
__writecr8(CancelIrql);
FsRtlCompleteLockIrpReal(
(__int64(__fastcall *)(__int64, _IRP *))v8->MdlAddress,
*(_QWORD *)&v8->Flags,
Irp,
-1073741536,
&v11,
0i64);
ExFreeToNPagedLookasideList((_NPAGED_LOOKASIDE_LIST *)((char *)&WheapErrorSourceTable + 2344), v8);
}Referenced by:
FsRtlPrivateLock