2009-04-09 15 views
9

içinde hangi USB yığın depolama aygıtına karşılık geldiğini buldum Bir WinXP SP3 bilgisayarına bağlı birkaç USB sürücüm var ve bunları programlı olarak anlatmam gerekiyor - Hangi sürücü harfinin hangi aygıta karşılık geldiğini bulmam gerekiyor (bu durumda, bir cihaz ~ bir hacim). Böyle bir şey bakarak onların Hacim kimliklerini ve sürücü harfleri mountvol kullanarak alabilirsiniz: Ben, ancakHangi sürücünün WinXP

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 

: Ayrıca

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

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

devcon veya Aygıt Yöneticisi kullanarak, Cihaz kimliklerini görebilirsiniz "donanımı güvenle kaldır" iletişim gibi cihaz kimliğini ve cilt kimliği/mektup, bağlamak için bir yol bulmuş değil does (dolayısıyla bunun mümkün olduğunu varsayalım):

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

Gördüğünüz gibi, bunlar devcon'da ve mountvol'ün gördüğü aynı hacimde gördüğüm aygıtlardır; ama şu ana kadar aralarındaki bağı bulamadım.

Bazı relatedquestions'u buldum, ancak benzerleri birkaç benzer aygıt olacağı için benim durumumda pek yararlı olmayan "USB aygıtınız hangisi bulunuyorsa onu seçin" yaklaşımını kullanıyor gibi görünüyor (aynı satıcı, genellikle aynı ürün tipi) bağlı.


Düzenleme:

@MSalters 'cevabı umut verici görünüyor: XP'de HKEY_LOCAL_MACHINE\SYSTEM\MountedDevicesREG_BINARY değerlere sahip \DosDevices\x: (x olduğu [A-Z]); Yorum Doğru cihazın (UTF-16) adıdır (örneğin
aygıt listesinde yukarıda görülen
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM tekabül \DosDevices\A: = "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\") o gitmek için bir yol olup olmadığını görecek.

.

+0

Bunu yapmanın bir yolunu buldunuz mu? Ayrıca bir USB yığın depolama aygıtı için takılı birimi belirlemeyi deniyorum. Teşekkürler. –

+0

@Stephen Nutt: Hayır, pek değil; Çok karmaşıktı - genel göreve göre çok fazla zaman harcadı; Belgelenmemiş API'leri kullanmak çok dağınık olabilir. (Ek olarak, genel görevdeki değişiklikler benim için buna ihtiyaç duydu) – Piskvor

+0

@Stephen Nutt: Windows'da bu çalışmayı bırakmış olsam da, şuan Linux'ta bunu yapmanın bir yolunu buldum: http://stackoverflow.com/questions/3881449/find-which-drive-corresponds-to-which-usb-mass-storage-device-in-linux – Piskvor

cevap

5

Bu önemsiz olmayan bir soru bunun için hiçbir resmi API bildiğim kadarıyla Yani, bir belgelenmemiş API ihtiyaç söyleyebilirim, yoktur.:.. kayıt HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices sürücü harfleri ve hacim kimlikleri hem girdileri içeren bakarsanız. gerçek verilerde, sürücüyü tanımladığını görürsünüz.İki veriyi bir Unicode dizgisi olarak görürsünüz.Onlar sizi HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\'a yönlendirecektir. Vista, tam olarak hangi alt anahtarların oraya başvurulduğunu ve nasıl olduğunu gösterir. (Vista daha kolay, bu yüzden önce bunu deneyin).

+1

Bu yanlıştır. Bunu yapmak için resmi bir API var. IOCTL_STORAGE_GET_DEVICE_NUMBER kullanılarak yapıldı. Bu adil bir örnek: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx – Ilya

2

Bunu yapmak için resmi bir API var. Şu örneğe bakın: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx

Prensip, Windows'daki her bir depolama biriminin global bir numaraya atanmasıdır. Öncelikle, sürücünüzün numarasını soruyorsunuz ("\ X:" yi açarak ve bir IOCTL_STORAGE_GET_DEVICE_NUMBER isteği göndererek). İkincisi, tüm disk aygıtlarını gözden geçirip her birini bir sayı için soruyorsunuz (bunu açarak, farklı bir yoldan, yani sadece karşılaştırılamıyorsunuz).

Sürücünüzü sorguladığınız numarayı taşıyan bir disk aygıtı bulduğunuzda, bir kazananınızın olduğunu biliyorsunuz.

+0

Hmmm, bu bağlantı ilginç görünüyor. Belki de kısa bir özeti cevabınıza ekleyebilir misiniz? Teşekkürler. – Piskvor

İlgili konular