static VOID
-GetGroupData(HWND hwndDlg, LPTSTR lpGroupName)
+GetGeneralGroupData(HWND hwndDlg,
+ PGENERAL_GROUP_DATA pGroupData)
{
PLOCALGROUP_INFO_1 groupInfo = NULL;
PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL;
(void)ListView_InsertColumn(hwndLV, 0, &column);
/* Set group name */
- SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, lpGroupName);
+ SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, pGroupData->szGroupName);
/* Set group description */
- NetLocalGroupGetInfo(NULL, lpGroupName, 1, (LPBYTE*)&groupInfo);
+ NetLocalGroupGetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&groupInfo);
SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment);
NetApiBufferFree(groupInfo);
/* Set group members */
- NetLocalGroupGetMembers(NULL, lpGroupName, 1, (LPBYTE*)&membersInfo,
+ NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo,
MAX_PREFERRED_LENGTH, &dwRead, &dwTotal,
&resumeHandle);
wsprintf(szGroupName,
TEXT("%s\\%s (%s)"),
-
membersInfo[i].lgrmi1_name,
szSid);
}
+static BOOL
+SetGeneralGroupData(HWND hwndDlg,
+ PGENERAL_GROUP_DATA pGroupData)
+{
+ LOCALGROUP_INFO_1 groupInfo;
+ LPTSTR pszComment = NULL;
+ INT nLength;
+ NET_API_STATUS status;
+ DWORD dwIndex;
+
+ /* Get the group description */
+ nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION));
+ if (nLength == 0)
+ {
+ groupInfo.lgrpi1_comment = NULL;
+ }
+ else
+ {
+ pszComment = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
+ GetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, pszComment, nLength + 1);
+ groupInfo.lgrpi1_comment = pszComment;
+ }
+
+ status = NetLocalGroupSetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE)&groupInfo, &dwIndex);
+ if (status != NERR_Success)
+ {
+ DebugPrintf(_T("Status: %lu Index: %lu"), status, dwIndex);
+ }
+
+ if (pszComment)
+ HeapFree(GetProcessHeap(), 0, pszComment);
+
+ return TRUE;
+}
+
+
INT_PTR CALLBACK
GroupGeneralPageProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
+ PGENERAL_GROUP_DATA pGroupData;
+
UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(hwndDlg);
+ pGroupData= (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
+
switch (uMsg)
{
case WM_INITDIALOG:
- GetGroupData(hwndDlg,
- (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
+ pGroupData = (PGENERAL_GROUP_DATA)HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY,
+ sizeof(GENERAL_GROUP_DATA) +
+ lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
+ lstrcpy(pGroupData->szGroupName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
+
+ SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData);
+
+ GetGeneralGroupData(hwndDlg,
+ pGroupData);
break;
case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_GROUP_GENERAL_DESCRIPTION:
+ if (HIWORD(wParam) == EN_CHANGE)
+ PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY)
+ {
+ SetGeneralGroupData(hwndDlg, pGroupData);
+ return TRUE;
+ }
break;
case WM_DESTROY:
+ HeapFree(GetProcessHeap(), 0, pGroupData);
break;
}
}
+static VOID
+UpdateGroupProperties(HWND hwndDlg)
+{
+ TCHAR szGroupName[UNLEN];
+ INT iItem;
+ HWND hwndLV;
+ NET_API_STATUS status;
+ PLOCALGROUP_INFO_1 pGroupInfo = NULL;
+
+ hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);
+ iItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
+ if (iItem == -1)
+ return;
+
+ /* Get the group name */
+ ListView_GetItemText(hwndLV,
+ iItem, 0,
+ szGroupName,
+ UNLEN);
+
+ status = NetLocalGroupGetInfo(NULL, szGroupName, 1, (LPBYTE*)&pGroupInfo);
+
+ ListView_SetItemText(hwndLV, iItem, 1,
+ pGroupInfo->lgrpi1_comment);
+
+ NetApiBufferFree(pGroupInfo);
+}
+
+
INT_PTR CALLBACK
NewGroupDlgProc(HWND hwndDlg,
UINT uMsg,
break;
case IDM_GROUP_PROPERTIES:
- GroupProperties(hwndDlg);
+ if (GroupProperties(hwndDlg) == IDOK)
+ UpdateGroupProperties(hwndDlg);
break;
}
break;
if (pszFullName)
HeapFree(GetProcessHeap(), 0, pszFullName);
+ if (pszComment)
+ HeapFree(GetProcessHeap(), 0, pszComment);
+
NetApiBufferFree(pUserInfo);
return (status == NERR_Success);
lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
lstrcpy(pUserData->szUserName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
+ SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
+
GetGeneralUserData(hwndDlg,
pUserData);
-
- SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pUserData);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
+ case IDC_USER_GENERAL_FULL_NAME:
+ case IDC_USER_GENERAL_DESCRIPTION:
+ if (HIWORD(wParam) == EN_CHANGE)
+ PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
+ break;
+
case IDC_USER_GENERAL_FORCE_CHANGE:
pUserData->dwPasswordExpired = !pUserData->dwPasswordExpired;
UpdateUserOptions(hwndDlg, pUserData, FALSE);