Programm unter Adminkontext ausführen
-
Hi,
2 Fragen:
1.) wie kann ich ich einem Programm feststellen, ob der angemeldete benutzer lok. Adminrechte besitzt
2.) wenn nicht .. wie kann ich ihm erlauben das Programm unter einer Adminkennung auszuführen (ohne system("runas ... ..."))viele Grüße
-
1. man kann eine funktion aufrufen, die nur admins aufrufen dürfen
--> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openscmanager.asp
2. admin einloggen usw. guckst du: http://codeproject.com/system/RunUser.asp
-
#include <iostream> #include <windows.h> #include <conio.h> #include <Accctrl.h> #include <Aclapi.h> BOOL IsAdmin(PBOOL pbresult) { DWORD dwbufsize = 0; BOOL bSuccess = FALSE; PTOKEN_GROUPS grouplist = NULL; HANDLE hAccessToken = NULL; PSID pSID = NULL; *pbresult = FALSE; SID_IDENTIFIER_AUTHORITY auth = SECURITY_NT_AUTHORITY; //Prozesstoken öffnen if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken)) { goto exit; } //Gruppenliste des Tokens abrufen if (!GetTokenInformation(hAccessToken,TokenGroups,grouplist,0,&dwbufsize)) { if (GetLastError()!=ERROR_INSUFFICIENT_BUFFER) { goto exit; } grouplist = (PTOKEN_GROUPS) new CHAR[dwbufsize]; if (!GetTokenInformation(hAccessToken,TokenGroups,grouplist,dwbufsize,&dwbufsize)) { goto exit; } } else { goto exit; } //SID erzeugen, die die gewünschte Gruppe repräsentiert if (!AllocateAndInitializeSid(&auth,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0,0,0,0,0,0,&pSID)) { goto exit; } //Prüfen, ob die gewünschte Gruppe in der Gruppenliste des Tokens enthalten ist for (UINT i=0;i<grouplist->GroupCount;i++) { if (EqualSid(grouplist->Groups[i].Sid,pSID)) { *pbresult = TRUE; bSuccess = TRUE; goto exit; } } exit: if (grouplist) {delete[] grouplist;} if (hAccessToken) {CloseHandle(hAccessToken);} if (pSID) {FreeSid(pSID);} #if defined(_DEBUG) && defined(_CONSOLE) if (!bSuccess) {std::cout << "Fehler beim Aufruf von " __FUNCTION__ " - Fehlercode:" << GetLastError();} #endif return bSuccess; }
Zu der Sache mit der Erlangung von Administratorrechten musst du den Benutzer meines Wissens nach zuerst mit LogonUser anmelden und kannst dann das SecurityToken dieses Benutzers für CreateProcessAsUser nutzen. Die genaue Vorgehensweise, das bei einem laufenden Prozess zu machen, ist mir nicht bekannt.