SOL9 2.0 Class: AccountSid

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * AccountSid.h 
 * Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// 2009/09/14

#pragma once
#include <sol/Object.h>
#include <sol/String.h>
#include <sol/Arg.h>
#include <psapi.h>
#include <sddl.h>


namespace SOL {

class AccountSid :public Object {

private:
    String computerName;

public:
    AccountSid(const TCHAR* computer=_T("\\\\."))
    :computerName(computer)
    {

    }


private:
    const TCHAR* getSidNameUse(int value)
    {
        static const Arg types[] = {
        {_T("User"), SidTypeUser}, 
        {_T("Group"), SidTypeGroup},
        {_T("Domain"), SidTypeDomain}, 
        {_T("Alias"), SidTypeAlias}, 
        {_T("WellKnownGroup"), SidTypeWellKnownGroup}, 
        {_T("DeletedAccount"), SidTypeDeletedAccount}, 
        {_T("TypeInvalid"), SidTypeInvalid}, 
        {_T("Unknown"), SidTypeUnknown}, 
        {_T("Computer"), SidTypeComputer}, 
        {_T("Label"), SidTypeLabel}
        };

        int count = XtNumber(types);
        const TCHAR* name = _T("");

        for (int i = 0; i<count; i++) {

            if (types[i].value == value) {
                name = types[i].name;
                break;
            }
        }

        return name;
    }


public:
    bool lookup(__in PSID pSID,
        __out String& user,
        __out String& domain,
        __out String& type)
    {
        bool rc = false;
      
        TCHAR userId[256];
        TCHAR domainId[256];
        
        DWORD cbUserId = sizeof(userId);        
        DWORD cbDomainId = sizeof(domainId);

        SID_NAME_USE snu; 

        if (LookupAccountSid((const TCHAR*)computerName, // name of local or remote computer
                pSID,               // security identifier
                userId,                // account name buffer
                &cbUserId,             // size of account name buffer
                 domainId,              // domain name
                &cbDomainId,           // size of domain name buffer
                &snu                // SID type
                )) {

            rc = true;
            user = userId;
            domain = domainId;
            type = getSidNameUse(snu);

            //printf("SAM account form of %s %s %d\n", domainId, userId, snu);
        }
        else {
            printf("Could not locate SID %d\n", GetLastError());
        }
        return rc;
    }

};

}

Last modified: 19 Dec 2009

Copyright (c) 2009 Antillia.com ALL RIGHTS RESERVED.