Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Identification d'un port série USB

4 réponses
Avatar
johann.d
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la plus
portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et surtout
l'identifiant du périphérique (VendorID et ProductID)

Accessoirement, une application peut-elle être notifiée explicitement lors
de l'insertion ou du retrait d'un périphérique USB de ce type ?

Merci de vos pistes,

--
johann.d

4 réponses

Avatar
Christian ASTOR
johann.d wrote:
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la plus
portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et surtout
l'identifiant du périphérique (VendorID et ProductID)



cf sources USBView, MS DDK (SetupDi* & Cie)

Accessoirement, une application peut-elle être notifiée explicitement lors
de l'insertion ou du retrait d'un périphérique USB de ce type ?



RegisterDeviceNotification()
Avatar
johann.d
"Christian ASTOR" a écrit dans le message de
news: 4807b20a$0$21143$
johann.d wrote:
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la
plus portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et
surtout l'identifiant du périphérique (VendorID et ProductID)



cf sources USBView, MS DDK (SetupDi* & Cie)



Bonjour et merci de cette première réponse qui m'a déjà bien avancé. Je
parviens à récupérer la liste des périphériques puis avec
SetupDiGetDeviceRegistryProperty je peux identifier ceux qui m'intéressent.
Il reste pourtant une information que je n'ai pas trouvé, c'est le numéro du
port série virtuel. J'ai bien un SPDRP_FRIENDLYNAME qui me renvoie une
chaîne du type "Port série USB (COM9)", comment puis-je remonter directement
au "COM9" sans avoir à disséquer le friendly name ?


Merci,

--
johann.d
Avatar
Christian ASTOR
johann.d wrote:
"Christian ASTOR" a écrit dans le message de
cf sources USBView, MS DDK (SetupDi* & Cie)




Bonjour et merci de cette première réponse qui m'a déjà bien avancé. Je
parviens à récupérer la liste des périphériques puis avec
SetupDiGetDeviceRegistryProperty je peux identifier ceux qui m'intéressent.
Il reste pourtant une information que je n'ai pas trouvé, c'est le numéro du
port série virtuel. J'ai bien un SPDRP_FRIENDLYNAME qui me renvoie une
chaîne du type "Port série USB (COM9)", comment puis-je remonter directement
au "COM9" sans avoir à disséquer le friendly name ?



Avec SetupDiOpenDevRegKey() & "PortName" =>

// while( SetupDiEnumDeviceInfo ... etc
//
HKEY hKey = SetupDiOpenDevRegKey (hDeviceInfo, &DeviceInfoData,
DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
if (hKey)
{
char sPortName[MAX_PATH];
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(sPortName);
long nRet = RegQueryValueEx(hKey, "PortName", 0, &dwType,
(LPBYTE)sPortName, &dwSize);
...
Avatar
johann.d
"Christian ASTOR" a écrit dans le message de
news: 480fbd03$0$21142$

Avec SetupDiOpenDevRegKey() & "PortName" =>

// while( SetupDiEnumDeviceInfo ... etc
//
HKEY hKey = SetupDiOpenDevRegKey (hDeviceInfo, &DeviceInfoData,
DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
if (hKey)
{
char sPortName[MAX_PATH];
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(sPortName);
long nRet = RegQueryValueEx(hKey, "PortName", 0, &dwType,
(LPBYTE)sPortName, &dwSize);
...



Merci, c'est parfait !

--
johann.d