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.
 
 
 
 
 
 

288 lines
6.2 KiB

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