Форум: "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.044 c