2011-10-26 95 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;給出完全相同的結果?也許是這樣,但我無法在文檔中找到它。 –

相關問題