| Index: chrome/browser/metrics/drive_metrics_provider_win.cc
|
| diff --git a/chrome/browser/metrics/drive_metrics_provider_win.cc b/chrome/browser/metrics/drive_metrics_provider_win.cc
|
| deleted file mode 100644
|
| index 70cf3228efaf74432e6eed604b2b858557b6f44c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/metrics/drive_metrics_provider_win.cc
|
| +++ /dev/null
|
| @@ -1,90 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/metrics/drive_metrics_provider.h"
|
| -
|
| -#include <windows.h>
|
| -#include <ntddscsi.h>
|
| -#include <winioctl.h>
|
| -#include <vector>
|
| -
|
| -#include "base/files/file.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/macros.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/win/windows_version.h"
|
| -
|
| -namespace {
|
| -
|
| -// Semi-copy of similarly named struct from ata.h in WinDDK.
|
| -struct IDENTIFY_DEVICE_DATA {
|
| - USHORT UnusedWords[217];
|
| - USHORT NominalMediaRotationRate;
|
| - USHORT MoreUnusedWords[38];
|
| -};
|
| -COMPILE_ASSERT(sizeof(IDENTIFY_DEVICE_DATA) == 512, IdentifyDeviceDataSize);
|
| -
|
| -struct AtaRequest {
|
| - ATA_PASS_THROUGH_EX query;
|
| - IDENTIFY_DEVICE_DATA result;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// static
|
| -bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path,
|
| - bool* has_seek_penalty) {
|
| - std::vector<base::FilePath::StringType> components;
|
| - path.GetComponents(&components);
|
| -
|
| - int flags = base::File::FLAG_OPEN;
|
| - bool win7_or_higher = base::win::GetVersion() >= base::win::VERSION_WIN7;
|
| - if (!win7_or_higher)
|
| - flags |= base::File::FLAG_READ | base::File::FLAG_WRITE;
|
| -
|
| - base::File volume(base::FilePath(L"\\\\.\\" + components[0]), flags);
|
| - if (!volume.IsValid())
|
| - return false;
|
| -
|
| - if (win7_or_higher) {
|
| - STORAGE_PROPERTY_QUERY query = {};
|
| - query.QueryType = PropertyStandardQuery;
|
| - query.PropertyId = StorageDeviceSeekPenaltyProperty;
|
| -
|
| - DEVICE_SEEK_PENALTY_DESCRIPTOR result;
|
| - DWORD bytes_returned;
|
| - BOOL success = DeviceIoControl(volume.GetPlatformFile(),
|
| - IOCTL_STORAGE_QUERY_PROPERTY,
|
| - &query, sizeof(query),
|
| - &result, sizeof(result),
|
| - &bytes_returned, NULL);
|
| - if (success == FALSE || bytes_returned < sizeof(result))
|
| - return false;
|
| -
|
| - *has_seek_penalty = result.IncursSeekPenalty != FALSE;
|
| - } else {
|
| - AtaRequest request = {};
|
| - request.query.AtaFlags = ATA_FLAGS_DATA_IN;
|
| - request.query.CurrentTaskFile[6] = ID_CMD;
|
| - request.query.DataBufferOffset = sizeof(request.query);
|
| - request.query.DataTransferLength = sizeof(request.result);
|
| - request.query.Length = sizeof(request.query);
|
| - request.query.TimeOutValue = 10;
|
| -
|
| - DWORD bytes_returned;
|
| - BOOL success = DeviceIoControl(volume.GetPlatformFile(),
|
| - IOCTL_ATA_PASS_THROUGH,
|
| - &request, sizeof(request),
|
| - &request, sizeof(request),
|
| - &bytes_returned, NULL);
|
| - if (success == FALSE || bytes_returned < sizeof(request) ||
|
| - request.query.CurrentTaskFile[0]) {
|
| - return false;
|
| - }
|
| -
|
| - *has_seek_penalty = request.result.NominalMediaRotationRate != 1;
|
| - }
|
| -
|
| - return true;
|
| -}
|
|
|