MmUpdateSectionIoAttribution
VOID __stdcall MmUpdateSectionIoAttribution(
_SECTION_OBJECT_POINTERS *SectionObjectPointers,
VOID *IoAttributionContext){
VOID *v3;
_CONTROL_AREA *v4;
_CONTROL_AREA *v5;
__int64 bf_0;
UINT8 OldIrql;
OldIrql = 0;
v3 = 0i64;
v4 = MiLockSectionControlArea((_MI_SECTION_OBJECT_POINTERS *)SectionObjectPointers, 1ui64, &OldIrql);
v5 = v4;
if( v4 )
{
if( IoAttributionContext != (VOID *)(8 * v4->u3._bf_0) )
{
if( _InterlockedIncrement64((volatile signed __int64 *)IoAttributionContext + 4) <= 1 )
__fastfail(0xEu);
bf_0 = v4->u3._bf_0;
v3 = (VOID *)(8 * bf_0);
v5->u3._bf_0 = ((unsigned __int64)IoAttributionContext >> 3) | bf_0 & 0xE000000000000000ui64;
}
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v5->ControlAreaLock);
__writecr8(OldIrql);
if( v3 )
IoDiskIoAttributionDereference(v3);
}
}Referenced by:
CcMapAndCopyInToCache