bool CTXVirtQueue::Create(UINT Index, VirtIODevice *IODevice, NDIS_HANDLE DrvHandle, ULONG MaxBuffers, ULONG HeaderSize, PPARANDIS_ADAPTER Context) { if (!CVirtQueue::Create(Index, IODevice, DrvHandle)) { return false; } m_MaxBuffers = MaxBuffers; m_HeaderSize = HeaderSize; m_Context = Context; m_SGTableCapacity = m_Context->bUseIndirect ? virtio_get_indirect_page_capacity() : GetRingSize(); auto SGBuffer = ParaNdis_AllocateMemoryRaw(m_DrvHandle, m_SGTableCapacity * sizeof(m_SGTable[0])); m_SGTable = static_cast<struct VirtIOBufferDescriptor *>(SGBuffer); if (m_SGTable == nullptr) { return false; } return PrepareBuffers(); }
PVOID ParaNdis_AllocateMemory(PARANDIS_ADAPTER *pContext, ULONG ulRequiredSize) { return ParaNdis_AllocateMemoryRaw(pContext->MiniportHandle, ulRequiredSize); }