FsRtlpHeatUnregisterVolume

VOID __stdcall FsRtlpHeatUnregisterVolume(PGUID VolumeGuid){
  BOOL(__fastcall *i)(INT64, struct KPRCB *); 
  __int64 v3; 
  BOOL(__fastcall *v5)(INT64, struct KPRCB *); 
  BOOL(__fastcall **v6)(INT64, struct KPRCB *); 
  ExAcquireResourceExclusiveLite(&Resource, 1u);
  for( i = *(BOOL(__fastcall **)(INT64, struct KPRCB *))FsRtlTieringHeatData;
        i != FsRtlTieringHeatData;
        i = *(BOOL(__fastcall **)(INT64, struct KPRCB *))i )
  {
    v3 = *(_QWORD *)((char *)i + 20) - *(_QWORD *)&VolumeGuid->Data1;
    if( !v3 )
      v3 = *(_QWORD *)((char *)i + 28) - *(_QWORD *)VolumeGuid->Data4;
    if( !v3 )
    {
      if( (*((_DWORD *)i + 4))-- == 1 )
      {
        v5 = *(BOOL(__fastcall **)(INT64, struct KPRCB *))i;
        if( *(BOOL(__fastcall **)(INT64, struct KPRCB *))(*(_QWORD *)i + 8i64) != i
          || (v6 = (BOOL(__fastcall **)(INT64, struct KPRCB *))*((_QWORD *)i + 1), *v6 != i) )
        {
          __fastfail(3u);
        }
        *v6 = v5;
        *((_QWORD *)v5 + 1) = v6;
        ExFreePoolWithTag(i, 0x68745346u);
      }
      break;
    }
  }
  ExReleaseResourceLite(&Resource);
}

Referenced by:

FsRtlHeatUninit