error: nicht aufgelöstes Token



  • Hi
    Ich steige von vb.net auf c++ um.
    Habe ein Programm in c++ (Konsolenanwendung) geschrieben und wollte es jetzt
    mit Windows Fensterchen zur besseren Bedienbarkeit erweitern. Weil ich das aber
    nicht geschafft habe, erstellte ich ein neues Windows Form Projekt und wollte das
    Programm so neu schreiben (Copy&Paste). Es funktioniert schon mal recht gut,
    bis ich diesen Codeblock übernommen habe:

    //Erhalte debug Privilegien
    int AddDebugPrivileges()
    {
    	HANDLE hToken;
    	TOKEN_PRIVILEGES tp;
    
    	OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, &hToken);
    
    	if( !LookupPrivilegeValueA( NULL, "SeDebugPrivilege", &tp.Privileges[0].Luid ) )
    	{
    		CloseHandle(hToken);
    		return 1;
    	}
    
    	tp.PrivilegeCount = 1;
    	tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    
    	if( !AdjustTokenPrivileges( hToken, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0) )
    	{
    		CloseHandle(hToken);
    		return 1;
    	}
    
    	CloseHandle(hToken);
    	return 0;
    }
    

    Folgende Errors werden ausgegeben:

    1>------ Erstellen gestartet: Projekt: SPHINX, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>SPHINX.cpp
    1>Verknüpfen...
    1>SPHINX.obj : error LNK2028: Nicht aufgelöstes Token (0A00000B) ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)", auf das in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)" verwiesen wird.
    1>SPHINX.obj : error LNK2028: Nicht aufgelöstes Token (0A00000D) ""extern "C" int __stdcall LookupPrivilegeValueA(char const *,char const *,struct _LUID *)" (?LookupPrivilegeValueA@@$$J212YGHPBD0PAU_LUID@@@Z)", auf das in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)" verwiesen wird.
    1>SPHINX.obj : error LNK2028: Nicht aufgelöstes Token (0A00000F) ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)", auf das in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)" verwiesen wird.
    1>SPHINX.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall AdjustTokenPrivileges(void *,int,struct _TOKEN_PRIVILEGES *,unsigned long,struct _TOKEN_PRIVILEGES *,unsigned long *)" (?AdjustTokenPrivileges@@$$J224YGHPAXHPAU_TOKEN_PRIVILEGES@@K1PAK@Z)" in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)".
    1>SPHINX.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall LookupPrivilegeValueA(char const *,char const *,struct _LUID *)" (?LookupPrivilegeValueA@@$$J212YGHPBD0PAU_LUID@@@Z)" in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)".
    1>SPHINX.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall OpenProcessToken(void *,unsigned long,void * *)" (?OpenProcessToken@@$$J212YGHPAXKPAPAX@Z)" in Funktion ""int __clrcall AddDebugPrivileges(void)" (?AddDebugPrivileges@@$$FYMHXZ)".
    1>C:\Users\\Documents\Visual Studio 2008\Projects\SPHINX\Debug\SPHINX.exe : fatal error LNK1120: 6 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Users\
    \Documents\Visual Studio 2008\Projects\SPHINX\SPHINX\Debug\BuildLog.htm" gespeichert.
    1>SPHINX - 7 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Ich versteh das nicht, weil es läuft ja im anderen Konsolenprogramm. Die Funktion wird noch nicht mal aufgerufen!
    Und genau dieser Block verursacht die Fehler.
    Habe auch die gleichen .h's (stand-art .h und windows.h) inkludiert.

    Hach, in vb.net war das Leben noch einfach ^^

    In c++ hab ich öfters solche Probleme, dass der Compiler komische Fehlermeldungen
    ausgibt.
    Benutze übrigens Visual C++ Express Edition 2008 mit SP1.

    Hoffentlich kann mir jemand helfen.
    mfg
    vampir26



  • Es sind ja alles Linkerfehler, und er kann mehrere Variablen von dir nicht auflösen.
    Du solltest nochmal die korrekte Einbindung aller Header Dateien überprüfen!



  • Header scheinen alle da zu sein, sonst würde er beim Übersetzen ja schon meckern, dass er die Funktionen nicht kennt.

    Dem Linker fehlt die Bibliothek, in der AdjustTokenPrivileges usw. enthalten sind. Die musst Du in den Projekteinstellungen angeben.



  • Hört sich sinnvoll an 🙄



  • Danke für die Antworten. Ich denke wir sind auf der richtigen Spur 🕶

    Hab herausgefunden dass die Funktion in der Advapi32.lib zu finden sein müsste.
    Das komische ist ja, dass die Verweise und Inkludierungen in beiden Projekten (glaub ich) identisch sind.

    Aber ich finde die Advapi32.lib nicht. Muss ich die erst downloaden?
    Advapi32.dll kann ich nicht hinzufügen, dann heisste es "konnte nicht hinzugefügt werden, da keine .NET-Assembly oder ActiveX-Steuerelement".
    Aber wenn ich die lib erst downloaden muss, warum funktionierts dann im Konsolenprogramm?

    Was sagt ihr dazu? 🙄



  • Wahrscheinlich haperts an gewissen Includepaths..

    Schau mal in Projekt->Projekteigenschaften->Konfigurationseigenschaften->C/C++->Allgemein-> Zusätzliche Includeverzeichnisse
    und vergleich das.

    und:
    Extras -> Optionen -> Projekte und Projektmappen -> Verzeichnisse anzeigen für:
    und dann da bei den Bibliotheken vergleichen.


Anmelden zum Antworten