IoSetDiskIoAttributionFromThread

NTSTATUS __stdcall IoSetDiskIoAttributionFromThread(_IRP *Irp, _ETHREAD *Thread){
  _QWORD *v2; 
  int v4; 
  _EPROCESS *v6; 
  __int64 v7; 
  UINT64 v8; 
  int v9; 
  KIRQL v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  KIRQL v14; 
  unsigned __int64 v15; 
  v2 = (_QWORD *)*((_QWORD *)Thread + 184);
  v4 = 0;
  if( !v2 )
    goto LABEL_14;
  if( Thread != (_ETHREAD *)KeGetCurrentThread() )
  {
    v14 = ExAcquireSpinLockShared((PEX_SPIN_LOCK)PspThreadWorkOnBehalfLock);
    v2 = (_QWORD *)*((_QWORD *)Thread + 184);
    v15 = v14;
    if( v2 )
    {
      ObfReferenceObjectWithTag(*((PVOID *)Thread + 184), 0x746C6644u);
      v4 = 1;
    }
    ExReleaseSpinLockSharedFromDpcLevel((PEX_SPIN_LOCK)PspThreadWorkOnBehalfLock);
    __writecr8(v15);
  }
  if( v2 )
  {
    v7 = v2[68];
  }
  else
  {
LABEL_14:
    if( Thread == (_ETHREAD *)KeGetCurrentThread() )
    {
      v6 = (_EPROCESS *)*((_QWORD *)Thread + 23);
      if( v6 != *((_EPROCESS **)Thread + 68) && IopSetDiskIoAttributionFromProcess(Irp, v6) >= 0 )
      {
LABEL_15:
        v9 = 0;
        goto LABEL_8;
      }
    }
    v7 = *((_QWORD *)Thread + 68);
  }
  v8 = 0i64;
  if( *(_QWORD *)(v7 + 2392) )
  {
    v11 = ExAcquireSpinLockShared(&IopDiskIoAttributionLock);
    v12 = *(_QWORD *)(v7 + 2392);
    v13 = v11;
    if( v12 )
      v8 = *(_QWORD *)(v12 + 24);
    ExReleaseSpinLockSharedFromDpcLevel(&IopDiskIoAttributionLock);
    __writecr8(v13);
    if( v12 )
    {
      v9 = IopSetDiskIoAttributionExtension(Irp, v8);
      if( v9 >= 0 )
        v9 = 0;
    }
    else
    {
      v9 = -1073741275;
    }
  }
  else
  {
    v9 = -1073741275;
  }
  if( v9 >= 0 )
    goto LABEL_15;
LABEL_8:
  if( v4 )
    ObDereferenceObjectDeferDelete(v2);
  return v9;
}

Referenced by:

IoAsynchronousPageWrite
IoPageReadEx
IoSetIoAttributionIrp
IoSynchronousPageWriteEx
IopBuildAsynchronousFsdRequest
IopSynchronousServiceTail