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