Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Как сменить пароль для пользователя   Найти похожие ветки 

 
Still Swamp   (2005-09-05 20:16) [0]

Как сменить пароль для пользователя w2k или вызвать стандартный диалог смены пароля.


 
begin...end ©   (2005-09-05 20:32) [1]

Функция NetUserChangePassword (библиотека Netapi32.dll).


 
Lamer@fools.ua ©   (2005-09-05 20:33) [2]

Сменить: NetUserChangePassword()


 
Still Swamp   (2005-09-07 18:56) [3]

А есть ли у кого заголовки к этой DLL? Поделитесь плс


 
begin...end ©   (2005-09-07 19:03) [4]

> Still Swamp   (07.09.05 18:56) [3]

В справке (Windows SDK) написано... Остаётся только перевести сишные типы на дельфийские:

function NetUserChangePassword(DomainName: PWideChar; UserName: PWideChar; OldPassword: PWideChar;
  NewPassword: PWideChar): Cardinal; stdcall; external "netapi32.dll" name "NetUserChangePassword";


 
Still Swamp   (2005-09-07 19:06) [5]

Согласен - не проблема... только там еще ворох ошибок... их тоже надо переводить.
ERROR_ACCESS_DENIED
NERR_InvalidComputer
NERR_NotPrimary
.....
И так далее. Самому придется делать... но может у кого все же есть?


 
begin...end ©   (2005-09-07 19:22) [6]

> Still Swamp   (07.09.05 19:06) [5]

ERROR_ACCESS_DENIED и ERROR_INVALID_PASSWORD уже импортированы (см. модуль Windows).

Остальное:

сonst
 NERR_InvalidComputer = 2351;
 NERR_NotPrimary = 2226;
 NERR_UserNotFound = 2221;
 NERR_PasswordTooShort = 2245;


 
Still Swamp   (2005-09-07 19:31) [7]

Оки... сенкс... удочка тоже не плохо.


 
Still Swamp   (2005-09-07 19:36) [8]

???

Возвращает в DWord 1351... это как?


 
Still Swamp   (2005-09-07 19:57) [9]

А еще 86... так же бывает.


 
begin...end ©   (2005-09-07 21:18) [10]

> Still Swamp   (07.09.05 19:36) [8]
> Still Swamp   (07.09.05 19:57) [9]

86 -- это ERROR_INVALID_PASSWORD (см. выше). Насчёт 1351 -- не в курсе.

А на код использования функции можно взглянуть?


 
begin...end ©   (2005-09-07 21:33) [11]

> Still Swamp   (07.09.05 19:36) [8]

У меня сейчас сишных хидеров нету, но гугл говорит, что 1351 -- это ERROR_CANT_ACCESS_DOMAIN_INFO: "Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied".


 
Ботвин Дмитрий   (2005-09-08 08:27) [12]

Примерно так: на форме ставишь 3 TEdit-а с именами
1. CompName - имя компа на котором меняем пароль пользователя
2. UserName - имя пользователя
3. UserPassword - новый пароль

procedure TForm1.ChangePasswordClick(Sender: TObject);
 
  const
     NERR_BASE = 2100;
     NERR_InvalidComputer = NERR_BASE+251;
     NERR_NotPrimary = NERR_BASE+126;
     NERR_PasswordTooShort = NERR_BASE+145;
     NERR_SpeGroupOp = NERR_BASE+134;
     NERR_LastAdmin  = NERR_BASE+352;
     NERR_BadPassword = NERR_BASE+103;
     NERR_UserNotFound = NERR_BASE+121;

 type
   TChangePasswInfo = record
     usri1003_password: PWideChar;
   end;

 var buf: Pointer;
     UserInfo: TChangePasswInfo;
     HostName,User_Name, Passw: WideString;
     parm_err: DWORD;
     error: longint;
 begin
   HostName:=WideString("\\"+CompName.Text);
   User_Name:=WideString(UserName.Text);
   Passw:=WideString(UserPassword.Text);
   UserInfo.usri1003_password:=PWideChar(Passw);
   buf:=@UserInfo;
   error:=NetUserSetInfo(PWideChar(HostName),PWideChar(User_Name),1003,buf,parm_err);
   NetApiBufferFree(buf);
   case error of
     ERROR_ACCESS_DENIED: Application.MessageBox("Пользователю недостаточно прав для выполнения функции!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_InvalidComputer: Application.MessageBox("Неверное имя компьютера!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_NotPrimary: Application.MessageBox("Операция разрешена только для главного контроллера домена!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_SpeGroupOp: Application.MessageBox("Недопустимое действие для группы пользователей!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_PasswordTooShort: Application.MessageBox("Слишком короткий пароль!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_LastAdmin: Application.MessageBox("Действие не допустимо для данной учетной записи!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_BadPassword: Application.MessageBox("Недопустимый пароль!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
     NERR_UserNotFound: Application.MessageBox("Имя пользователя не найдено!",
                          "Ошибка",MB_OK+MB_ICONSTOP);
   else
     Application.MessageBox("Пароль успешно изменён!","Изменение пароля",
                        MB_OK+MB_ICONINFORMATION);
   end;
 end;

Если меняешь пароль на локальном компе, то первым параметром в
NetUserSetInfo должен быть nil.
Вот и всё, с диалоговыми формами я думаю сам разберёшься...


 
Still Swamp   (2005-09-08 22:29) [13]

Спасибо...
Вот мое...

procedure TVFormChangePassword.ActOkExecute(Sender: TObject);
var
Rs:DWORD;
DomainName:PWideChar;
UserName:PWideChar;
OldPassword:PWideChar;
NewPassword:PWideChar;
begin
Rs:=0;

DomainName:=PWideChar(WideString(VDomainName.Text));
UserName:=PWideChar(WideString(VUserName.Text));
OldPassword:=PWideChar(WideString(VOldPassword.Text));
NewPassword:=PWideChar(WideString(VNewPassword.Text));

if Trim(VNewPassword.Text)<>Trim(VNewPasswordConfirm.Text) then begin
 LogError("Не совпадают введенные пароли")
end else begin
 Rs:=NetUserChangePassword(DomainName,UserName,OldPassword,NewPassword);
 case Rs of
  ERROR_ACCESS_DENIED:LogError("Пользователь не имеет доступа к запрашиваемой информации");
  NERR_InvalidComputer:LogError("Неверное имя домена или компьютера");
  NERR_NotPrimary:LogError("Операция разрешена только для домена");
  NERR_UserNotFound:LogError("Имя пользователя не найдено");
  NERR_PasswordTooShort:LogError("Пароль содержит слишком мало символов");
  NERR_Success:begin
   LogInfo("Ваш пароль был успешно изменен");
   Close;
  end;
 else
  LogError("Непредвиденная ошибка "+IntToStr(Rs));
 end;
end;
end;


 
user51   (2005-09-09 10:12) [14]

Может так
winexec("cmd.exe /c net user администратор xxxxx",0);
                                ^^^^      ^^^^
                        имя пользователя  пароль

У меня крутится сервис слушает порт
присылаю ему комманды он их выполнят
пароли меняет без проблем


 
user51   (2005-09-09 10:14) [15]

администратор имя пользователя
xxxxx пароль


 
Still Swamp   (2005-09-10 01:21) [16]

это прошу прощения... хм....



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.032 c
4-1126266591
MF
2005-09-09 15:49
2005.11.13
Да уж... :(


14-1129904509
Tesla
2005-10-21 18:21
2005.11.13
Посоветуйте компонент


2-1129983763
Ромио
2005-10-22 16:22
2005.11.13
Office


14-1129630075
delphi@so-ft.com
2005-10-18 14:07
2005.11.13
Разыскивается Delphi-программист!!!


2-1129564993
V0RoN
2005-10-17 20:03
2005.11.13
WinDir