/* * COPYRIGHT: GPL, see COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: drivers/base/kdvm/kdvbox.c * PURPOSE: VBOX data exchange function for kdvbox * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) */ #include "kdvm.h" typedef struct { ULONG SendSize; ULONG BufferSize; } KDVBOX_SEND_HEADER, *PKDVBOX_SEND_HEADER; typedef struct { ULONG ReceivedDataSize; } KDVBOX_RECEIVE_HEADER, *PKDVBOX_RECEIVE_HEADER; VOID NTAPI KdVmPrepareBuffer(VOID) { KdVmBufferPos = sizeof(KDVBOX_SEND_HEADER); } VOID NTAPI KdVmKdVmExchangeData( _Out_ PVOID* ReceiveData, _Out_ PULONG ReceiveDataSize) { PKDVBOX_SEND_HEADER SendHeader; PKDVBOX_RECEIVE_HEADER ReceiveHeader; /* Setup the send-header */ SendHeader = (PKDVBOX_SEND_HEADER)KdVmDataBuffer; SendHeader->SendSize = KdVmBufferPos - sizeof(KDVBOX_SEND_HEADER); SendHeader->BufferSize = KDVM_BUFFER_SIZE; //KdpDbgPrint("Sending buffer:\n"); //KdVmDbgDumpBuffer(KdVmDataBuffer, KdVmBufferPos); /* Do the data exchange */ KdVmExchange((ULONG_PTR)KdVmBufferPhysicalAddress.QuadPart, 0); /* Reset the buffer position */ KdVmBufferPos = sizeof(KDVBOX_SEND_HEADER); /* Get the receive-header and return information about the received data */ ReceiveHeader = (PKDVBOX_RECEIVE_HEADER)KdVmDataBuffer; *ReceiveData = KdVmDataBuffer + sizeof(KDVBOX_RECEIVE_HEADER); *ReceiveDataSize = ReceiveHeader->ReceivedDataSize; //KdpDbgPrint("got data:\n"); //KdVmDbgDumpBuffer(KdVmDataBuffer, *ReceiveDataSize + sizeof(*ReceiveHeader)); }