2016-04-29 79 views
0

我需要使用Win32 CreateFile()方法访问外部物理驱动器,如下所述:https://support.microsoft.com/en-us/kb/100027以标准用户身份运行CreateFile Win32 interop

它声明您必须是管理员,但我想以标准用户身份运行该应用程序。有谁知道允许这种方式吗?我考虑过模拟或创建服务,但如果我可以提升特定用户帐户的权限,则会更好。

+1

由于应用程序需要直接访问磁盘,为什么不以管理员身份运行呢? – Cyclonecode

+0

我无法在目标环境中以管理员身份运行应用程序,因此提出问题! – trebor74

+0

您应该可以使用cmd.exe进程执行此操作。首先打开一个cmd.exe窗口,通过键入> cd \\ servername来查看是否可以进入文件夹。 Win32是最初在Win95下运行的应用程序,cmd.exe也是Win95应用程序。因此,打开一个进程将appliaction cmd.exe作为参数,然后执行。以下面的页面为例子,但用cmd.exe替换HelloWorld.exe。 https://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx – jdweng

回答

0

我不认为这是可能的标准用户,但我能够通过将CreateFile请求包装在WCF服务中,并在Windows服务中本地托管来解决问题。

Windows服务可以使用本地系统凭据,它具有提升的权限,并允许访问Win32 CreateFile函数。详情请参阅CreateFile

然后,我可以添加一个服务引用到我的控制台项目,并调用服务方法。这也意味着我不必更改任何用户输入,这是我的要求之一。

有关如何在Windows服务中托管WCF服务的信息,请参阅Host a WCF Service in a Managed Windows Service

+0

当您这样做时,请确保WCF服务仅提供本地绑定。据推测,你可以控制在机器上运行的所有东西(如果这不是真的,也可以添加认证)。此外,不要使用“本地系统”(甚至可能比管理员开箱即用*更多),请考虑使用您添加到管理员组的专用本地帐户。如果通过服务发生任何不良情况,这有助于审计。 –

+0

我已经将WCF服务设置为在特定端口上使用本地绑定。我假设你的意思是我可以使用[NetNamedPipeBinding](https://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx)?.我使用Active Directory来验证用户,他们必须属于特定的组。正如你所建议的,我已经为该服务设置了一个专用的管理员帐户,谢谢。 – trebor74

+0

只要端点(我应该说“端点”而不是“绑定”)只能从机器本身访问,而不是从外部访问,则确切的绑定类型无关紧要。 'NetNamedPipeBinding'是一个不错的选择,因为它不支持机器外部的通信。必须明确配置HTTP或TCP绑定才能以此方式工作。 –