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