NetUserGetInfo的服务器名称是什么?

时间:2012-07-02 14:17:35

标签: c# server-name

我希望有一个功能可以接受本地计算机上的任何用户名,并告诉我该用户是否是管理员。我尝试过使用WindowsIdentity但没有成功。现在我正在尝试使用NetUserGetInfo。问题是它总是返回2221.谷歌告诉我,用户没有发现错误。我很确定问题是我使用null作为servername。但这是在一个拥有大型网络的工作场所。用户将在一台计算机上创建帐户,此代码仅在该计算机上运行。那么我应该为服务器名称添加什么?

    [DllImport("Netapi32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    private extern static int NetUserGetInfo(
        [MarshalAs(UnmanagedType.LPWStr)] string serverName,
        [MarshalAs(UnmanagedType.LPWStr)] string userName,
        int level,
        out IntPtr bufPtr
    );


    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct USER_INFO_1
    {
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_name;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_password;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_password_age;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_priv;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_home_dir;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_comment;
        [MarshalAs(UnmanagedType.U4, SizeConst = 34)]
        public string usri1_flags;
        [MarshalAs(UnmanagedType.LPWStr)]
        public string usri1_script_path;
    }

...
public static bool IsAuthorizedUser(string userId) 
{
    IntPtr bufPtr;
        USER_INFO_1 u1 = new USER_INFO_1();
        int a = NetUserGetInfo(null, userId, 1, out bufPtr);
        if(a == 0)
        {
            u1 = (USER_INFO_1) Marshal.PtrToStructure(bufPtr, typeof (USER_INFO_1));
            Console.WriteLine(u1.usri1_name);
        }
        else
        {
            Console.WriteLine("a:"+a);
        }

1 个答案:

答案 0 :(得分:0)

首先,您需要知道自己在做什么。你如何定义管理员?有一个本地组呼叫管理员 - 这通常是人们在谈论给定机器的管理员时的意思。这是你的意思吗?

您也可以指域名管理员。如果是这种情况,那么您需要知道域的托管位置。这是它要求的服务器。如果您没有或知道这是什么,那么您可能不需要它。

无论如何,这可能是你未提出问题的答案:

In .NET/C# test if process has administrative privileges