GetUserName und Manifest Ressource für Admin
-
Hallo,
folgendes Problem. Ich habe ein Installationsprogramm, welches ein Manifest eingebunden hat für weitere Systemzugriffe nur als Admin gestartet werden kann.
Wenn ich jetzt also als normaler User eingeloggt bin und das Installationsprogramm starte, bin ich durch das Manifest aufeinmal Admin und dementsprechend liefer GetUserName anstatt des normalen Users Admin zurück.// Benutzername ermitteln und als string zurückgeben std::string TWinSystem::sGetBenutzerName() { // Variablen wchar_t acUserName[10]; DWORD nUserName = sizeof(acUserName); // Code Anfang GetUserName(acUserName, &nUserName); return WChartToString(acUserName); } // Benutzername ermitteln und als UnicodeString zurückgeben UnicodeString TWinSystem::usGetBenutzerName() { // Variablen wchar_t acUserName[10]; DWORD nUserName = sizeof(acUserName); UnicodeString usTmpName; // Code Anfang GetUserName(acUserName, &nUserName); usTmpName = acUserName; return usTmpName; }
Nun die Frage, wie kann ich trotz des Manifests den aktuellen Usernamen erfahren?
-
Stickworte:
- GetShellWindow
- GetWindowThreadProcessId
- OpenProcess
- OpenProcessToken
- GetTokenInformation
- ConvertSidToStringSid
- LookupAccountSidDie Reihenfolge sollte stimmen. K.A. ob's auch einfacher geht.
-
Ok danke,
jetzt aber hänge ich bei OpenProcess fest, keine Ahnung was da los ist aber ich bekomme von LastError die Meldung, ich hätte angeblich einen Falschen Parameter angegeben obwohl ich mich genau an die Maßgaben von Microsoft höchstselbst gehalten habe.// Variablen DWORD dwAccountSize, dwDomainSize; DWORD dwProcID; HWND hShellWnd = GetShellWindow(); HANDLE hProcess; void* lpBuffer; // Code dwProcID = GetWindowThreadProcessId(hShellWnd, NULL); // MSDN-Richtlinie //HANDLE OpenProcess( // DWORD dwDesiredAccess, // access flag // BOOL bInheritHandle, // handle inheritance option // DWORD dwProcessId // process identifier // ); hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcID); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpBuffer, 0, NULL ); MessageBox( NULL, (LPCTSTR)lpBuffer, __T("LastRrror"), MB_OK ); LocalFree( lpBuffer ); return;
-
Guck dir nochmal die Argumente für GetWindowthreadprocessid an.