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