Всем доброго времени суток. Прошу помочь.
Ситуация:
Есть 2 домена. Доверительных отношений нет. В обоих доменах настроена условная переадресация DNS запросов. В каждом домене есть учетная запись с админскими правами. (учетный записи и пароли различны).
Есть программа, которая позволяет включать\выключать usb (изменение значений реестра, переименование inf файлов). В домене №1 всё работает.
Задача.
В домене №1 запустить эту программу, которая бы позволила авторизоваться в домене №2 и запустить включение\отключение usb.
Пытаюсь запустить проверку авторизации в другом домене с помощью кода
Код:
procedure TEn_Dis_Usb.Button1Click(Sender: TObject);
var
UserName,Password,DomainName:PAnsiChar;
tolken:THandle;
vReg: TRegistry;
begin
UserName:=PAnsiChar(login.Text);
Password:=PAnsiChar(Password1.Text);
DomainName:=PAnsiChar(domain.Text);
try
if LogonUser(PChar(UserName),PChar(DomainName),PChar(Password),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,tolken) then
begin
Beep;
ImpersonateLoggedOnUser(tolken);
ShowMessage('Авторизация успешно пройдена');
end
else ShowMessage('Авторизация НЕ пройдена');
finally
CloseHandle(tolken);
end;
end;
Если я ввожу данные другого домена, то получаю сообщение, что авторизация не пройдена. Запускаю там где непосредственно работаю - авторизация пройдена. Подскажите куда копать, или что я делаю не так.
Пробовал соединиться с доменом через adoconnection:
Код:
procedure TEn_Dis_Usb.Button2Click(Sender: TObject);
var
i,j:integer;
f,sql:string;
res:string;
begin
ADOConnection2:=TADOConnection.Create(nil);
with ADOConnection2 do
begin
ConnectionString:='Provider=ADsDSOObject;Password=sadmin;User ID=domainname\admin;Encrypt Password=False;Data Source=domain;Location=LDAP://domainname/Domain;Mode=Read;Bind Flags=0;ADSI Flag=1';
Provider:='ADsDSOObject';
LoginPrompt:=False;
Connected:=True;
end;
AdoQuery2:=TADOQuery.Create(nil);
AdoQuery2.SQL.Clear;
AdoQuery2.SQL.Text:= 'select DistinguishedName from ''LDAP://DC=domainname, DC=domainname'+''' where CN='''+edit1.text+'''';
AdoQuery2.Connection:=ADOConnection2;
AdoQuery2.Open;
AdoQuery2.Active:=true;
DataSource2.DataSet:=AdoQuery2;
Dbgrid1.DataSource:=DataSource2;
res:='';
for i:=0 to DBGrid1.DataSource.DataSet.FieldCount-1 do
res:=DBGrid1.DataSource.DataSet.Fields[i].AsString;
Edit3.Text:=res;
AdoQuery2.Close;
AdoQuery2.Destroy;
ADOConnection2.Destroy;
end;
Выдает ошибку неверный логин или пароль.
