NetUserGetInfo的服务器名称是什么?

问题描述:

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

[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); 
     } 

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

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

在任何情况下,这可能是回答你未说出问题:

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

+0

我指的是本地Administrators组。 – Sterling

+0

请参阅上面的链接。 – Hogan