MCPcopy Create free account
hub / github.com/ModOrganizer2/modorganizer / getCurrentUser

Function getCurrentUser

src/envsecurity.cpp:499–543  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

497}
498
499MallocPtr<void> getCurrentUser()
500{
501 HANDLE hnd = ::GetCurrentProcess();
502 HANDLE rawToken = 0;
503
504 BOOL ret = ::OpenProcessToken(hnd, TOKEN_QUERY, &rawToken);
505 if (!ret) {
506 const auto e = GetLastError();
507 throw(e, "OpenProcessToken()");
508 }
509
510 HandlePtr token(rawToken);
511
512 DWORD retsize = 0;
513 ret = ::GetTokenInformation(token.get(), TokenUser, 0, 0, &retsize);
514
515 if (!ret) {
516 const auto e = GetLastError();
517 if (e != ERROR_INSUFFICIENT_BUFFER) {
518 throw failed(e, "GetTokenInformation() for length");
519 }
520 }
521
522 MallocPtr<void> tokenBuffer(std::malloc(retsize));
523 ret = ::GetTokenInformation(token.get(), TokenUser, tokenBuffer.get(), retsize,
524 &retsize);
525
526 if (!ret) {
527 const auto e = GetLastError();
528 throw failed(e, "GetTokenInformation()");
529 }
530
531 PSID tokenSid = ((PTOKEN_USER)(tokenBuffer.get()))->User.Sid;
532 DWORD sidLen = ::GetLengthSid(tokenSid);
533 MallocPtr<void> currentUserSID((SID*)(malloc(sidLen)));
534
535 ret = ::CopySid(sidLen, currentUserSID.get(), tokenSid);
536
537 if (!ret) {
538 const auto e = GetLastError();
539 throw failed(e, "CopySid()");
540 }
541
542 return currentUserSID;
543}
544
545ACCESS_MASK getEffectiveRights(ACL* dacl, PSID sid)
546{

Callers 1

getFileSecurityFunction · 0.85

Calls 2

failedClass · 0.70
getMethod · 0.45

Tested by

no test coverage detected