2009-04-09 32 views
9

Tôi có một số ổ đĩa USB được kết nối với máy tính WinXP SP3 và tôi cần phải phân biệt chúng theo cách lập trình - Tôi cần tìm ký tự ổ đĩa tương ứng với thiết bị (trong trường hợp này, một thiết bị ~ một khối lượng). Tôi có thể lấy ID Khối lượng của họ và ký tự ổ đĩa sử dụng mountvol, tìm một cái gì đó như thế này:Tìm ổ đĩa nào tương ứng với thiết bị lưu trữ USB nào trong WinXP

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

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

Ngoài ra, sử dụng devcon hoặc Device Manager, tôi có thể thấy các ID thiết bị:

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 

Tuy nhiên, tôi chưa tìm thấy cách liên kết ID thiết bị và ID/chữ cái khối lượng, như hộp thoại "Xóa an toàn phần cứng" (do đó tôi cho rằng có thể):

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

Như bạn có thể thấy, đây là những thiết bị tương tự mà tôi thấy trong devcon và cùng khối lượng mà mountvol thấy; nhưng cho đến nay tôi đã không tìm thấy liên kết giữa chúng.

Tôi đã tìm thấy một số relatedquestions, nhưng những người dường như sử dụng phương pháp "bất cứ điều gì bạn tìm thấy đầu tiên là thiết bị USB của bạn", mà không phải là rất hữu ích trong trường hợp của tôi, vì sẽ có nhiều thiết bị tương tự (cùng nhà cung cấp, thường cùng loại sản phẩm) được kết nối.


Edit:

@MSalters 'câu trả lời sẽ hứa hẹn: Trên XP, HKEY_LOCAL_MACHINE\SYSTEM\MountedDevicesREG_BINARY giá trị \DosDevices\x: (nơi x là [A-Z]); nhận xét là (UTF-16) tên của thiết bị chính xác (ví dụ
\DosDevices\A: = "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\", tương ứng với
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM thấy ở trên trong danh sách thiết bị).

sẽ thấy nếu đó là con đường để đi.

+0

Bạn đã bao giờ tìm cách để thực hiện việc này chưa? Tôi cũng đang cố gắng xác định âm lượng được gắn cho thiết bị lưu trữ USB. Cảm ơn. –

+0

@Stephen Nutt: Không, không thực sự; nó quá phức tạp - đã dành quá nhiều thời gian đào sâu vào nó, so với nhiệm vụ tổng thể; việc sử dụng các API không có giấy tờ có thể trở nên quá lộn xộn. (Ngoài ra, những thay đổi trong nhiệm vụ tổng thể đã khắc phục sự cần thiết này đối với tôi) – Piskvor

+0

@Stephen Nutt: Mặc dù tôi đã từ bỏ nỗ lực này trong Windows, bây giờ tôi đã tìm ra cách để làm điều này trong Linux, nếu bạn quan tâm: http://stackoverflow.com/questions/3881449/find-which-drive-corresponds-to-which-usb-mass-storage-device-in-linux – Piskvor

Trả lời

5

Đó là một câu hỏi không tầm thường, không có API chính thức nào cho nó, như tôi có thể nói.Vì vậy, bạn cần một API không có giấy tờ: sổ đăng ký HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices chứa các mục nhập cho cả ký tự ổ đĩa và ID âm lượng. tại các dữ liệu thực tế, bạn sẽ thấy rằng nó xác định các ổ đĩa.Hãy nhìn vào dữ liệu nhị phân như một chuỗi Unicode.Nó sẽ trỏ bạn đến HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ENUM\.Tuy nhiên, XP và Vista khác nhau về chính xác những gì subkeys được tham chiếu ở đó, và làm thế nào. (Vista dễ dàng hơn, vì vậy hãy thử điều đó trước).

+1

Điều này là không chính xác. Có một API chính thức để làm điều đó. Nó được thực hiện bằng cách sử dụng IOCTL_STORAGE_GET_DEVICE_NUMBER. Đây là mẫu hợp lý: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx – Ilya

2

Có API chính thức để thực hiện việc này. Xem mẫu này: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx

Nguyên tắc là mỗi ổ đĩa lưu trữ trên Windows được gán một số toàn cầu. Trước tiên, bạn hỏi ổ đĩa của bạn cho số của nó (bằng cách mở "\ X:" và gửi yêu cầu IOCTL_STORAGE_GET_DEVICE_NUMBER). Thứ hai, bạn đi qua tất cả các thiết bị đĩa và yêu cầu mỗi số cho số của nó (bằng cách mở nó, thông qua một con đường khác, vì vậy bạn không thể chỉ so sánh chuỗi).

Khi bạn tìm thấy thiết bị đĩa mang cùng số khi bạn truy vấn ổ đĩa, bạn biết bạn có người chiến thắng.

+0

Hmmm, liên kết đó trông thú vị. Có lẽ bạn có thể chỉnh sửa một bản tóm tắt ngắn vào câu trả lời của bạn? Cảm ơn. – Piskvor

Các vấn đề liên quan