Gateway_man Geschrieben 5. August 2012 Geschrieben 5. August 2012 Hallo, ich versuche aktuell einen Process zu starten. Zum test versuche ich es noch garnicht mit einem andereren User Account sondern mit dem Account mit dem ich gerade angemeldet bin. Jedoch bekomme ich immer den Fehler 1314 zurück. Ich habe mich jetzt schon durch sehr viele Seiten gewühlt, jedoch stellen fast alle die selbe Frage und das Ende vom Lied ist das sie zu keiner Problemlösung kommen. Ich hatte gelesen die Meldung wird geworfen wenn irgendwelche Privilegien fehlen. Was ich bereits versucht habe: -Das Token mit DuplicateTokenEx zu duplizieren (ich hatte gelesen das die Notwendigen Privilegien dann automatisch gesetzt werden) ==> Resultat: Selbiger Fehler mit dupliziertem Token. -Dem Token das Notwendige recht selbst zuweisen mit AdjustTokenPrivileges. ==> Resultat: Laut Rückgabewert von AdjustTokenPrivileges hat das geklappt aber ich erhalte immernoch den selben Fehler beim erstellen des Prozesses. Hier mal die Funktion: //Die Funktion wird aktuell mit folgenden Parametern aufgerufen. //username:****** //pwd:****** //domain:"." //executeable:@"C:\Windows\System32\cmd.exe" //parameter: string.Empty public static bool RunAs(string username, string pwd, string domain, string executeable, string parameter) { int lastError = 0; if (string.IsNullOrEmpty(executeable) || !System.IO.File.Exists(executeable)) return false; NativeStructures.PROCESS_INFORMATION pi = new NativeStructures.PROCESS_INFORMATION(); NativeStructures.STARTUPINFO si = new NativeStructures.STARTUPINFO(); System.IntPtr hToken; // Initialize structs si.cb = Marshal.SizeOf(si); // Get the user token if (LogonUser(username, (string.IsNullOrEmpty(domain)) ? (".") : (domain),pwd, (int)NativeStructures.LOGON_TYPE.LOGON32_LOGON_BATCH, (int)NativeStructures.LOGON_PROVIDER.LOGON32_PROVIDER_DEFAULT, out hToken)) { // Create structs //IntPtr dublicatedToken = IntPtr.Zero; //NativeStructures.SECURITY_ATTRIBUTES sAttr = new NativeStructures.SECURITY_ATTRIBUTES(); //if (!DuplicateTokenEx(hToken, 0x02000000, ref sAttr, NativeStructures.SECURITY_IMPERSONATION_LEVEL.SecurityAnonymous, NativeStructures.TOKEN_TYPE.TokenPrimary, out dublicatedToken)) //{ // KERNEL32.CloseHandle(hToken); //} NativeStructures.TOKEN_PRIVILEGES tp = new NativeStructures.TOKEN_PRIVILEGES(); tp.PrivilegeCount = 1; tp.Attributes = NativeStructures.SE_PRIVILEGE_ENABLED; bool btemp = false; btemp = AdjustTokenPrivileges(hToken, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero); NativeStructures.SECURITY_ATTRIBUTES saProcessAttributes = new NativeStructures.SECURITY_ATTRIBUTES(); NativeStructures.SECURITY_ATTRIBUTES saThreadAttributes = new NativeStructures.SECURITY_ATTRIBUTES(); // Now create the process as the user if (!CreateProcessAsUser(hToken, executeable, parameter, ref saProcessAttributes, ref saThreadAttributes, false, (int)NativeStructures.dwCreationFlags.NORMAL_PRIORITY_CLASS , IntPtr.Zero, System.IO.Path.GetDirectoryName(executeable), ref si, out pi)) { lastError = KERNEL32.GetLastWin32Error(); KERNEL32.CloseHandle(hToken); throw new Exception("Failed to CreateProcessAsUser"); } KERNEL32.CloseHandle(hToken); } lastError = KERNEL32.GetLastWin32Error(); return true; } Mit dem Fehler scheinen wohl viele schon bekanntschaft gemacht zu haben. Ich finde sehr viele Posts wie meinen, aber keinen Lösungsweg . Lg Gateway Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.