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
    - LookupAccountSid

    Die 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.


Anmelden zum Antworten