Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.066 c
6-1122892321
Pool
2005-08-01 14:32
2005.11.13
Socket preconfig?


8-1110227158
Sash1988
2005-03-07 23:25
2005.11.13
Графика в OpenGL


4-1126609187
Cherrex
2005-09-13 14:59
2005.11.13
Как использовать GetUserName


14-1129738743
ioas
2005-10-19 20:19
2005.11.13
вопрос по Apache


14-1129789532
Дмитрий_Б
2005-10-20 10:25
2005.11.13
Руководство Oracle на русском языке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский