Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - MacAddress USB Windows XP
Forum - C# / VB.NET - MacAddress USB Windows XP

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 9:41
Sabato, 02/01/2010
Cercavo di ottenere il mac address di una penna usb collegata al pc.
Usando c#, avevo intenzione di usare WMI con la Win32_DiskDrive.
Cito però da msdn:

SerialNumber
Data type: string
Access type: Read-only

Number allocated by the manufacturer to identify the physical media.

Example: WD-WM3493798728

Windows Server 2003, Windows XP, Windows 2000, and Windows NT 4.0:  This property is not available.

quindi cosa posso usare per ottenere il mac address su XP?


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5620
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:41
Domenica, 03/01/2010
Il MAC address è proprio di una interfaccia di rete ...

Di cosa parli ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 15:38
Domenica, 03/01/2010
no, ogni dispositivo ha il mac-address. E' semplicemente la sigla univoca del dispositivo assegnatagli dal produttore


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5620
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:14
Domenica, 03/01/2010
Ti confondi con il "serial number" del dispositivo ... il MAC (Media Access Control) address (l'indirizzo fisico), è proprio delle interfacce di rete.

Il Serial Number USB, sebbene non sia "obbligatorio", se implementato è unico.

Penso che l'unico modo per alcuni sistemi di rilevarlo, sia a livello di device driver.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 18:10
Domenica, 10/01/2010

chiamando opportune api puoi arrivare all'id del dispositivo.
questo codice l'ho scritto in C++, per farlo girare in .net basta usare opportunamente pinvoke:

Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. DWORD GetCurrentDriveSerial() {
  8.  
  9.         char pBuff[16];
  10.         DWORD dwSerial;
  11.  
  12.         memset(pBuff, 0, 16);
  13.  
  14.         GetFullPathName("\\", 16, pBuff, NULL);
  15.         GetVolumeInformation(NULL, NULL, 64, &dwSerial, NULL, NULL, NULL, 0);
  16.  
  17.         return dwSerial;
  18.  
  19. }
  20.  
  21. BOOL IsCurrentDriveRemovable() {
  22.  
  23.         char pBuff[16];
  24.  
  25.         memset(pBuff, 0, 16);
  26.  
  27.         GetFullPathName("\\", 16, pBuff, NULL);
  28.  
  29.         return GetDriveType(pBuff) == DRIVE_REMOVABLE;
  30.  
  31. }
  32.  
  33.  
  34. int main() {
  35.  
  36.  
  37.         printf("%X\n", GetCurrentDriveSerial());
  38.         printf("%s\n", IsCurrentDriveRemovable() ? "rimuovibile" : "non rimuovibile");
  39.  
  40.         system("PAUSE");
  41.  
  42.         return 0;
  43.  
  44.         char pBuff2[64];
  45.         char pBuff[64];
  46.         char pFS[16];
  47.  
  48.         memset(pBuff2, 0, 64);
  49.         memset(pBuff, 0, 64);
  50.         memset(pFS, 0, 16);
  51.  
  52.         GetFullPathName("\\", 64, pBuff2, NULL);
  53.  
  54.         DWORD dwSerial;
  55.  
  56.         GetVolumeInformation(NULL, pBuff, 64, &dwSerial, NULL, NULL, pFS, 16);
  57.  
  58.         printf("Current Drive: %s\nVolume: %s\nSerial: %X\nFileSystem: %s\n\n", pBuff2, pBuff, dwSerial, pFS);
  59.  
  60.         int iRes = GetDriveType(pBuff2);
  61.  
  62.         switch(iRes) {
  63.  
  64.                 case DRIVE_UNKNOWN:
  65.  
  66.                         cout << "Drive Unknown" << endl;
  67.  
  68.                         break;
  69.  
  70.                 case DRIVE_NO_ROOT_DIR:
  71.  
  72.                         cout << "The root path is invalid; for example, there is no volume is mounted at the path." << endl;
  73.  
  74.                         break;
  75.  
  76.                 case DRIVE_REMOVABLE:
  77.  
  78.                         cout << "The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader." << endl;
  79.  
  80.                         break;
  81.  
  82.                 case DRIVE_FIXED:
  83.  
  84.                         cout << "The drive has fixed media; for example, a hard drive or flash drive." << endl;
  85.  
  86.                         break;
  87.  
  88.                 case DRIVE_REMOTE:
  89.  
  90.                         cout << "The drive is a remote (network) drive." << endl;
  91.  
  92.                         break;
  93.  
  94.                 case DRIVE_CDROM:
  95.  
  96.                         cout << "The drive is a CD-ROM drive." << endl;
  97.  
  98.                         break;
  99.  
  100.                 case DRIVE_RAMDISK:
  101.  
  102.                         cout << "The drive is a RAM disk." << endl;
  103.  
  104.                         break;
  105.         }
  106.  
  107.         system("PAUSE");
  108.  
  109.         return 0;
  110.  
  111. }



:)


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5620
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:22
Domenica, 10/01/2010
Testo quotato

Postato originariamente da HeDo:

  
chiamando opportune api puoi arrivare all'id del dispositivo.



Con la API GetVolumeInformation si ottiene solamente il seriale inserito dal sistema operativo all'atto della formattazione (valore casuale che si puo' modificare come si vuole e che non da' nessuna certezza di univocità).

Quello di cui parlavo è il seriale hardware assegnato dal produttore che, se disponibile per il device interessato, si ottiene tramite WMI.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 19:22
Domenica, 10/01/2010
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da HeDo:

  
chiamando opportune api puoi arrivare all'id del dispositivo.



Con la API GetVolumeInformation si ottiene solamente il seriale inserito dal sistema operativo all'atto della formattazione (valore casuale che si puo' modificare come si vuole e che non da' nessuna certezza di univocità).

Quello di cui parlavo è il seriale hardware assegnato dal produttore che, se disponibile per il device interessato, si ottiene tramite WMI.



ok questo non lo sapevo, cmq leggendo sull'msdn sembra che l'unico modo di ottenerlo è proprio attraverso WMI: http://msdn.microsoft.com/en-us/library/aa394346%28VS.85%2 ...

usando la classe Win32_PhysicalMedia


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 19:37
Domenica, 10/01/2010
ok, grazie a tutti, adesso vedrò di documentarmi! :k:


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote