205 lines
4.2 KiB
C
205 lines
4.2 KiB
C
|
//+-----------------------------------------------------------------------
|
|||
|
//
|
|||
|
// 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 LocalFree
|
|||
|
|
|||
|
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 256
|
|||
|
BYTE TokenInfoBuf[MAX_TOKEN_USER_INFO_SIZE];
|
|||
|
TOKEN_USER* pTokenUserInfo = (TOKEN_USER*) TokenInfoBuf;
|
|||
|
DWORD dwSize;
|
|||
|
|
|||
|
if ( ppUserSid )
|
|||
|
{
|
|||
|
*ppUserSid = NULL;
|
|||
|
}
|
|||
|
|
|||
|
if ( GetTokenInformation( hToken, TokenUser, pTokenUserInfo,
|
|||
|
MAX_TOKEN_USER_INFO_SIZE, &dwSize ))
|
|||
|
{
|
|||
|
dwSize = GetLengthSid( pTokenUserInfo->User.Sid );
|
|||
|
|
|||
|
if ( ppUserSid )
|
|||
|
{
|
|||
|
*ppUserSid = AuthzpAlloc( dwSize );
|
|||
|
|
|||
|
if (*ppUserSid == NULL)
|
|||
|
{
|
|||
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|||
|
goto Finish;
|
|||
|
}
|
|||
|
|
|||
|
CopyMemory( *ppUserSid, pTokenUserInfo->User.Sid, dwSize );
|
|||
|
}
|
|||
|
|
|||
|
if ( GetTokenInformation( hToken, TokenStatistics,
|
|||
|
(PVOID) &TokenStats,
|
|||
|
sizeof(TOKEN_STATISTICS), &dwSize ) )
|
|||
|
{
|
|||
|
*pAuthenticationId = TokenStats.AuthenticationId;
|
|||
|
fResult = TRUE;
|
|||
|
goto Finish;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// error case
|
|||
|
//
|
|||
|
|
|||
|
if ( ppUserSid && *ppUserSid )
|
|||
|
{
|
|||
|
LocalFree( *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 LocalFree
|
|||
|
|
|||
|
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 LocalFree
|
|||
|
|
|||
|
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;
|
|||
|
}
|
|||
|
|