4

我编写了一个 c# 4.0 应用程序,它分析麦克风输入并记录代表客户输入的信用卡号码的 DTMF 音调。这一切都很好,但由于我们在PCI 合规性下工作(请参阅www.pcisecuritystandards.org),我们不希望允许登录用户(呼叫中心工作人员)收听甚至记录麦克风输入,以便他们随后可以使用第三方应用程序或手机自行解析信用卡号。所以我的问题是:

  • 如何将麦克风输入限制特定应用程序,使其无法在其他地方听到或录制?

如果没有解决办法,就会出现第二个问题:

  • 如何将麦克风输入限制特定用户,使其无法在其他地方听到或录制(我可以在特定用户凭据下将软件作为 Windows 服务运行)?

亲切的问候,JB

4

5 回答 5

1

如果您可以控制(静音)声音设备的音量并在完成后将其设置回原来的状态,这会有所帮助吗?您可以查看此链接以获取想法。祝你好运。

于 2013-05-18T04:57:47.703 回答
1

您应该可以使用 Core Audio API 来做到这一点。对于系统中的每个播放设备和采集设备,您可以控制该设备是否可以在独占模式下使用。

一个缺点 - Windows XP 下不支持 Core Audio API。

于 2013-05-13T08:40:08.173 回答
1

我认为您的问题的解决方案是编写一个KS 过滤器

创建一个内核流过滤器,该过滤器能够根据您的应用程序的需要解码 DTMF,并将解码后的数据发送到您的应用程序。当过滤器处于 DTMF 解码模式时,它只是将静音输出到过滤器堆栈的其余部分。

如果使用 USB 音频设备,您也可以编写一个GFX 过滤器,它可以基于每个用户进行配置。但这似乎只适用于 32 位操作系统。WinDDK 有一个名为gfxswap.xp.

于 2013-05-13T08:57:47.373 回答
1

限制访问设备的主要方法是在设备上设置安全描述符。因此,授予特定用户组的权限是您应该采取的方式。

Windows XP 的确切实现可能与更高版本的 Windows 不同。Windows 8 也有新的可能性。音频混合器 API可以在 Windows XP 中使用。从 Vista 开始,可以使用Windows 多媒体设备 (MMDevice) API。MMDevice API 的属性 store实现。您可以使用IPropertyStore::SetValueIPropertyStore::Commit来更改属性。从 Windows Vista 开始引入统一设备属性模型。有不同的 Windows API 在内部使用 SetupAPI 来访问设备并设置其属性(请参阅此处)。我认为您应该将PKEY_Device_SecuritySDS属性设置为安全设备。可以使用像SetupDiSetDeviceRegistryProperty这样的旧 APISetupDiSetClassRegistryProperty在 Windows XP 上设置属性(请参见此处)。

如果我在我的计算机上启动devmgmt.msc并检查麦克风设备的默认属性,那么我可以看到安全描述符

在此处输入图像描述

您需要更改它,以便只有特定的用户组(或用户)才能访问它。

PKEY_Device_SecuritySDSPKEY_Device_Security属性可以通过SetupDiSetDevicePropertySPDRP_SECURITY_SDSor更改SPDRP_SECURITY(请参见此处)。SDS 参数 (PKEY_Device_SecuritySDSSPDRP_SECURITY_SDS) 的使用可能更容易,因为它使用可读的安全描述符定义语言 (SDDL)

更改设备上的安全描述符后,您需要使用SetupDiSetClassInstallParamsSetupDiCallClassInstallerDIF_PROPERTYCHANGE重置DICS_PROPCHANGE设备。您可以在 WinDDK 上的 devcon 实用程序的源代码中找到代码示例。或者,您可以使用CM_Disable_DevNodeCM_Enable_DevNode使用新属性重新启动它。

于 2013-05-17T14:13:11.570 回答
1

您可以在应用程序中使用 ASIO 音频驱动程序。

ASIO 是 Steinberg 开发的一种技术,用于提供低延迟音频输入和输出,并且作为副作用,要求使用 ASIO 驱动程序的设备完全限制了设备对需要它的进程的使用,此外还有许多其他优点可能是与您的需求无关。

由于ASIO4ALL项目,它可用于每个声卡,因此只要您在应用程序中提供它,兼容性就不会成为问题

有关更多信息,请在此处查看有关 ASIO 的维基百科文章,或在此处获取 SDK (您需要注册 Steinberg 开发者帐户才能继续)

于 2013-05-17T15:02:29.863 回答