User Name В WinNT/2K/XP
| Автор
| Сообщение |
|
|
|
Цитата |
|
comp
MNE OCHEN NUJNO KOD PROGRAMMI NA DELPHI, KATORAJA ZAPUSTIT DRUGUJU PROGRAMMU OT IMENI ADMINISTRATOR (CHTO TO V RODE runas....username:administrator) U MENJA EST ODNA OCHEN XOROSHAJA BAZA DANNIX, KOTORAJA NE ZAPUSKAETSJA POD "LIMITED ACCOOUNT", A ETO MNE OCHEN NUJNO (VO IZBEJANII BEZOPASNOSTI I SOXRANENIJA CELOSTNOSTI KOMPA) POJALUSTA, POMOGITE!!! |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Чтобы другая программа могла запустить твою базу от имени администратора, она должна знать пароль администратора.
А если бы у тебя был пароль, ты бы и без программы обошелся...
P.S. Фраза "во избежание безопасности и сохранения целостности компа" мне понравилась  _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 13-ый
Администратор

Возраст: 35
Знак зодиака: 
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
|
|
| В начало |
|
 |
|
|
|
Цитата |
|
| vi naverno, ploxo menja ponjali. opishu situaciju detalno. ja "softmaster" v odnom "NGO", isxodja iz etova, ja sam javljaus administratorom vsex kompov v office. u nas est baza zakonodatelnix aktov, kotoraja ne kak ne xochet rabotat pod "Limited Account". problema sostoit v tom, chto v moei organizacii ne ochen xorosho razbirajutsja v kompax i sledovatelno, povishen risk porchi sistemi. imenno po etomu mne nujno napisat programmu, kotoraja smojet zapustit bazu ot imeni administratora. |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Тогда задача легко решается на Windows 2000/XP. Фактически тебе потребуется только функция CreateProcessWithLogonW. Она работает подобно CreateProcess, только позволяет ввести еще и имя пользователя и пароль учетной записи, от имени которой запускается процесс. На Windows NT придется пользоваться связкой LogonUser + CreateProcessAsUser _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
bolshoe spasibo za sovet, no u menja est eshcho odna prosba. napishite detalni kod programmi s ispolzovaniem etix funkcii. ja sam nechevo ne smog podelat programma doljna rabotat pod win2k/XP |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Да ничего сложного там на самом деле нет, разве что эта
функция по умолчанию не описана в windows.pas
| Код: |
function CreateProcessWithLogonW(user:pwidechar; domain:pwidechar;
passw:pwidechar; flags: DWORD; lpApplicationName: PwideChar; lpCommandLine: PwideChar;
dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL; stdcall;external 'advapi32.dll' name 'CreateProcessWithLogonW';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
si: TSTARTUPINFO;
pif: PROCESS_INFORMATION;
begin
si.cb := SizeOf(tstartupinfo);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWDEFAULT;
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
CreateProcessWithLogonW('test', nil, 'password', 0,
nil, 'notepad.exe',0, nil, nil, si, pif);
end;
|
_________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
ja napisal programmu s ispolzovaniem funkcii "Createprocesswithlogonw" ona normalno rabotaet pod winXP, no xochet rabotat pod win2k. vi upomjanulili o svjazke "LogonUser + CreateProcessAsUser" dlja winNT. proshu podskjajite konkretnee, kak rabotat s etimi funkciami? mojet oni srabotajut na win2k i na winXP?
s uvajeniem
Mr.Benjamen |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| ja sozdal programmu s ispolzovaniem funkcii "CreateProcessWithLogonW". xorosho rabotaet v winXP, no ne xochet rabotat v win2k. kak borotsja s etim? |
|
| В начало |
|
 |
|
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
CreateProcessWithLogonW должна работать и в Win2K. Я могу только предположить, что у тебя она срабатыват, но приложение запускается не на активном десктопе, а на скрытом "свежесозданном для нового юзера" (водится такой грешок и за CreateProcessWithLogonW, и за CreateProcessAsUser). Попробуй явно указать станцию и десктоп: si.lpDesktop := 'winsta0\default'. А еще лучше, опиши - что именно не работает _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
po moemu, kak raz ne srabativaet "createprocesswithlogonw". ja tak dumaju potomu, chto v mojei programme ja nabljudau za processom, i esli on budet sozdan, programma vidajot soobshenie o sozdanii processa. seichas ja ne na rabote, po etomu ne mogu prislat isxodnik moei programmi. dumaju zavtra smogu priattachit k soobsheniju
segodnja poprobuju s desktopom. mojet bit pomojet?
spasibo za pomoshch |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Вот Кусок исходного текста моей Программы, который отвечает за запуск внешнего процесса (кроме этого, там есть несколько процедур для чтения/записи установок и настроики пользовательского интерфеиса, но там всё ок )
=======================================
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shellapi;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function CreateProcessWithLogonW(user:pwidechar;
domain:pwidechar;
passw:pwidechar; flags: DWORD; lpApplicationName: PwideChar;
lpCommandLine: PwideChar;
dwCreationFlags: DWORD; lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar; const lpStartupInfo:
TStartupInfo;
var lpProcessInformation: TProcessInformation): BOOL;
stdcall;external 'advapi32.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
si: TSTARTUPINFO;
pif: PROCESS_INFORMATION;
begin
si.cb := SizeOf(tstartupinfo);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_SHOWDEFAULT;
si.lpReserved := nil;
si.lpDesktop :=nil;
si.lpTitle := nil;
CreateProcessWithLogonW('administrator', nil, 'master', 0,
nil, 'notepad.exe', 0, nil, nil, si, pif);
end;
end.
====================================
Как упомянулось выше, Программа отлично работает под WinXP, но никак не хочет работать под Win2k, то есть не запускает внешний процесс, который указан в ? CreateProcessWithLogonW?.
Dr.Pass предположил, что ? ?createprocess? срабатывает, но приложение запускается не на активном десктопе, а на скрытом "свежесозданном для нового юзера" ?. по моему, именно ?createprocess? не работает, или работает некорректно. Если приложение запускается, хоть на "свежесозданном для нового юзера" десктопе, должно же оно показаться на ?Processes? в ?Task Manager?? (Флажок ?Show processes from all users? установлен)
мнение утверждает такой эксперимент: скопировал фаил ?advapi32.dll? от WinXP в отдельный каталог на компе под управлением Win2k, а в моём программе явно указал путь на XP-шный ?advapi32.dll?
external 'X:\xxx\advapi32.dll';
программа вообще не запустился сгенерировал ошибку: ?the procedure entry point_vsnwprintf could not be located in the dynamic link library ntdll.dll?. Потом сделал наоборот, скопировал ?advapi32.dll? из Win2k в WinXP, запустил прогу, явно указав на ?advapi32.dll? от Win2k. программа ведёт себя точно так, как под Win2k, то есть, сама запускается ?без ошибок?, но внешний процесс не запускает
ПОМОГИТЕ БОРОТЬСЯ С ЭТОЙ ПРОБЛЕМОЙ!!!
Я думаю, что ?CreateProcessWithLogonW? не поддерживается в Win2k и мне нужно использовать ?LogonUser+CreteProcessasUser? связкой. если вы согласны со мной, подскажите пожалуйста, как нужно пользоватся этими функциями? Если вы за ? CreateProcessWithLogonW?, тогда объясните в чём состоит приведённая проблема и как устранить его? |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
Я сегодня уезжаю в командировку, буду в конце недели. Посмотрю. А тебе не мешало бы после CreateProcess.. вызвать GetLastError, и посмотреть на код ошибки, который она возвращает. Расшифровка кодов - в MSDN, тема Error Codes (win32) _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
|
|
|
Цитата |
|
согласно вашему совету, поискал я примеры использования этой
функций, искал на msdn, и на других серверах тоже. с
использованием этих примеров, путём комбинаций (на основе
метода "научного тыка"), получил вот такой код:
=======================================================
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, shellapi;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function CreateProcessWithLogonW(lpUsername : PWideChar;
lpDomain : PWideChar;
lpPassword : PWideChar;
dwLogonFlags : DWORD;
lpApplicationName : PWideChar;
lpCommandLine : PWideChar;
dwCreationFlags : DWORD;
lpEnvironment : Pointer;
lpCurrentDirectory : PWideChar;
const lpStartupInfo : _STARTUPINFOA;
var lpProcessInfo : PROCESS_INFORMATION): BOOL;
stdcall; external 'advapi32.dll' name 'CreateProcessWithLogonW';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
hLib:THandle;
si : _STARTUPINFOA;
pi : Process_Information;
begin
ZeroMemory(@Si,Sizeof(si));
si.cb:=SizeOf(si);
CreateProcessWithLogonw('administrator',nil,'master',1,nil,'notepad',0,nil,nil,si,pi);
end;
end.
====================================
Почти всё ОК. на Win2k немножко запаздывает запуск внешнего процесса, но это не проблема, запускаются все программы, кроме одного, не запускается та самая база данных, о котором я говорил выше и для запуска которого пишу эту прогу. при попытке запуска этой базы выходит сообщение об ошибке с заголовком "Visual C++ runtime library error"; потом пишет адрес .exe фала моей базы, а в самом низу пишет "Abnormal program termination". такое явление наблюдается опять на Win2k, на WinXP всё работает ОК
с дистрибутивом Win2k всё в порядке, проверил на нескольких компах с разними дистрибутивами Win2k Professional и Advanced Server.
Посоветуйте что нибудь против этого неприятного явления!!!
заранее спасибо за внимание |
|
| В начало |
|
 |
|
Новая тема
Ответить
Печать
|
Вы можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете присоединять файлы в этом форуме Вы можете скачивать файлы в этом форуме
|
|