windows-nt/Source/XPSP1/NT/admin/snapin/filemgmt/shrpub.cpp
2020-09-26 16:20:57 +08:00

270 lines
9.4 KiB
C++

// svcprop1.cpp : implementation file
//
#include "stdafx.h"
#include "compdata.h"
#include "resource.h"
#include "shrpub.h"
#include "mvedit.h"
#include "filesvc.h"
#include "dataobj.h" // CFileMgmtDataObject::m_CFMachineName
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSharePagePublish property page
IMPLEMENT_DYNCREATE(CSharePagePublish, CSharePage)
CSharePagePublish::CSharePagePublish() :
CSharePage(CSharePagePublish::IDD)
{
m_bExposeKeywords = TRUE;
m_bExposeManagedBy = TRUE;
//{{AFX_DATA_INIT(CSharePagePublish)
m_iPublish = BST_UNCHECKED;
//}}AFX_DATA_INIT
}
CSharePagePublish::~CSharePagePublish()
{
m_handle = NULL; // let General page call MMCFreeNotifyHandle
}
BOOL CSharePagePublish::Load( CFileMgmtComponentData* pFileMgmtData, LPDATAOBJECT piDataObject )
{
if ( FALSE == CSharePage::Load (pFileMgmtData, piDataObject) )
return FALSE;
if (FILEMGMT_SMB != m_transport)
return FALSE;
return TRUE;
}
void CSharePagePublish::DoDataExchange(CDataExchange* pDX)
{
CSharePage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSharePagePublish)
DDX_Check(pDX, IDC_CHECK_SHRPUB_PUBLISH, m_iPublish);
DDX_Text(pDX, IDC_STATIC_SHRPUB_ERRORMSG, m_strError);
DDX_Text(pDX, IDC_EDIT_SHRPUB_UNCPATH, m_strUNCPath);
DDX_Text(pDX, IDC_EDIT_SHRPUB_DESCRIPTION, m_strDescription);
DDX_Text(pDX, IDC_EDIT_SHRPUB_KEYWORDS, m_strKeywords);
DDX_Text(pDX, IDC_EDIT_SHRPUB_MANAGEDBY, m_strManagedBy);
DDV_MaxChars(pDX, m_strDescription, 1024); // AD schema defines its upper to be 1024
//}}AFX_DATA_MAP
if ( !pDX->m_bSaveAndValidate )
{
if (BST_CHECKED != m_iPublish)
{
GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
}
}
} // CSharePagePublish::DoDataExchange()
BEGIN_MESSAGE_MAP(CSharePagePublish, CSharePage)
//{{AFX_MSG_MAP(CSharePagePublish)
ON_MESSAGE(WM_HELP, OnHelp)
ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp)
ON_EN_CHANGE(IDC_EDIT_SHRPUB_DESCRIPTION, OnChangeEditDescription)
ON_BN_CLICKED(IDC_BUTTON_SHRPUB_CHANGE, OnChangeKeywords)
ON_EN_CHANGE(IDC_EDIT_SHRPUB_MANAGEDBY, OnChangeEditManagedBy)
ON_BN_CLICKED(IDC_CHECK_SHRPUB_PUBLISH, OnShrpubPublish)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSharePagePublish message handlers
#define MAX_RDN_KEY_SIZE 64 // ds\src\inc\ntdsa.h
BOOL CSharePagePublish::OnInitDialog()
{
BOOL bPublish = FALSE;
HRESULT hr = S_OK;
BOOL bLongShareName = (lstrlen(m_strShareName) > MAX_RDN_KEY_SIZE);
if (!bLongShareName)
m_pFileMgmtData->GetFileServiceProvider(FILEMGMT_SMB)->ReadSharePublishInfo(
m_strMachineName,
m_strShareName,
&bPublish,
m_strUNCPath,
m_strDescription,
m_strKeywords,
m_strManagedBy
);
if (bLongShareName || FAILED(hr))
{
if (bLongShareName)
{
(void) GetMsg(m_strError, 0, IDS_MSG_SHRPUB_ERRMSG_64);
} else
{
(void) GetMsg(m_strError, hr, IDS_MSG_READ_SHRPUB, m_strShareName);
}
//
// show errmsg, hide all the other controls
//
GetDlgItem(IDC_CHECK_SHRPUB_PUBLISH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CHECK_SHRPUB_PUBLISH)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
} else
{
GetDlgItem(IDC_STATIC_SHRPUB_ERRORMSG)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_SHRPUB_ERRORMSG)->EnableWindow(FALSE);
if (!m_bExposeKeywords)
{
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(FALSE);
}
if (!m_bExposeManagedBy)
{
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(FALSE);
}
if (!bPublish)
{
if (m_strMachineName.Left(2) == _T("\\\\"))
{
m_strUNCPath = m_strMachineName;
} else
{
m_strUNCPath = _T("\\\\");
m_strUNCPath += m_strMachineName;
}
m_strUNCPath += _T("\\");
m_strUNCPath += m_strShareName;
}
m_iPublish = (bPublish ? BST_CHECKED : BST_UNCHECKED);
}
return CSharePage::OnInitDialog();
}
/////////////////////////////////////////////////////////////////////
// Help
BOOL CSharePagePublish::OnHelp(WPARAM /*wParam*/, LPARAM lParam)
{
return DoHelp(lParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_PUBLISH));
}
BOOL CSharePagePublish::OnContextHelp(WPARAM wParam, LPARAM /*lParam*/)
{
return DoContextHelp(wParam, HELP_DIALOG_TOPIC(IDD_SHAREPROP_PUBLISH));
}
BOOL CSharePagePublish::OnApply()
{
if ( IsModified () )
{
ASSERT(NULL != m_pFileMgmtData);
// UpdateData (TRUE) has already been called by OnKillActive () just before OnApply ()
HRESULT hr =
m_pFileMgmtData->GetFileServiceProvider(FILEMGMT_SMB)->WriteSharePublishInfo(
m_strMachineName,
m_strShareName,
(BST_CHECKED==m_iPublish),
m_strDescription,
m_strKeywords,
m_strManagedBy);
if (FAILED(hr))
{
DoErrMsgBox(m_hWnd, MB_OK | MB_ICONEXCLAMATION, hr, IDS_POPUP_WRITE_SHRPUB, m_strShareName);
return FALSE;
}
}
return CSharePage::OnApply();
}
void CSharePagePublish::OnChangeEditDescription()
{
SetModified (TRUE);
}
#define KEYTWORDS_UPPER_RANGER 256
void CSharePagePublish::OnChangeKeywords()
{
if (S_OK == InvokeMultiValuedStringEditDlg(
this,
m_strKeywords,
_T(";"),
IDS_MVSTRINGEDIT_TITLE_KEYWORDS,
IDS_MVSTRINGEDIT_TEXT_KEYWORDS,
KEYTWORDS_UPPER_RANGER))
{
SetDlgItemText(IDC_EDIT_SHRPUB_KEYWORDS, m_strKeywords);
SetModified (TRUE);
}
}
void CSharePagePublish::OnChangeEditManagedBy()
{
SetModified (TRUE);
}
void CSharePagePublish::OnShrpubPublish()
{
BOOL bPublish = (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_SHRPUB_PUBLISH));
GetDlgItem(IDC_LABEL_SHRPUB_UNCPATH)->EnableWindow(bPublish);
GetDlgItem(IDC_EDIT_SHRPUB_UNCPATH)->EnableWindow(bPublish);
GetDlgItem(IDC_LABEL_SHRPUB_DESCRIPTION)->EnableWindow(bPublish);
GetDlgItem(IDC_EDIT_SHRPUB_DESCRIPTION)->EnableWindow(bPublish);
GetDlgItem(IDC_LABEL_SHRPUB_KEYWORDS)->EnableWindow(bPublish);
GetDlgItem(IDC_EDIT_SHRPUB_KEYWORDS)->EnableWindow(bPublish);
GetDlgItem(IDC_LABEL_SHRPUB_MANAGEDBY)->EnableWindow(bPublish);
GetDlgItem(IDC_EDIT_SHRPUB_MANAGEDBY)->EnableWindow(bPublish);
GetDlgItem(IDC_BUTTON_SHRPUB_CHANGE)->EnableWindow(bPublish);
SetModified (TRUE);
}