Active Directory смена пароля
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/using_adsi.asp
возвращаясь к смене пароля
changing_the_password_on_a_serviceampaposs_user_account.asp
цитата с сайта
DWORD UpdateAccountPassword(
LPTSTR szServerDNS, // DNS name of host computer
LPTSTR szAccountDN, // Distinguished name of service logon account
LPTSTR szServiceName, // Name of the service
LPTSTR szOldPassword, // Old password
LPTSTR szNewPassword // New password
)
{
SC_HANDLE schService = NULL;
SC_HANDLE schSCManager = NULL;
DWORD dwLen = MAX_PATH;
TCHAR szAccountPath[MAX_PATH];
IADsUser *pUser = NULL;
HRESULT hr;
DWORD dwStatus=0;
SC_LOCK sclLock = NULL;
if(!szServerDNS || !szAccountDN || !szServiceName || !szOldPassword ||
!szNewPassword)
{
_tprintf(TEXT("Invalid parameter";
goto cleanup;
}
// Set the password on the account.
// Use the distinguished name to bind to the account object.
_tcsncpy(szAccountPath, TEXT("LDAP://" MAX_PATH);
_tcscat(szAccountPath, szAccountDN, MAX_PATH - _tcslen(szAccountPath;
hr = ADsGetObject(szAccountPath, IID_IADsUser, (void**)&pUser);
if (FAILED(hr {
_tprintf(TEXT("Get IADsUser failed - 0x%x\n" dwStatus = hr);
goto cleanup;
}
// Set the password on the account.
hr = pUser->ChangePassword(CComBSTR(szOldPassword CComBSTR(szNewPassword;
if (FAILED(hr {
_tprintf(TEXT("ChangePassword failed - 0x%x\n" dwStatus = hr);
goto cleanup;
}
// Update the account and password in the SCM database.
// Open the Service Control Manager on the specified computer.
schSCManager = OpenSCManager(
szServerDNS, // DNS name of host computer
NULL, // database (NULL == default)
SC_MANAGER_ALL_ACCESS // access required
);
if (! schSCManager) {
_tprintf(TEXT("OpenSCManager failed - %d\n" dwStatus = GetLastError;
goto cleanup;
}
// Open a handle to the service instance.
schService = OpenService(schSCManager, szServiceName, SERVICE_ALL_ACCESS);
if (! schService) {
_tprintf(TEXT("OpenService failed - %s\n" dwStatus = GetLastError;
goto cleanup;
}
// Get the SCM database lock before changing the password.
sclLock = LockServiceDatabase(schSCManager);
if (sclLock == NULL) {
_tprintf(TEXT("LockServiceDatabase failed - %d\n" dwStatus = GetLastError;
goto cleanup;
}
// Set the account and password that the service uses at startup.
if (! ChangeServiceConfig(
schService, // Handle of service
SERVICE_NO_CHANGE, // Service type: no change
SERVICE_NO_CHANGE, // Change service start type
SERVICE_NO_CHANGE, // Error control: no change
NULL, // Binary path: no change
NULL, // Load order group: no change
NULL, // Tag ID: no change
NULL, // Dependencies: no change
NULL, // Account name: no change
szNewPassword, // New password
NULL) ) { // Display name: no change
_tprintf(TEXT("ChangeServiceConfig failed - %s\n" dwStatus = GetLastError;
goto cleanup;
}
_tprintf(TEXT("Password changed for service instance on: %s\n" szServerDNS);
cleanup:
if (sclLock)
UnlockServiceDatabase(sclLock);
if (schService)
CloseServiceHandle(schService);
if (schSCManager)
CloseServiceHandle(schSCManager);
if (pUser)
pUser->Release;
return dwStatus;
}
код на чем ?
C с использованием COM (можно адаптировать практически под любые языки хоть на перл переписать)
желательно конечно на .Net
Хороший сайт
Есть
using System;
using System.DirectoryServices;
namespace OLAActiveDirectory.Management
{
public interface IADPasswdManager
{
void ChangePassword(IADUser objUser,string strOldPasswd,string strNewPasswd);
void SetPassword(IADUser objUser,string strPasswd);
}
public class ADPasswdManager : IADPasswdManager
{
public ADPasswdManager
{
}
public void SetPassword(IADUser objUser,string strPasswd)
{
DirectoryEntry objLoginEntry=objUser.DirectoryEntry;
if(objLoginEntry!=null)
{
objLoginEntry.Invoke("SetPassword", new object[]{strPasswd});
objLoginEntry.CommitChanges;
}
}
public void ChangePassword(IADUser objUser,string strOldPasswd, string strNewPasswd)
{
DirectoryEntry objLoginEntry=objUser.DirectoryEntry;
if(objLoginEntry!=null)
{
objLoginEntry.Invoke("ChangePassword",new object[]{strOldPasswd,strNewPasswd});
objLoginEntry.CommitChanges;
}
}
}
}
спасибо
Оставить комментарий
6yrop
может кто-нибудь сталкивался с такой проблемой, напишите пожалуйста код, который меняет парольи Интернете об этом много написано, но я так и не разобрался