Home | History | Annotate | Download | only in src
      1 // Copyright (c) 2011 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 "sandbox/win/src/sandbox_utils.h"
      6 
      7 #include <windows.h>
      8 
      9 #include "base/logging.h"
     10 #include "base/win/windows_version.h"
     11 #include "sandbox/win/src/internal_types.h"
     12 
     13 namespace sandbox {
     14 
     15 bool IsXPSP2OrLater() {
     16   base::win::Version version = base::win::GetVersion();
     17   return (version > base::win::VERSION_XP) ||
     18       ((version == base::win::VERSION_XP) &&
     19        (base::win::OSInfo::GetInstance()->service_pack().major >= 2));
     20 }
     21 
     22 void InitObjectAttribs(const base::string16& name,
     23                        ULONG attributes,
     24                        HANDLE root,
     25                        OBJECT_ATTRIBUTES* obj_attr,
     26                        UNICODE_STRING* uni_name) {
     27   static RtlInitUnicodeStringFunction RtlInitUnicodeString;
     28   if (!RtlInitUnicodeString) {
     29     HMODULE ntdll = ::GetModuleHandle(kNtdllName);
     30     RtlInitUnicodeString = reinterpret_cast<RtlInitUnicodeStringFunction>(
     31         GetProcAddress(ntdll, "RtlInitUnicodeString"));
     32     DCHECK(RtlInitUnicodeString);
     33   }
     34   RtlInitUnicodeString(uni_name, name.c_str());
     35   InitializeObjectAttributes(obj_attr, uni_name, attributes, root, NULL);
     36 }
     37 
     38 }  // namespace sandbox
     39