Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменения пароля пользователя Windows [D6, Win2k, WinXP]


Darkwin ©   (2003-03-21 12:36:00) 

Народ, подскажите плз, как можно программно поменять пароль для пользователя домена Win2000, зная его логин и текущий пароль. Программа будет работать на контролере домена (сервисом), и несколько раз в день будет менять пароль для доступа к определенному ресурсу. Или ткните меня куда-нибудь где это описано.
Заранее благодарен.


Darkwin   (2003-03-21 17:13:00) [1]

ураааа, огромное спасибо, блин я бы еще часа три на прогу пялился пока не заметил бы этот stdcall


Romkin   (2003-03-21 17:08:00) [2]

stdcall забыл :-))


Clickmaker   (2003-03-21 17:07:00) [3]

Соглашение о вызовах виндозное не учел
function NetUserChangePassword(NomainName,UserName,OldPasword,NewPassword:LPWSTR):NET_API_STATUS; stdcall;external "netapi32.dll" name "NetUserChangePassword";
Да и параметры то она требует уникодные, без StringToWideChar не обойтись, пожалуй.
И в блок except она и не вылетит никогда, надо результат проверять, NET_API_STATUS


Darkwin   (2003-03-21 17:01:00) [4]

ладно, сделал вот так:

{$EXTERNALSYM NET_API_STATUS}
NET_API_STATUS = LongWord;

{$EXTERNALSYM NetUserChangePassword}
function NetUserChangePassword(NomainName,UserName,OldPasword,NewPassword:LPWSTR):NET_API_STATUS; external "netapi32.dll" name "NetUserChangePassword";

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
domen,name,oldpass,newpass:LPWSTR;
begin
rez:=0;
domen:="\\WaPBBS.landos.ru";
name:="GA";
OldPass:="1";
NewPass:="2";
try
NetUserChangePassword(domen,Name,OldPass,NewPass);
except
ShowMessage("Error");
end;
end;

вроде бы все типы соблюдены.
Самое интересное, что NetUserChangePassword выполняется, управление в блок except не передается, а при выходе из процедуры вылетает ошибка(если запускаю проект из дельфей), а если запускаю экзешник то прога вылетает (в ускоренном порядке закрывается :))))
че за фигня такая? винда отсервиспатчена 3 сервиспаком. тут кода то - кот наплакал, где ошибка может быть не знаю, может эта функция вообще не работает?


Clickmaker   (2003-03-21 16:12:00) [5]

NET_API_STATUS это банальный DWORD или cardinal


Darkwin   (2003-03-21 16:05:00) [6]

да еще: в MSDN я описания NET_API_STATUS не нашел, хотя примеров кода с использованием этого типа полно, естественно на си


Darkwin   (2003-03-21 16:03:00) [7]

блин, опять открыт :((
что это за тип такой (сишный) NET_API_STATUS, и что вместо него использовать в дельфи? или я может не так функцию импортирую?

function NetUserChangePassword(NomainName,UserName,OldPassword,NewPassword:LPWSTR):integer; external "netapi32.dll" name "NetUserChangePassword";

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
NetUserChangePassword("WaPBBS","GA","1","2");
end;

после выполнения этой функции выскакивает ошибка и окно отладки кода...


Darkwin   (2003-03-21 14:12:00) [8]

вопрос снят: тупанул, естественно netapi32.dll


Darkwin   (2003-03-21 13:58:00) [9]

Точно и сам только что нашел. Но все равно спасибо. А в каком модуле она содержится? В хелпе, в quikinfo ссылка на файлы netapi32.lib и Imaccess.h...


Clickmaker   (2003-03-21 13:31:00) [10]

NetUserChangePassword


Наверх

Титульная страница Поиск, карта сайта Написать письмо