180 lines
4.8 KiB
C++
180 lines
4.8 KiB
C++
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
|
||
|
/*-----------------------------------------------------------------------------
|
||
|
/ Local functions / data
|
||
|
/----------------------------------------------------------------------------*/
|
||
|
|
||
|
static WCHAR c_szQueryPrefixUser[] =
|
||
|
L"(|"
|
||
|
L"(&(objectCategory=person)(objectSid=*)(!samAccountType:1.2.840.113556.1.4.804:=3))"
|
||
|
L"(&(objectCategory=person)(!objectSid=*))"
|
||
|
L"(&(objectCategory=group)(groupType:1.2.840.113556.1.4.804:=14))"
|
||
|
L")";
|
||
|
|
||
|
static COLUMNINFO columns[] =
|
||
|
{
|
||
|
0, 0, IDS_CN, 0, c_szName,
|
||
|
0, 0, IDS_OBJECTCLASS, DSCOLUMNPROP_OBJECTCLASS, NULL,
|
||
|
0, DEFAULT_WIDTH_DESCRIPTION, IDS_DESCRIPTION, 0, c_szDescription,
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Help ID mappings
|
||
|
//
|
||
|
|
||
|
static DWORD const aFormHelpIDs[] =
|
||
|
{
|
||
|
IDC_USERNAME, IDH_USER_GROUP_NAME,
|
||
|
IDC_USERDESC, IDH_USER_GROUP_DESCRIPTION,
|
||
|
0, 0
|
||
|
};
|
||
|
|
||
|
|
||
|
/*-----------------------------------------------------------------------------
|
||
|
/ Users and Groups
|
||
|
/----------------------------------------------------------------------------*/
|
||
|
|
||
|
static PAGECTRL ctrlsUser[] =
|
||
|
{
|
||
|
IDC_USERNAME, L"anr", FILTER_CONTAINS,
|
||
|
IDC_USERDESC, c_szDescription, FILTER_CONTAINS,
|
||
|
};
|
||
|
|
||
|
static LPWSTR c_szClassListUsers[] =
|
||
|
{
|
||
|
L"user",
|
||
|
L"group",
|
||
|
L"contact",
|
||
|
};
|
||
|
|
||
|
|
||
|
/*-----------------------------------------------------------------------------
|
||
|
/ PageProc_User
|
||
|
/ -------------
|
||
|
/ PageProc for handling the messages for this object.
|
||
|
/
|
||
|
/ In:
|
||
|
/ pPage -> instance data for this form
|
||
|
/ hwnd = window handle for the form dialog
|
||
|
/ uMsg, wParam, lParam = message parameters
|
||
|
/
|
||
|
/ Out:
|
||
|
/ HRESULT (E_NOTIMPL) if not handled
|
||
|
/----------------------------------------------------------------------------*/
|
||
|
HRESULT CALLBACK PageProc_User(LPCQPAGE pPage, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
LPWSTR pQuery = NULL;
|
||
|
|
||
|
TraceEnter(TRACE_FORMS, "PageProc_User");
|
||
|
|
||
|
switch ( uMsg )
|
||
|
{
|
||
|
case CQPM_INITIALIZE:
|
||
|
case CQPM_RELEASE:
|
||
|
break;
|
||
|
|
||
|
case CQPM_ENABLE:
|
||
|
EnablePageControls(hwnd, ctrlsUser, ARRAYSIZE(ctrlsUser), (BOOL)wParam);
|
||
|
break;
|
||
|
|
||
|
case CQPM_GETPARAMETERS:
|
||
|
{
|
||
|
hr = GetQueryString(&pQuery, c_szQueryPrefixUser, hwnd, ctrlsUser, ARRAYSIZE(ctrlsUser));
|
||
|
|
||
|
if ( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = QueryParamsAlloc((LPDSQUERYPARAMS*)lParam, pQuery, GLOBAL_HINSTANCE, ARRAYSIZE(columns), columns);
|
||
|
LocalFreeStringW(&pQuery);
|
||
|
}
|
||
|
|
||
|
FailGracefully(hr, "Failed to build DS argument block");
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case CQPM_CLEARFORM:
|
||
|
ResetPageControls(hwnd, ctrlsUser, ARRAYSIZE(ctrlsUser));
|
||
|
break;
|
||
|
|
||
|
case CQPM_PERSIST:
|
||
|
{
|
||
|
BOOL fRead = (BOOL)wParam;
|
||
|
IPersistQuery* pPersistQuery = (IPersistQuery*)lParam;
|
||
|
|
||
|
hr = PersistQuery(pPersistQuery, fRead, c_szMsPeople, hwnd, ctrlsUser, ARRAYSIZE(ctrlsUser));
|
||
|
FailGracefully(hr, "Failed to persist page");
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case CQPM_HELP:
|
||
|
{
|
||
|
LPHELPINFO pHelpInfo = (LPHELPINFO)lParam;
|
||
|
WinHelp((HWND)pHelpInfo->hItemHandle,
|
||
|
DSQUERY_HELPFILE,
|
||
|
HELP_WM_HELP,
|
||
|
(DWORD_PTR)aFormHelpIDs);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case DSQPM_GETCLASSLIST:
|
||
|
{
|
||
|
hr = ClassListAlloc((LPDSQUERYCLASSLIST*)lParam, c_szClassListUsers, ARRAYSIZE(c_szClassListUsers));
|
||
|
FailGracefully(hr, "Failed to allocate class list");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case DSQPM_HELPTOPICS:
|
||
|
{
|
||
|
HWND hwndFrame = (HWND)lParam;
|
||
|
HtmlHelp(hwndFrame, TEXT("omc.chm"), HH_HELP_FINDER, 0);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
hr = E_NOTIMPL;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
exit_gracefully:
|
||
|
|
||
|
TraceLeaveResult(hr);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*-----------------------------------------------------------------------------
|
||
|
/ DlgProc_User
|
||
|
/ ------------
|
||
|
/ Handle dialog specific message for the users page.
|
||
|
/
|
||
|
/ In:
|
||
|
/ hwnd, uMsg, wParam, lParam = standard parameters
|
||
|
/
|
||
|
/ Out:
|
||
|
/ INT_PTR
|
||
|
/----------------------------------------------------------------------------*/
|
||
|
INT_PTR CALLBACK DlgProc_User(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
INT_PTR fResult = 0;
|
||
|
LPCQPAGE pQueryPage;
|
||
|
|
||
|
if ( uMsg == WM_INITDIALOG )
|
||
|
{
|
||
|
pQueryPage = (LPCQPAGE)lParam;
|
||
|
SetWindowLongPtr(hwnd, DWLP_USER, (LRESULT)pQueryPage);
|
||
|
|
||
|
Edit_LimitText(GetDlgItem(hwnd, IDC_USERNAME), MAX_PATH);
|
||
|
Edit_LimitText(GetDlgItem(hwnd, IDC_USERDESC), MAX_PATH);
|
||
|
}
|
||
|
else if ( uMsg == WM_CONTEXTMENU )
|
||
|
{
|
||
|
WinHelp((HWND)wParam, DSQUERY_HELPFILE, HELP_CONTEXTMENU, (DWORD_PTR)aFormHelpIDs);
|
||
|
fResult = TRUE;
|
||
|
}
|
||
|
|
||
|
return fResult;
|
||
|
}
|