2009-04-09 7 views
9

Mam kilka napędów USB podłączonych do komputera WinXP SP3 i muszę je osobno od siebie odróżnić - Muszę znaleźć literę napędu odpowiadającą któremu urządzeniu (w tym przypadku jedno urządzenie ~ jeden wolumin). Mogę dostać swoje identyfikatory głośności i litery dysków przy użyciu mountvol, szukając czegoś takiego:Znajdź napęd odpowiadający urządzeniu pamięci masowej USB w WinXP

C:\WINDOWS\> mountvol 
\\?\Volume{bdb681b2-1ddf-11dd-bf71-806d6172696f}\ 
    C:\ 

\\?\Volume{6a8784f8-7406-11dd-a8c3-001e8c829b67}\ 
    A:\ 

również używając devcon lub Menedżera urządzeń, widzę identyfikatorów urządzenia:

C:\WINDOWS\> devcon resources *STOR* 
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM 
    Name: Generic volume 
STORAGE\VOLUME\1&30A96598&0&SIGNATURED84ED84EOFFSET7E00LENGTH2543150400 
    Name: Generic volume 
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER2.0&REV_1.00\0803240752536&0 
    Name: Kingston DataTraveler2.0 USB Device 

Jednak ja nie znaleźli sposób, aby połączyć identyfikator urządzenia i identyfikator objętość/list, jak okna „Bezpieczne usuwanie sprzętu” robi (a więc zakładam, że to możliwe):

Generic volume - A: http://stuff.piskvor.org/safely_remove.png

Jak widać, są to te same urządzenia, które widzę w devcon i ten sam wolumen, który widzi mountvol; ale do tej pory nie znalazłem powiązania między nimi.

Znalazłem niektóre relatedquestions, ale te wydają się używać podejścia "cokolwiek znajdziesz najpierw to urządzenie USB", co nie jest bardzo przydatne w moim przypadku, ponieważ będzie kilka podobnych urządzeń (ten sam sprzedawca, często ten sam rodzaj produktu).


Edit:

@MSalters "odpowiedź wygląda obiecująco: Na XP HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices ma REG_BINARY wartości \DosDevices\x: (gdzie x jest [A-Z]); komentarz jest (UTF-16) nazwę odpowiedniego urządzenia (np
\DosDevices\A: = "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\", co odpowiada
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM widać powyżej na liście urządzeń).

Zobaczymy, czy to jest do zrobienia.

+0

Czy kiedykolwiek znalazłeś sposób, aby to zrobić? Próbuję również określić zamontowany wolumin dla urządzenia pamięci masowej USB. Dzięki. –

+0

@Stephen Nutt: Nie, niezupełnie; było to zbyt skomplikowane - spędziłem zbyt wiele czasu na wkopywaniu go w porównaniu z ogólnym zadaniem; używanie nieudokumentowanych interfejsów API może być zbyt niechlujne. (Dodatkowo, zmiany w ogólnym zadaniu dyskutowały o potrzebie tego dla mnie) – Piskvor

+0

@Stephen Nutt: Mimo, że porzuciłem ten wysiłek w systemie Windows, znalazłem sposób na zrobienie tego w Linuksie, jeśli jesteś zainteresowany: http://stackoverflow.com/questions/3881449/find-which-drive-correspond-to-which-usb-mass-storage-device-in-linux – Piskvor

Odpowiedz

5

To nietrywialne pytanie, nie ma oficjalnego API dla niego, o ile mogę powiedzieć, więc potrzebujesz nieudokumentowanego API: rejestr HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices zawiera wpisy dla liter napędowych i identyfikatorów woluminu. na rzeczywistych danych, okaże się, że identyfikuje napęd.Spójrz na dane binarne jako ciąg Unicode. Wskaże Ci to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\. Jednak XP i Vista różni się dokładnie tym, do czego są tam przywoływane podklucze i jak. (Vista jest łatwiejsza, więc spróbuj najpierw).

+1

To jest niepoprawne. Istnieje oficjalne API do tego. Robi się to za pomocą IOCTL_STORAGE_GET_DEVICE_NUMBER. Jest to uczciwa próbka: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx – Ilya

2

Istnieje oficjalny interfejs API do wykonania tej czynności. Zobacz tę próbkę: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx

Zasada jest taka, że ​​każdemu woluminowi pamięci w systemie Windows przypisywany jest numer globalny. Najpierw pytasz dysk o jego numer (otwierając "\ X:" i wysyłając żądanie IOCTL_STORAGE_GET_DEVICE_NUMBER). Po drugie, przechodzisz przez wszystkie urządzenia dyskowe i pytasz każdego o jego numer (otwierając go, przez inną ścieżkę, więc nie możesz po prostu porównywać ciągów znaków).

Po znalezieniu urządzenia dyskowego noszącego ten sam numer, na którym spytałeś dysku, wiesz, że masz zwycięzcę.

+0

Hmmm, ten link wygląda interesująco. Czy mógłbyś edytować krótkie streszczenie w swojej odpowiedzi? Dzięki. – Piskvor