void SeriallPort()
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
double dFound = false;
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES );
if (hDevInfo == INVALID_HANDLE_VALUE)
{
printf("Error %d.\n", GetLastError());
}
// Enumerate through all devices in Set.
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i, &DeviceInfoData);i++)
{
if(!dFound)
{
DWORD DataT;
DWORD sDataT;
LPTSTR buffer = NULL;
LPTSTR wbuffer = NULL;
DWORD buffersize = 0;
DWORD wbuffersize = 0;
std::string sBuffer;
//
// Call function with null to begin with,
// then use the returned buffer size (doubled)
// to Alloc the buffer. Keep calling until
// success or an unknown failure.
//
// Double the returned buffersize to correct
// for underlying legacy CM functions that
// return an incorrect buffersize value on
// DBCS/MBCS systems.
//
while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, &DataT, (PBYTE)buffer, buffersize, &buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
buffer = (char*)LocalAlloc(LPTR,buffersize * 2);
}
else
{
printf("Error %d.\n", GetLastError());
}
}
sBuffer = buffer;
if(sBuffer == "DeviceName")
{
while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, &sDataT, (PBYTE)wbuffer, wbuffersize, &wbuffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (wbuffer) LocalFree(wbuffer);
// Double the size to avoid problems on
// W2k MBCS systems per KB 888609.
wbuffer = (char*)LocalAlloc(LPTR,wbuffersize * 2);
}
else
{
printf("Error %d.\n", GetLastError());
}
}
// Extract the seriell portname
BufSave = wbuffer;
int first, last;
first = BufSave.find("(");
BufSave.erase(0, first+1);
last = BufSave.find(")");
BufSave.erase(last, 1);
printf("Result:[%s]:[%s]\n",buffer,BufSave.c_str());
dFound = true;
}
if (buffer) LocalFree(buffer);
if (wbuffer) LocalFree(wbuffer);
}
}
if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS )
{
printf("Error %d.\n", GetLastError());
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
}