Index: chrome/browser/extensions/api/image_writer_private/removable_storage_provider_win.cc |
diff --git a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_win.cc b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_win.cc |
index cfd232431dc0b9eda5b3fcaca4f9e3876fc2ac51..aeeb83728501e0c87f2c9fdfee68e3ecc7354e7b 100644 |
--- a/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_win.cc |
+++ b/chrome/browser/extensions/api/image_writer_private/removable_storage_provider_win.cc |
@@ -7,6 +7,7 @@ |
#include <setupapi.h> |
#include <winioctl.h> |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/win/scoped_handle.h" |
@@ -126,12 +127,30 @@ bool AddDeviceInfo(HANDLE interface_enumerator, |
return true; |
} |
+ // Create a drive identifier from the drive number. |
+ STORAGE_DEVICE_NUMBER device_number = {0}; |
+ status = DeviceIoControl( |
+ device_handle, // Device handle. |
+ IOCTL_STORAGE_GET_DEVICE_NUMBER,// Flag to request device number. |
+ NULL, // Query parameters, should be NULL. |
+ 0, // Query parameters size, should be 0. |
+ &device_number, // output buffer. |
+ sizeof(device_number), // Size of buffer. |
+ &bytes_returned, // Number of bytes returned. |
+ NULL); // Optional unused overlapped perameter. |
+ |
+ if (status == FALSE) { |
+ PLOG(ERROR) << "Storage device number query failed."; |
+ return false; |
+ } |
+ |
+ std::string drive_id = "\\\\.\\PhysicalDrive"; |
+ drive_id.append(base::Uint64ToString(device_number.DeviceNumber)); |
+ |
linked_ptr<api::image_writer_private::RemovableStorageDevice> device( |
new api::image_writer_private::RemovableStorageDevice()); |
device->capacity = disk_capacity; |
- |
- base::string16 device_path_16(interface_detail_data->DevicePath); |
- device->storage_unit_id = base::UTF16ToUTF8(device_path_16); |
+ device->storage_unit_id = drive_id; |
if (device_descriptor->VendorIdOffset && |
output_buf[device_descriptor->VendorIdOffset]) { |