windows-nt/Source/XPSP1/NT/admin/wizards/addgrpw/romaine.cpp
2020-09-26 16:20:57 +08:00

295 lines
6.6 KiB
C++

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1991-1996 **/
/**********************************************************************/
/*
stdafx.cpp
Romaine.cpp : Defines the class behaviors for the application.
FILE HISTORY:
jony Apr-1996 created
*/
#include "stdafx.h"
#include "NetTree.h"
#include "Romaine.h"
#include "Welcome.h"
#include "Where.h"
#include "Type.h"
#include "What.h"
#include "userlist.h"
#include "LUsers.h"
#include "GUsers.h"
#include "finish.h"
#include "ExGrp.h"
#include "LRem.h"
#include <winreg.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
TCHAR pszTreeEvent[] = _T("TreeThread");
extern int ClassifyMachine(CString& csMachine);
/////////////////////////////////////////////////////////////////////////////
// CRomaineApp
BEGIN_MESSAGE_MAP(CRomaineApp, CWinApp)
//{{AFX_MSG_MAP(CRomaineApp)
//}}AFX_MSG
// ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRomaineApp construction
CRomaineApp::CRomaineApp()
{
bRestart1 = FALSE;
bRestart2 = FALSE;
// get our primary domain and save it for NETTREE
DWORD dwRet;
HKEY hKey;
DWORD cbProv = 0;
TCHAR* lpProv = NULL;
CRomaineApp* pApp = (CRomaineApp*)AfxGetApp();
dwRet = RegOpenKey(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"), &hKey );
TCHAR* lpPrimaryDomain = NULL;
if ((dwRet = RegQueryValueEx( hKey, TEXT("CachePrimaryDomain"), NULL, NULL, NULL, &cbProv )) == ERROR_SUCCESS)
{
lpPrimaryDomain = (TCHAR*)malloc(cbProv);
if (lpPrimaryDomain == NULL)
{
AfxMessageBox(IDS_GENERIC_NO_HEAP, MB_ICONEXCLAMATION);
exit(1);
}
dwRet = RegQueryValueEx( hKey, TEXT("CachePrimaryDomain"), NULL, NULL, (LPBYTE) lpPrimaryDomain, &cbProv );
}
RegCloseKey(hKey);
pApp->m_csCurrentDomain = lpPrimaryDomain;
// store the machine name too
CString csMachineName;
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
GetComputerName(csMachineName.GetBufferSetLength(MAX_COMPUTERNAME_LENGTH + 1), &dwSize);
pApp->m_csCurrentMachine = "\\\\";
pApp->m_csCurrentMachine += csMachineName;
free(lpPrimaryDomain);
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CRomaineApp object
CRomaineApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CRomaineApp initialization
BOOL CRomaineApp::IsSecondInstance()
{
HANDLE hSem;
//create a semaphore object with max count of 1
hSem = CreateSemaphore(NULL, 0, 1, L"Group Wizard Semaphore");
if (hSem!=NULL && GetLastError() == ERROR_ALREADY_EXISTS) {
CloseHandle(hSem);
CString csAppName;
csAppName.LoadString(AFX_IDS_APP_TITLE);
CWnd* pWnd = CWnd::FindWindow(NULL, (LPCTSTR)csAppName);
if (pWnd)
pWnd->SetForegroundWindow();
return TRUE;
}
return FALSE;
}
BOOL CRomaineApp::InitInstance()
{
// check for OS version
OSVERSIONINFO os;
os.dwOSVersionInfoSize = sizeof(os);
GetVersionEx(&os);
if (os.dwMajorVersion < 4)
{
AfxMessageBox(IDS_BAD_VERSION, MB_ICONSTOP);
ExitProcess(0);
}
if (IsSecondInstance())
return FALSE;
// if there is a directory name on the command line, load an extra class
if (m_lpCmdLine[0] != '\0')
{
m_csCmdLine = m_lpCmdLine;
m_sCmdLine = __argc;
TCHAR* pFolder = _tcstok(m_lpCmdLine, L" ");
if (_tcsicmp(pFolder, L"/folder")) return FALSE; // anything else on the cmdline and boot it out
m_sMode = 1;
if (m_sCmdLine == 3)
{
TCHAR* pParam3 = _tcstok(NULL, L" ");
if (*(pParam3 + 1) == 'g')
{
pParam3+=3;
m_csCmdLineGroupName = pParam3;
}
else
{
pParam3+=3;
m_csServer = pParam3;
if (ClassifyMachine(m_csServer) == -1) ExitProcess(1);
}
}
if (m_sCmdLine == 4)
{
TCHAR* pParam3 = _tcstok(NULL, L" ");
TCHAR* pParam4 = _tcstok(NULL, L" ");
if (*(pParam3 + 1) == 'g')
{
pParam3+=3;
pParam4+=3;
m_csCmdLineGroupName = pParam3;
m_csServer = pParam4;
}
else
{
pParam3+=3;
pParam4+=3;
m_csServer = pParam3;
m_csCmdLineGroupName = pParam4;
}
if (ClassifyMachine(m_csServer) == -1) ExitProcess(1);
}
}
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
// create the property sheet,set 'wizmode' & set app icon
m_cps1.SetTitle(TEXT("Group Management Wizard"), 0);
m_cps1.SetWizardMode();
CWelcome* pWelcome = new CWelcome;
CLRem* pLRem = new CLRem;
CWhere* pWhere = new CWhere;
CType* pType = new CType;
CWhat* pWhat = new CWhat;
CExGrp* pEx = new CExGrp;
CLUsers* pLUsers = new CLUsers;
CGUsers* pGUsers = new CGUsers;
CFinish* pFinish = new CFinish;
// add pages
m_cps1.AddPage(pEx);
m_cps1.AddPage(pWelcome);
m_cps1.AddPage(pWhat);
m_cps1.AddPage(pLRem);
m_cps1.AddPage(pWhere);
m_cps1.AddPage(pType);
m_cps1.AddPage(pLUsers);
m_cps1.AddPage(pGUsers);
m_cps1.AddPage(pFinish);
// show the wizard
if (m_csServer != L"") m_cps1.SetActivePage(0);
else m_cps1.SetActivePage(1);
m_cps1.DoModal();
// clean up
delete pWelcome;
delete pWhere;
delete pLRem;
delete pType;
delete pWhat;
delete pLUsers;
delete pGUsers;
delete pFinish;
delete pEx;
return FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CMySheet
IMPLEMENT_DYNAMIC(CMySheet, CPropertySheet)
CMySheet::CMySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
}
CMySheet::CMySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
}
CMySheet::CMySheet() : CPropertySheet()
{
}
CMySheet::~CMySheet()
{
}
BEGIN_MESSAGE_MAP(CMySheet, CPropertySheet)
//{{AFX_MSG_MAP(CMySheet)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMySheet message handlers
BOOL CMySheet::OnInitDialog()
{
CRomaineApp* pApp = (CRomaineApp*)AfxGetApp();
HICON hIcon = LoadIcon(pApp->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
::SetClassLong(m_hWnd, GCL_HICON, (long)hIcon);
return CPropertySheet::OnInitDialog();
}
int CMySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
return -1;
// lpCreateStruct->style = WS_OVERLAPPEDWINDOW;
return 0;
}