问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#代码实现对Windows凭据的管理

发布网友 发布时间:2024-10-03 13:18

我来回答

1个回答

热心网友 时间:2024-11-22 03:09

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using DevSDK.WinNT;
using DevSDK;
namespace DevSDK.WinNT
{
public class NetUser:Common
{
//创建用户
[DllImport("Netapi32.dll")]
extern static int NetUserAdd([MarshalAs(UnmanagedType.LPWStr)] string sName, int Level, ref USER_INFO_1 buf, int parm_err);
//修改用户密码
[DllImport("Netapi32.dll")]
extern static int NetUserChangePassword([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,[MarshalAs(UnmanagedType.LPWStr)] string OldPassword,[MarshalAs(UnmanagedType.LPWStr)] string NewPassword);
//删除用户
[DllImport("Netapi32.dll")]
extern static int NetUserDel([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName);
//枚举全部用户
[DllImport("Netapi32.dll")]
extern static int NetUserEnum([MarshalAs(UnmanagedType.LPWStr)] string sName,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 NetUserGetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,int Level,out IntPtr intptr);
//获取用户所在本地组
[DllImport("Netapi32.dll")]
extern static int NetUserGetLocalGroups([MarshalAs(UnmanagedType.LPWStr)] string sName,[MarshalAs(UnmanagedType.LPWStr)] string UserName,int Level,int Flags,out IntPtr intptr,int Prefmaxlen,out int Entriesread,out int Totalentries);
//修改用户信息
[DllImport("Netapi32.dll")]
extern static int NetUserSetInfo([MarshalAs(UnmanagedType.LPWStr)] string sName, [MarshalAs(UnmanagedType.LPWStr)] string UserName, int Level, ref USER_INFO_1 bufptr, int parm_err);
//释放API
[DllImport("Netapi32.dll")]
extern static int NetApiBufferFree(IntPtr Buffer);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOCALGROUP_USERS_INFO_0
{
public string GroupName;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct USER_INFO_1
{
public string sName; //用户名
public string sPass; //用户密码
public int PasswordAge; //密码级别
public int sPriv; //帐户类型 1
public string sHomeDir; //用户主目录 null
public string sComment; //用户描述
public int sFlags; //用户权限
public string sScriptPath; //登陆脚本路径 null
}
//枚举全部用户
public string UserEnum()
{
string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
tempStr += "<INFO>\r\n";
int Entriesread;
int TotalEntries;
int Resume_Handle;
IntPtr bufPtr;
if (NetUserEnum(null, 1, 0, out bufPtr, -1, out Entriesread, out TotalEntries, out Resume_Handle) != 0)
{
throw (new Exception("枚举全部用户失败"));
}
if (Entriesread > 0)
{
USER_INFO_1[] UserInfo = new USER_INFO_1[Entriesread];
IntPtr iter = bufPtr;
for (int i = 0; i < Entriesread; i++)
{
UserInfo[i] = (USER_INFO_1)Marshal.PtrToStructure(iter, typeof(USER_INFO_1));
iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(USER_INFO_1)));
tempStr += "<ITEM value=\"" + UserInfo[i].sComment + "\">" + UserInfo[i].sName + "</ITEM>\r\n";
}
tempStr += "</INFO>";
}
NetApiBufferFree(bufPtr);
return tempStr;
}
//读取用户信息
public string UserGetInfo(string UserName)
{
string tmpStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
tmpStr += "<INFO>\r\n";
IntPtr bufPtr;
USER_INFO_1 UserInfo = new USER_INFO_1();
if (NetUserGetInfo(null, UserName.ToString(), 1, out bufPtr) != 0)
{
throw (new Exception("读取用户信息失败"));
}
else
{
UserInfo = (USER_INFO_1)Marshal.PtrToStructure(bufPtr, typeof(USER_INFO_1));
tmpStr += "<NAME>" + UserInfo.sName + "</NAME>\r\n";
tmpStr += "<PASS>" + UserInfo.sPass + "</PASS>\r\n";
tmpStr += "<DESC>" + UserInfo.sComment + "</DESC>\r\n";
tmpStr += "</INFO>";
NetApiBufferFree(bufPtr);
return tmpStr;
}
}
//删除用户
public bool UserDelete(string UserName)
{
if (NetUserDel(null, UserName.ToString()) != 0)
{
throw (new Exception("删除用户失败"));
}
else
{
return true;
}
}
//修改用户信息
public bool UserSetInfo(string UserName,string NewUserName, string UserPass, string sDescription)
{
USER_INFO_1 UserInfo = new USER_INFO_1();
UserInfo.sName = NewUserName.ToString();
UserInfo.sPass = UserPass.ToString();
UserInfo.PasswordAge = 0;
UserInfo.sPriv = 1;
UserInfo.sHomeDir = null;
UserInfo.sComment = sDescription.ToString();
UserInfo.sFlags = 0x10040;
UserInfo.sScriptPath = null;
if (NetUserSetInfo(null, UserName.ToString(), 1, ref UserInfo, 0) != 0)
{
throw (new Exception("用户信息修改失败"));
}
else
{
return true;
}
}

//创建系统用户
public bool UserAdd(string UserName, string UserPass,string sDescription)
{
USER_INFO_1 UserInfo = new USER_INFO_1();
UserInfo.sName = UserName.ToString();
UserInfo.sPass = UserPass.ToString();
UserInfo.PasswordAge = 0;
UserInfo.sPriv = 1;
UserInfo.sHomeDir = null;
UserInfo.sComment = sDescription.ToString();
//UserInfo.sFlags = 0x0040;
UserInfo.sFlags = 0x10040;
UserInfo.sScriptPath = null;
if (NetUserAdd(null, 1, ref UserInfo, 0) != 0)
{
throw (new Exception("创建系统用户失败"));
}
else
{
return true;
}
}
//修改用户密码
public bool UserChangePassword(string UserName, string OldPassword, string NewPassword)
{
if (NetUserChangePassword(null, UserName.ToString(), OldPassword.ToString(), NewPassword.ToString()) != 0)
{
throw (new Exception("修改系统用户密码失败"));
}
else
{
return true;
}
}
//获取用户全部所在本地组
public string UserGetLocalGroups(string UserName)
{
int EntriesRead;
int TotalEntries;
IntPtr bufPtr;
string tempStr = "<?xml version=\"1.0\" encoding=\"gb2312\" ?>\r\n";
tempStr += "<INFO>\r\n";
if (NetUserGetLocalGroups(null, UserName.ToString(), 0, 0, out bufPtr, 1024, out EntriesRead, out TotalEntries) != 0)
{
throw (new Exception("读取用户所在本地组失败"));
}
if (EntriesRead > 0)
{
LOCALGROUP_USERS_INFO_0[] GroupInfo = new LOCALGROUP_USERS_INFO_0[EntriesRead];
IntPtr iter = bufPtr;
for (int i = 0; i < EntriesRead; i++)
{
GroupInfo[i] = (LOCALGROUP_USERS_INFO_0)Marshal.PtrToStructure(iter, typeof(LOCALGROUP_USERS_INFO_0));
iter = (IntPtr)((int)iter + Marshal.SizeOf(typeof(LOCALGROUP_USERS_INFO_0)));
tempStr += "<GROUP>" + GroupInfo[i].GroupName + "</GROUP>\r\n";
}
tempStr += "</INFO>";
NetApiBufferFree(bufPtr);
}
return tempStr;
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
自由职业有哪些,常见的有语音电台主播、有声书录制等 如何在家当电台主播,首先要选择好平台来做 qq音乐电台主播进公会还是个人? - 知乎 华硕的主板序列号在哪里看啊! 360行车记录仪初始密码 360行车记录仪初始密码忘了 怎么转社保绑定医院 我吃贝瑞左旋整整一瓶了怎么一点也没有减啊,怎么办啊 微量注射泵针管 黄昏不闻人语声的意思是什么 夜久语声绝如闻泣又一的意思 买三星Note7怎么选?各版本差异价格全解析 C#取windows用户名 三星Note7国行9月2日上市价格5688元起? C# 枚举Windows系统的所有服务(如:services.msc) 电脑诊断以太网没有有效的ip配置,老是未识别网络,我是小白求大神... 三星galaxy note7上市后s7会不会便宜 笔记本wifi信号上有个黄色的感叹号,上不了网了,手机也是,能连上,上不... ...信号没有问题,毕竟路由器是三根天线的,就是连上WiFi网络非常... 三星Note7售价多少 国行上市时间 C#获取Windows当前活动用户名 装好了路由器之后为什连不到wifi(输入了正确的密码还连不到),求解啊... c# 。。如何获取windows的当前用户名? 怎么挽回狮子男的心理 三尺二的腰围可以减成小蛮腰吗? 问一些关于地理的问题 中国邮政储蓄银行,属于什么银行 战略入股是已经入股了还是还没有入股? 公司吊销商标还能转让吗 ...的机械效率在不计绳重和摩擦时( ) A,一定提高 B,一定降 ...A.机械效率高的机器做功一定快 B.如果没有摩擦力,机械效率一定为百分... 卡罗拉加油灯亮了还可以跑多少公里 卡罗拉油表亮灯还能走多少公里 谁知道可以蓝牙或者Wifi联机的坦克手机游戏,安卓系统游戏 《新秦桧传奇》最新txt全集下载 求一款游戏,坦克大战为主题,有蓝牙合作,智乐公司出的。 有没有什么书是介绍秦桧的? 《水浒!不一样的江湖》最新txt全集下载 中国历史十大罪人之秦桧 求推荐能蓝牙,Wi-Fi 联机玩的以前那种坦克大战游戏,求助…… 有没有用蓝牙或者wifi联机的拳皇,坦克大战,魂斗罗,斗地主,掼蛋,或其他... "和"的多音字组词 求一个能两个人玩的手机游戏,蓝牙,WiFi连接的联网的都可以, 怎么在一个无线路由器上接上另一个无线路由器,(能简单说明白最好... 如何一个路由器连接另一个路由器 在无线路由上如何在接一个无线路由? 怎么去计算餐饮厨房的新风机风量? ...油烟风机风量怎么计算?厨房面积为25平,排烟罩面积4平,大约用一个多... 艾滋病cd4多少是晚期 送给长辈的中秋节祝福语(精选100句) 2023送给长辈的中秋节祝福语 有些遗憾伤感的情感文案(句句心痛的情感语录)