Если вы используете классический мультимедийный интерфейс Windows, вы, вероятно, не сможете обойти ограничение MAXPNAMELEN, поскольку оно скомпилировано в самой Windows.
Однако вы можете получить полное имя устройства, если вместо этого будете использовать DirectSound. Следующий код не проверен, но я думаю, что он должен работать.
BOOL CALLBACK EnumCallback(LPGUID guid, LPCSTR descr, LPCSTR modname, LPVOID ctx)
{
std::vector<std::string> *names = (std::vector<std::string>*)ctx;
names->push_back(std::string(descr));
return TRUE;
}
int main()
{
std::vector<std::string> names;
if (!FAILED(DirectSoundEnumerate(&EnumCallback, &names)))
{
// do stuff
}
}