Вот замучался пробываю инициализировать порт SoundBlaster но все время мне возвращает 0 или $FF но не когда $AA Пробывал тоже самое в MS-DOS там все идет Может XP защиту поставил?
Чудес не быват. Мне кажется, что это просто дрова карточки к ней пробуют обращаться. Чтобы сказать что-то точнее, надо код поглядеть.
CONST BasePort = $220; Function ResetDSP : Boolean; Begin OutPort(BasePort+$06,1); Sleep (1); OutPort(BasePort+$06,0); Sleep (1); If (InPort(BasePort+$0E) and $80 = $80) and (InPort(BasePort+$0A) = $AA) then ResetDSP := True Else ResetDSP := False End;
Компилишь на Turbo Pascal в DOS приложение чтоли? Тогда нечего ожидать, что винда пустит тебя к портам ввода-вывода. Тебе надо компилить в 32 битное приложение, и либо открывать доступ к портам из юзермода, либо делать драйвер. Рекомендую делать драйвер.
Ms Rem Драйвер у меня Giveio Работает отлично! Но с портами звуковой не хочет вот теперь я думаю это или Драйвер или Система А так, запускаю в MS-DOS все работает даже звук воспройзводит и True возвращат а винде не хочет
А какой драйвер тогда взять? Все равно все они одно итоже делают или IN/OUT или из NTOSKRNL ф-ций точно не помню...
ABC Поэтому все они глючат. Свой написать и доступ к портам осуществлять законным путём - из 0-го кольца (по команде из 3-го).
GiveIO правит IOPM, в результате чего ring-3 код получает доступ к портам I/O. Как метко заметил Quantum, giveio и прочие подобные поделки отлично работать не могут. Рекомендуется написать полноценный драйвер. Примеры - см. NT DDK или www.google.com. Ха! Почти синхронно ответили
Блин нелюблю писпать драйвера слишком много контроля это тебе не Ring3 А чё больше не как? Ладно попробую эту ф-цию из драйвера... -----------> Интересно Giveio точно все порты открывает? может он именно этот порт не открыл?
По умолчанию - PASSIVE_LEVEL. А IRQL в конкретном участке кода зависит от того, где он исполняется (в обработчике прерывания, DPC и.т.д). Короче, вперед читать книгшу по драйверам. Рекомендую "Программирование драйверов Windows" Солдатова, в самый раз книга для начинающих.
А она у меня есть и в бумажном и в электроном виде Сколько байт или килобайт может принять Irp->AssociatedIrp->SystemBuffer ? Что-то у меня не правельно передаётся
Код (Text): IRP_MJ_DEVICE_CONTROL : InBufLength = pIoStack->Parameters.DeviceIoControl.InputBufferLength; OutBufLength = pIoStack->Parameters.DeviceIoControl.OutputBufferLength; IRP_MJ_READ : InBufLength = pIoStack->Parameters.Read.Length; IRP_MJ_WRITE : OutBufLength = pIoStack->Parameters.Write.Length;
при использование IRP_MJ_WRITE надо обезательно создавать в реестре? Ато мне KmdMaanager говорит что не найден файл? WriteFile(hDevice,Param, SizeOf(TParams), Written, nil);