#include #include #define _WIN32_WINNT 0x0a00 #define WINVER 0x0a00 #include #include #include #include int main () { HANDLE tok; PTOKEN_USER tp = (PTOKEN_USER) malloc (65536); DWORD ret; LPSTR str; WCHAR name[256]; WCHAR dom[256]; DWORD nlen, dlen; SID_NAME_USE type; PDOMAIN_CONTROLLER_INFOW pci; NET_API_STATUS status; PUSER_INFO_3 ui3; PUSER_INFO_24 ui24; if (!OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &tok)) { printf ("OpenProcessToken: %u\n", GetLastError ()); return 1; } if (!GetTokenInformation (tok, TokenUser, tp, 65536, &ret)) { printf ("GetTokenInformation(user): %u\n", GetLastError ()); return 1; } ConvertSidToStringSidA (tp->User.Sid, &str); printf (" Sid: %s\n", str); LocalFree (str); nlen = dlen = 256; if (LookupAccountSidW (NULL, tp->User.Sid, name, &nlen, dom, &dlen, &type)) printf ("Dom\\Name: %ls\\%ls\n", dom, name); else printf ("LookupAccountSidW: %u\n", GetLastError ()); ret = DsGetDcNameW (NULL, dom, NULL, NULL, DS_IS_FLAT_NAME | DS_RETURN_DNS_NAME, &pci); if (ret != ERROR_SUCCESS) { printf ("DsGetDcNameW: %u\n", status); pci = NULL; } status = NetUserGetInfo (NULL, name, 3, (PBYTE *) &ui3); if (status != NERR_Success) printf ("NetUserGetInfo(NULL, 3): %u\n", status); else { printf ("UserInfo NULL, 3:\n"); printf (" Name: %ls\n", ui3->usri3_name); NetApiBufferFree (ui3); } status = NetUserGetInfo (NULL, name, 24, (PBYTE *) &ui24); if (status != NERR_Success) printf ("NetUserGetInfo(NULL, 24): %u\n", status); else { printf ("UserInfo NULL, 24:\n"); printf (" InternetIdentity: %d\n", ui24->usri24_internet_identity); printf (" Flags: 0x%08x\n", ui24->usri24_flags); printf (" ProviderName: %ls\n", ui24->usri24_internet_provider_name); printf (" PrincipalName: %ls\n", ui24->usri24_internet_principal_name); ConvertSidToStringSidA (ui24->usri24_user_sid, &str); printf (" Sid: %s\n", str); LocalFree (str); NetApiBufferFree (ui24); } if (pci) { status = NetUserGetInfo (pci->DomainControllerName, name, 3, (PBYTE *) &ui3); if (status != NERR_Success) printf ("NetUserGetInfo(%ls, 3): %u\n", pci->DomainControllerName, status); else { printf ("UserInfo %ls, 3:\n", pci->DomainControllerName); printf (" Name: %ls\n", ui3->usri3_name); NetApiBufferFree (ui3); } status = NetUserGetInfo (pci->DomainControllerName, name, 24, (PBYTE *) &ui24); if (status != NERR_Success) printf ("NetUserGetInfo(%ls, 24): %u\n", pci->DomainControllerName, status); else { printf ("UserInfo %ls, 24:\n", pci->DomainControllerName); printf (" InternetIdentity: %d\n", ui24->usri24_internet_identity); printf (" Flags: 0x%08x\n", ui24->usri24_flags); printf (" ProviderName: %ls\n", ui24->usri24_internet_provider_name); printf (" PrincipalName: %ls\n", ui24->usri24_internet_principal_name); ConvertSidToStringSidA (ui24->usri24_user_sid, &str); printf (" Sid: %s\n", str); LocalFree (str); NetApiBufferFree (ui24); } } return 0; }