FsRtlUninitializeFileLock

VOID __stdcall FsRtlUninitializeFileLock(_FILE_LOCK *FileLock){
  UINT64 v1; 
  char *LockInformation; 
  unsigned __int8 v4; 
  unsigned __int8 v5; 
  _QWORD *v6; 
  RTL_SPLAY_LINKS **v7; 
  RTL_SPLAY_LINKS *v8; 
  _QWORD *v9; 
  UINT64 *v10; 
  RTL_SPLAY_LINKS *v11; 
  _RTL_SPLAY_LINKS *Parent; 
  __int64 v13; 
  KIRQL v14; 
  UINT64 v15; 
  unsigned __int8 v16; 
  int v17; 
  v17 = 0;
  LockInformation = (char *)FileLock->LockInformation;
  if( LockInformation )
  {
    KeAcquireSpinLockRaiseToDpc(&FsRtlFileLockCancelCollideLock, v1);
    v5 = v4;
    KxAcquireSpinLock((UINT64 *)LockInformation + 3);
    v6 = LockInformation + 32;
    while( *v6 )
    {
      v11 = (RTL_SPLAY_LINKS *)(*v6 - 24i64);
      while( v11->Parent )
      {
        Parent = v11->Parent;
        v11->Parent = v11->Parent->Parent;
        ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)FsRtlSharedLockLookasideList, Parent);
      }
      RtlDeleteNoSplay(v11 + 1, (RTL_SPLAY_LINKS **)LockInformation + 4);
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)FsRtlLockTreeNodeLookasideList, v11);
    }
    v7 = (RTL_SPLAY_LINKS **)(LockInformation + 40);
    while( 1 )
    {
      v8 = *v7;
      if( !*v7 )
        break;
      RtlDeleteNoSplay(*v7, (RTL_SPLAY_LINKS **)LockInformation + 5);
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)FsRtlExclusiveLockLookasideList, v8);
    }
    while( 1 )
    {
      v9 = (_QWORD *)*((_QWORD *)LockInformation + 6);
      v10 = (UINT64 *)(LockInformation + 24);
      if( !v9 )
        break;
      *((_QWORD *)LockInformation + 6) = *v9;
      v13 = v9[3];
      KxReleaseSpinLock(v10);
      *(_BYTE *)(v13 + 69) = KeAcquireQueuedSpinLock(7ui64);
      _InterlockedExchange64((volatile __int64 *)(v13 + 104), 0i64);
      v14 = *(_BYTE *)(v13 + 69);
      if( *(_BYTE *)(v13 + 68) )
      {
        KeReleaseQueuedSpinLock(7ui64, v14);
        *v9 = FsRtlFileLockCancelCollideList;
        FsRtlFileLockCancelCollideList = (__int64)v9;
      }
      else
      {
        KeReleaseQueuedSpinLock(7ui64, v14);
        KxReleaseSpinLock(&FsRtlFileLockCancelCollideLock);
        __writecr8(v5);
        *(_QWORD *)(v13 + 56) = 0i64;
        FsRtlCompleteLockIrpReal(
          *((__int64(__fastcall **)(__int64, __int64))LockInformation + 1),
          v9[2],
          v13,
          -1073741698,
          &v17,
          0i64);
        ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)FsRtlWaitingLockLookasideList, v9);
        KeAcquireSpinLockRaiseToDpc(&FsRtlFileLockCancelCollideLock, v15);
        v5 = v16;
      }
      KxAcquireSpinLock((UINT64 *)LockInformation + 3);
    }
    KxReleaseSpinLock(v10);
    KxReleaseSpinLock(&FsRtlFileLockCancelCollideLock);
    __writecr8(v5);
    ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)FsRtlLockInfoLookasideList, LockInformation);
    FileLock->LockInformation = 0i64;
  }
}

Referenced by:

FsRtlFreeFileLock