Einzelnen Beitrag anzeigen

Benutzerbild von kuba
kuba

Registriert seit: 26. Mai 2006
Ort: Arnsberg
588 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Angemeldeten Benutzer aus Dienst ermitteln - Windows 7

  Alt 7. Sep 2009, 17:48
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
Stefan Kubatzki
E=mc2
  Mit Zitat antworten Zitat