MCPcopy Create free account
hub / github.com/EasyIME/PIME / getLogonSid

Function getLogonSid

PIMELauncher/PipeSecurity.cpp:26–69  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24
25
26static std::wstring getLogonSid() {
27 // Get process token with TOKEN_QUERY privilege.
28 std::wstring logonSidStr;
29 HANDLE processToken = INVALID_HANDLE_VALUE;
30 try {
31 if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &processToken)) {
32 throw std::runtime_error("Fail to open process token");
33 }
34
35 DWORD bufSize = 0;
36 if (!::GetTokenInformation(processToken, TokenGroups, nullptr, 0, &bufSize)) {
37 if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
38 throw std::runtime_error("Fail to get token info buffer size.");
39 }
40 }
41
42 auto tokenGroupsBuf = std::make_unique<char[]>(bufSize);
43 if (!::GetTokenInformation(processToken, TokenGroups, tokenGroupsBuf.get(), bufSize, &bufSize)) {
44 DWORD err = ::GetLastError();
45 throw std::runtime_error("Fail to get token group data.");
46 }
47
48 auto groups = reinterpret_cast<TOKEN_GROUPS*>(tokenGroupsBuf.get());
49 PSID logonSid = nullptr;
50 for (DWORD i = 0; i < groups->GroupCount; ++i) {
51 auto group = groups->Groups[i];
52 if ((group.Attributes & SE_GROUP_LOGON_ID) == SE_GROUP_LOGON_ID) {
53 /// Found the logon group.
54 logonSid = group.Sid;
55 break;
56 }
57 }
58
59 if (logonSid) {
60 logonSidStr = sidToStr(logonSid);
61 }
62 }
63 catch (...) {
64 if (processToken != INVALID_HANDLE_VALUE) {
65 ::CloseHandle(processToken);
66 }
67 }
68 return logonSidStr;
69}
70
71static bool getProcessOwnerSids(std::wstring& ownerSidStr, std::wstring& groupSidStr) {
72 PSID ownerSid = nullptr;

Callers 1

Calls 2

sidToStrFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected