1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/guid.h"
6
7#include <stdlib.h>
8
9#include <objbase.h>
10#include <windows.h>
11
12#include "base/basictypes.h"
13#include "base/logging.h"
14#include "base/strings/string_util.h"
15#include "base/strings/utf_string_conversions.h"
16
17namespace base {
18
19std::string GenerateGUID() {
20  const int kGUIDSize = 39;
21
22  GUID guid;
23  HRESULT guid_result = CoCreateGuid(&guid);
24  DCHECK(SUCCEEDED(guid_result));
25  if (!SUCCEEDED(guid_result))
26    return std::string();
27
28  std::wstring guid_string;
29  int result = StringFromGUID2(guid,
30                               WriteInto(&guid_string, kGUIDSize), kGUIDSize);
31  DCHECK(result == kGUIDSize);
32  if (result != kGUIDSize)
33    return std::string();
34
35  return WideToUTF8(guid_string.substr(1, guid_string.length() - 2));
36}
37
38}  // namespace guid
39