各位大侠!!! 现在一个asp.net 网站不是默认匿名访问的,,是Window验证方式的! 以登录的NT用户来区分每一个用户是谁.
现在要修改当前NT用户的密码?? 在网上查了一些
DirectoryEntry obDirEntry = new DirectoryEntry("WinNT://" + Environment.MachineName+"/Test");
obDirEntry.InvokeSet("Password","123456"); //是一种重置密码的方式,而非修密码.(重置别的用户的话,当然要高权限吧)
obDirEntry.CommitChanges();
但上面方法是要有比较高的权限才可以.这样不行.
求一种自己修改密码的方式:下面是Asp的修改代码,,,,
Set oUser = GetObject("WinNT://ComputerName/" & UserName)
oUser.ChangePassword OldPwd, NewPwd1
oUser.SetInfo
Set oUser = Nothing
用C# 怎么修改当前NT的密码....
现在要修改当前NT用户的密码?? 在网上查了一些
DirectoryEntry obDirEntry = new DirectoryEntry("WinNT://" + Environment.MachineName+"/Test");
obDirEntry.InvokeSet("Password","123456"); //是一种重置密码的方式,而非修密码.(重置别的用户的话,当然要高权限吧)
obDirEntry.CommitChanges();
但上面方法是要有比较高的权限才可以.这样不行.
求一种自己修改密码的方式:下面是Asp的修改代码,,,,
Set oUser = GetObject("WinNT://ComputerName/" & UserName)
oUser.ChangePassword OldPwd, NewPwd1
oUser.SetInfo
Set oUser = Nothing
用C# 怎么修改当前NT的密码....
解决方案 »
- 关于日历控件,求指导
- 求pervasivedb for .net provider url?
- aspx中使用framset的传值问题
- 请教一个菜鸟问题
- hyperlink 如何实现如下功能?
- CascadingDropDown 用过的帮帮小弟
- Dundas Charts 产生错误图片!
- 我在datagrid的一模板列放入TextBox,DropDownList二个控件,怎么样才能将DropDownList的内容加入
- 求助:怎样得到连接终端的网速,然后根据不同的速度转向不同的网页,急!!!!
- 有没有在学Duwamish7(c#)的兄弟?
- 请问asp.net中如何屏蔽<script src=http://cn.daxia123.cn/cn.js></script>等文字
- asp.net 字符限制的问题!希望高手解决
//传入参数:Username用户名,Userpassword用户新密码
public static bool InitNTPwd(string Username,string Userpassword)
{
try
{
DirectoryEntry obComputer = new DirectoryEntry("WinNt://" + Environment.MachineName);
DirectoryEntry obUser = obComputer.Children.Find(Username,"User");
obUser.Invoke("SetPassword", Userpassword);
obUser.CommitChanges();
obUser.Close();
obComputer.Close();
return true;
}
catch
{
return false;
}
}
}
}因为需要系统管理员组权限,所以需要进行系统管理员的模拟,就是说你修改之前模拟系统管理员,修改完成后退出模拟
模拟的实现方式,参考这里面有demo
http://www.codeproject.com/KB/cs/zetaimpersonator.aspx
///
/// </summary>
public const int LOGON32_LOGON_INTERACTIVE = 2;
/// <summary>
///
/// </summary>
public const int LOGON32_PROVIDER_DEFAULT = 0;
System.Security.Principal.WindowsImpersonationContext impersonationContext;
/// <summary>
/// 模拟登录
/// </summary>
/// <param name="lpszUserName"></param>
/// <param name="lpszDomain"></param>
/// <param name="lpszPassword"></param>
/// <param name="dwLogonType"></param>
/// <param name="dwLogonProvider"></param>
/// <param name="phToken"></param>
/// <returns></returns>
[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
/// <summary>
/// 摸拟握手
/// </summary>
/// <param name="hToken"></param>
/// <param name="impersonationLevel"></param>
/// <param name="hNewToken"></param>
/// <returns></returns>
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
/// <summary>
///
/// </summary>
/// <returns></returns>
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool RevertToSelf();
/// <summary>
/// 关闭握手句柄
/// </summary>
/// <param name="handle"></param>
/// <returns></returns>
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle); #region 用户摸拟部分
/// <summary>
/// 模拟用户名与密码
/// </summary>
/// <param name="userName"></param>
/// <param name="domain"></param>
/// <param name="password"></param>
/// <returns></returns>
private bool impersonateValidUser(String userName, String domain, String password)
{
System.Security.Principal.WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (RevertToSelf())
{
if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new System.Security.Principal.WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
/// <summary>
/// 取消模拟
/// </summary>
private void undoImpersonation()
{
impersonationContext.Undo();
}
#endregion
Set oUser = GetObject("WinNT://ComputerName/" & UserName)
oUser.ChangePassword OldPwd, NewPwd1
oUser.SetInfo
Set oUser = Nothing 多直接~~~
配置完之后,只要你的站点是"Windows集成认证"的,一旦密码过期就会自动转到修改密码页面,你也可以直接访问修改密码页面: http://localhost/iisadmpwd/aexp3.asphttp://support.microsoft.com/kb/907271
要是实在不想这么做,那就按照3楼的方法做好了。
对阿,所以我给你推荐了我在8楼所说的方法阿,不需要任何权限的特殊设置了。或者,你自己读一下我在8楼里面提到的方法的ASP源码,然后改成ASP.NET。
obDirEntry.CommitChanges();