338 lines
9.7 KiB
C++
338 lines
9.7 KiB
C++
// NKDN2.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "keyring.h"
|
|
#include "NKChseCA.h"
|
|
#include "NKDN.h"
|
|
#include "NKDN2.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
#define SZ_CCODES_FILE _T("ccodes.txt")
|
|
#define SZ_CCODES_SECTION _T("CountryCodes")
|
|
|
|
#define REGKEY_STP _T("SOFTWARE\\Microsoft\\INetStp")
|
|
#define REGKEY_INSTALLKEY _T("InstallPath")
|
|
|
|
enum {
|
|
WM_INTERNAL_SETCOUNTRYCODE = WM_USER
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNKDistinguisedName2 dialog
|
|
|
|
|
|
CNKDistinguisedName2::CNKDistinguisedName2(CWnd* pParent /*=NULL*/)
|
|
: CNKPages(CNKDistinguisedName2::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CNKDistinguisedName2)
|
|
m_nkdn2_sz_L = _T("");
|
|
m_nkdn2_sz_S = _T("");
|
|
m_nkdn2_sz_C = _T("");
|
|
//}}AFX_DATA_INIT
|
|
m_hotlink_codessite.m_fBrowse = TRUE;
|
|
}
|
|
|
|
|
|
void CNKDistinguisedName2::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CNKDistinguisedName2)
|
|
DDX_Control(pDX, IDC_HOTLINK_CCODES, m_hotlink_codessite);
|
|
DDX_Control(pDX, IDC_NEWKEY_COUNTRY, m_control_C);
|
|
DDX_Control(pDX, IDC_NEWKEY_STATE, m_control_S);
|
|
DDX_Control(pDX, IDC_NEWKEY_LOCALITY, m_control_L);
|
|
DDX_Text(pDX, IDC_NEWKEY_LOCALITY, m_nkdn2_sz_L);
|
|
DDV_MaxChars(pDX, m_nkdn2_sz_L, 128);
|
|
DDX_Text(pDX, IDC_NEWKEY_STATE, m_nkdn2_sz_S);
|
|
DDV_MaxChars(pDX, m_nkdn2_sz_S, 128);
|
|
DDX_CBString(pDX, IDC_NEWKEY_COUNTRY, m_nkdn2_sz_C);
|
|
DDV_MaxChars(pDX, m_nkdn2_sz_C, 2);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CNKDistinguisedName2, CDialog)
|
|
//{{AFX_MSG_MAP(CNKDistinguisedName2)
|
|
ON_EN_CHANGE(IDC_NEWKEY_COUNTRY, OnChangeNewkeyCountry)
|
|
ON_EN_CHANGE(IDC_NEWKEY_LOCALITY, OnChangeNewkeyLocality)
|
|
ON_EN_CHANGE(IDC_NEWKEY_STATE, OnChangeNewkeyState)
|
|
ON_CBN_CLOSEUP(IDC_NEWKEY_COUNTRY, OnCloseupNewkeyCountry)
|
|
ON_CBN_SELCHANGE(IDC_NEWKEY_COUNTRY, OnSelchangeNewkeyCountry)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
#define SZ_DN_C "DN_COUNTRY"
|
|
#define SZ_DN_L "DN_LOCALITY"
|
|
#define SZ_DN_S "DN_STATE"
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnFinish()
|
|
{
|
|
m_nkdn2_sz_C.MakeUpper();
|
|
// store the user entries
|
|
SetStoredString( m_nkdn2_sz_C, SZ_DN_C );
|
|
SetStoredString( m_nkdn2_sz_L, SZ_DN_L );
|
|
SetStoredString( m_nkdn2_sz_S, SZ_DN_S );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
BOOL CNKDistinguisedName2::OnInitDialog()
|
|
{
|
|
// if the entries from last time are available, use them
|
|
try
|
|
{
|
|
FGetStoredString( m_nkdn2_sz_L, SZ_DN_L );
|
|
FGetStoredString( m_nkdn2_sz_S, SZ_DN_S );
|
|
}
|
|
catch( CException e )
|
|
{
|
|
}
|
|
|
|
// initialize the edit field part with the ISO code returned by GetLocalInfo
|
|
GetLocaleInfo(
|
|
LOCALE_SYSTEM_DEFAULT, // locale identifier
|
|
LOCALE_SABBREVCTRYNAME, // type of information
|
|
m_nkdn2_sz_C.GetBuffer(4), // address of buffer for information
|
|
2 // size of buffer
|
|
);
|
|
m_nkdn2_sz_C.ReleaseBuffer(2);
|
|
|
|
// call superclass
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// fill in the country code drop-down list
|
|
InitCountryCodeDropDown();
|
|
|
|
// return 0 to say we set the default item
|
|
// return 1 to just select the default default item
|
|
return 1;
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
BOOL CNKDistinguisedName2::OnSetActive()
|
|
{
|
|
ActivateButtons();
|
|
return CPropertyPage::OnSetActive();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::ActivateButtons()
|
|
{
|
|
DWORD flags = PSWIZB_BACK;
|
|
BOOL fFinish = FALSE;
|
|
BOOL fCanGoOn = TRUE;
|
|
|
|
// first, see if this is the end of the road by checing the chooseca page
|
|
if ( m_pChooseCAPage->m_nkca_radio == 1 )
|
|
fFinish = TRUE;
|
|
|
|
UpdateData(TRUE);
|
|
|
|
//now make sure there is something in each of the required fields
|
|
fCanGoOn &= !m_nkdn2_sz_C.IsEmpty();
|
|
fCanGoOn &= !m_nkdn2_sz_S.IsEmpty();
|
|
fCanGoOn &= !m_nkdn2_sz_L.IsEmpty();
|
|
|
|
// if we can go on, hilite the button
|
|
if ( fCanGoOn )
|
|
{
|
|
if ( fFinish )
|
|
flags |= PSWIZB_FINISH;
|
|
else
|
|
flags |= PSWIZB_NEXT;
|
|
}
|
|
else
|
|
// cannot go on
|
|
{
|
|
if ( fFinish )
|
|
flags |= PSWIZB_DISABLEDFINISH;
|
|
}
|
|
|
|
// update the property sheet buttons
|
|
m_pPropSheet->SetWizardButtons( flags );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::GetCCodePath( CString &sz )
|
|
{
|
|
HKEY hKey;
|
|
TCHAR chPath[MAX_PATH+1];
|
|
DWORD cbPath;
|
|
DWORD err, type;
|
|
|
|
// get the server install path from the registry
|
|
// open the registry key, if it exists
|
|
err = RegOpenKeyEx(
|
|
HKEY_LOCAL_MACHINE, // handle of open key
|
|
REGKEY_STP, // address of name of subkey to open
|
|
0, // reserved
|
|
KEY_READ, // security access mask
|
|
&hKey // address of handle of open key
|
|
);
|
|
|
|
// if we did not open the key for any reason (say... it doesn't exist)
|
|
// then leave right away
|
|
if ( err != ERROR_SUCCESS )
|
|
return;
|
|
|
|
cbPath = sizeof(chPath);
|
|
type = REG_SZ;
|
|
err = RegQueryValueEx(
|
|
hKey, // handle of key to query
|
|
REGKEY_INSTALLKEY, // address of name of value to query
|
|
NULL, // reserved
|
|
&type, // address of buffer for value type
|
|
(PUCHAR)chPath, // address of data buffer
|
|
&cbPath // address of data buffer size
|
|
);
|
|
|
|
// close the key
|
|
RegCloseKey( hKey );
|
|
|
|
// if we did get the key for any reason (say... it doesn't exist)
|
|
// then leave right away
|
|
if ( err != ERROR_SUCCESS )
|
|
return;
|
|
|
|
// put it all together
|
|
sz = chPath;
|
|
sz += _T('\\');
|
|
sz += SZ_CCODES_FILE;
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::InitCountryCodeDropDown()
|
|
{
|
|
WIN32_FILE_ATTRIBUTE_DATA dataFile;
|
|
CString szCCodesFile;
|
|
|
|
PTCHAR pszCode;
|
|
|
|
// get the location of the codes file
|
|
GetCCodePath( szCCodesFile );
|
|
|
|
// make sure the file exists and get info on it at the same time
|
|
if ( !GetFileAttributesEx(szCCodesFile, GetFileExInfoStandard, &dataFile) )
|
|
return;
|
|
|
|
// Allocate a buffer to recieve the data based on the size of the file
|
|
PTCHAR pBuff = (PTCHAR)GlobalAlloc( GPTR, dataFile.nFileSizeLow * 2 );
|
|
|
|
DWORD cch = GetPrivateProfileSection(
|
|
SZ_CCODES_SECTION, // address of section name
|
|
pBuff, // address of return buffer
|
|
dataFile.nFileSizeLow, // size of return buffer
|
|
szCCodesFile // address of initialization filename
|
|
);
|
|
pszCode = pBuff;
|
|
|
|
// loop through the items, adding each
|
|
while ( *pszCode != 0 )
|
|
{
|
|
// add the country code
|
|
InitOneCountryCode( pszCode );
|
|
|
|
// increment the list
|
|
pszCode = _tcsninc( pszCode, _tcslen(pszCode)+1 );
|
|
}
|
|
|
|
GlobalFree( pBuff );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::InitOneCountryCode( LPCTSTR pszCode )
|
|
{
|
|
CString szData = pszCode;
|
|
CString szCountry;
|
|
INT iCode;
|
|
|
|
// get the location of the equals character - it MUST be the third character
|
|
if ( szData.Find(_T('=')) != 2 )
|
|
return;
|
|
szCountry = szData.Right( szData.GetLength() - 3 );
|
|
|
|
// add the code to the cstring list and save its index position
|
|
iCode = m_rgbszCodes.Add( szData.Left(2) );
|
|
|
|
// add the item to the combo box
|
|
int iPos = m_control_C.AddString( szCountry );
|
|
|
|
// attach the index into the string array
|
|
m_control_C.SetItemData( iPos, iCode );
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNKDistinguisedName2 message handlers
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnChangeNewkeyCountry()
|
|
{
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnChangeNewkeyLocality()
|
|
{
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnChangeNewkeyState()
|
|
{
|
|
ActivateButtons();
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnCloseupNewkeyCountry()
|
|
{
|
|
// if there is no current selected item, do nothing
|
|
if ( m_control_C.GetCurSel() == -1 )
|
|
return;
|
|
|
|
// get the selection's hidden dword
|
|
ULONG_PTR iCode = m_control_C.GetItemData( m_control_C.GetCurSel() );
|
|
|
|
m_control_C.SetCurSel(-1);
|
|
|
|
// for some reason, attempting to set the string directly here isn't working.
|
|
PostMessage( WM_INTERNAL_SETCOUNTRYCODE, 0, iCode );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
void CNKDistinguisedName2::OnSelchangeNewkeyCountry()
|
|
{
|
|
// if there is no current selected item, do nothing
|
|
if ( m_control_C.GetCurSel() == -1 )
|
|
return;
|
|
|
|
// get the selection's hidden dword
|
|
ULONG_PTR iCode = m_control_C.GetItemData( m_control_C.GetCurSel() );
|
|
|
|
m_control_C.SetCurSel(-1);
|
|
|
|
// for some reason, attempting to set the string directly here isn't working.
|
|
PostMessage( WM_INTERNAL_SETCOUNTRYCODE, 0, iCode );
|
|
}
|
|
|
|
//----------------------------------------------------------------
|
|
LRESULT CNKDistinguisedName2::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
if ( message == WM_INTERNAL_SETCOUNTRYCODE )
|
|
{
|
|
INT iCode = (INT)lParam;
|
|
|
|
// set the text of the box
|
|
m_control_C.SetWindowText( m_rgbszCodes.GetAt(iCode) );
|
|
}
|
|
|
|
return CDialog::WindowProc(message, wParam, lParam);
|
|
}
|