Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


User Name В WinNT/2K/XP


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
mrbenjamen
Гость







СообщениеСр, 30-Июн-2004 19:04    Заголовок сообщения: 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
Откуда: Донецк
СообщениеСр, 30-Июн-2004 21:57 
Цитата

Чтобы другая программа могла запустить твою базу от имени администратора, она должна знать пароль администратора.
А если бы у тебя был пароль, ты бы и без программы обошелся...

P.S. Фраза "во избежание безопасности и сохранения целостности компа" мне понравилась ;)

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж 13-ый
Администратор


Возраст: 35
Знак зодиака: Близнецы
Зарегистрирован: 28.04.2002
Сообщения: 3551
Откуда: Москва
СообщениеСр, 30-Июн-2004 23:03 
Цитата

вообще есть одна дырка связанная с скринсейвером в 2к...

но тебе, лысый ... :)))) я расческу не дам :)

_________________


http://fotki.yandex.ru/users/vladimir13

С уважением, 13-ый Wink
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
mrbenjamen
Гость







СообщениеЧт, 01-Июл-2004 18:03 
Цитата

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
Откуда: Донецк
СообщениеЧт, 01-Июл-2004 20:19 
Цитата

Тогда задача легко решается на Windows 2000/XP. Фактически тебе потребуется только функция CreateProcessWithLogonW. Она работает подобно CreateProcess, только позволяет ввести еще и имя пользователя и пароль учетной записи, от имени которой запускается процесс. На Windows NT придется пользоваться связкой LogonUser + CreateProcessAsUser
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
mrbenjamen
Гость







СообщениеПн, 05-Июл-2004 15:38 
Цитата

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
Откуда: Донецк
СообщениеПн, 05-Июл-2004 23:01 
Цитата

Да ничего сложного там на самом деле нет, разве что эта
функция по умолчанию не описана в 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;

_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
mrbenjamen
Гость







СообщениеПн, 19-Июл-2004 17:17    Заголовок сообщения: To Dr.Pass
Цитата

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
В начало
mrbenjamen
Гость







СообщениеСр, 28-Июл-2004 15:36 
Цитата

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
Откуда: Донецк
СообщениеЧт, 29-Июл-2004 23:58 
Цитата

CreateProcessWithLogonW должна работать и в Win2K. Я могу только предположить, что у тебя она срабатыват, но приложение запускается не на активном десктопе, а на скрытом "свежесозданном для нового юзера" (водится такой грешок и за CreateProcessWithLogonW, и за CreateProcessAsUser). Попробуй явно указать станцию и десктоп: si.lpDesktop := 'winsta0\default'. А еще лучше, опиши - что именно не работает
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
mrbenjamen
Гость







СообщениеПт, 30-Июл-2004 17:34 
Цитата

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
В начало
mrbenjamen
Гость







СообщениеВс, 01-Авг-2004 16:20 
Цитата

Вот Кусок исходного текста моей Программы, который отвечает за запуск внешнего процесса (кроме этого, там есть несколько процедур для чтения/записи установок и настроики пользовательского интерфеиса, но там всё ок:) )

=======================================
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
Откуда: Донецк
СообщениеВс, 01-Авг-2004 16:27 
Цитата

Я сегодня уезжаю в командировку, буду в конце недели. Посмотрю. А тебе не мешало бы после CreateProcess.. вызвать GetLastError, и посмотреть на код ошибки, который она возвращает. Расшифровка кодов - в MSDN, тема Error Codes (win32)
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
mrbenjamen
Гость







СообщениеВт, 10-Авг-2004 16:23 
Цитата

согласно вашему совету, поискал я примеры использования этой
функций, искал на 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.
Посоветуйте что нибудь против этого неприятного явления!!!
заранее спасибо за внимание
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100