c# - 将 Windows XP-8 下的音频设备访问限制为特定应用程序/用户

标签 c# windows security driver wdf

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

  • 如何限制麦克风输入特定应用程序,以便 它不能在其他地方听到或录制?

如果没有解决这个问题,第二个问题出现:

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

亲切的问候, JB

最佳答案

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

Windows XP 的确切实现可能与更高版本的 Windows 不同。 Windows 8 也有新的可能性。 Audio Mixer APIs可以在 Windows XP 中使用。从 Vista 开始 Windows Multimedia Device (MMDevice) API可以使用。 MMDevice API 的实现 the property store .您可以使用 IPropertyStore::SetValueIPropertyStore::Commit 更改属性。 Unified Device Property从 Windows Vista 开始引入模型。有不同的 Windows API 在内部使用 SetupAPI 来访问设备并设置它的属性(参见 here )。我认为您应该设置 PKEY_Device_SecuritySDS 属性来保护设备。可以使用像 SetupDiSetDeviceRegistryProperty 这样的旧 API和 SetupDiSetClassRegistryProperty在 Windows XP 上设置属性(参见 here )。

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

enter image description here

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

PKEY_Device_SecuritySDSPKEY_Device_Security 属性可以通过 SetupDiSetDeviceProperty 更改和 SPDRP_SECURITY_SDSSPDRP_SECURITY(参见 here)。 SDS 参数(PKEY_Device_SecuritySDSSPDRP_SECURITY_SDS)的使用可能更容易,因为使用可读的 Security Descriptor Definition Language (SDDL) .

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

关于c# - 将 Windows XP-8 下的音频设备访问限制为特定应用程序/用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16433785/

相关文章:

C#匹配两个文本文件,大小写敏感问题

c# - C#控制桌面最大化区域

security - Microsoft 帐户 JWT 身份验证 token 是如何签名的?

c# - 数据库独立行级安全解决方案

c# - 将 XML 序列化为 byte[] 而不是文件

c# - 如何使正在运行的可执行文件删除自己的文件

javascript - location.href 的回调函数

ios - 我可以使用 Windows 命令行 ssh 到 Mac 而不使用像 putty 这样的其他工具吗?

python - 在 windows 上为 gpu 安装 Theano - 怀疑是 nvcc 版本问题

php - 带有自签名证书的 POST 请求