MmUpdateMdlTracker
UINT64 __stdcall MmUpdateMdlTracker(MDL *MemoryDescriptorList, PVOID CallingAddress, PVOID CallersCaller){
_QWORD *Process;
__int64 *i;
struct _KLOCK_QUEUE_HANDLE LockHandle;
Process = MemoryDescriptorList->Process;
LockHandle.LockQueue = 0i64;
if( !Process )
Process = PsInitialSystemProcess;
*(_QWORD *)&LockHandle.OldIrql = 0i64;
i = (__int64 *)Process[193];
if( !i )
return 0i64;
KeAcquireInStackQueuedSpinLock((UINT64 *)i + 3, &LockHandle);
LABEL_5:
for( i = (__int64 *)*i; i; i = (__int64 *)i[1] )
{
if( (unsigned __int64)MemoryDescriptorList < i[3] )
goto LABEL_5;
if( (unsigned __int64)MemoryDescriptorList <= i[3] )
{
if( CallingAddress || CallersCaller )
{
i[9] = (__int64)CallingAddress;
i[10] = (__int64)CallersCaller;
*(_OWORD *)(i + 11) = 0i64;
*(_OWORD *)(i + 13) = 0i64;
*(_OWORD *)(i + 15) = 0i64;
}
break;
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return i != 0;
}Referenced by:
IopProbeAndLockPages
IopProbeAndLockPages_0
IopProbeAndLockPages_1
IopProbeAndLockPages_2
NtWriteFile
NtWriteFileGather