//================================================================= // // Ws2_32Api.cpp // // Copyright (c) 1998-2001 Microsoft Corporation, All Rights Reserved // //================================================================= #include "precomp.h" #include #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 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 ; } }