340 lines
7.7 KiB
C++
340 lines
7.7 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ginfo.cpp : implementation file
|
|
|
|
CPropertyPage support for User mgmt wizard
|
|
|
|
File History:
|
|
|
|
JonY Apr-96 created
|
|
|
|
--*/
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "Speckle.h"
|
|
#include "userlist.h"
|
|
#include "wizbased.h"
|
|
#include "ginfo.h"
|
|
|
|
#include <lmcons.h>
|
|
#include <lmapibuf.h>
|
|
#include <lmaccess.h>
|
|
|
|
#ifdef _DEBUG
|
|
//#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGroupInfo property page
|
|
|
|
IMPLEMENT_DYNCREATE(CGroupInfo, CWizBaseDlg)
|
|
|
|
CGroupInfo::CGroupInfo() : CWizBaseDlg(CGroupInfo::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CGroupInfo)
|
|
m_csCaption = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CGroupInfo::~CGroupInfo()
|
|
{
|
|
}
|
|
|
|
void CGroupInfo::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CGroupInfo)
|
|
DDX_Control(pDX, IDC_GROUP_MEMBER_LIST, m_lbSelectedGroups);
|
|
DDX_Control(pDX, IDC_GROUP_AVAILABLE_LIST, m_lbAvailableGroups);
|
|
DDX_Text(pDX, IDC_STATIC1, m_csCaption);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CGroupInfo, CWizBaseDlg)
|
|
//{{AFX_MSG_MAP(CGroupInfo)
|
|
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
|
|
ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton)
|
|
ON_LBN_SETFOCUS(IDC_GROUP_AVAILABLE_LIST, OnSetfocusGroupAvailableList)
|
|
ON_LBN_SETFOCUS(IDC_GROUP_MEMBER_LIST, OnSetfocusGroupMemberList)
|
|
ON_LBN_SELCHANGE(IDC_GROUP_MEMBER_LIST, OnSelchangeGroupMemberList)
|
|
ON_WM_SHOWWINDOW()
|
|
ON_LBN_DBLCLK(IDC_GROUP_AVAILABLE_LIST, OnDblclkGroupAvailableList)
|
|
ON_LBN_DBLCLK(IDC_GROUP_MEMBER_LIST, OnDblclkGroupMemberList)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGroupInfo message handlers
|
|
|
|
BOOL CGroupInfo::OnInitDialog()
|
|
{
|
|
CWizBaseDlg::OnInitDialog();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CGroupInfo::OnAddButton()
|
|
{
|
|
UpdateData(TRUE);
|
|
USHORT usSel = m_lbAvailableGroups.GetCurSel();
|
|
if (usSel == LB_ERR)
|
|
{
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
|
|
m_lbSelectedGroups.SetCurSel(0);
|
|
return;
|
|
}
|
|
|
|
CString csSel;
|
|
m_lbAvailableGroups.GetText(usSel, csSel);
|
|
USHORT usBmp = m_lbAvailableGroups.GetBitmapID(usSel);
|
|
m_lbSelectedGroups.AddString(csSel, usBmp);
|
|
m_lbAvailableGroups.DeleteString(usSel);
|
|
|
|
// anybody left?
|
|
if (m_lbAvailableGroups.GetCount() != 0)
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
|
|
else
|
|
{
|
|
m_lbSelectedGroups.SetCurSel(0);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
|
|
m_lbAvailableGroups.SetHorizontalExtent(0);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void CGroupInfo::OnRemoveButton()
|
|
{
|
|
UpdateData(TRUE);
|
|
USHORT usSel = m_lbSelectedGroups.GetCurSel();
|
|
if (usSel == 65535)
|
|
{
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
return;
|
|
}
|
|
|
|
CString csSel;
|
|
m_lbSelectedGroups.GetText(usSel, csSel);
|
|
|
|
USHORT usBmp = m_lbSelectedGroups.GetBitmapID(usSel);
|
|
m_lbAvailableGroups.AddString(csSel, usBmp);
|
|
m_lbSelectedGroups.DeleteString(usSel);
|
|
|
|
// anybody left?
|
|
if (m_lbSelectedGroups.GetCount() != 0)
|
|
m_lbSelectedGroups.SetCurSel(0);
|
|
|
|
else
|
|
{
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
|
|
m_lbSelectedGroups.SetHorizontalExtent(0);
|
|
}
|
|
}
|
|
|
|
LRESULT CGroupInfo::OnWizardBack()
|
|
{
|
|
return CPropertyPage::OnWizardBack();
|
|
}
|
|
|
|
LRESULT CGroupInfo::OnWizardNext()
|
|
{
|
|
UpdateData(TRUE);
|
|
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
|
|
|
|
// add selected groups to list
|
|
pApp->m_csaSelectedLocalGroups.RemoveAll();
|
|
pApp->m_csaSelectedGlobalGroups.RemoveAll();
|
|
short sGroupCount = m_lbSelectedGroups.GetCount();
|
|
short sCount;
|
|
CString csVal;
|
|
for (sCount = 0; sCount < sGroupCount; sCount++)
|
|
{
|
|
USHORT usBmp = m_lbSelectedGroups.GetBitmapID(sCount);
|
|
m_lbSelectedGroups.GetText(sCount, csVal);
|
|
|
|
if (usBmp == 3) pApp->m_csaSelectedLocalGroups.Add(csVal);
|
|
else if (usBmp == 1) pApp->m_csaSelectedGlobalGroups.Add(csVal);
|
|
}
|
|
|
|
pApp->m_cps1.SetWizardButtons(PSWIZB_NEXT | PSWIZB_BACK);
|
|
|
|
return CPropertyPage::OnWizardNext();
|
|
}
|
|
|
|
void CGroupInfo::OnSetfocusGroupAvailableList()
|
|
{
|
|
m_lbSelectedGroups.SetCurSel(-1);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CGroupInfo::OnSetfocusGroupMemberList()
|
|
{
|
|
UpdateData(TRUE);
|
|
m_lbAvailableGroups.SetCurSel(-1);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
|
|
|
|
}
|
|
|
|
void CGroupInfo::OnSelchangeGroupMemberList()
|
|
{
|
|
UpdateData(TRUE);
|
|
}
|
|
|
|
void CGroupInfo::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
{
|
|
CWizBaseDlg::OnShowWindow(bShow, nStatus);
|
|
|
|
if (!bShow) return;
|
|
CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
|
|
|
|
if (!pApp->m_bGReset) return;
|
|
pApp->m_bGReset = FALSE;
|
|
m_lbAvailableGroups.ResetContent();
|
|
m_lbSelectedGroups.ResetContent();
|
|
|
|
CWaitCursor wait;
|
|
|
|
DWORD dwEntriesRead = 0;
|
|
DWORD dwTotalEntries = 0;
|
|
DWORD dwResumeHandle = 0;
|
|
|
|
NET_API_STATUS nApi;
|
|
unsigned long sIndex;
|
|
|
|
TCHAR* pServer = pApp->m_csServer.GetBuffer(pApp->m_csServer.GetLength());
|
|
pApp->m_csServer.ReleaseBuffer();
|
|
|
|
// if this is on a domain, check for global groups
|
|
if (pApp->m_bDomain)
|
|
{
|
|
PGROUP_INFO_1 pInfo;
|
|
|
|
do
|
|
{
|
|
nApi = NetGroupEnum(pServer,
|
|
(DWORD)1,
|
|
(PBYTE*)&pInfo,
|
|
(DWORD)5000,
|
|
&dwEntriesRead,
|
|
&dwTotalEntries,
|
|
&dwResumeHandle);
|
|
|
|
for (sIndex = 0; sIndex < dwEntriesRead; sIndex++)
|
|
{
|
|
TCHAR sTemp[50];
|
|
|
|
swprintf(sTemp, TEXT("%s"), pInfo[sIndex].grpi1_name);
|
|
m_lbAvailableGroups.AddString(1, sTemp);
|
|
}
|
|
|
|
NetApiBufferFree(pInfo);
|
|
} while (dwResumeHandle != 0);
|
|
|
|
// m_lbSelectedGroups.AddString(1, TEXT("Domain Users"));
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
PLOCALGROUP_INFO_1 pLocalInfo;
|
|
dwResumeHandle = 0;
|
|
do
|
|
{
|
|
nApi = NetLocalGroupEnum(pServer,
|
|
(DWORD)1,
|
|
(PBYTE*)&pLocalInfo,
|
|
(DWORD)5000,
|
|
&dwEntriesRead,
|
|
&dwTotalEntries,
|
|
&dwResumeHandle);
|
|
|
|
for (sIndex = 0; sIndex < dwEntriesRead; sIndex++)
|
|
{
|
|
TCHAR sTemp[50];
|
|
|
|
swprintf(sTemp, TEXT("%s"), pLocalInfo[sIndex].lgrpi1_name);
|
|
m_lbAvailableGroups.AddString(3, sTemp);
|
|
}
|
|
|
|
NetApiBufferFree(pLocalInfo);
|
|
} while (dwResumeHandle != 0);
|
|
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
|
|
// set caption text
|
|
CString csTemp;
|
|
csTemp.LoadString(IDS_GROUP_CAPTION);
|
|
|
|
CString csTemp2;
|
|
csTemp2.Format(csTemp, pApp->m_csUserName);
|
|
m_csCaption = csTemp2;
|
|
UpdateData(FALSE);
|
|
|
|
}
|
|
|
|
void CGroupInfo::OnDblclkGroupAvailableList()
|
|
{
|
|
UpdateData(TRUE);
|
|
USHORT usSel = m_lbAvailableGroups.GetCurSel();
|
|
CString csSel;
|
|
m_lbAvailableGroups.GetText(usSel, csSel);
|
|
USHORT usBmp = m_lbAvailableGroups.GetBitmapID(usSel);
|
|
m_lbSelectedGroups.AddString(csSel, usBmp);
|
|
m_lbAvailableGroups.DeleteString(usSel);
|
|
|
|
// anybody left?
|
|
if (m_lbAvailableGroups.GetCount() != 0)
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
|
|
else
|
|
{
|
|
m_lbSelectedGroups.SetCurSel(0);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE);
|
|
m_lbAvailableGroups.SetHorizontalExtent(0);
|
|
}
|
|
|
|
}
|
|
|
|
void CGroupInfo::OnDblclkGroupMemberList()
|
|
{
|
|
UpdateData(TRUE);
|
|
USHORT usSel = m_lbSelectedGroups.GetCurSel();
|
|
CString csSel;
|
|
m_lbSelectedGroups.GetText(usSel, csSel);
|
|
|
|
USHORT usBmp = m_lbSelectedGroups.GetBitmapID(usSel);
|
|
m_lbAvailableGroups.AddString(csSel, usBmp);
|
|
m_lbSelectedGroups.DeleteString(usSel);
|
|
|
|
// anybody left?
|
|
if (m_lbSelectedGroups.GetCount() != 0)
|
|
m_lbSelectedGroups.SetCurSel(0);
|
|
|
|
else
|
|
{
|
|
m_lbAvailableGroups.SetCurSel(0);
|
|
GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE);
|
|
GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE);
|
|
m_lbSelectedGroups.SetHorizontalExtent(0);
|
|
}
|
|
|
|
}
|