|
/** |
|
* LookupAccountName |
|
* Copyright (c) 2018 Koichi OKADA. All rights reserved. |
|
* This source code is distributed under the MIT license. |
|
*/ |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <windows.h> |
|
#include <winbase.h> |
|
#include <sddl.h> |
|
|
|
int main(int argc, char *argv[]) |
|
{ |
|
int exitcode = EXIT_FAILURE; |
|
BOOL result; |
|
PSID Sid = NULL; |
|
DWORD cbSid; |
|
DWORD cchReferencedDomainName; |
|
LPSTR ReferencedDomainName = NULL; |
|
SID_NAME_USE eUse; |
|
LPSTR StringSid = NULL; |
|
|
|
do { |
|
if (argc < 2) { |
|
fprintf(stderr, "Usage: LookupAccountName SystemName AccountName\n\n"); |
|
break; |
|
} |
|
|
|
result = LookupAccountName( |
|
argv[1], // LPCSTR lpSystemName, |
|
argv[2], // LPCSTR lpAccountName, |
|
NULL, // PSID Sid, |
|
&cbSid, // LPDWORD cbSid, |
|
NULL, // LPSTR ReferencedDomainName, |
|
&cchReferencedDomainName, // LPDWORD cchReferencedDomainName, |
|
&eUse // PSID_NAME_USE peUse |
|
); |
|
|
|
Sid = malloc(cbSid); |
|
ReferencedDomainName = malloc(cchReferencedDomainName); |
|
|
|
result = LookupAccountName( |
|
argv[1], // LPCSTR lpSystemName, |
|
argv[2], // LPCSTR lpAccountName, |
|
Sid, // PSID Sid, |
|
&cbSid, // LPDWORD cbSid, |
|
ReferencedDomainName, // LPSTR ReferencedDomainName, |
|
&cchReferencedDomainName, // LPDWORD cchReferencedDomainName, |
|
&eUse // PSID_NAME_USE peUse |
|
); |
|
|
|
if (result == 0) { |
|
fprintf(stderr, "Error: LookupAccountName failed.\n"); |
|
break; |
|
} |
|
|
|
result = ConvertSidToStringSid( |
|
Sid, // PSID Sid, |
|
&StringSid // LPSTR *StringSid |
|
); |
|
|
|
if (result == 0) { |
|
fprintf(stderr, "Error: ConvertSidToStringSid failed.\n"); |
|
break; |
|
} |
|
|
|
printf("ReferencedDomainName : %s\n", ReferencedDomainName); |
|
printf("SystemName : %s\n", argv[1]); |
|
printf("AccountName : %s\n", argv[2]); |
|
printf("SID : %s\n", StringSid); |
|
|
|
exitcode = EXIT_SUCCESS; |
|
} while(0); |
|
|
|
if (Sid) free(Sid); |
|
if (ReferencedDomainName) free(ReferencedDomainName); |
|
if (StringSid) LocalFree(StringSid); |
|
|
|
return exitcode; |
|
} |