windows-nt/Source/XPSP1/NT/net/rras/ras/ppp/raschap/ceapcfg.cpp
2020-09-26 16:20:57 +08:00

283 lines
5.6 KiB
C++

/*
Copyright (c) 1997, Microsoft Corporation, all rights reserved
Description:
History:
*/
#include <eaptypeid.h>
#include "ceapcfg.h"
extern "C"
DWORD
InvokeServerConfigUI(
IN HWND hWnd,
IN CHAR* pszMachineName
);
extern "C"
DWORD
RasEapGetIdentity(
IN DWORD dwEapTypeId,
IN HWND hwndParent,
IN DWORD dwFlags,
IN const WCHAR* pwszPhonebook,
IN const WCHAR* pwszEntry,
IN BYTE* pConnectionDataIn,
IN DWORD dwSizeOfConnectionDataIn,
IN BYTE* pUserDataIn,
IN DWORD dwSizeOfUserDataIn,
OUT BYTE** ppUserDataOut,
OUT DWORD* pdwSizeOfUserDataOut,
OUT WCHAR** ppwszIdentityOut
);
extern "C"
DWORD
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
RasEapFreeMemory(
IN BYTE* pMemory
);
/*
Returns:
Notes:
Implementation of IEAPProviderConfig::Initialize
*/
STDMETHODIMP
CEapCfg::Initialize(
LPCOLESTR pwszMachineName,
DWORD dwEapTypeId,
ULONG_PTR* puConnectionParam
)
{
size_t size;
CHAR* psz = NULL;
DWORD dwErr = NO_ERROR;
*puConnectionParam = NULL;
size = wcslen(pwszMachineName);
psz = (CHAR*) LocalAlloc(LPTR, (size + 1)*sizeof(CHAR));
if (NULL == psz)
{
dwErr = GetLastError();
goto LDone;
}
if ( 0 == WideCharToMultiByte(
CP_ACP,
0,
pwszMachineName,
-1,
psz,
size+1,
NULL,
NULL ) )
{
dwErr = GetLastError();
goto LDone;
}
*puConnectionParam = (ULONG_PTR)psz;
psz = NULL;
LDone:
LocalFree(psz);
return(HRESULT_FROM_WIN32(dwErr));
}
/*
Returns:
Notes:
Implementation of IEAPProviderConfig::Uninitialize
*/
STDMETHODIMP
CEapCfg::Uninitialize(
DWORD dwEapTypeId,
ULONG_PTR uConnectionParam
)
{
LocalFree((VOID*)uConnectionParam);
return(HRESULT_FROM_WIN32(NO_ERROR));
}
/*
Returns:
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
)
{
CHAR* pszMachineName;
HRESULT hr;
DWORD dwErr;
pszMachineName = (CHAR*)uConnectionParam;
if (NULL == pszMachineName)
{
dwErr = E_FAIL;
}
else
{
//Invoke configuration UI here.
dwErr = InvokeServerConfigUI(hWnd, pszMachineName);
}
hr = HRESULT_FROM_WIN32(dwErr);
return(hr);
}
/*
Returns:
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))
{
*ppConnectionDataOut = (BYTE*)CoTaskMemAlloc(dwSizeOfConnectionDataOut);
if (NULL == *ppConnectionDataOut)
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
goto LDone;
}
CopyMemory(*ppConnectionDataOut, pConnectionDataOut,
dwSizeOfConnectionDataOut);
*pdwSizeOfConnectionDataOut = dwSizeOfConnectionDataOut;
}
LDone:
RasEapFreeMemory(pConnectionDataOut);
return(HRESULT_FROM_WIN32(dwErr));
}
/*
Returns:
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
)
{
return RasEapGetIdentity(
dwEapTypeId,
hwndParent,
dwFlags,
NULL,
NULL,
pConnectionDataIn,
dwSizeOfConnectionDataIn,
pUserDataIn,
dwSizeOfUserDataIn,
ppUserDataOut,
pdwSizeOfUserDataOut,
NULL
);
}