Стоп-экран на IoGetDMAAdapter в W2k
NTSTATUS MyCreate(IN PDEVICE_OBJECT pDevice, IN PIRP pIrp)
{
...
if (FirstFlag) {
NumMapRegs=1;
pDMAAdapter=IoGetDmaAdapter(pDevice, InitDMADescr,NumMapRegs);
...
В W98 всё проходит нормально и драйвер работает. В W2k- стоп экран "Plug&Play error" именно на этом вызове. Дескриптор DMA такой:
DEVICE_DESCRIPTION InitDMADescr={
DEVICE_DESCRIPTION_VERSION, // ULONG Version;
FALSE, FALSE,// Master; ScatterGather;
FALSE, TRUE, // DemandMode; AutoInitialize;
FALSE, FALSE,// Dma32BitAddresses;IgnoreCount;
FALSE, FALSE,// Reserved1; Dma64BitAddresses;
0, InitDMA, // BusNumber;DmaChannel;
Isa, Width16Bits,//InterfaceType; DmaWidth;
Compatible, InitBufLen, 0}; //DmaSpeed;MaximumLength;DmaPort.
Винда данный канал (7) не использует. Пробовал разные настройки дескриптора - не помогает. И ещё была как-то вроде бы такая же проблема с IoConnectInterrupt (но тот драйвер я не дописал).
Читал "Рудаков, Финогенов Язык ассемблера", DDK (естественно) - нигде не нашёл, что так делать нельзя - вроде бы даже можно... Что же тут не так :-?