"общение" с драйвером

Тема в разделе "WASM.NT.KERNEL", создана пользователем murder, 22 дек 2007.

  1. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    В DDK (файл d_stream.chm) нашёл информацию о работе с аудиодрайвером напрямую (посылая ему запросы ввода/вывода). Возникли следующие вопросы:

    1)К какому именно драйверу следует обращаться, а точнее как получить его символьную ссылку?
    2)LONGLONG - это 64-битовое знаковое целое (не знаю C)?
    3)В документации нет описания поля Data структуры KSSTREAM_HEADER. Что означает тип PVOID?

    В исходнике я пытаюсь вывести шум на колонки, но мне не известна символьная ссылка.
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    символьную ссылку обычно используют на устройство, а не на драйвер, учитывая расширенное понятие "устройства" в контексте Windows. получить никак, скорее всего тебе подходит только юзать существующие жестко заданные.
    си тут не при чем, но ты прав.
    пустой указатель, он же void*. тип данных, на кот. он указывает, не определен
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Разве символьные ссылки не зависят от устройства? Как быть если в системе несколько звуковых карт?

    Если верить документации указатель на данные передаётся через поле DataUsed (ULONG). Для чего тогда используется Data?
     
  4. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Не зависят. Это просто файл, "указывающий" на устройство и создаваемый для обмена данными с ним из юзермода.
    Ничего страшного... Каждая звуковая карта (впрочем и любой другой девайс в компе) представляет собой уникальное устройство
     
  5. Termo_in_work

    Termo_in_work TermoSINteZ

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    20
    Адрес:
    на работе
    murder
    И обращаясь к устройству через символьную ссылку (Read\Write\IoCtl\etc), вы тем самым взаимодействуете с драйвером, обслуживающим это устройство.
     
  6. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Утилита WDM Audio Graph Inspector из состава DDK каким то образом получает символьные ссылки на драйверы конкретных устройств.

    Я пытался посылать IOCTL_KS_WRITE_STREAM по следующим символьным ссылкам

    1) \\.\sysaudio\playback

    2) \\?\root#system#0000#{a7c7a5b1-5af3-11d1-9ced-00a024bf0407}\{a7c7a5b0-5af3-11d1-9ced-00a024bf0407}&{9b365890-165f-11d0-a195-0020afd156e4}

    3) \\?\sw#{a7c7a5b0-5af3-11d1-9ced-00a024bf0407}#{9b365890-165f-11d0-a195-0020afd156e4}#{d6c5066e-72c1-11d2-9755-0000f8004788}\sad6

    Результат один - DeviceIOControl выдаёт ошибку "неверная функция". Что делать?
     
  7. vitokop

    vitokop Member

    Публикаций:
    0
    Регистрация:
    20 май 2006
    Сообщения:
    39
    Посмотри внимательно
    Интерфейс управления устройствами MCI (Media Control Interface) позволяет программам для Windows работать с различными устройствами мультимедиа которые включают в себя CD-ROM, звуковую карту, проигрыватель видеодисков, даже видеомагнитофон и т.д.
    Все функции интерфейса MCI начинаются с префикса mci и делятся на три группы:

    интерфейс команд сообщений:
    mciSendCommand()
    mciGetDeviceID()
    интерфейс команд строк:
    mciSendString()
    оба типа интерфейса:
    mciGetErrorString()
    mciSetYieldProc()

    и библиотека winmm.lib (dll)

    это обёртка над драйвером

    описание есть в C++ и Delphi
     
  8. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Насколько я понял из документации MCI позволяет записывать звук файл и воспроизводить из файла (MCI_CAPTURE, MCI_LOAD, MCI_PLAY). Мне нужно обрабатывать данные в оперативной памяти без обращения к диску.

    Наилучшим интерфейсом является Kernel Streaming но я не понял как создавать необходимые com-объекты через KSCreatePin или CoCreateInstance. В DDK более или менее подробно описаны только IOCTL - сообщения.

    В принципе требуется не много: с минимальной задержкой получить звук (с микрофона или line-in), обработать его и воспроизвести. При этом нельзя использовать сторонние библиотеки и драйверы. Также было бы неплохо работать сразу с 2 звуковыми картами.