问题描述
是否可以使用标准用户权限(没有提升权限/管理员访问权限)通过 hid(“控制面板\所有控制面板项目\设备管理器”中的人机界面设备)启用/禁用触摸屏?
我正在用 C# 编写一个应用程序。如果我没有在 Visual Studio 上通过“运行方式”启动我的应用程序,安全性会阻止访问。
我目前的设置/限制有哪些替代方案:
- 标准用户(基本权限)
- 带有密码的管理员帐户 一个安全的加密文件。
- 标准用户无法通过 UAC 授予权限,因为他没有权限。
- 使用此代码检查用户是否具有提升/管理员权限:
return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
目前已测试但无法正常工作:
-
使用
startInfo.Verb = "runas";
处理 标准用户不能接受 UAC 来运行需要管理员权限/提升的进程。 Elevating process privilege programmatically? -
应用程序清单: 标准用户不能接受 UAC 来运行需要管理员权限/提升的应用程序。 How do I force my .NET application to run as administrator?
潜在的替代品?
- ACL ???
- App.manifest:使用来自我的“IT 团队打包程序与 Zenwork 或 SCCM”的 install.msi 将其部署到计算机用户上?
- 作为“本地服务”或“系统”运行的服务和一个应用程序,该应用程序使用来自我的“IT 团队打包程序与 Zenwork 或 SCCM”的 install.msi 调用服务方法,以将其部署到计算机用户上?
解决方法
如果您不想在管理操作的那一刻(使用 runas)或在每个程序启动时(通过清单)提示 UAC,您需要创建一个服务或计划任务一次,在第一个程序设置。许多程序使用这种技术(例如 Chrome)进行更新,这些程序通常不需要提升的权限,但偶尔需要进行一些操作。
选择服务方法意味着您必须实现 IPC 机制,例如通过命名管道,以便低权限程序可以与服务对话并要求执行所需的操作。请记住,该服务将始终在后台运行,您不应暴露过多的许可操作,否则其他恶意程序可能会利用您的服务来提升自己,或者您还需要一种身份验证方法。
对于计划任务,您可以使用带有命令行参数的相同可执行文件,例如 /disabletouch。您只需要从低权限实例手动触发任务。有 TaskScheduler COM 接口(围绕它存在一些开源包装器)和允许创建任务和手动触发的 schtasks 工具。可以创建任务以作为管理员或系统帐户运行。至于服务,只允许严格且无害的提升操作,以防止滥用。
,我不知道 IPC /管道机制。但是调用方法足以满足我需要的“OnCustomCommand(int)”:
protected override void OnCustomCommand(int command)
{
switch (command)
{
case 129:
RestartService_Test();
break;
//case 131:
// InstallPrinter();
// break;
}
}
另外,如果我想启动或停止 Windows 服务,我需要授予用户一些权限。我会为此检查 ACL: