//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1997-2001.
//
//  File:       Password.cpp
//
//  Contents:   
//
//----------------------------------------------------------------------------\
// Password.cpp : implementation file
//

#include "stdafx.h"
#include "Password.h"

#ifdef _DEBUG
#ifndef ALPHA
#define new DEBUG_NEW
#endif
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPassword dialog

/*
// This dialog is used by EFS Recovery agent export key code, which is 
// currently commented out.
CPassword::CPassword(CWnd* pParent)
	: CHelpDialog(CPassword::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPassword)
	m_strPassword1 = _T("");
	m_strPassword2 = _T("");
	//}}AFX_DATA_INIT
}


void CPassword::DoDataExchange(CDataExchange* pDX)
{
	CHelpDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPassword)
	DDX_Control(pDX, IDC_PASSWORD1, m_password1Edit);
	DDX_Text(pDX, IDC_PASSWORD1, m_strPassword1);
	DDX_Text(pDX, IDC_PASSWORD2, m_strPassword2);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPassword, CHelpDialog)
	//{{AFX_MSG_MAP(CPassword)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPassword message handlers

LPCWSTR CPassword::GetPassword() const
{
	return (LPCWSTR) m_strPassword1;
}

void CPassword::OnOK() 
{
	VERIFY (UpdateData (TRUE));

 	if ( m_strPassword1 != m_strPassword2 )
	{
		CString	caption;
		CString	text;
        CThemeContextActivator activator;

		VERIFY (caption.LoadString (IDS_SET_PASSWORD));
		VERIFY (text.LoadString (IDS_PASSWORDS_DONT_MATCH));

		MessageBox (text, caption, MB_OK);
		ClearPasswords ();
		VERIFY (UpdateData (FALSE));
		m_password1Edit.SetFocus ();
	}
	else
		CHelpDialog::OnOK();
}

void CPassword::OnCancel() 
{
	CString	caption;
	CString	text;
    CThemeContextActivator activator;

	VERIFY (caption.LoadString (IDS_SET_PASSWORD));
	VERIFY (text.LoadString (IDS_CANCEL_NO_CREATE_PFX));

	if ( IDYES == MessageBox (text, caption, MB_YESNO) )
		CHelpDialog::OnCancel();
}

CPassword::~CPassword()
{
	// Zero out memory before freeing to protect password
	ClearPasswords ();
}

BOOL CPassword::OnInitDialog() 
{
	CHelpDialog::OnInitDialog();
	
	m_password1Edit.SetFocus ();
	
	return FALSE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPassword::ClearPasswords()
{
	size_t	len = m_strPassword1.GetLength ();
	LPWSTR	pstr = m_strPassword1.GetBuffer ((int) len);
	if ( pstr )
	{
		memset (pstr, 0, len * sizeof (TCHAR));
	}
	m_strPassword1.ReleaseBuffer ();

	len = m_strPassword2.GetLength ();
	pstr = m_strPassword2.GetBuffer ((int) len);
	if ( pstr )
	{
		memset (pstr, 0, len * sizeof (TCHAR));
	}
	m_strPassword2.ReleaseBuffer ();
}

void CPassword::DoContextHelp (HWND hWndControl)
{
    _TRACE (1, L"Entering CPassword::DoContextHelp\n");
    static const DWORD help_map[] =
    {
        IDC_PASSWORD1,      IDH_PASSWORD_PASSWORD1,
        IDC_PASSWORD2,      IDH_PASSWORD_PASSWORD2,
        0, 0
    };

    // Display context help for a control
    if ( !::WinHelp (
            hWndControl,
            GetF1HelpFilename(),
            HELP_WM_HELP,
            (DWORD_PTR) help_map) )
    {
        _TRACE (0, L"WinHelp () failed: 0x%x\n", GetLastError ());        
    }
    _TRACE (-1, L"Leaving CPassword::DoContextHelp\n");
}
*/