Bit shift the bmAttributes field to interpret isochronous endpoint.
[chromium-blink-merge.git] / base / guid_win.cc
blobcdb860a0b9fe08459165729d0abcbc38e15fc2bc
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.
5 #include "base/guid.h"
7 #include <stdlib.h>
9 #include <objbase.h>
10 #include <windows.h>
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"
17 namespace base {
19 std::string GenerateGUID() {
20 const int kGUIDSize = 39;
22 GUID guid;
23 HRESULT guid_result = CoCreateGuid(&guid);
24 DCHECK(SUCCEEDED(guid_result));
25 if (!SUCCEEDED(guid_result))
26 return std::string();
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();
35 return WideToUTF8(guid_string.substr(1, guid_string.length() - 2));
38 } // namespace guid