Benutzer mit den meisten Antworten
Fehler bei CreateProcessAsUser, 1307: Diese Sicherheitskennung kann nicht als Besitzer des Objekts zugeordnet werden

Frage
-
Guten Tag.
Ich stoße aus einem Dienst heraus einen externen Prozess an.
Der Dienst selbst läuft als Local System.
Die Prozesse die gestartet werden, werden unter beliebigen Benutzerkonten gestartet.
Das problem tritt bisher unter Windows XP udn Vista auf(andere noch nciht getestet)
Hier mal der Code:
try LUser:=AUser; LPassword:=APassword; LDomain:=ADomain; LProgram:=AProgram; try FillChar(sil,SizeOf(TSecurityImpersonationLevel),#0); sil := SecurityImpersonation; if LogonUser(PAnsiChar(LUser),PAnsiChar(LDomain),PAnsiChar(LPassword),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,ltoken)then begin if DuplicateTokenEx(ltoken,TOKEN_ALL_ACCESS,nil,sil,TokenPrimary,ltoken2)then begin fillchar(pi,sizeof(TProfileInfo),#0); pi.dwSize:=sizeof(TProfileInfo); pi.lpUserName:=PAnsiChar(LUser); if(LoadUserProfile(ltoken2,pi))then begin if (CreateEnvironmentBlock( lenv, ltoken2, false //false ))then begin FillChar(pri,sizeof(_PROCESS_INFORMATION),#0); ZeroMemory(@si,sizeof(si)); err:=GetlastError; if err<>0 then SNLogger.Log(SysErrorMessage(err),ltBoth); created:= CreateProcessAsUser( ltoken2, nil, PAnsiChar(LProgram), nil, nil, false,//false CREATE_UNICODE_ENVIRONMENT or CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS or CREATE_NO_WINDOW, lenv, nil, si, pri ); if(created = LongBool(0))then SNLogger.Log('Prozess konnte nicht gestartet werden.',ltBoth); //else SNLogger.Log('Prozess erfolgreich gestartet.'+BoolToStr(created),ltBoth); err:=GetlastError; if err<>0 then SNLogger.Log('Prozess konnte nicht gestartet werden. Fehler '+IntToStr(err)+':'+SysErrorMessage(err),ltBoth); if not DestroyEnvironmentBlock(lenv)then snlogger.Log('EnvironmentBlock konnte nicht geschlossen werden'); if not UnloadUserProfile(ltoken,pi.hProfile)then snlogger.Log('UserProfile konnte nicht geschlossen werden'); if not CloseHandle(pri.hProcess)then snlogger.Log('hProcess konnte nicht geschlossen werden'); if not CloseHandle(pri.hThread)then snlogger.Log('hThread konnte nicht geschlossen werden'); if not CloseHandle(ltoken2)then snlogger.Log('ltoken2 konnte nicht geschlossen werden'); if not CloseHandle(ltoken) then snlogger.Log('ltoken konnte nicht geschlossen werden'); //snlogger.log(inttostr(GetLastError)); end else SNLogger.Log('Arbeitsumgebung konnte nicht erstellt werden. '+SysErrorMessage(GetLastError)); end else SNLogger.Log('Benutzerprofil konnte nicht geladen werden. '+SysErrorMessage(GetLastError)); end else SNLogger.Log('Duplicate nicht möglich. '+SysErrorMessage(GetLastError)); end else SNLogger.Log('Login nicht möglich. '+SysErrorMessage(GetLastError),ltBoth); except on e : exception do SNLogger.Log('Fehler beim Starten eines Prozesses:'+e.Message+slinebreak+SysErrorMessage(GetLastError),ltBoth); end; finally snlogger.log('CreateProcess:'+syserrormessage(getlasterror)); end;
Das ist Delphicode. Das Problem ist nun der CreateProcessAsUser Befehl.
Es gibt folgende Möglichkeiten was passiert:
1) CreateProcessAsUser liefert true , der Prozess wird gestartet und es erscheint auch keine Fehlermeldung
2) CreateProcessAsUser liefert true , der Prozess wird gestartet und es erscheint die Fehlermeldung 1307
3) CreateProcessAsUser liefert true , der Prozess wird _nicht_ gestartet und es erscheint die Fehlermeldung 1307
Fehler 1307: Diese Sicherheitskennung kann nicht als Besitzer des Objekts zugeordnet werden
In der momentanen Version des Codes treten nur Möglichkeit 2 und 3 ein.
Ich habe schon jede Menge gegoogelt, aber ich kann nicht rausfinden was genau diesen Fehler verursacht.
Das problem ist eigentlich, dass der Prozess manchmal nicht gestartet wird, was sehr kritisch sit, da es ein Backupprozess ist der automatisiert ein Backup machen soll.
Ich hoffe hier kann mir jemand helfen, da ich in der Vergangenheit schon gute Tipps bekommen habe!Freitag, 6. November 2009 11:56
Antworten
-
Hallo MaWeber,
Schau Dir mal die folgenden Links an. Vielleicht können Sie Dir weiter helfen.
Aufrufen von CreateProcessAsUser() aus einem Service à http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/31bfa13d-982b-4b1a-bff3-2761ade5214f
Problem mit Sicherheitskennung bei CreateProcessAsUser à http://www.delphipraxis.net/topic168017,0,asc,0.html&sid=58d8e1f6ddb292386916911a864cbcce
Grüße,
Robert
- Als Antwort markiert Robert BreitenhoferModerator Samstag, 2. Januar 2010 22:46
Freitag, 4. Dezember 2009 11:20Moderator
Alle Antworten
-
Hallo MaWeber,
Schau Dir mal die folgenden Links an. Vielleicht können Sie Dir weiter helfen.
Aufrufen von CreateProcessAsUser() aus einem Service à http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/31bfa13d-982b-4b1a-bff3-2761ade5214f
Problem mit Sicherheitskennung bei CreateProcessAsUser à http://www.delphipraxis.net/topic168017,0,asc,0.html&sid=58d8e1f6ddb292386916911a864cbcce
Grüße,
Robert
- Als Antwort markiert Robert BreitenhoferModerator Samstag, 2. Januar 2010 22:46
Freitag, 4. Dezember 2009 11:20Moderator