MiDbgReadWriteEnclaveUnaligned

NTSTATUS __stdcall MiDbgReadWriteEnclaveUnaligned(
        VOID *EnclaveAddress,
        VOID *Buffer,
        UINT64 AmountToMove,
        UINT64 EnclaveIsSource){
  int v4; 
  size_t v5; 
  __int64 v7; 
  char *v8; 
  NTSTATUS result; 
  NTSTATUS v10; 
  UINT64 BytesTransferred[5]; 
  __int64 VirtualAddress; 

  VirtualAddress = 0i64;
  BytesTransferred[0] = 0i64;
  v4 = EnclaveIsSource;
  v5 = AmountToMove;
  v7 = (unsigned __int8)EnclaveAddress & 7;
  v8 = (char *)EnclaveAddress - v7;
  result = KeDebugReadEnclaveMemory((char *)EnclaveAddress - v7, &VirtualAddress, 8ui64, BytesTransferred);
  v10 = result;
  if( result >= 0 )
  {
    if( v4 )
    {
      memmove(Buffer, (char *)&VirtualAddress + v7, v5);
    }
    else
    {
      memmove((char *)&VirtualAddress + v7, Buffer, v5);
      return KeDebugWriteEnclaveMemory(v8, &VirtualAddress, 8ui64, BytesTransferred);
    }
    return v10;
  }
  return result;
}

Referenced by:

MiDbgReadWriteEnclave