Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Вниз

Функция CreateProcessWithLogonW   Найти похожие ветки 

 
denisX_555   (2002-08-09 06:31) [0]

Всем привет!!! Ребята помогите!!! Напешите, как запусть программу с использованием фукции: CreateProcessWithLogonW

У меня есть код, но он не срабатывает, в чем ошибка?

uses Windows;
{$R *.RES}
function CreateProcessWithLogonW(lpUsdeerName,lpDomain,lpPassword:Pchar; dwLogonFlags:dword; lpApplicationName,lpCommandLine:Pchar; dwCreateionFlags:dword; lpEnvironment:Pointer; lpCurrentDirectory:Pchar; lpstartupinfo:tstartupinfo; lpProcessInfo:TProcessInformation): BOOL; external "C:\WINNT\system32\advapi32.dll";
var ProcInfo:TProcessInformation;
StartInfo:TStartUpInfo;
begin
FillChar(StartInfo,SizeOf(StartInfo),0);
with StartInfo do begin
cb := SizeOf(StartInfo);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
createprocesswithlogonW(Pchar("Administrator"),Pchar("Domain"),
Pchar ("Password"),0,Pchar("proga.exe"),nil,CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS,nil,nil,startinfo,procinfo);
end.

Или может есть другой вариант? Заранее спасибо!!!


 
denisX_555   (2002-08-09 09:26) [1]

Извеняюсь, уже нашел на http://rsdn.ru/, но если кому-то интересна эта тема вот код:

type
TCreateProcessWithLogonW = function(
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;

procedure TForm1.Button1Click(Sender: TObject);
var hLib:THandle;
CreateProcessWithLogon : TCreateProcessWithLogonW;
si : _STARTUPINFOA;
pi : Process_Information;
begin
hLib:=LoadLibrary("advapi32.dll");
ZeroMemory(@Si,Sizeof(si));
si.cb:=SizeOf(si);
CreateProcessWithLogon:=GetProcAddress(hLib,"CreateProcessWithLogonW");

CreateProcessWithLogon("login",nil,"password",1,nil,"cmd.exe",0,nil,nil,si,pi);

end;


 
Ученик   (2002-08-09 09:30) [2]

Это из Project JEDI Code Library (JCL), JclMiscel.pas, то что не будет компилироваться попробуй комментарить (было на http://delphi-jedi.org/scripts/runisa.dll?Jedi:CODELIBJCL, но сейчас вроде не работает).

procedure CreateProcAsUserEx(const UserDomain, UserName, Password, CommandLine: string;
const Environment: PChar);
const
// default values for window stations and desktops
CreateProcDEFWINSTATION = "WinSta0";
CreateProcDEFDESKTOP = "Default";
CreateProcDOMUSERSEP = "\";
var
ConsoleTitle: string;
Help: string;
WinStaName: string;
DesktopName: string;
hUserToken: THandle;
hWindowStation: HWINSTA;
hDesktop: HDESK;
StartUpInfo: TStartUpInfo;
ProcInfo: TProcessInformation;
begin

// Step 1: check for the correct OS version
CheckOSVersion;

// Step 2: logon as the specified user
if not LogonUser(PChar(UserName), PChar(UserDomain), PChar(Password),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken) then
begin
case GetLastError of
ERROR_PRIVILEGE_NOT_HELD:
raise EJclCreateProcessError.CreateResRecFmt(@RsCreateProcPrivilegeMissing,
[GetPrivilegeDisplayName(SE_TCB_NAME), SE_TCB_NAME]);
ERROR_LOGON_FAILURE:
raise EJclCreateProcessError.CreateResRec(@RsCreateProcLogonUserError);
ERROR_ACCESS_DENIED:
raise EJclCreateProcessError.CreateResRec(@RsCreateProcAccessDenied);
else
raise EJclCreateProcessError.CreateResRec(@RsCreateProcLogonFailed);
end;
end;

// Step 3: give the new user access to the current WindowStation and Desktop
hWindowStation:= GetProcessWindowStation;
WinStaName := GetUserObjectName(hWindowStation);
if WinStaName = "" then
WinStaName := CreateProcDEFWINSTATION;

if not SetUserObjectFullAccess(hWindowStation) then
begin
CloseHandle(hUserToken);
raise EJclCreateProcessError.CreateResRecFmt(@RsCreateProcSetStationSecurityError, [WinStaName]);
end;

hDesktop := GetThreadDesktop(GetCurrentThreadId);
DesktopName := GetUserObjectName(hDesktop);
if DesktopName = "" then
DesktopName := CreateProcDEFDESKTOP;

if not SetUserObjectFullAccess(hDesktop) then
begin
CloseHandle(hUserToken);
raise EJclCreateProcessError.CreateResRecFmt(@RsCreateProcSetDesktopSecurityError, [DesktopName]);
end;

// Step 4: set the startup info for the new process
ConsoleTitle := UserDomain + UserName;
FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
with StartUpInfo do
begin
cb:= SizeOf(StartUpInfo);
lpTitle:= PChar(ConsoleTitle);
Help := WinStaName + "\" + DeskTopName;
lpDesktop:= PChar(Help);
end;

// Step 5: create the child process
if not CreateProcessAsUser(hUserToken, nil, PChar(CommandLine),
nil, nil, False, CREATE_NEW_CONSOLE or CREATE_NEW_PROCESS_GROUP,
Environment, nil, StartUpInfo, ProcInfo) then
begin
case GetLastError of
ERROR_PRIVILEGE_NOT_HELD:
raise EJclCreateProcessError.CreateResRecFmt(@RsCreateProcPrivilegesMissing,
[GetPrivilegeDisplayName(SE_ASSIGNPRIMARYTOKEN_NAME), SE_ASSIGNPRIMARYTOKEN_NAME,
GetPrivilegeDisplayName(SE_INCREASE_QUOTA_NAME), SE_INCREASE_QUOTA_NAME]);
ERROR_FILE_NOT_FOUND:
raise EJclCreateProcessError.CreateResRecFmt(@RsCreateProcCommandNotFound, [CommandLine]);
else
raise EJclCreateProcessError.CreateResRec(@RsCreateProcFailed);
end;
end;

// clean up
CloseWindowStation(hWindowStation);
CloseDesktop(hDesktop);
CloseHandle(hUserToken);

// if this code should be called although there has
// been an exception during invocation of CreateProcessAsUser,
// it will quite surely fail. you should make sure this doesn"t happen.
// (it shouldn"t happen due to the use of exceptions in the above lines)
CloseHandle(ProcInfo.hThread);
CloseHandle(ProcInfo.hProcess);
end;


 
Ученик   (2002-08-09 09:30) [3]

Опоздал :)



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

Форум: "WinAPI";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
3-85308
id_privin
2002-09-02 19:15
2002.09.26
как заставить IBDataSet выглядеть как OracleDataSet


3-85391
Таня
2002-09-05 12:35
2002.09.26
построители отчётов


14-85698
Nelud
2002-09-01 09:53
2002.09.26
Что бы такое на конкурс послать?


3-85366
vanko
2002-09-03 12:17
2002.09.26
Заппрос


1-85539
Dmitriy Polskoy
2002-09-13 12:48
2002.09.26
Помогите разобраться с QuickReport - ом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский