//***************************************************************************************
// OpenCommDevice : tente d'ouvrir un port afin de récupérer son handle.
// entrée : lpszName : nom du port à ouvrir.
// retour : handle du port s'il a pu être ouvert, NULL sinon.
//***************************************************************************************
HANDLE OpenCommDevice(LPCTSTR lpszName)
{
// tentative d'ouverture (si échec, on tente l'accès direct en insérant "
\\.\" au début du nom)
HANDLE hComm = CreateFile(lpszName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
if(hComm == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND)
{
UINT nLength = strlen(lpszName);
LPTSTR lpszAltName = new char[nLength+5];
strcpy(lpszAltName, nLength+5, _T("
\\\\.\\"));
strcpy(lpszAltName+4, nLength+1, lpszName);
hComm = CreateFile(lpszAltName, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
delete[] lpszAltName;
}
return hComm;
}
//***************************************************************************************
// HasHardware : vérifie si un port est présent sur l'ordinateur.
// entrée : lpszName : nom du port à vérifier.
// retour : vrai si le port existe, faux sinon.
//***************************************************************************************
BOOL HasHardware(LPCTSTR lpszName)
{
// tentative d'ouverture
HANDLE hComm = OpenCommDevice(lpszName);
if(hComm == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND)
return FALSE;
else
{
// on ferme le port si on a réussi à l'ouvrir
if(hComm != INVALID_HANDLE_VALUE)
CloseHandle(hComm);
return TRUE;
}
}