Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Помогите с CreateProcessWithLogonW...   Найти похожие ветки 

 
Deathless ©   (2002-11-15 11:12) [0]

Помогите кто-нибудь: у меня программа вылетает с сообщением Access Violation и очень подозрительно при этом ругается на ntdll.dll при использовании функции CreateProcessWithLogonW

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

function CreateProcessWithLogonW(lpUserName,
lpDomain,
lpPassword: PWideChar;
dwLogonFlags: dword;
lpApplicationName,
lpCommandLine: PWideChar;
dwCreationFlags: dword;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
lpStartupInfo: tstartupinfo;
lpProcessInfo: TProcessInformation): bool; external("advapi32.dll");

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var ProcInfo:TProcessInformation;
StartInfo:TStartUpInfo;

user: WideString;
password: WideString;
cmd: WideString;
path: WideString;

begin
FillChar(StartInfo,SizeOf(StartInfo),0);
with StartInfo do begin
cb := SizeOf(StartInfo);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;

user := "login";
password := "пароль";
cmd := "command.com";
path := "c:\";

createprocessWithLogonW
(PWideChar(user), // pointer to thread security attributes
nil,
PWideChar(password),
1,
nil, // pointer to name of executable module
PWideChar(cmd), // pointer to command line string
NORMAL_PRIORITY_CLASS or
CREATE_NEW_CONSOLE, // creation flags
nil, // pointer to new environment block
PWideChar(path), // pointer to current directory name
StartInfo, // pointer to STARTUPINFO
ProcInfo); // pointer to PROCESS_INFORMATION;
end;
end.


Буду очень рад получить какие-либо советы или хотя бы работающий код. Заранее благодарен.


 
ZZ ©   (2002-11-15 16:05) [1]

// pointer to STARTUPINFO
// pointer to PROCESS_INFORMATION

Кто тебе сказал, что это pointer"ы ???

lpStartupInfo: tstartupinfo;
lpProcessInfo: TProcessInformation):

Где ТУТ про это У ТЕБЯ написано??


 
ZZ ©   (2002-11-15 16:10) [2]

На всякий случай скажу понятнее - в описании у тебя 2 последних параметра должны быть указателями, но таковыми не являются - это раз.

tstartupinfo на самом деле должен быть TStartupInfo W (это не важно в данном случае... просто прийми к сведению когда захочешь заполнить поле PChar"ом)


 
Deathless ©   (2002-11-16 10:25) [3]

Не совсем понял... мне что - надо описывать следующим образом:
lpStartupInfo: Pointer;
lpProcessInfo: Pointer


...извиняюсь за необразованность, но никогда раньше не занимался подобными вещами.


 
Deathless ©   (2002-11-16 10:37) [4]

...я сделал вот так:



...

function CreateProcessWithLogonW(lpUserName,
lpDomain,
lpPassword: PWideChar;
dwLogonFlags: dword;
lpApplicationName,
lpCommandLine: PWideChar;
dwCreationFlags: dword;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
lpStartupInfo: Pointer;
lpProcessInfo: Pointer): bool; external("advapi32.dll");

...

FillChar(si^,SizeOf(si^),0);
with si^ do begin
cb := SizeOf(si^);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;

...

createprocessWithLogonW
(PWideChar(user), // pointer to thread security attributes
nil,
PWideChar(password),
1,
nil, // pointer to name of executable module
PWideChar(cmd), // pointer to command line string
NORMAL_PRIORITY_CLASS or
CREATE_NEW_CONSOLE, // creation flags
nil, // pointer to new environment block
PWideChar(path), // pointer to current directory name
si, // pointer to STARTUPINFO
pi); // pointer to PROCESS_INFORMATION;


Но тоже не работает и вылетает с такой же ошибкой(((


 
Ученик ©   (2002-11-16 12:32) [5]

function CreateProcessWithLogonW(
lpUsername : PWChar;
lpDomain : PWChar;
lpPassword : PWChar;
dwLogonFlags : DWord;
lpApplicationName : PWChar;
lpCommandLine : PWChar;
dwCreationFlags : DWord;
lpEnvironment : Pointer;
lpCurrentDirectory : PWChar;
var lpStartupInfo : TStartupInfo;
var lpProcessInfo : TProcessInformation
) : Bool; stdcall; external "AdvApi32.dll";


procedure TForm1.Button5Click(Sender: TObject);
var
StartupInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
begin
FillChar(StartupInfo, SizeOf(StartupInfo), 0);
StartupInfo.cb := SizeOf(StartupInfo);
if CreateProcessWithLogonW("UserName", "DomainName", "Password",
0, "notepad.exe", "", CREATE_DEFAULT_ERROR_MODE, nil, nil,
StartupInfo, ProcessInfo) then begin
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread)
end else
Win32Check(False)
end;


 
ZZ ©   (2002-11-16 12:32) [6]

примерно так (из 1 варианта)
const lpStartupInfo: tstartupinfo;
var lpProcessInfo: TProcessInformation): bool; external "advapi32.dll";


 
Deathless ©   (2002-11-17 07:58) [7]

...огромное всем спасибо, после последних двух замечаний все отлично заработало... теперь осталось подчистить небольшие косячки...

Например почему строка "notepad.exe" запускается без проблем, а "wmplayer.exe" - нет (только при прописке полного пути), хотя при запуске обоих строк через run (который в Пуске) все проходит нормально.... может все дело в наличии двух пунктов -
lpApplicationName : PWChar;
lpCommandLine : PWChar;

Когда каим надо пользоваться?

З.Ы. Еще раз всем СПАСИБО


 
Deathless ©   (2002-11-18 06:50) [8]

Вроде как все заработало... Очень интересным параметром оказался dwLogonFlags - при установке его значения в 2 отпала необходимость в наличии у пользователя прав на локальный вход на рабочую станцию...



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

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-15262
and_1
2002-12-14 06:03
2003.01.06
Проблема с Ping + Net send flood


1-15151
Вованчик
2002-12-23 18:36
2003.01.06
!!!!!!!!!!!!ShellExecute. Запуск ссылки в новом окне !!!!!!!!!!!!


3-14965
VID
2002-12-15 13:32
2003.01.06
FIBDataSet не записывает блоб-поля в файл...


7-15317
LZ
2002-09-29 23:58
2003.01.06
Набор номера по модему..


14-15291
Sergo
2002-12-18 08:18
2003.01.06
Электромагнитная картина мира