Komfortabler Dateimanager mit vielen Funktionen

K32GetModuleFileNameExW wird nicht gefunden

By Sven on 30.07.2010 - 16:05 in Windows SDK

Nach der Umstellung vom Windows SDK für Vista auf das von Windows 7 zeigte das Installationsprogramm von SpeedCommander unter Windows XP und Vista beim Start plötzlich folgende Meldung an:

---------------------------
setup.exe - Einsprungpunkt nicht gefunden
---------------------------
Der Prozedureinsprungpunkt "K32GetModuleFileNameExW" wurde in der DLL "KERNEL32.dll" nicht gefunden.
---------------------------
OK
---------------------------

Der Grund dafür ist, dass mit Windows 7 alle Funktionen der PSAPI.DLL in den Kernel gewandert sind. Wenn man nun für Windows 7 kompiliert, dann werden alle Funktionsnamen auf die entsprechenden Kernelfunktionen gemappt. Die Implementierung findet man in der psapi.h:

//
// Give teams a choice of using a downlevel version of psapi.h for an OS versions.
// Teams can set C_DEFINES=$(C_DEFINES) -DPSAPI_VERSION=1 for downlevel psapi
// on windows 7 and higher.  We found that test code needs this capability.
//
#ifndef PSAPI_VERSION
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define PSAPI_VERSION 2
#else
#define PSAPI_VERSION 1
#endif
#endif

#if (PSAPI_VERSION > 1)
#define EnumProcesses               K32EnumProcesses
#define EnumProcessModules          K32EnumProcessModules
#define EnumProcessModulesEx        K32EnumProcessModulesEx
#define GetModuleBaseNameA          K32GetModuleBaseNameA
#define GetModuleBaseNameW          K32GetModuleBaseNameW
#define GetModuleFileNameExA        K32GetModuleFileNameExA
#define GetModuleFileNameExW        K32GetModuleFileNameExW
......
#endif

Die Kernelfunktionen existieren aber nur ab Windows 7. Auf älteren Systemen können sie beim Programmstart nicht aufgelöst werden und es erfolgt eine Fehlermeldung.

Zur Abhilfe definiert man einfach vor dem Einbinden der psapi.h den entsprechenden Kompatibilitätsschalter:

#define PSAPI_VERSION		1

Nun werden die Funktionen nicht mehr gemappt und wie bisher gewohnt in der PSAPI.DLL gesucht.

Es gibt 2 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Wieso finde ich das hier erst jetzt? Wirklich sehr gut strukturiert und informativ 🙂

  2. Sven sagt:

    Dein Kommentar blieb leider im Spamfilter hängen. Danke für das Lob! 🙂

Top