On 04.03.2013 15:51, Alan Bateman wrote:
On 04/03/2013 09:31, Alexey Utkin wrote:
Alan,
Do you agree with
    /**
* Check the access right against the securityInfo in the current thread.
     */
    static boolean checkAccessMask(long securityInfo, int accessMask,
int genericRead, int genericWrite, int genericExecute, int genericAll)
        throws WindowsException
    {
        int privilegies = TOKEN_QUERY;
long hToken = OpenThreadToken(GetCurrentThread(), privilegies, false);
        if (hToken == 0L && processTokenWithDuplicateAccess != 0L)
            hToken = DuplicateTokenEx(processTokenWithDuplicateAccess,
                privilegies);

We can have the situation with:
1) OpenThreadToken return 0 without exception - that is ok for thread without impersonation. 2) processTokenWithDuplicateAccess is 0 for some reason (weak precess privileges) For that case we have no access to process token without exception (hToken :=: 0).
        boolean hasRight = false;
        if (hToken != 0L) {
So, in upper line we need to check token for non-empty value.
! Do you concern about the [false] return value for that case?
            try {
hasRight = AccessCheck(hToken, securityInfo, accessMask, genericRead, genericWrite, genericExecute, genericAll);
Here is the actual work, that can make an exception (for example it happens for invalid SID)
            } finally {
                CloseHandle(hToken);
If token was open it have to be closed without excuses.
            }
        }
        return hasRight;
    }
implementation approach?
Can the handle to the token (hToken) be 0? In my comment I was suggesting:

long hToken = OpenThreadToken(...);
try {
    ...
} finally {
    CloseHandle(hToken);
}

but that doesn't work if OpenThreadToken succeeds with a handle of 0. If 0 is not possible then there are a few other clean-ups that we could do at a later time.
Ah, I remember now, we handle ERROR_NO_TOKEN so this means that hToken can be 0. So this means that the CloseHandle does need to check for 0 in the finally block.

-Alan.

-Alan


Reply via email to