|
|
/*
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)); }
|