sicher, Name des fehlerhaften Moduls: KERNELBASE.dll
anscheinend fehlt der Aufruf der Funktion in der
DLL, oder sind meine
Jedi's vielleicht doch zu alt ?
Habe erst seit ca. 2 Monaten Vista drauf und Teste meinen Code jetzt auch mit der Windows 7 Testversion unter Virtual Box...
Bin schon den halben Tag am googeln was Systemfehler 1067 bedeutet, jetzt weiss ich jedoch dass es an der GetUsername Routine liegt ...
Also, ich hätt schon ne Idee wie es "ordentlich" funktionieren würde. Leider hab ich nicht so den Plan ...
Vielleicht kann mir jemand erklären wie man folgenden Codeschnipsel ändern muss um eine Funktion statt ein Programm aufzurufen.
Kann eigentlich nicht so schwierig sein, komme aber leider nicht selbst drauf ...
Delphi-Quellcode:
try
CmdLine := Format('
"%s%s" %s',[IncludeTrailingPathDelimiter(PW1),PW2,PW3]);
FillChar(SI, SizeOf(SI), #0);
FillChar(PI, SizeOf(PI), #0);
SI.cb := SizeOf(SI);
SI.lpDesktop := PChar('
WinSta0\Default');
SI.dwFlags := STARTF_USESHOWWINDOW;
SI.wShowWindow := SW_SHOWDEFAULT;
ProcCreated := CreateProcessAsUser(
hUserToken,
nil,
PChar(CmdLine),
// pointer to command line string HIER MÖCHTE ICH GERN EINE FUNKTION AUFRUFEN !!!
nil,
// pointer to process security attributes
nil,
// pointer to thread security attributes
True,
// handle inheritance
0,
// creation flags
nil,
// pointer to new environment block
nil,
// pointer to current directory name
SI,
// STARTUPINFO
PI);
// PROCESS_INFORMATION
if ProcCreated
then
begin
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end
else
ShowMessage('
Error ' + SysErrorMessage(GetLastError));
finally
CloseHandle(hUserToken);
end;
diese Funktion möchte ich gern mit o.g. Routine aufrufen:
Delphi-Quellcode:
function GetUserName : string;
var
Token : TJwSecurityToken;
begin
Token := TJwSecurityToken.CreateTokenEffective(TOKEN_READ);
try
Result := Token.TokenOwner.AccountName[''];
finally
Token.Free;
end;
end;
Die crascht jedenfalls nicht, funktioniert aber nur wenn der angemeldete Benutzer diese ausführt ...
kuba