C#获取windows所有用户名
时间:2011-05-10 来源:baby_tao
#region 验证操作系统用户名
public bool isExistUserName(string name)
{
List<string> nameList = GetSysUserNames();
return nameList.Contains(name);
}
public List<string> GetSysUserNames()
{
int EntriesRead;
int TotalEntries;
int Resume;
IntPtr bufPtr;
List<string> temp = new List<string>();
NetUserEnum(null, 0, 2, out bufPtr, -1, out EntriesRead,
out TotalEntries, out Resume);
if (EntriesRead > 0)
{
USER_INFO_0[] Users = new USER_INFO_0[EntriesRead];
IntPtr iter = bufPtr;
for (int i = 0; i < EntriesRead; i++)
{
Users[i] = (USER_INFO_0)Marshal.PtrToStructure(iter,
typeof(USER_INFO_0));
iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(USER_INFO_0)));
temp.Add(Users[i].Username);
}
NetApiBufferFree(bufPtr);
}
return temp;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct USER_INFO_0
{
public string Username;
}
[DllImport("Netapi32.dll ")]
extern static int NetUserEnum(
[MarshalAs(UnmanagedType.LPWStr)]
string servername,
int level,
int filter,
out IntPtr bufptr,
int prefmaxlen,
out int entriesread,
out int totalentries,
out int resume_handle);
[DllImport("Netapi32.dll ")]
extern static int NetApiBufferFree(IntPtr Buffer);
#endregion