PspIumFreePartitionState
NTSTATUS __stdcall PspIumFreePartitionState(PVOID P){
INT64 v1;
INT64 v2;
signed __int64 v4;
int v5;
__int128 Object;
__int64 v8;
v8 = 0i64;
v4 = *((_QWORD *)P + 2);
Object = 0i64;
if( v4 )
{
DWORD1(Object) = 0;
v8 = (__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, v4) )
KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
}
MmUnlockPages((INT64)P + 96, v1, v2);
v5 = *((_DWORD *)P + 1);
if( v5 )
{
memmove((VOID *)(*((_QWORD *)P + 20) + 48i64 + 8i64 * *((unsigned int *)P + 39)), (char *)P + 24, 8 * v5);
*((_DWORD *)P + 39) += *((_DWORD *)P + 1);
}
MmFreeSecureKernelPages(*((PMDL *)P + 20));
HalPutDmaAdapter(*((PADAPTER_OBJECT *)P + 1));
return(unsigned int)ExFreePoolWithTag(P, 0);
}Referenced by:
PsDispatchIumService