//+----------------------------------------------------------------------- // // Microsoft Windows // // Copyright (c) Microsoft Corporation 2000 // // File: A D T U T I L . C // // Contents: Functions to construct audit event parameters // // // History: // 07-January-2000 kumarp created // //------------------------------------------------------------------------ #include "pch.h" #pragma hdrstop #include "adtgen.h" #include "authzp.h" BOOL AuthzpGetTokenInfo( IN HANDLE hToken, OUT PSID* ppUserSid, OPTIONAL OUT PLUID pAuthenticationId ) /*++ Routine Description: Get user-sid and the user-logon-id from a token. Arguments: hToken - handle of token to query ppUserSid - pointer to user sid if non NULL, allocate and copy the user sid from the token. callers must free it using AuthzpFree pAuthenticationId - pointer to logon-id Return Value: TRUE on success FALSE otherwise call GetLastError() to retrieve the errorcode, Notes: Caller must have TOKEN_QUERY access right. --*/ { BOOL fResult = FALSE; TOKEN_STATISTICS TokenStats; #define MAX_TOKEN_USER_INFO_SIZE (sizeof(TOKEN_USER)+SECURITY_MAX_SID_SIZE) BYTE TokenInfoBuf[MAX_TOKEN_USER_INFO_SIZE]; TOKEN_USER* pTokenUserInfo = (TOKEN_USER*) TokenInfoBuf; DWORD dwSize; if ( ARGUMENT_PRESENT(ppUserSid) ) { *ppUserSid = NULL; if ( GetTokenInformation( hToken, TokenUser, pTokenUserInfo, MAX_TOKEN_USER_INFO_SIZE, &dwSize )) { dwSize = GetLengthSid( pTokenUserInfo->User.Sid ); *ppUserSid = AuthzpAlloc( dwSize ); if (*ppUserSid == NULL) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); goto Finish; } CopyMemory( *ppUserSid, pTokenUserInfo->User.Sid, dwSize ); } else { // // GetTokenInformation already sets last error. // goto Finish; } } if ( GetTokenInformation( hToken, TokenStatistics, (PVOID) &TokenStats, sizeof(TOKEN_STATISTICS), &dwSize ) ) { *pAuthenticationId = TokenStats.AuthenticationId; fResult = TRUE; goto Finish; } // // error case // if ( ppUserSid && *ppUserSid ) { AuthzpFree( *ppUserSid ); *ppUserSid = NULL; } Finish: return fResult; } BOOL AuthzpGetThreadTokenInfo( OUT PSID* ppUserSid, OPTIONAL OUT PLUID pAuthenticationId ) /*++ Routine Description: Get user-sid and the user-logon-id from the thread token. Arguments: ppUserSid - pointer to user sid if non NULL, allocate and copy the user sid from the token. callers must free it using AuthzpFree pAuthenticationId - pointer to logon id Return Value: TRUE on success FALSE otherwise call GetLastError() to retrieve the errorcode, Notes: Caller must have TOKEN_QUERY access right. --*/ { BOOL fResult = FALSE; HANDLE hToken=NULL; if ( OpenThreadToken( GetCurrentThread(), TOKEN_QUERY, TRUE, &hToken ) ) { fResult = AuthzpGetTokenInfo( hToken, ppUserSid, pAuthenticationId ); CloseHandle( hToken ); } return fResult; } BOOL AuthzpGetProcessTokenInfo( OUT PSID* ppUserSid, OPTIONAL OUT PLUID pAuthenticationId ) /*++ Routine Description: Get user-sid and the user-logon-id from the process token. Arguments: ppUserSid - pointer to user sid if non NULL, allocate and copy the user sid from the token. callers must free it using AuthzpFree pAuthenticationId - pointer to logon id Return Value: TRUE on success FALSE otherwise call GetLastError() to retrieve the errorcode, Notes: Caller must have TOKEN_QUERY access right. --*/ { BOOL fResult = FALSE; HANDLE hToken=NULL; if ( OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &hToken ) ) { fResult = AuthzpGetTokenInfo( hToken, ppUserSid, pAuthenticationId ); CloseHandle( hToken ); } return fResult; }