// 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 "components/metrics/drive_metrics_provider.h"

#include <windows.h>
#include <winioctl.h>
#include <vector>

#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/strings/stringprintf.h"

namespace metrics {

// static
bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path,
                                          bool* has_seek_penalty) {
  std::vector<base::FilePath::StringType> components;
  path.GetComponents(&components);

  base::File volume(base::FilePath(L"\\\\.\\" + components[0]),
                    base::File::FLAG_OPEN);
  if (!volume.IsValid())
    return false;

  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, nullptr);

  if (success == FALSE || bytes_returned < sizeof(result))
    return false;

  *has_seek_penalty = result.IncursSeekPenalty != FALSE;
  return true;
}

}  // namespace metrics
