Вниз
Скачать: CL | DM;

Изменения пароля пользователя Windows   Найти похожие ветки 

← →
Darkwin ©   (2003-03-21 12:36) [0]

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


← →
Clickmaker ©   (2003-03-21 13:31) [1]

NetUserChangePassword


← →
Darkwin ©   (2003-03-21 13:58) [2]

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


← →
Darkwin ©   (2003-03-21 14:12) [3]

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


← →
Darkwin ©   (2003-03-21 16:03) [4]

блин, опять открыт :((
что это за тип такой (сишный) 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 16:05) [5]

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


← →
Clickmaker ©   (2003-03-21 16:12) [6]

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


← →
Darkwin ©   (2003-03-21 17:01) [7]

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

{$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 17:07) [8]

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


← →
Romkin ©   (2003-03-21 17:08) [9]

stdcall забыл :-))


← →
Darkwin ©   (2003-03-21 17:13) [10]

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



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
9-59522
TWINc1
2002-12-13 11:32
2003.05.19
X


6-59837
userr
2003-03-22 21:11
2003.05.19
TCP-IP protocol


4-60003
Step[B.M.]
2003-03-01 12:42
2003.05.19
Как из моей проги запустить другой exe-шник, да еще с параметрами


6-59836
sils
2003-03-23 13:42
2003.05.19
Tracert ????????


1-59741
Ш-К
2003-05-06 01:52
2003.05.19
Шедулер.




   Наверх