淺談.NET(C#)與Windows使用者賬戶資訊的擷取

來源:互聯網
上載者:User

 

目錄

  • 1. 使用者賬戶名稱 - 使用Environment類
  • 2. 使用者賬戶資訊 - 使用WindowsIdentity和IdentityReference
  • 3. 使用IPrincipal判斷使用者賬戶類型(支援使用者賬戶控制(UAC)提示)

 

 

返回目錄

1. 使用者賬戶名稱 - 使用Environment類

使用Environment可以返回當前系統內容的一些常用資訊,其中包括使用者賬戶名稱,則不需要額外使用System.Security.Principal中的類。

//使用者名稱

Console.WriteLine(Environment.UserName);

 

//電腦NetBIOS名稱

Console.WriteLine(Environment.MachineName);

 

//電腦網路網域名稱稱

Console.WriteLine(Environment.UserDomainName);

 

這是我的電腦的相應資訊:

Mgen

MGEN-PC

Mgen-PC

 

這些資訊也可以在電腦屬性中查看:

 

 

返回目錄

2. 使用者賬戶資訊 - 使用WindowsIdentity和IdentityReference

System.Security.Principal.IIdentity介面是用來定義標識對象的準系統,其衍生類別WindowsIdentity則直接代表著一個Windows的使用者賬戶。用此類我們可以擷取相關使用者資訊。

同時System.Security.Principal.IdentityReference代表一個標識,其衍生類別NTAccount和SecurityIdentifier類可以分別代表賬戶全稱和安全性識別碼 (SID)。不同IdentityReference可以通過Translate方法進行類型轉換。

//注意:using System.Security.Principal;

 

//獲得當前Windows使用者

WindowsIdentity curUser = WindowsIdentity.GetCurrent();

//使用者SID

SecurityIdentifier sid = curUser.User;

//使用者全稱

NTAccount ntacc = (NTAccount)sid.Translate(typeof(NTAccount));

 

Console.WriteLine(sid.Value);

Console.WriteLine(ntacc.Value);

 

輸出:

S-1-5-21-2376214308-3361272619-2153758801-1000

Mgen-PC\Mgen

 

 

返回目錄

3. 使用IPrincipal判斷使用者賬戶類型(支援使用者賬戶控制(UAC)提示)

System.Security.Principal.IPrincipal介面代表定義使用者物件的準系統,其衍生類別WindowsPrincipal可以理解為代表Windows使用者賬戶的許可權或者使用者類型。IPrincipal規定方法IsInRole(string role)來判斷使用者是否屬於指定的類型/角色。WindowsPrincipal類不僅實現了IPrincipal要求的IsInRole方法(參數是字串),還重載了基於WindowsBuiltInRole枚舉的IsInRole方法。WindowsBuiltInRole(MSDN:http://msdn.microsoft.com/zh-cn/library/system.security.principal.windowsbuiltinrole.aspx)包含了常見的Windows使用者賬戶類比如:管理員,超級使用者,使用者,來賓使用者……

 

當然IPrincipal是建立在IIdentity之上的,即只有知道了使用者標識,才可以知道使用者的準系統。IPrincipal的Identity屬性就返回IIdentity對象。當然派生的WindowsPrincipal則返回WindowsIdentity,後者則是IIdentity的衍生類別。

 

另外在Windows Vista,Windows 7和之後的Windows系統引入了使用者賬戶控制(UAC:User Account Control),即便使用者是管理員賬戶,系統彷彿並不會將此使用者啟動並執行程式作為管理員權限而運行(Vista之前的系統是這樣做的),任何可能影響系統安全的操作都會直接顯示在螢幕上讓使用者判斷是否可以繼續,當使用者同意執行後,該操作才可以以管理員方式進行。這樣大大減少了某些惡意程式的幕後運行,因為很多惡意程式往往是費盡周折得到管理員權限運行後就可以為所欲為了。

 

下面這段代碼可以判斷利用WindowsPrincipal來判斷使用者是否具有管理員權限,運行後使用者賬戶控制會提示是否給予程式管理員權限。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Diagnostics;

using System.Security.Principal;

 

namespace Mgen.TTC

{

    class Program

    {

        static void Main()

        {

            WindowsPrincipal winPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

            bool admin = winPrincipal.IsInRole(WindowsBuiltInRole.Administrator);

 

            if (!admin)

            {

                if (!RunUAC(Process.GetCurrentProcess().MainModule.FileName))

                {

                    Console.WriteLine("不是管理員");

                    return;

                }

            }

            Console.WriteLine("是管理員");

 

        }

 

        static bool RunUAC(string fileName)

        {

            ProcessStartInfo processInfo = new ProcessStartInfo();

            processInfo.Verb = "runas";

            processInfo.FileName = fileName;

            try

            {

                Process.Start(processInfo);

                return true;

            }

            catch (System.ComponentModel.Win32Exception)

            { }

            return false;

        }

 

 

    }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.