OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // mini_installer.exe is the first exe that is run when chrome is being | 5 // mini_installer.exe is the first exe that is run when chrome is being |
6 // installed or upgraded. It is designed to be extremely small (~5KB with no | 6 // installed or upgraded. It is designed to be extremely small (~5KB with no |
7 // extra resources linked) and it has two main jobs: | 7 // extra resources linked) and it has two main jobs: |
8 // 1) unpack the resources (possibly decompressing some) | 8 // 1) unpack the resources (possibly decompressing some) |
9 // 2) run the real installer (setup.exe) with appropriate flags. | 9 // 2) run the real installer (setup.exe) with appropriate flags. |
10 // | 10 // |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 | 559 |
560 // Retrieves the SID of the default owner for objects created by this user | 560 // Retrieves the SID of the default owner for objects created by this user |
561 // token (accounting for different behavior under UAC elevation, etc.). | 561 // token (accounting for different behavior under UAC elevation, etc.). |
562 // NOTE: On success the |sid| parameter must be freed with LocalFree(). | 562 // NOTE: On success the |sid| parameter must be freed with LocalFree(). |
563 bool GetCurrentOwnerSid(wchar_t** sid) { | 563 bool GetCurrentOwnerSid(wchar_t** sid) { |
564 HANDLE token; | 564 HANDLE token; |
565 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)) | 565 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)) |
566 return false; | 566 return false; |
567 | 567 |
568 DWORD size = 0; | 568 DWORD size = 0; |
569 TOKEN_OWNER* owner = NULL; | |
570 bool result = false; | 569 bool result = false; |
571 // We get the TokenOwner rather than the TokenUser because e.g. under UAC | 570 // We get the TokenOwner rather than the TokenUser because e.g. under UAC |
572 // elevation we want the admin to own the directory rather than the user. | 571 // elevation we want the admin to own the directory rather than the user. |
573 ::GetTokenInformation(token, TokenOwner, &owner, 0, &size); | 572 ::GetTokenInformation(token, TokenOwner, NULL, 0, &size); |
574 if (size && GetLastError() == ERROR_INSUFFICIENT_BUFFER) { | 573 if (size && GetLastError() == ERROR_INSUFFICIENT_BUFFER) { |
575 if (owner = reinterpret_cast<TOKEN_OWNER*>(::LocalAlloc(LPTR, size))) { | 574 if (TOKEN_OWNER* owner = |
| 575 reinterpret_cast<TOKEN_OWNER*>(::LocalAlloc(LPTR, size))) { |
576 if (::GetTokenInformation(token, TokenOwner, owner, size, &size)) | 576 if (::GetTokenInformation(token, TokenOwner, owner, size, &size)) |
577 result = ::ConvertSidToStringSid(owner->Owner, sid); | 577 result = ::ConvertSidToStringSid(owner->Owner, sid); |
578 ::LocalFree(owner); | 578 ::LocalFree(owner); |
579 } | 579 } |
580 } | 580 } |
581 ::CloseHandle(token); | 581 ::CloseHandle(token); |
582 return result; | 582 return result; |
583 } | 583 } |
584 | 584 |
585 // Populates |sd| suitable for use when creating directories within |path| with | 585 // Populates |sd| suitable for use when creating directories within |path| with |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
924 #pragma function(memset) | 924 #pragma function(memset) |
925 void* memset(void* dest, int c, size_t count) { | 925 void* memset(void* dest, int c, size_t count) { |
926 void* start = dest; | 926 void* start = dest; |
927 while (count--) { | 927 while (count--) { |
928 *reinterpret_cast<char*>(dest) = static_cast<char>(c); | 928 *reinterpret_cast<char*>(dest) = static_cast<char>(c); |
929 dest = reinterpret_cast<char*>(dest) + 1; | 929 dest = reinterpret_cast<char*>(dest) + 1; |
930 } | 930 } |
931 return start; | 931 return start; |
932 } | 932 } |
933 } // extern "C" | 933 } // extern "C" |
OLD | NEW |