Я извиняюсь если это уже есть в нитке, но у меня сегодня канал постоянно падает, поэтому дальше я не полез. Внешние процедуры вызываются так:
procedure RegisterServiceProcess; external 'kernel32.dll' name 'RegisterServiceProcess'
или так:
function OpenThread(dwDesiredAccess: Longword; bInheritHandle: BOOL; dwThreadId: Longword): THandle; stdcall; external 'Kernel32.dll';
может и еще что-то есть, но мне об этом неизвестно.
Доброе время суток!
Кто-нибудь сталкивался с функцией CreateProcessWithLogonW (она находится в advapi.dll)? Проблема в следующем... Мне необходимо вызвать ее из Delphi. Что я делаю: описываю ее прототип (нет ее в windows.dcu), и потом делаю ее вызов. В результате вылетает ошибка в либе ntdll.dll (Access violation at adress .... in module ntdll.dll. Read of adress....)/
ниже приведены исходнички
function CreateProcessWithLogonW(
lpUsername: WideString; // user's name
lpDomain: WideString; // user's domain
lpPassword: WideString; // user's password
dwLogonFlags: DWORD; // logon option
lpApplicationName: WideString; // executable module name
lpCommandLine: WideString; // command-line string
dwCreationFlags: DWORD; // creation flags
lpEnvironment: WideString; // new environment block
lpCurrentDirectory: WideString; // current directory name
lpStartupInfo: windows.STARTUPINFO; // startup information
lpProcessInfo: windows.PROCESS_INFORMATION // process information
): boolean; external 'advapi32.dll';
.........
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
Username, Domain, passwrd, CommandLine: WideString;
Token: DWORD;//PHanndle
start: windows.STARTUPINFO;
proc_info: windows.PROCESS_INFORMATION;
begin
Username:='User0';
passwrd:='';
CommandLine:='c:\winnt\system32\cscript.exe d:\Scripts\del_u.vbs >> user0.txt';
if not CreateProcessWithLogonW(
UserName, // user's name
Domain, // user's domain
Passwrd, // user's password
0, // logon option
'', // executable module name
CommandLine, // command-line string
windows.CREATE_DEFAULT_ERROR_MODE, // creation flags
'', // new environment block
'', // current directory name
start, // startup information
proc_info // process information
)then ShowMessage('ОБЛОМ :-(((');
end;
---
ошибка вылазит при вызове ф-ии.
Кто-нибудь сталкивался с подобной проблемой?
заранее сенькс.
[Win32] Вызов функции в Delphi03.04.03 21:54 Автор: Fighter <Vladimir> Статус: Elderman
Я извиняюсь если это уже есть в нитке, но у меня сегодня канал постоянно падает, поэтому дальше я не полез. Внешние процедуры вызываются так:
procedure RegisterServiceProcess; external 'kernel32.dll' name 'RegisterServiceProcess'
или так:
function OpenThread(dwDesiredAccess: Longword; bInheritHandle: BOOL; dwThreadId: Longword): THandle; stdcall; external 'Kernel32.dll';
может и еще что-то есть, но мне об этом неизвестно.
Есть еще LoadLibrary и GetProcAddress03.04.03 22:16 Автор: Killer{R} <Dmitry> Статус: Elderman
MultiByteToWideChar(CP_ACP,0,domm,-1,dom,256);//это чтобы в unicode
MultiByteToWideChar(CP_ACP,0,usrm,-1,usr,256);
MultiByteToWideChar(CP_ACP,0,pasm,-1,pas,256);
MultiByteToWideChar(CP_ACP,0,cmdm,-1,cmd,256);
а разве имеет значение в каком порядке следуют
stdcall; и external?
и еще такой вопрос...
Кто-нибудь пытался запустить одну и ту же прогу от имени нескольких разных пользователей? Скажем в системе есть 100 пользователей с именами User1..User100. От имени каждого из них надо запустить прогу с некоторыми входными параметрами...
У кого-нибудь был опыт решения подобных задач? поделитесь плз.
И вот еще 02.04.03 11:45 Автор: Sandy <Alexander Stepanov> Статус: Elderman
> а разве имеет значение в каком порядке следуют > stdcall; и external?
Порядок значения не имеет
> и еще такой вопрос... > Кто-нибудь пытался запустить одну и ту же прогу от имени > нескольких разных пользователей? Скажем в системе есть 100 > пользователей с именами User1..User100. От имени каждого из > них надо запустить прогу с некоторыми входными > параметрами... > У кого-нибудь был опыт решения подобных задач? поделитесь > плз.
Может быть сделать батник и через RunAs...
И вот еще 02.04.03 13:07 Автор: _Inquisitor_ Статус: Незарегистрированный пользователь
> > а разве имеет значение в каком порядке следуют > > stdcall; и > external? > > Порядок значения не имеет > Вот только что попробовал поменять их местами.... Оказалось что ворядок имеет значение....
И вот еще 02.04.03 13:37 Автор: leo <Леонид Юрьев> Статус: Elderman
И еще, вот это
CommandLine:='c:\winnt\system32\cscript.exe d:\Scripts\del_u.vbs >> user0.txt';
- не сработает.
Если нужно сделать перенаправление в файл, то запускай cmd.exe
Или перенаправь выход ручками.
Если оставить как есть, но cscript.exe просто получит три параметра 'd:\Scripts\del_u.vbs', '>>' и 'user0.txt'.
И вот еще 02.04.03 13:41 Автор: _Inquisitor_ Статус: Незарегистрированный пользователь
> И еще, вот это > CommandLine:='c:\winnt\system32\cscript.exe > d:\Scripts\del_u.vbs >> user0.txt'; > - не сработает. > > Если нужно сделать перенаправление в файл, то запускай > cmd.exe > Или перенаправь выход ручками. > Если оставить как есть, но cscript.exe просто получит три > параметра 'd:\Scripts\del_u.vbs', '>>' и > 'user0.txt'. Да тут не играет роли что выполнять, главное как это будет выполняться....
Но все равно спасибо за совет