Ограничить доступ к аудиоустройству под Windows XP-8 для определенного приложения / пользователя

Я написал приложение на C # 4.0, которое анализирует вход микрофона и записывает сигналы DTMF, представляющие номера кредитных карт, введенные нашими клиентами. Все это работает хорошо, но поскольку мы работаем в рамках PCI Compliance (см. www.pcisecuritystandards.org), мы не хотим позволять зарегистрированному пользователю (персоналу центра обработки вызовов) прослушивать или даже записывать вход микрофона, чтобы затем они могли самостоятельно анализировать номера кредитных карт с помощью стороннего приложения или своих телефонов. Итак, у меня есть вопрос:

  • Как я могу ограничить вход микрофона одним конкретным приложением, чтобы его нельзя было услышать или записать где-то еще?

Если решения нет, возникает 2-й вопрос:

  • Как я могу ограничить вход микрофона для определенного пользователя, чтобы его нельзя было услышать или записать где-либо еще (я мог бы запустить программное обеспечение в качестве службы Windows под конкретными учетными данными)?

С уважением, JB


person Chief Wiggum    schedule 08.05.2013    source источник
comment
Если это вообще возможно, это будет вопрос политики безопасности, и для этого я бы посоветовал вам лучше работать с ошибкой сервера ...   -  person Goz    schedule 08.05.2013
comment
Обученный пользователь может декодировать DTMF, просто слушая тональные сигналы. У вас гораздо более серьезная проблема, вам нужно полностью отключить сигнал. Для этого требуется интерфейс с оборудованием АТС. Стандартизация оставляет желать лучшего, поработайте с поставщиками АТС, чтобы чего-нибудь добиться.   -  person Hans Passant    schedule 13.05.2013


Ответы (5)


Основной способ ограничить доступ к устройству - это установка дескриптора безопасности на устройстве. Таким образом, предоставление разрешения для конкретной группы пользователей - это путь, которым вы должны следовать.

Точная реализация для Windows XP может отличаться от более поздних версий Windows. У Windows 8 тоже есть новые возможности. API-интерфейсы аудиомикшера может использоваться в Windows XP. Начиная с Vista, Windows Multimedia Device (MMDevice) API можно использовать. Реализация в MMDevice API свойства магазин. Вы можете использовать IPropertyStore::SetValue и IPropertyStore::Commit для изменения свойств. Единое свойство устройства Модель представлена ​​начиная с Windows Vista. Существуют различные Windows API, которые используют внутренний SetupAPI для доступа к устройствам и установки их свойств (см. здесь). Я думаю, что вы должны установить свойство PKEY_Device_SecuritySDS для защиты устройства. Можно использовать старые API, такие как SetupDiSetDeviceRegistryProperty и SetupDiSetClassRegistryProperty, чтобы установить свойства в Windows XP (см. здесь).

Если я запускаю свой компьютер devmgmt.msc и проверяю свойство микрофона по умолчанию, я вижу дескриптор безопасности

введите описание изображения здесь

Что вам нужно, так это изменить его так, чтобы к нему имели доступ только определенные группы пользователей (или пользователи).

Существуют свойства PKEY_Device_SecuritySDS и PKEY_Device_Security, которые можно изменить с помощью SetupDiSetDeviceProperty и SPDRP_SECURITY_SDS или SPDRP_SECURITY (см. здесь). Использование параметров SDS (PKEY_Device_SecuritySDS или SPDRP_SECURITY_SDS) может быть проще, поскольку используется читаемый Язык определения дескрипторов безопасности (SDDL).

После изменения дескриптора безопасности на устройстве вам необходимо использовать SetupDiSetClassInstallParams и SetupDiCallClassInstaller с DIF_PROPERTYCHANGE и DICS_PROPCHANGE для сброса устройства. Вы можете найти пример кода в исходном коде утилиты devcon на WinDDK. В качестве альтернативы вы можете использовать CM_Disable_DevNode и CM_Enable_DevNode, чтобы перезапустить его с новыми свойствами.

person Oleg    schedule 17.05.2013
comment
Звучит отлично, посмотрю в понедельник (в Новой Зеландии уже обеденный перерыв ...). - person Chief Wiggum; 18.05.2013
comment
@JamesBlond: Мне интересно, работает ли у вас этот метод? - person huysentruitw; 22.05.2013
comment
@WouterHuysentruit: здесь я кратко описал, что я использовал в приложении, которое я разработал для одного моего клиента, чтобы защитить Windows Portable Devices (WPD) и съемные носители. Для перечисления устройств я использовал код, близкий к коду из ответа и ответ. Вы понимаете, что я не могу публиковать код, разработанный для клиентов, но я надеюсь, что те же идеи должны работать и для аудиоустройств. - person Oleg; 22.05.2013
comment
@JamesBlond: спасибо за обновление. Возможно, мне придется сделать то же самое в будущем проекте, поэтому я и спрашивал. - person huysentruitw; 22.05.2013
comment
@WouterHuysentruit К сожалению, я еще не нашел времени, чтобы проверить это. Я был немного отвлечен другими проектами, и это должно подождать несколько недель :-( - person Chief Wiggum; 23.05.2013

У вас должно получиться сделать это с помощью Core Audio API. Для каждого устройства воспроизведения и устройства захвата в системе вы можете указать, можно ли использовать устройство в монопольном режиме.

Один недостаток - нет поддержки Core Audio API под Windows XP.

person user1764961    schedule 13.05.2013
comment
Приветствую за идею. К сожалению, мне приходится использовать его в Windows XP (даже если поддержка закончится менее чем через год). Но спасибо за ваше предложение! - person Chief Wiggum; 19.05.2013

Я думаю, что решение вашей проблемы - написать фильтр KS

Создайте фильтр Kernel Streaming, который может декодировать DTMF по запросу вашего приложения и отправлять декодированные данные в ваше приложение. Когда фильтр находится в режиме декодирования DTMF, он просто выводит тишину на остальную часть стека фильтров.

Если используется аудиоустройство USB, вы также можете написать GFX Filter, который можно настроить для каждого пользователя. Но это работает только для 32-битных операционных систем. В WinDDK есть образец под названием gfxswap.xp.

person huysentruitw    schedule 13.05.2013
comment
Еще раз спасибо за вашу идею. Мы рассмотрим это дальше, если предложения Олега не сработают, как планировалось. - person Chief Wiggum; 19.05.2013

Вы можете использовать аудиодрайверы ASIO в своем приложении.

ASIO - это технология, разработанная Steinberg для обеспечения ввода и вывода звука с малой задержкой, и, как побочный эффект, требование устройства, использующего драйвер ASIO, полностью ограничивает использование устройства процессом, который требует этого, в дополнение к множеству других преимуществ, которые могут быть не имеет отношения к вашим потребностям.

Он доступен для каждой звуковой карты благодаря проекту ASIO4ALL, поэтому совместимость не будет проблемой, если вы ее предоставите. с вашим приложением

Для получения дополнительной информации ознакомьтесь со статьей в Википедии об ASIO здесь или возьмите SDK здесь (для продолжения необходимо зарегистрировать учетную запись разработчика Steinberg)

person SudoGuru    schedule 17.05.2013
comment
Пока что звучит очень интересно. Я изучил это и буду исследовать дальше, если я не смогу заблокировать его предложениями Олега. Ваше здоровье! - person Chief Wiggum; 19.05.2013

Будет ли полезно, если вы сможете контролировать (ОТКЛЮЧИТЬ) ГРОМКОСТЬ звукового устройства и вернуть его в прежнее состояние, когда закончите? Вы можете посмотреть эту ссылку для идей. Удачи.

person Justjyde    schedule 18.05.2013
comment
Не совсем, насколько я понимаю ваше предложение. Мне придется получить входной сигнал с аудиоустройства, и даже если я отключу звук на выходе, пользователь все равно сможет использовать программное обеспечение для записи на машине (даже если оно заблокировано). Но спасибо за ссылку. - person Chief Wiggum; 19.05.2013