246 lines
5.8 KiB
C++
246 lines
5.8 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
HomeDir.cpp : implementation file
|
|
|
|
CPropertyPage support for User mgmt wizard
|
|
|
|
File History:
|
|
|
|
JonY Apr-96 created
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
#include "speckle.h"
|
|
#include "wizbased.h"
|
|
#include "HomeDir.h"
|
|
|
|
#ifdef _DEBUG
|
|
//#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHomeDir property page
|
|
|
|
IMPLEMENT_DYNCREATE(CHomeDir, CWizBaseDlg)
|
|
|
|
CHomeDir::CHomeDir() : CWizBaseDlg(CHomeDir::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CHomeDir)
|
|
m_csHome_dir_drive = _T("");
|
|
m_csRemotePath = _T("");
|
|
m_rbPathLocale = 0;
|
|
m_csCaption = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CHomeDir::~CHomeDir()
|
|
{
|
|
}
|
|
|
|
void CHomeDir::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CHomeDir)
|
|
DDX_Control(pDX, IDC_DRIVE_LETTER, m_cbDriveLetter);
|
|
DDX_CBString(pDX, IDC_DRIVE_LETTER, m_csHome_dir_drive);
|
|
DDX_Text(pDX, IDC_REMOTE_PATH, m_csRemotePath);
|
|
DDX_Radio(pDX, IDC_LOCAL_PATH_BUTTON, m_rbPathLocale);
|
|
DDX_Text(pDX, IDC_STATIC1, m_csCaption);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CHomeDir, CWizBaseDlg)
|
|
//{{AFX_MSG_MAP(CHomeDir)
|
|
ON_WM_SHOWWINDOW()
|
|
ON_BN_CLICKED(IDC_LOCAL_PATH_BUTTON, OnLocalPathButton)
|
|
ON_BN_CLICKED(IDC_REMOTE_PATH_BUTTON, OnRemotePathButton)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CHomeDir message handlers
|
|
LRESULT CHomeDir::OnWizardNext()
|
|
{
|
|
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
|
|
|
|
UpdateData(TRUE);
|
|
if (m_rbPathLocale == 0) // local
|
|
{
|
|
pApp->m_csHomeDir = L""; // leave this empty per JonN and spec
|
|
pApp->m_csHome_dir_drive = "";
|
|
}
|
|
else // remote
|
|
{
|
|
if (m_csRemotePath.Left(2) != L"\\\\")
|
|
{
|
|
AfxMessageBox(IDS_INVALID_PATH);
|
|
GetDlgItem(IDC_REMOTE_PATH)->SetFocus();
|
|
return -1;
|
|
}
|
|
|
|
if (m_csHome_dir_drive == L"")
|
|
{
|
|
AfxMessageBox(IDS_NO_HOMEDIR_DRIVE_LETTER);
|
|
GetDlgItem(IDC_DRIVE_LETTER)->SetFocus();
|
|
return -1;
|
|
}
|
|
|
|
CWaitCursor wait;
|
|
// make sure directory exists
|
|
if (CreateFile((const TCHAR*)m_csRemotePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL) == INVALID_HANDLE_VALUE)
|
|
{
|
|
DWORD dwErr = GetLastError();
|
|
if (dwErr == 5) // access denied
|
|
{
|
|
AfxMessageBox(IDS_NO_DIR_PERMISSION, MB_ICONSTOP);
|
|
return -1;
|
|
}
|
|
|
|
// store the current dir so it can be restored
|
|
CString csCurDir;
|
|
GetCurrentDirectory(256, csCurDir.GetBufferSetLength(256));
|
|
csCurDir.ReleaseBuffer();
|
|
|
|
CString csMessage;
|
|
AfxFormatString1(csMessage, IDS_INVALID_DIRECTORY_NAME, m_csRemotePath);
|
|
if (AfxMessageBox(csMessage, MB_YESNO) != IDYES) return -1;
|
|
if (!CreateNewDirectory((const TCHAR*)m_csRemotePath))
|
|
{
|
|
if (AfxMessageBox(IDS_CANT_CREATE_DIRECTORY, MB_YESNO) != IDYES) return -1;
|
|
}
|
|
SetCurrentDirectory((LPCTSTR)csCurDir);
|
|
}
|
|
|
|
pApp->m_csHomeDir = m_csRemotePath;
|
|
GetDlgItem(IDC_DRIVE_LETTER)->GetWindowText(pApp->m_csHome_dir_drive);
|
|
pApp->m_csHome_dir_drive = pApp->m_csHome_dir_drive.Left(2); // trim off trailing blank
|
|
pApp->m_csHome_dir_drive.MakeUpper();
|
|
}
|
|
|
|
if (pApp->m_bRAS) return IDD_RAS_PERM_DIALOG;
|
|
else if (pApp->m_bNW) return IDD_FPNW_DLG;
|
|
else if (pApp->m_bExchange) return IDD_EXCHANGE_DIALOG;
|
|
else return IDD_RESTRICTIONS_DIALOG;
|
|
|
|
}
|
|
|
|
BOOL CHomeDir::CreateNewDirectory(const TCHAR* m_csDirectoryName)
|
|
{
|
|
// first remove the \\server\share info and CD to it
|
|
CString csDir = m_csDirectoryName;
|
|
csDir = csDir.Right(csDir.GetLength() - 2);
|
|
CString csServer = csDir.Left(csDir.Find(L"\\"));
|
|
csDir = csDir.Right((csDir.GetLength() - csServer.GetLength()) - 1);
|
|
CString csShare = csDir.Left(csDir.Find(L"\\"));
|
|
csDir = csDir.Right((csDir.GetLength() - csShare.GetLength()) - 1);
|
|
|
|
CString csPath;
|
|
csPath.Format(L"\\\\%s\\%s", csServer, csShare);
|
|
if (!SetCurrentDirectory(csPath)) return FALSE;
|
|
|
|
// parse out the individual path names and cd / md them
|
|
TCHAR* pDirectory = new TCHAR[_tcslen(csDir) * sizeof(TCHAR)];
|
|
_tcscpy(pDirectory, csDir);
|
|
TCHAR* ppDir = pDirectory;
|
|
|
|
TCHAR* pDir;
|
|
pDir = _tcstok(pDirectory, L"\\");
|
|
|
|
while (pDir != NULL)
|
|
{
|
|
if (!SetCurrentDirectory(pDir))
|
|
{
|
|
CreateDirectory(pDir, NULL);
|
|
if (!SetCurrentDirectory(pDir))
|
|
{
|
|
delete ppDir;
|
|
return FALSE;
|
|
}
|
|
}
|
|
pDir = _tcstok(NULL, L"\\");
|
|
}
|
|
|
|
delete ppDir;
|
|
|
|
TCHAR pCurDir[256];
|
|
GetCurrentDirectory(256, pCurDir);
|
|
CString csNewDir, csTemp;
|
|
csTemp.LoadString(IDS_NEW_DIR_CREATED);
|
|
csNewDir.Format(csTemp, pCurDir);
|
|
AfxMessageBox(csNewDir);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
LRESULT CHomeDir::OnWizardBack()
|
|
{
|
|
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
|
|
if (pApp->m_bLoginScript) return IDD_LOGON_SCRIPT_DIALOG;
|
|
else if (pApp->m_bProfile) return IDD_PROFILE;
|
|
else return IDD_OPTIONS_DIALOG;
|
|
|
|
}
|
|
|
|
BOOL CHomeDir::OnInitDialog()
|
|
{
|
|
CWizBaseDlg::OnInitDialog();
|
|
|
|
// m_csLocalPath = "c:\\users\\default";
|
|
|
|
// create list of available drives
|
|
int drive;
|
|
TCHAR tDrive[3];
|
|
|
|
for( drive = 3; drive <= 26; drive++ )
|
|
{
|
|
swprintf(tDrive, L"%c: ", drive + 'A' - 1 );
|
|
m_cbDriveLetter.AddString(tDrive);
|
|
}
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CHomeDir::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
{
|
|
CWizBaseDlg::OnShowWindow(bShow, nStatus);
|
|
|
|
if (bShow)
|
|
{
|
|
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
|
|
|
|
CString csTemp;
|
|
csTemp.LoadString(IDS_HOMEDIR_CAPTION);
|
|
|
|
CString csTemp2;
|
|
csTemp2.Format(csTemp, pApp->m_csUserName);
|
|
m_csCaption = csTemp2;
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CHomeDir::OnLocalPathButton()
|
|
{
|
|
GetDlgItem(IDC_DRIVE_LETTER)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_REMOTE_PATH)->EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CHomeDir::OnRemotePathButton()
|
|
{
|
|
GetDlgItem(IDC_DRIVE_LETTER)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_REMOTE_PATH)->EnableWindow(TRUE);
|
|
|
|
}
|