欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

UU'S T&T

TIPS AND TROUBLESHOOTS FOR WINDOWS

公告

  • 本Blog站点上的任何言论仅代表个人观点,与其所在的公司没有任何关系。本Blog站点的内容是按原样提供的,作者与其公司并不对其提供任何种类的担保。此外还否认所有暗示的保证,包括但不局限于在任何试销性或某一特定用途的适用性方面的暗示保证。由于本站内容的使用或性能表现带来的全部风险将由使用者自己承担。任何由于使用或无法使用本站内容而带来的损失(包括但不局限于商业利润、业务中断、业务信息或其他财产上的损失),即使在 本站作者曾经被提醒可能出现这些损失的情况下,本站 及其作者或涉及内容创建的任何其他人等对任何上述的损失概不负责。
    ·本BLOG的内容均属技术交流之用,本人对所发表的文章、图片、随笔保留一切权利。
    如文章、图片、随笔转载请注明:
    作者姓名:尤扬
    文章来源URL:
    http://blogs.itecn.net/blogs/youyang
    同时请通过EMAIL通知本人:
    youyang1983◎hotmail.com
    ·如果通过EMAIL与我联系,并最终解决的问题,我将发表于本BLOG进行技术分享,如果涉及隐私或有特殊要求请于EMAIL中说明!
    本人联系方式:
    MSN ID:youyang1983◎hotmail.com(常用)
    QQ ID:85836514
    EMAIL:v-yayou@microsoft.com
    ·技术就是无条件共享


    2005年7月 Microsoft MVP for Windows-Shell\User
    2006年7月 Microsoft MVP for Windows-Shell\User
    2007年7月 Microsoft MVP for Windows-Shell\User

Microsoft

朋友的网站

Build-in Administrator在代码中应该如何判断?

写测试代码碰到了一个很郁闷的问题.

如果判断当前账户是Build-in Administrator 呢?

C#一直是以IsInRole()的逻辑去判断,也就是这个账户是否隶属于某一个组,这种逻辑在XP下面没问题,但是如果碰到了Vista,

因为UAC的原因,即使在Build in administrator组,也不能算是真正的Administrator,

写一个我目前想到的方法,感觉上BuildIn Administrator 账户SID最后一个标识位的值是500,所以就这样判断了:

public static bool IsBuildInAdministrator ()

        {

            bool bResult = false;

            WindowsIdentity wid = WindowsIdentity.GetCurrent();

           string[] sids = wid.User.Value.Split("-".ToCharArray());

           if (sids[sids.Length - 1] == "500")

           {

               bResult = true;

           }

           return bResult;

        }

我知道这样Hardcode肯定会产生Bug,但是目前没有好办法了,各位怎么看?

Posted: 2007年1月29日 18:44 作者 youyang
归档在:

评论

ahpeng 说:

你可以读取Shell的访问令牌,UAC只是把Administrators组的SID打上Deny的Flag,并没有删除这个组SID。

另外内置Administrator的RID确实是500,这个没有问题的。

# 一月 30, 2007 10:38

youyang 说:

To PP

恩,这样就放心了,谢谢先

# 一月 31, 2007 10:25