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.
 
 
 
 
 
 

170 lines
5.0 KiB

//=================================================================
//
// Ws2_32Api.cpp
//
// Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved
//
//=================================================================
#include "precomp.h"
#include <cominit.h>
#include "DllWrapperBase.h"
#include "SecurityApi.h"
#include "DllWrapperCreatorReg.h"
// {C9369990-F3A8-4bac-A360-47BAA0EC47A0}
static const GUID g_guidSecurApi =
{ 0xc9369990, 0xf3a8, 0x4bac, { 0xa3, 0x60, 0x47, 0xba, 0xa0, 0xec, 0x47, 0xa0 } };
#if NTONLY >= 5
static const TCHAR g_tstrSecur[] = _T("SECURITY.DLL");
#else
static const TCHAR g_tstrSecur[] = _T("SECUR32.DLL");
#endif
/******************************************************************************
* Register this class with the CResourceManager.
*****************************************************************************/
CDllApiWraprCreatrReg<CSecurityApi, &g_guidSecurApi, g_tstrSecur> g_RegisteredCSecurityWrapper;
/******************************************************************************
* Constructor
******************************************************************************/
CSecurityApi::CSecurityApi( LPCTSTR a_tstrWrappedDllName )
: CDllWrapperBase( a_tstrWrappedDllName ),
m_pfnInitSecurityInterface(NULL),
m_pSecFuncTable(NULL)
{
}
/******************************************************************************
* Destructor
******************************************************************************/
CSecurityApi::~CSecurityApi()
{
}
/******************************************************************************
* Initialization function to check that we obtained function addresses.
* Init should fail only if the minimum set of functions was not available;
* functions added in later versions may or may not be present - it is the
* client's responsibility in such cases to check, in their code, for the
* version of the dll before trying to call such functions. Not doing so
* when the function is not present will result in an AV.
*
* The Init function is called by the WrapperCreatorRegistation class.
******************************************************************************/
bool CSecurityApi::Init()
{
bool fRet = LoadLibrary();
if(fRet)
{
m_pfnInitSecurityInterface =
(PSecurityFunctionTableW(WINAPI *)())GetProcAddress( "InitSecurityInterfaceW" );
m_pSecFuncTable = (PSecurityFunctionTableW)((*m_pfnInitSecurityInterface)());
// Check that we have function pointers to functions that should be
// present in all versions of this dll...
if(m_pfnInitSecurityInterface == NULL ||
m_pSecFuncTable == NULL )
{
fRet = false;
LogErrorMessage(L"Failed find entrypoint in securityapi");
}
else
{
fRet = true;
}
}
return fRet;
}
/******************************************************************************
* Member functions wrapping Ws2_32 api functions. Add new functions here
* as required.
******************************************************************************/
//
SECURITY_STATUS CSecurityApi::AcquireCredentialsHandleW
(
SEC_WCHAR SEC_FAR *a_pszPrincipal, // Name of principal
SEC_WCHAR SEC_FAR *a_pszPackage, // Name of package
unsigned long a_fCredentialUse, // Flags indicating use
void SEC_FAR *a_pvLogonId, // Pointer to logon ID
void SEC_FAR *a_pAuthData, // Package specific data
SEC_GET_KEY_FN a_pGetKeyFn, // Pointer to GetKey() func
void SEC_FAR *a_pvGetKeyArgument, // Value to pass to GetKey()
PCredHandle a_phCredential, // (out) Cred Handle
PTimeStamp a_ptsExpiry // (out) Lifetime (optional)
)
{
if( m_pSecFuncTable && m_pSecFuncTable->AcquireCredentialsHandleW )
{
return (*m_pSecFuncTable->AcquireCredentialsHandleW)(
a_pszPrincipal,
a_pszPackage,
a_fCredentialUse,
a_pvLogonId,
a_pAuthData,
a_pGetKeyFn,
a_pvGetKeyArgument,
a_phCredential,
a_ptsExpiry ) ;
}
else
{
return E_POINTER ;
}
}
//
SECURITY_STATUS CSecurityApi::QueryCredentialsAttributesW(
PCredHandle a_phCredential, // Credential to query
unsigned long a_ulAttribute, // Attribute to query
void SEC_FAR *a_pBuffer // Buffer for attributes
)
{
if( m_pSecFuncTable && m_pSecFuncTable->QueryCredentialsAttributesW )
{
return (*m_pSecFuncTable->QueryCredentialsAttributesW)(
a_phCredential,
a_ulAttribute,
a_pBuffer ) ;
}
else
{
return E_POINTER ;
}
}
//
SECURITY_STATUS CSecurityApi::FreeCredentialsHandle(
PCredHandle a_phCredential // Handle to free
)
{
if( m_pSecFuncTable && m_pSecFuncTable->FreeCredentialsHandle )
{
return (*m_pSecFuncTable->FreeCredentialsHandle)(
a_phCredential ) ;
}
else
{
return E_POINTER ;
}
}