2011-10-26 91 views
1

我想以编程方式检查在Windows下,该进程内拥有该进程的有效用户是什么。

可能是winapi,但是.net解决方案更可取。

有一个复杂的系统,我没有一个完美的控制,一个.net应用程序对某些网络文件系统路径获取“拒绝访问”,因此我想知道哪个用户应该获得访问此路径的权限,所以我需要拥有试图访问它的进程的用户。什么是geteuid()的.net等价物?

+0

你自己开始的过程或者这是一个双赢的应用程序或Web应用程序?为什么你不能检查Environment.Username? –

+1

[我如何确定C#中进程的所有者?](http://stackoverflow.com/questions/777548/how-do-i-determine-the-owner-of-a-process-in -c) – sll

+0

from http://msdn.microsoft.com/en-us/library/system.environment.username.aspx“获取当前登录到Windows操作系统的用户的用户名。”所以恕我直言,这听起来不像过程拥有者一样。 该进程在asp.mvc应用程序内部的某个地方启动。 –

回答

0

虽然不是.NET,从Unix to Windows Porting Dictionary在下面的文章:

uid_t getuid(); 
uid_t geteuid(); 

...是一个良好的开端,以解决这一问题。

那篇文章:

一个Unix进程认为,启动该进程的用户 的UID(真正的UID)和 进程正在运行,并且用户的UID之间的区别(有效的UID)。 Windows不保留 保持这种区别。 SID的值将是Unix有效UID的等效 。由于当需要真实或有效的UID时,推荐用于Windows的SID无法获得与Unix实际UID 等效的值。

1

与Windows的API:

GetUserNameEx function

在C#:

WindowsIdentity.GetCurrent().Name; 
+0

嗨,谢谢。 GetUserNameEx的文档:“检索与调用线程关联的用户或其他安全主体的名称,您可以指定返回名称的格式 如果线程正在模拟客户端,GetUserNameEx将返回客户端的名称。 “ 听起来合法,对我来说很好。但是,你确定WindowsIdentity.GetCurrent()。Name;给出完全相同的结果?也许是这样,但我无法在文档中找到它。 –

相关问题