В DllMain передается hinstDLL. Передаем его первым параметром в GetModuleFileName(hModule, lpFilename, nSize) - и все готово
Можно вообще без API. При помощи директории экспорта. Там поле Name имеется. Находишь базу модуля, затем адрес директории экспорта, а там, в поле Name, есть RVA имени модуля (очень часто оно совпадает с именем файла).
HMODULE GetCurrentModule() { MEMORY_BASIC_INFORMATION mbi; static int dummy; VirtualQuery( &dummy, &mbi, sizeof(mbi) ); return reinterpret_cast<HMODULE>(mbi.AllocationBase); } string OurFileName() { string tmp; tmp.resize(2000); int i = GetModuleFileName(GetCurrentModule(),(char *)tmp.c_str(),2000); tmp.resize(i); return tmp; }