11
22#include <stdio.h>
33#include <windows.h>
4+ #include <sddl.h>
45#include <userenv.h>
56
67#ifndef SEE_MASK_NOASYNC
@@ -263,6 +264,36 @@ int runas(int argc, char** argv) {
263264 return code ;
264265}
265266
267+ int printUsersSid () {
268+ DWORD arbitrarySize = 2048 ;
269+
270+ DWORD sidSize = arbitrarySize ;
271+ PSID sid = malloc (sidSize );
272+ memset (sid , 0 , sidSize );
273+
274+ int ret = CreateWellKnownSid (WinBuiltinUsersSid , NULL , sid , & sidSize );
275+ if (!ret ) {
276+ wbail (127 , "failed CreateWellKnownSid call" );
277+ }
278+
279+ DWORD cchName = arbitrarySize ;
280+ wchar_t * lpName = malloc (sizeof (wchar_t ) * cchName );
281+
282+ DWORD cchReferencedDomainName = arbitrarySize ;
283+ wchar_t * lpReferencedDomainName = malloc (sizeof (wchar_t ) * cchReferencedDomainName );
284+
285+ SID_NAME_USE sidUse ;
286+
287+ ret = LookupAccountSidW (NULL , sid , lpName , & cchName , lpReferencedDomainName , & cchReferencedDomainName , & sidUse );
288+ if (!ret ) {
289+ wbail (127 , "failed LookupAccountSid call" );
290+ }
291+
292+ wprintf (L"%s\n" , lpName );
293+
294+ return 0 ;
295+ }
296+
266297/**
267298 * Inspired by / with some code from the following MIT-licensed projects:
268299 * - https://github.com/atom/node-runas
@@ -286,6 +317,8 @@ int main(int argc, char** argv) {
286317 return msiexec (argc , argv );
287318 } else if (strcmp ("--runas" , argv [1 ]) == 0 ) {
288319 return runas (argc , argv );
320+ } else if (strcmp ("--print-users-sid" , argv [1 ]) == 0 ) {
321+ return printUsersSid (argc , argv );
289322 } else {
290323 return elevate (argc , argv );
291324 }
0 commit comments