Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

134 lines
2.5 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name :
customprovider.cxx
Abstract:
Authentication provider for arbitrary user-name/auth-type/token combo
set by ISAPI during call to HSE_REQ_EXEC_URL
Author:
Bilal Alam (balam) 29-Nov-2000
Environment:
Win32 - User Mode
Project:
ULW3.DLL
--*/
#include "precomp.hxx"
#include "customprovider.hxx"
HRESULT
CUSTOM_USER_CONTEXT::Create(
HANDLE hImpersonationToken,
BYTE * pszUserName,
BOOL fIsUnicode,
DWORD dwAuthType
)
/*++
Routine Description:
Initialize custom user context
Arguments:
hImpersonationToken - Impersonation token for the custom user
pszUserName - Custom user name
dwAuthType - Auth type
Return Value:
HRESULT
--*/
{
HRESULT hr;
if ( hImpersonationToken == NULL ||
pszUserName == NULL )
{
DBG_ASSERT( FALSE );
return HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER );
}
//
// Duplicate the token
//
if ( !DuplicateTokenEx( hImpersonationToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenImpersonation,
&_hImpersonationToken ) )
{
return HRESULT_FROM_WIN32( GetLastError() );
}
//
// Copy the user name
//
if (fIsUnicode)
{
hr = _strUserName.Copy( (WCHAR *)pszUserName );
}
else
{
hr = _strUserName.CopyA( (CHAR *)pszUserName );
}
if ( FAILED( hr ) )
{
return hr;
}
_dwAuthType = dwAuthType;
return NO_ERROR;
}
HANDLE
CUSTOM_USER_CONTEXT::QueryPrimaryToken(
VOID
)
/*++
Routine Description:
Get the primary token
Arguments:
None
Return Value:
HANDLE to primary token
--*/
{
if ( _hPrimaryToken == NULL )
{
_Lock.WriteLock();
if ( DuplicateTokenEx( _hImpersonationToken,
TOKEN_ALL_ACCESS,
NULL,
SecurityImpersonation,
TokenPrimary,
&_hPrimaryToken ) )
{
DBG_ASSERT( _hPrimaryToken != NULL );
}
_Lock.WriteUnlock();
}
return _hPrimaryToken;
}