• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2008 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 "chrome/common/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/string_util.h"
15 #include "base/utf_string_conversions.h"
16 
17 namespace guid {
18 
GenerateGUID()19 std::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