/* Copyright (c) 1997, Microsoft Corporation, all rights reserved Description: History: */ #include "ceapcfg.h" extern "C" DWORD APIENTRY RasEapInvokeConfigUI( IN DWORD dwEapTypeId, IN HWND hwndParent, IN DWORD dwFlags, IN BYTE* pConnectionDataIn, IN DWORD dwSizeOfConnectionDataIn, OUT BYTE** ppConnectionDataOut, OUT DWORD* pdwSizeOfConnectionDataOut ); extern "C" DWORD GetIdentity( IN HWND hwndParent, IN BYTE* pUserDataIn, IN DWORD dwSizeOfUserDataIn, OUT BYTE** ppUserDataOut, OUT DWORD* pdwSizeOfUserDataOut, OUT WCHAR** ppwszIdentityOut ); extern "C" DWORD APIENTRY RasEapFreeMemory( IN BYTE* pMemory ); /* Notes: Implementation of IEAPProviderConfig::Initialize */ STDMETHODIMP CEapCfg::Initialize( LPCOLESTR pwszMachineName, DWORD dwEapTypeId, ULONG_PTR* puConnectionParam ) { DWORD cch; WCHAR* pwsz = NULL; DWORD dwErr = NO_ERROR; *puConnectionParam = NULL; // // Save machine name as connection param. // // // How many chars are there in the name? // if ( NULL == pwszMachineName ) { dwErr = ERROR_INVALID_PARAMETER; goto LDone; } cch = wcslen(pwszMachineName); pwsz = (WCHAR*) LocalAlloc(LPTR, (cch + 1) * sizeof(WCHAR)); if (NULL == pwsz) { dwErr = GetLastError(); goto LDone; } // // Copy machine name // wcsncpy(pwsz, pwszMachineName, cch); *puConnectionParam = (ULONG_PTR)pwsz; pwsz = NULL; LDone: LocalFree(pwsz); return(HRESULT_FROM_WIN32(dwErr)); } /* Notes: Implementation of IEAPProviderConfig::Uninitialize */ STDMETHODIMP CEapCfg::Uninitialize( DWORD dwEapTypeId, ULONG_PTR uConnectionParam ) { LocalFree((VOID*)uConnectionParam); return(HRESULT_FROM_WIN32(NO_ERROR)); } /* Notes: Implementation of IEAPProviderConfig::ServerInvokeConfigUI hWnd - handle to the parent window dwRes1 - reserved parameter (ignore) dwRes2 - reserved parameter (ignore) */ STDMETHODIMP CEapCfg::ServerInvokeConfigUI( DWORD dwEapTypeId, ULONG_PTR uConnectionParam, HWND hWnd, DWORD_PTR dwRes1, DWORD_PTR dwRes2 ) { WCHAR* pwszMachineName; HRESULT hr; DWORD dwErr; pwszMachineName = (WCHAR*)uConnectionParam; if (NULL == pwszMachineName) { dwErr = E_FAIL; } else { MessageBox(hWnd, pwszMachineName, L"You are configuring the EAP on...", MB_OK | MB_ICONINFORMATION); } hr = HRESULT_FROM_WIN32(dwErr); return(hr); } /* Notes: Implementation of IEAPProviderConfig::RouterInvokeConfigUI */ STDMETHODIMP CEapCfg::RouterInvokeConfigUI( DWORD dwEapTypeId, ULONG_PTR uConnectionParam, HWND hwndParent, DWORD dwFlags, BYTE* pConnectionDataIn, DWORD dwSizeOfConnectionDataIn, BYTE** ppConnectionDataOut, DWORD* pdwSizeOfConnectionDataOut ) { DWORD dwErr = NO_ERROR; BYTE* pConnectionDataOut = NULL; DWORD dwSizeOfConnectionDataOut = 0; *ppConnectionDataOut = NULL; *pdwSizeOfConnectionDataOut = 0; dwErr = RasEapInvokeConfigUI( dwEapTypeId, hwndParent, dwFlags, pConnectionDataIn, dwSizeOfConnectionDataIn, &pConnectionDataOut, &dwSizeOfConnectionDataOut); if ( (NO_ERROR == dwErr) && (0 != dwSizeOfConnectionDataOut)) { // // If we got valid ConnectionDataOut, allocate memory for it... // *ppConnectionDataOut = (BYTE*)CoTaskMemAlloc(dwSizeOfConnectionDataOut); if (NULL == *ppConnectionDataOut) { dwErr = ERROR_NOT_ENOUGH_MEMORY; goto LDone; } // // ... and return it in the OUT parameter // CopyMemory(*ppConnectionDataOut, pConnectionDataOut, dwSizeOfConnectionDataOut); *pdwSizeOfConnectionDataOut = dwSizeOfConnectionDataOut; } LDone: RasEapFreeMemory(pConnectionDataOut); return(HRESULT_FROM_WIN32(dwErr)); } /* Notes: Implementation of IEAPProviderConfig::RouterInvokeCredentialsUI */ STDMETHODIMP CEapCfg::RouterInvokeCredentialsUI( DWORD dwEapTypeId, ULONG_PTR uConnectionParam, HWND hwndParent, DWORD dwFlags, BYTE* pConnectionDataIn, DWORD dwSizeOfConnectionDataIn, BYTE* pUserDataIn, DWORD dwSizeOfUserDataIn, BYTE** ppUserDataOut, DWORD* pdwSizeOfUserDataOut ) { BYTE* pUserDataOut = NULL; DWORD dwSizeOfUserDataOut; WCHAR* pwszIdentityOut = NULL; DWORD dwErr = NO_ERROR; *ppUserDataOut = NULL; *pdwSizeOfUserDataOut = 0; dwErr = GetIdentity( hwndParent, NULL /* pUserDataIn */, 0 /* dwSizeOfUserDataIn */, &pUserDataOut, &dwSizeOfUserDataOut, &pwszIdentityOut); if ( (NO_ERROR == dwErr) && (0 != dwSizeOfUserDataOut)) { // // If we got valid UserDataOut, allocate memory for it... // *ppUserDataOut = (BYTE*)CoTaskMemAlloc(dwSizeOfUserDataOut); if (NULL == *ppUserDataOut) { dwErr = ERROR_NOT_ENOUGH_MEMORY; goto LDone; } // // ... and return it in the OUT parameter // CopyMemory(*ppUserDataOut, pUserDataOut, dwSizeOfUserDataOut); *pdwSizeOfUserDataOut = dwSizeOfUserDataOut; } LDone: LocalFree(pUserDataOut); LocalFree((BYTE*)pwszIdentityOut); return(HRESULT_FROM_WIN32(dwErr)); }