| 29 | } |
| 30 | |
| 31 | std::pair<std::wstring, Sid> Token::GetUserNameAndSid() const { |
| 32 | assert(_handle); |
| 33 | BYTE buffer[256]; |
| 34 | DWORD len; |
| 35 | if (::GetTokenInformation(_handle.get(), TokenUser, buffer, sizeof(buffer), &len)) { |
| 36 | auto data = (TOKEN_USER*)buffer; |
| 37 | Sid sid(data->User.Sid); |
| 38 | WCHAR name[64], domain[64]; |
| 39 | DWORD lname = _countof(name), ldomain = _countof(domain); |
| 40 | SID_NAME_USE use; |
| 41 | std::wstring username; |
| 42 | if (::LookupAccountSid(nullptr, sid, name, &lname, domain, &ldomain, &use)) |
| 43 | username = std::wstring(domain) + L"\\" + name; |
| 44 | return { username,sid }; |
| 45 | } |
| 46 | return { L"",Sid() }; |
| 47 | } |
| 48 | |
| 49 | std::wstring WinSys::Token::GetUserName() const { |
| 50 | return GetUserNameAndSid().first; |
no test coverage detected