CreateProcessAsUser error 1314

Will ich schaffen, einen Prozess unter einem anderen Benutzer. Also ich benutze LogonUser und CreateProcessAsUser. Aber mein problem ist, dass CreatePtocessAsUser gibt immer den Fehlercode 1314, was bedeutet, "Eine erforderliche Privileg ist nicht gehalten, die durch den AUFTRAGGEBER". Also meine Frage ist, was mache ich falsch? Oder wie kann ich die Privilegien, um den Griff? (Ich denke, der Griff sollte über die Rechte, oder bin ich falsch?) Sorry für meine Deutsch Fehler, aber meine Englisch-Kenntnisse nicht die besten 🙂

Plesase helfen, wenn jemand weiß, wie richtig meine Anwendung.

Dies ein Teil von meinem code.

STARTUPINFO StartInfo;
PROCESS_INFORMATION ProcInfo;
TOKEN_PRIVILEGES tp;
memset(&ProcInfo, 0, sizeof(ProcInfo));
memset(&StartInfo, 0 , sizeof(StartInfo)); 
StartInfo.cb = sizeof(StartInfo); 
HANDLE handle = NULL;

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ALL_ACCESS, &handle)) printf("\nOpenProcessError");

if (!LookupPrivilegeValue(NULL,SE_TCB_NAME,
//SE_TCB_NAME,
&tp.Privileges[0].Luid)) {
printf("\nLookupPriv error");
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes =
SE_PRIVILEGE_ENABLED;//SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(handle, FALSE, &tp, 0, NULL, 0)) {
printf("\nAdjustToken error");
}

i = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &handle);
printf("\nLogonUser return  : %d",i);
i = GetLastError();
printf("\nLogonUser getlast : %d",i);
if (! ImpersonateLoggedOnUser(handle) ) printf("\nImpLoggedOnUser!");

i = CreateProcessAsUser(handle, "c:\\windows\\system32\\notepad.exe",NULL, NULL, NULL, true, 
CREATE_UNICODE_ENVIRONMENT |NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL, 
&StartInfo, &ProcInfo);    
printf("\nCreateProcessAsUser return  : %d",i);
i = GetLastError();
printf("\nCreateProcessAsUser getlast : %d",i);

CloseHandle(handle); 
CloseHandle(ProcInfo.hProcess); 
CloseHandle(ProcInfo.hThread); 

Vielen Dank im Voraus!

  • Sie sind glücklich, dass Sie sogar wissen, die Fehler-Nummer. Der korrekte Weg, rufen Sie GetLastError ist, rufen Sie sofort nach dem Aufruf einer API, ob die API fehlschlug. Wenn Sie rufen, alles andere dazwischen (z.B. printf), dann GetLastError wird in der Regel geben Sie einem später Fehler aus, anstatt den Fehler, den Sie haben wollten.
  • Ja, du hast Recht, und ich weiß es auch, aber ich habe versucht, so viele Möglichkeiten, um dieses problem zu lösen, und ich habe vergessen zu löschen printf. Mein Fehler 🙁
  • ERROR_PRIVILEGE_NOT_HELD nur für den Fall, dass jemand sucht für die Fehler, die Namen und nicht 1314.
InformationsquelleAutor kampi | 2009-09-25
Schreibe einen Kommentar