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.
 
 
 
 
 
 

213 lines
5.2 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: attrstring.cpp
//
// Contents: implementation of CAttrString
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "AString.h"
#include "util.h"
#include "CName.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAttrString dialog
CAttrString::CAttrString(UINT nTemplateID)
: CAttribute(nTemplateID ? nTemplateID : IDD),
m_bNoBlanks(FALSE)
{
//{{AFX_DATA_INIT(CAttrString)
m_strSetting = _T("");
m_strBase = _T("");
//}}AFX_DATA_INIT
m_pHelpIDs = (DWORD_PTR)a167HelpIDs;
m_uTemplateResID = IDD;
}
void CAttrString::DoDataExchange(CDataExchange* pDX)
{
CAttribute::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAttrString)
DDX_Text(pDX, IDC_CURRENT, m_strSetting);
DDX_Text(pDX, IDC_NEW, m_strBase);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAttrString, CAttribute)
//{{AFX_MSG_MAP(CAttrString)
ON_BN_CLICKED(IDC_CONFIGURE, OnConfigure)
ON_EN_CHANGE(IDC_NEW, OnChangeNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAttrString message handlers
BOOL CAttrString::OnInitDialog()
{
CAttribute::OnInitDialog();
AddUserControl(IDC_NEW);
OnConfigure();
if(m_pData && (m_pData->GetID() == IDS_NEW_ADMIN || m_pData->GetID() == IDS_NEW_GUEST)) //Raid #502069, yanggao
{
GetDlgItem(IDC_NEW)->SendMessage(EM_LIMITTEXT, MAX_USERNAME, 0);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAttrString::OnConfigure()
{
CAttribute::OnConfigure();
CWnd *item = 0;
if (m_bNoBlanks) {
item = GetDlgItem(IDOK);
if (item) {
if (m_bConfigure) {
item->EnableWindow(!m_strBase.IsEmpty());
} else {
item->EnableWindow(TRUE);
}
}
}
}
void CAttrString::Initialize(CResult * pResult)
{
CAttribute::Initialize(pResult);
pResult->GetDisplayName( NULL, m_strSetting, 2 );
if ((LONG_PTR)ULongToPtr(SCE_NO_VALUE) == pResult->GetBase() ||
NULL == pResult->GetBase() ){
m_bConfigure = FALSE;
} else {
m_bConfigure = TRUE;
pResult->GetDisplayName( NULL, m_strBase, 1 );
}
if (m_pData->GetID() == IDS_NEW_ADMIN ||
m_pData->GetID() == IDS_NEW_GUEST) {
m_bNoBlanks = TRUE;
} else {
m_bNoBlanks = FALSE;
}
}
BOOL CAttrString::OnApply()
{
if ( !m_bReadOnly )
{
LONG_PTR dw = 0;
UpdateData(TRUE);
BOOL bChanged=TRUE;
m_strBase.TrimLeft();
m_strBase.TrimRight();
if (!m_bConfigure)
{
dw = 0;
if ( (LONG_PTR)ULongToPtr(SCE_NO_VALUE) == m_pData->GetBase() ||
0 == m_pData->GetBase() )
{
bChanged = FALSE;
}
}
else
{
dw = (LONG_PTR)(LPCTSTR)m_strBase;
if ( m_pData->GetBase() && dw &&
(LONG_PTR)ULongToPtr(SCE_NO_VALUE) != m_pData->GetBase() &&
_wcsicmp((LPTSTR)(m_pData->GetBase()), (LPTSTR)dw) == 0 )
{
bChanged = FALSE;
}
}
if ( bChanged )
{
if ( m_pData->GetSetting() == m_pData->GetBase() &&
m_pData->GetSetting() )
{
// a good item, need take the base into setting
m_pSnapin->TransferAnalysisName(m_pData->GetID());
}
m_pData->SetBase(dw);
DWORD dwStatus = m_pSnapin->SetAnalysisInfo(m_pData->GetID(),dw, m_pData);
m_pData->SetStatus(dwStatus);
m_pData->Update(m_pSnapin);
}
}
return CAttribute::OnApply();
}
void CAttrString::OnChangeNew()
{
CWnd *cwnd = 0;
if (m_bNoBlanks) {
UpdateData(TRUE);
cwnd = GetDlgItem(IDOK);
if (cwnd) {
cwnd->EnableWindow(!m_strBase.IsEmpty());
}
}
SetModified(TRUE);
}
BOOL CAttrString::OnKillActive() {
if ( m_bNoBlanks && m_bConfigure ) //Raid #407190
{
UpdateData(TRUE);
m_strBase.TrimLeft();
m_strBase.TrimRight();
UpdateData(FALSE);
PCWSTR szInvalidCharSet = INVALID_ACCOUNT_NAME_CHARS;
if (m_strBase.IsEmpty() || -1 != m_strBase.FindOneOf(szInvalidCharSet) )
{
CString str;
CString charsWithSpaces;
int nIndex = 0;
while (szInvalidCharSet[nIndex])
{
charsWithSpaces += szInvalidCharSet[nIndex];
charsWithSpaces += L" ";
nIndex++;
}
str.FormatMessage (IDS_EMPTY_NAME_STRING, charsWithSpaces);
AfxMessageBox(str);
GetDlgItem(IDC_NEW)->SetFocus();
return FALSE;
}
}
return TRUE;
}