Index: device/hid/hid_service_win.cc |
diff --git a/device/hid/hid_service_win.cc b/device/hid/hid_service_win.cc |
index 42c9a3a86d6d99f1fc0b6767295d666a6939be17..7f41514a557d7d48acd0e4eb437ed0224763632c 100644 |
--- a/device/hid/hid_service_win.cc |
+++ b/device/hid/hid_service_win.cc |
@@ -6,6 +6,7 @@ |
#include <cstdlib> |
+#include "base/files/file.h" |
#include "base/stl_util.h" |
#include "base/strings/sys_string_conversions.h" |
#include "device/hid/hid_connection_win.h" |
@@ -147,14 +148,27 @@ void HidServiceWin::PlatformAddDevice(const std::string& device_path) { |
// Try to open the device. |
base::win::ScopedHandle device_handle( |
CreateFileA(device_path.c_str(), |
- 0, |
- FILE_SHARE_READ, |
+ GENERIC_WRITE | GENERIC_READ, |
+ FILE_SHARE_READ | FILE_SHARE_WRITE, |
NULL, |
OPEN_EXISTING, |
FILE_FLAG_OVERLAPPED, |
0)); |
- if (!device_handle.IsValid()) |
- return; |
+ |
+ if (!device_handle.IsValid() && |
+ GetLastError() == base::File::FILE_ERROR_ACCESS_DENIED) { |
+ base::win::ScopedHandle device_handle( |
+ CreateFileA(device_path.c_str(), |
+ GENERIC_READ, |
+ FILE_SHARE_READ, |
+ NULL, |
+ OPEN_EXISTING, |
+ FILE_FLAG_OVERLAPPED, |
+ 0)); |
+ |
+ if (!device_handle.IsValid()) |
+ return; |
+ } |
// Get VID/PID pair. |
HIDD_ATTRIBUTES attrib = {0}; |