MiSyncCommitSignals
VOID __stdcall MiSyncCommitSignals(_MI_PARTITION *Partition, UINT64 LockHeld){
UINT8 v2;
UINT8 v3;
int v4;
unsigned __int64 v6;
struct _KEVENT *v7;
_DWORD *v8;
_DWORD *v9;
struct _KEVENT *v10;
UINT64 v11;
UINT8 v12;
UINT8 v13;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v4 = LockHeld;
memset(&LockHandle, 0, sizeof(LockHandle));
if( (_DWORD)LockHeld )
LockHandle.OldIrql = 17;
else
KeAcquireInStackQueuedSpinLock((UINT64 *)Partition + 781, &LockHandle);
v6 = *((_QWORD *)Partition + 933);
if( v6 >= *((_QWORD *)Partition + 779) )
{
v10 = (struct _KEVENT *)*((_QWORD *)Partition + 38);
if( v6 < *((_QWORD *)Partition + 780) )
{
if( v10->Header.SignalState == 1 )
{
KeResetEvent(v10, LockHeld, v2, v3, (IRP *)LockHandle.LockQueue.Next);
KeResetEvent(*((VOID **)Partition + 39), v11, v12, v13, (IRP *)LockHandle.LockQueue.Next);
}
}
else
{
if( !v10->Header.SignalState )
KeSetEvent(v10, 0);
if( *((_QWORD *)Partition + 949) == *((_QWORD *)Partition + 777) )
KeSetEvent(*((PRKEVENT *)Partition + 39), 0);
}
v9 = (_DWORD *)*((_QWORD *)Partition + 37);
if( v9[1] == 1 )
goto LABEL_8;
}
else
{
v7 = (struct _KEVENT *)*((_QWORD *)Partition + 37);
if( !v7->Header.SignalState )
KeSetEvent(v7, 0);
v8 = (_DWORD *)*((_QWORD *)Partition + 38);
if( v8[1] == 1 )
{
KeResetEvent(v8, LockHeld, v2, v3, (IRP *)LockHandle.LockQueue.Next);
v9 = (_DWORD *)*((_QWORD *)Partition + 39);
LABEL_8:
KeResetEvent(v9, LockHeld, v2, v3, (IRP *)LockHandle.LockQueue.Next);
}
}
if( !v4 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}
}Referenced by:
MiChargeCommit
MiComputeCommitThresholds
MiRemoveLockedPageCharge
MiReplenishLocalCommit
MiReturnCommit
MiUnlockMdlWritePages