MiAllocatePfnRepurposeLogDispatch
VOID __stdcall MiAllocatePfnRepurposeLogDispatch(
_KDPC *Dpc,
VOID *DeferredContext,
VOID *SystemArgument1,
VOID *SystemArgument2){
volatile unsigned __int64 TickCountQuad;
char *Pool;
void *v6;
__int64 v7;
__int64 v8;
unsigned int Alignment_low;
int v10;
_KLOCK_QUEUE_HANDLE LockQueue;
*(_QWORD *)&LockQueue.OldIrql = 0i64;
TickCountQuad = KUSER_SHARED_DATA.TickCountQuad;
Pool = (char *)MiAllocatePool(64i64, 0x1000ui64, 0x70526D4Dui64);
v6 = Pool;
if( Pool )
{
*(_QWORD *)Pool = 0i64;
*((_QWORD *)Pool + 4) = Pool + 72;
*((_QWORD *)Pool + 5) = Pool + 4088;
*((_DWORD *)Pool + 2) = 2;
*((_QWORD *)Pool + 2) = TickCountQuad;
}
LockQueue.LockQueue.Next = 0i64;
LockQueue.LockQueue.Lock = (unsigned __int64 *volatile)((char *)&stru_140C4DB30 + 2640);
KxAcquireQueuedSpinLock(&LockQueue.LockQueue, (UINT64 *)&stru_140C4DB30 + 330);
v7 = *(&stru_140C4DB30 + 378);
if( !*(&stru_140C4DB30 + 654) )
{
LABEL_25:
*(&stru_140C4DB30 + 378) = 0i64;
goto LABEL_6;
}
if( v6 )
{
*(&stru_140C4DB30 + 378) = v6;
v6 = 0i64;
goto LABEL_6;
}
if( *(&stru_140C4DB30 + 378) )
{
if( (*(_DWORD *)(*(&stru_140C4DB30 + 378) + 32i64) & 0xFFFi64) != 0 )
{
v7 = 0i64;
goto LABEL_6;
}
goto LABEL_25;
}
LABEL_6:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
if( v6 )
ExFreePoolWithTag(v6, 0);
if( v7 )
{
v8 = *(_QWORD *)(v7 + 32);
if( v8 == v7 + 72 )
goto LABEL_27;
if( (v8 & 0xFFF) != 0 )
{
if( TickCountQuad < *(_QWORD *)(v7 + 16) )
{
TickCountQuad = KUSER_SHARED_DATA.TickCountQuad;
v8 = *(_QWORD *)(v7 + 32);
}
*(_QWORD *)(v7 + 24) = TickCountQuad;
*(_QWORD *)(v7 + 40) = v8 - 8;
}
*(_QWORD *)(v7 + 32) = v7 + 72;
if( !ExAcquireRundownProtection(&PfKernelGlobals.AccessBufferRef) )
goto LABEL_27;
Alignment_low = LOWORD(PfKernelGlobals.AccessBufferList.Alignment);
if( LOWORD(PfKernelGlobals.AccessBufferList.Alignment) >= PfKernelGlobals.AccessBufferMax )
{
_InterlockedExchangeAdd((volatile signed __int32 *)&xmmword_140C4FC10, 0x64u);
v10 = 0;
}
else
{
RtlpInterlockedPushEntrySList(&PfKernelGlobals.AccessBufferList, (PSLIST_ENTRY)v7);
if( Alignment_low >= 8 && !*(_DWORD *)&PfKernelGlobals.gap10[4] )
KeSetEvent((PRKEVENT)PfKernelGlobals.gap10, 0, 0);
v10 = 1;
}
ExReleaseRundownProtection(&PfKernelGlobals.AccessBufferRef);
if( !v10 )
LABEL_27:
ExFreePoolWithTag((PVOID)v7, 0);
}
}Referenced by:
No references.