Driver For Windows Xp

  • Автор темы avearz
  • Дата начала
A

avearz

Создан драйвер с помощью Driver Studio 3.0.

В нём есть такой кусок:

NTSTATUS Driver_fc_pciDevice::OnStartDevice(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;

I.Information() = 0;

PCM_RESOURCE_LIST pResListRaw = I.AllocatedResources();
PCM_RESOURCE_LIST pResListTranslated = I.TranslatedResources();

#define MAX_DMA_LENGTH 0x3200000 // 0x100000 is 1 MB

// Initialize the device descriptor for the DMA object using the assigned resource
DEVICE_DESCRIPTION dd;
RtlZeroMemory(&dd, sizeof(dd));
dd.Version = DEVICE_DESCRIPTION_VERSION;
dd.Master = TRUE;
dd.ScatterGather = FALSE;
dd.DemandMode = TRUE;
dd.AutoInitialize = FALSE;
dd.Dma32BitAddresses = TRUE;
dd.IgnoreCount = FALSE;
dd.DmaChannel = 0;
dd.InterfaceType = PCIBus;
dd.DmaWidth = Width32Bits; // PCI default width
dd.DmaSpeed = Compatible;
dd.MaximumLength = MAX_DMA_LENGTH;

// Initialize the DMA adapter object
m_Dma.Initialize(&dd, m_Lower.PDO());

Virtual_address_for_user = m_Dma.AllocateCommonBuffer(MAX_DMA_LENGTH,&Address_for_dma,false);
if (Virtual_address_for_user == NULL) {
m_Dma.Invalidate();
return STATUS_INSUFFICIENT_RESOURCES;
}
mdl = IoAllocateMdl(Virtual_address_for_user, MAX_DMA_LENGTH, FALSE, FALSE, NULL);
if (mdl == NULL) {
m_Dma.Invalidate();
return STATUS_INSUFFICIENT_RESOURCES;
}

................................

return status;
}

Если MAX_DMA_LENGTH более чем 3200000, то есть запрашивается выделение памяти размером более 32 Мбайт, то при установке этого драйвера он отторгается системой и устройство появляется в списке с желтым восклицательным знаком.
При этом реально в системе 4 Гигабайта оперативной памяти.
Может ли это быть принципиальным ограничением связанным, например, с контроллером DMA?
Или всё-таки возможно заставить WINDOWS предоставить эти ресурсы?
Буду благодарен форуму за любую информацию на эту тему
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!