Ejemplo n.º 1
0
static_assert(sizeof(MtrrData) == 24, "Size check");
////////////////////////////////////////////////////////////////////////////////
//
// prototypes
//

struct GuestContext;
//----------------------------------------------------------------------------------------------------------------//
NTSTATUS VmmpSetLastFaultAddr(
	_In_ GuestContext *guest_context,
	_In_ ULONG_PTR	LastFaultAddr
);


_When_(ept_data == nullptr,
       _IRQL_requires_max_(DISPATCH_LEVEL)) static EptCommonEntry
    *EptpConstructTables(_In_ EptCommonEntry *table, _In_ ULONG table_level,
                         _In_ ULONG64 physical_address,
                         _In_opt_ EptData *ept_data);

static void EptpDestructTables(_In_ EptCommonEntry *table,
                               _In_ ULONG table_level);

_Must_inspect_result_ __drv_allocatesMem(Mem)
    _When_(ept_data == nullptr,
           _IRQL_requires_max_(DISPATCH_LEVEL)) static EptCommonEntry
        *EptpAllocateEptEntry(_In_opt_ EptData *ept_data);

static EptCommonEntry *EptpAllocateEptEntryFromPreAllocated(
    _In_ EptData *ept_data);
Ejemplo n.º 2
0
/**
 * Sends the given network data along this adapter. This adapter must be in the running state or the request
 * will be rejected. This function may return before the data has been transmitted. After completion 
 * (whether success or failure), NdisMSendNetBufferListsComplete will be called. Until NdisMSendNetBufferListsComplete
 * is called, this adapter owns the netBufferList object provided. After NdisMSendNetBufferListsComplete is called,
 * ownership is released and the memory is treated as inaccessible. Note that a call to NdisMSendNetBufferListsComplete
 * does not necessarily mean the data has been transmitted, but rather that it has at least been queued for transmission
 * and the buffer is no longer needed.
 * @param netBufferList a linked list of NET_BUFFER_LIST objects indicating the data to be transmitted, in order
 * @param sendFlags the flags associted with this send operation. If NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK is set, then
 * this function will check to see if the data should loop back. If NDIS_SEND_FLAGS_DISPATCH_LEVEL is set, then the current
 * IRQL is DISPATCH_LEVEL.
 */
_When_(sendFlags & NDIS_SEND_FLAGS_DISPATCH_LEVEL, _IRQL_requires_(DISPATCH_LEVEL))
_When_(!(sendFlags & NDIS_SEND_FLAGS_DISPATCH_LEVEL), _IRQL_requires_max_(APC_LEVEL))
_IRQL_requires_same_
NON_PAGEABLE_FUNCTION
void AX25Adapter::SendNetBufferLists(
    _In_ NET_BUFFER_LIST& netBufferList, 
    _In_ ULONG sendFlags) noexcept
{
   // TODO: Enqueue the data 
    UNREFERENCED_PARAMETER(netBufferList);
    UNREFERENCED_PARAMETER(sendFlags);
}

/**
 * Returns the specified NET_BUFFER_LIST objects to being owned by this object so that they
 * can be reused in future receive operations.
 * @param netBufferLists a linked list of NET_BUFFER_LIST objects that are to be returned to ownership