(Gast)
n/a Beiträge
|
Re: Rückgabewert von CreateProcessWithLogonW und GetLastErro
22. Jan 2005, 14:49
Feucht auch noch. Tja, keine Ahnung. Ich habe nur Delphi 5 und musste den ganzen Plunder daher selbst deklarieren, aber ich sehe die gewünschte Fehlermeldung, weil "xxx" natürlich nicht mein Admin-Kennwort ist. Hier der Code (die "DisplayErrorMsg"-Prozedur müsstest du kennen)
Delphi-Quellcode:
type
_STARTUPINFOW = record
cb: DWORD;
lpReserved: Pointer;
lpDesktop: Pointer;
lpTitle: Pointer;
dwX: DWORD;
dwY: DWORD;
dwXSize: DWORD;
dwYSize: DWORD;
dwXCountChars: DWORD;
dwYCountChars: DWORD;
dwFillAttribute: DWORD;
dwFlags: DWORD;
wShowWindow: Word;
cbReserved2: Word;
lpReserved2: PByte;
hStdInput: THandle;
hStdOutput: THandle;
hStdError: THandle;
end;
TStartUpInfoW = _STARTUPINFOW;
PStartUpInfoW = ^_STARTUPINFOW;
const
LOGON_WITH_PROFILE = $00000001;
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: PWideChar;
dwLogonFlags: dword; lpApplicationName, lpCommandLine: PWideChar;
dwCreationFlags: dword; lpEnvironment: pointer;
lpCurrentDirectory: PWideChar; lpStartupInfo: PStartUpInfoW;
lpProcessInfo: PProcessInformation): boolean; stdcall;
external 'advapi32.dll';
procedure DisplayErrorMsg(wnd: HWND);
var
buf : array[0..MAX_PATH]of char;
begin
ZeroMemory (@buf,sizeof(buf));
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,GetLastError,0,buf,
sizeof(buf),nil);
MessageBox (wnd,buf,nil,MB_OK or MB_ICONSTOP);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
si : TStartupInfoW;
pif : TProcessInformation;
res : boolean;
begin
ZeroMemory(@si,sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
res := CreateProcessWithLogonW('Administrator',nil,
'xxx',LOGON_WITH_PROFILE,nil,
'rollup.exe',
CREATE_DEFAULT_ERROR_MODE,nil,nil,@si,@pif);
if(not res) then DisplayErrorMsg(self.Handle);
end;
Das Test- OS war XP SP2.
|
|
Zitat
|