PspIumFreePartitionState
NTSTATUS __stdcall PspIumFreePartitionState(PVOID P){
signed __int64 v2;
unsigned int v3;
NTSTATUS result;
__int128 Object;
__int64 v6;
v6 = 0i64;
v2 = *((_QWORD *)P + 2);
Object = 0i64;
if( v2 )
{
DWORD1(Object) = 0;
v6 = (__int64)&Object + 8;
*((_QWORD *)&Object + 1) = (char *)&Object + 8;
LOWORD(Object) = 1;
BYTE2(Object) = 6;
if( _InterlockedCompareExchange64((volatile signed __int64 *)P + 2, (signed __int64)&Object, v2) )
KeWaitForSingleObject(&Object, Executive, 0, 0, 0i64);
}
MmUnlockPages((_MDL *)P + 2);
v3 = *((_DWORD *)P + 1);
if( v3 )
{
memmove((UINT8 *)(*((_QWORD *)P + 20) + 48i64 + 8i64 * *((unsigned int *)P + 39)), (UINT8 *)P + 24, 8i64 * v3);
*((_DWORD *)P + 39) += *((_DWORD *)P + 1);
}
MmFreeSecureKernelPages(*((PMDL *)P + 20));
HalPutDmaAdapter(*((PADAPTER_OBJECT *)P + 1));
ExFreePoolWithTag(P, 0);
return result;
}Referenced by:
PsDispatchIumService