Chromium Code Reviews| Index: rlz/win/lib/process_info.cc |
| diff --git a/rlz/win/lib/process_info.cc b/rlz/win/lib/process_info.cc |
| index 2511f54ab76ab3cefb12035ba5893e8a92ee1816..b55f62c3170599f73cafb35a00aa3b119cf6cc95 100644 |
| --- a/rlz/win/lib/process_info.cc |
| +++ b/rlz/win/lib/process_info.cc |
| @@ -23,6 +23,7 @@ HRESULT GetCurrentUser(std::wstring* name, |
| std::wstring* domain, |
| std::wstring* sid) { |
| DWORD err; |
| + DWORD zero = 0; |
| // Get the current username & domain the hard way. (GetUserNameEx would be |
| // nice, but unfortunately requires connectivity to a domain controller. |
| @@ -33,8 +34,17 @@ HRESULT GetCurrentUser(std::wstring* name, |
| // In which case, search for and use the process handle of a running |
| // Explorer.exe.) |
| HANDLE token; |
| - if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)) |
| - return E_FAIL; |
| + |
| + HANDLE process_handle = ::GetCurrentProcess(); |
| + if (!process_handle) |
| + CHECK(process_handle); |
| + |
| + if (!::OpenProcessToken(process_handle, TOKEN_QUERY, &token)) { |
| + err = ::GetLastError(); |
| + // Check should fail. |
| + CHECK_EQ(err, zero); |
| + return err; |
| + } |
|
Roger Tawa OOO till Jul 10th
2014/02/28 19:34:00
From the docs, I don't believe getting a handle to
yao
2014/02/28 21:28:19
Done.
|
| base::win::ScopedHandle scoped_process_token(token); |
| @@ -49,12 +59,18 @@ HRESULT GetCurrentUser(std::wstring* name, |
| CHECK(!result && err == ERROR_INSUFFICIENT_BUFFER); |
| token_user_bytes.reset(new char[token_user_size]); |
| - if (!token_user_bytes.get()) |
| + if (!token_user_bytes.get()) { |
| + // Check should fail. |
| + CHECK_EQ(E_OUTOFMEMORY, 0); |
| return E_OUTOFMEMORY; |
| + } |
|
Roger Tawa OOO till Jul 10th
2014/02/28 19:34:00
Can probably replace lines 62-66 with:
CHECK(t
yao
2014/02/28 21:28:19
Done.
|
| if (!::GetTokenInformation(token, TokenUser, token_user_bytes.get(), |
| token_user_size, &token_user_size2)) { |
| - return E_FAIL; |
| + err = ::GetLastError(); |
| + // Check should fail. |
| + CHECK_EQ(err, zero); |
| + return err; |
| } |
| WCHAR user_name[UNLEN + 1]; // max username length |
| @@ -64,12 +80,19 @@ HRESULT GetCurrentUser(std::wstring* name, |
| SID_NAME_USE sid_type; |
| TOKEN_USER* token_user = |
| reinterpret_cast<TOKEN_USER*>(token_user_bytes.get()); |
| - if (!token_user) |
| - return E_FAIL; |
| + if (!token_user) { |
| + err = ::GetLastError(); |
| + // Check should fail. |
| + CHECK_EQ(err, zero); |
| + return err; |
| + } |
| PSID user_sid = token_user->User.Sid; |
| if (!::LookupAccountSidW(NULL, user_sid, user_name, &user_name_size, |
| domain_name, &domain_name_size, &sid_type)) { |
| - return E_FAIL; |
| + err = ::GetLastError(); |
| + // Check should fail. |
| + CHECK_EQ(err, zero); |
| + return err; |
| } |
| if (name != NULL) { |