ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

groupprops.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS User Manager Control Panel
00004  * FILE:            dll/cpl/usrmgr/groupprops.c
00005  * PURPOSE:         Group property sheet
00006  *
00007  * PROGRAMMERS:     Eric Kohl
00008  */
00009 
00010 #include "usrmgr.h"
00011 
00012 typedef struct _GENERAL_GROUP_DATA
00013 {
00014     TCHAR szGroupName[1];
00015 } GENERAL_GROUP_DATA, *PGENERAL_GROUP_DATA;
00016 
00017 
00018 static VOID
00019 GetTextSid(PSID pSid,
00020            LPTSTR pTextSid)
00021 {
00022     PSID_IDENTIFIER_AUTHORITY psia;
00023     DWORD dwSubAuthorities;
00024     DWORD dwSidRev = SID_REVISION;
00025     DWORD dwCounter;
00026     DWORD dwSidSize;
00027 
00028     psia = GetSidIdentifierAuthority(pSid);
00029 
00030     dwSubAuthorities = *GetSidSubAuthorityCount(pSid);
00031 
00032     dwSidSize = wsprintf(pTextSid, TEXT("S-%lu-"), dwSidRev);
00033 
00034     if ((psia->Value[0] != 0) || (psia->Value[1] != 0))
00035     {
00036         dwSidSize += wsprintf(pTextSid + lstrlen(pTextSid),
00037                               TEXT("0x%02hx%02hx%02hx%02hx%02hx%02hx"),
00038                               (USHORT)psia->Value[0],
00039                               (USHORT)psia->Value[1],
00040                               (USHORT)psia->Value[2],
00041                               (USHORT)psia->Value[3],
00042                               (USHORT)psia->Value[4],
00043                               (USHORT)psia->Value[5]);
00044     }
00045     else
00046     {
00047         dwSidSize += wsprintf(pTextSid + lstrlen(pTextSid),
00048                               TEXT("%lu"),
00049                               (ULONG)(psia->Value[5]) +
00050                               (ULONG)(psia->Value[4] <<  8) +
00051                               (ULONG)(psia->Value[3] << 16) +
00052                               (ULONG)(psia->Value[2] << 24));
00053     }
00054 
00055     for (dwCounter = 0 ; dwCounter < dwSubAuthorities ; dwCounter++)
00056     {
00057         dwSidSize += wsprintf(pTextSid + dwSidSize, TEXT("-%lu"),
00058                               *GetSidSubAuthority(pSid, dwCounter));
00059     }
00060 }
00061 
00062 
00063 static VOID
00064 InitGroupMembersList(HWND hwndDlg,
00065                      PGENERAL_GROUP_DATA pGroupData)
00066 {
00067     HWND hwndLV;
00068     LV_COLUMN column;
00069     RECT rect;
00070     TCHAR szStr[32];
00071     HIMAGELIST hImgList;
00072     HICON hIcon;
00073 
00074     NET_API_STATUS netStatus;
00075     PUSER_INFO_20 pUserBuffer;
00076     DWORD entriesread;
00077     DWORD totalentries;
00078     DWORD resume_handle = 0;
00079     DWORD i;
00080     LV_ITEM lvi;
00081     INT iItem;
00082 
00083     hwndLV = GetDlgItem(hwndDlg, IDC_USER_ADD_MEMBERSHIP_LIST);
00084     GetClientRect(hwndLV, &rect);
00085 
00086     hImgList = ImageList_Create(16,16,ILC_COLOR8 | ILC_MASK,5,5);
00087     hIcon = LoadImage(hApplet,MAKEINTRESOURCE(IDI_GROUP),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
00088     ImageList_AddIcon(hImgList,hIcon);
00089     DestroyIcon(hIcon);
00090     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00091     ImageList_AddIcon(hImgList, hIcon);
00092     DestroyIcon(hIcon);
00093     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_LOCKED_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00094     ImageList_AddIcon(hImgList, hIcon);
00095     DestroyIcon(hIcon);
00096 
00097     (void)ListView_SetImageList(hwndLV, hImgList, LVSIL_SMALL);
00098     (void)ListView_SetExtendedListViewStyle(hwndLV, LVS_EX_FULLROWSELECT);
00099 
00100     memset(&column, 0x00, sizeof(column));
00101     column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT;
00102     column.fmt = LVCFMT_LEFT;
00103     column.cx = (INT)((rect.right - rect.left) * 0.40);
00104     column.iSubItem = 0;
00105     LoadString(hApplet, IDS_NAME, szStr, sizeof(szStr) / sizeof(szStr[0]));
00106     column.pszText = szStr;
00107     (void)ListView_InsertColumn(hwndLV, 0, &column);
00108 
00109     column.cx = (INT)((rect.right - rect.left) * 0.60);
00110     column.iSubItem = 1;
00111     LoadString(hApplet, IDS_DESCRIPTION, szStr, sizeof(szStr) / sizeof(szStr[0]));
00112     column.pszText = szStr;
00113     (void)ListView_InsertColumn(hwndLV, 1, &column);
00114 
00115     /* TODO: Enumerate global groups and add them to the list! */
00116 
00117     for (;;)
00118     {
00119         netStatus = NetUserEnum(NULL, 20, FILTER_NORMAL_ACCOUNT,
00120                                 (LPBYTE*)&pUserBuffer,
00121                                 1024, &entriesread,
00122                                 &totalentries, &resume_handle);
00123         if (netStatus != NERR_Success && netStatus != ERROR_MORE_DATA)
00124             break;
00125 
00126         for (i = 0; i < entriesread; i++)
00127         {
00128            memset(&lvi, 0x00, sizeof(lvi));
00129            lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
00130            lvi.pszText = pUserBuffer[i].usri20_name;
00131            lvi.state = 0;
00132            lvi.iImage = (pUserBuffer[i].usri20_flags & UF_ACCOUNTDISABLE) ? 2 : 1;
00133            iItem = ListView_InsertItem(hwndLV, &lvi);
00134 
00135            ListView_SetItemText(hwndLV, iItem, 1,
00136                                 pUserBuffer[i].usri20_full_name);
00137 
00138            ListView_SetItemText(hwndLV, iItem, 2,
00139                                 pUserBuffer[i].usri20_comment);
00140         }
00141 
00142         NetApiBufferFree(pUserBuffer);
00143 
00144         /* No more data left */
00145         if (netStatus != ERROR_MORE_DATA)
00146             break;
00147     }
00148 }
00149 
00150 
00151 static BOOL
00152 AddSelectedUsersToGroup(HWND hwndDlg,
00153                         PGENERAL_GROUP_DATA pGroupData)
00154 {
00155     HWND hwndLV;
00156     INT nSelectedItems;
00157     INT nItem;
00158     TCHAR szUserName[UNLEN];
00159     BOOL bResult = FALSE;
00160     LOCALGROUP_MEMBERS_INFO_3 memberInfo;
00161     NET_API_STATUS status;
00162 
00163     hwndLV = GetDlgItem(hwndDlg, IDC_USER_ADD_MEMBERSHIP_LIST);
00164 
00165     nSelectedItems = ListView_GetSelectedCount(hwndLV);
00166     if (nSelectedItems > 0)
00167     {
00168         nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00169         while (nItem != -1)
00170         {
00171             /* Get the new user name */
00172             ListView_GetItemText(hwndLV,
00173                                  nItem, 0,
00174                                  szUserName,
00175                                  UNLEN);
00176 
00177             DebugPrintf(_TEXT("Selected user: %s"), szUserName);
00178 
00179             memberInfo.lgrmi3_domainandname = szUserName;
00180 
00181             status = NetLocalGroupAddMembers(NULL, pGroupData->szGroupName, 3,
00182                                              (LPBYTE)&memberInfo, 1);
00183             if (status != NERR_Success && status != ERROR_MEMBER_IN_ALIAS)
00184             {
00185                 TCHAR szText[256];
00186                 wsprintf(szText, TEXT("Error: %u"), status);
00187                 MessageBox(NULL, szText, TEXT("NetLocalGroupAddMembers"), MB_ICONERROR | MB_OK);
00188             }
00189             else
00190             {
00191                 bResult = TRUE;
00192             }
00193 
00194             nItem = ListView_GetNextItem(hwndLV, nItem, LVNI_SELECTED);
00195         }
00196     }
00197 
00198     return bResult;
00199 }
00200 
00201 
00202 INT_PTR CALLBACK
00203 AddUsersToGroupDlgProc(HWND hwndDlg,
00204                       UINT uMsg,
00205                       WPARAM wParam,
00206                       LPARAM lParam)
00207 {
00208     PGENERAL_GROUP_DATA pGroupData;
00209 
00210     UNREFERENCED_PARAMETER(wParam);
00211 
00212     pGroupData = (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00213 
00214     switch (uMsg)
00215     {
00216         case WM_INITDIALOG:
00217             pGroupData = (PGENERAL_GROUP_DATA)lParam;
00218             SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData);
00219             InitGroupMembersList(hwndDlg, pGroupData);
00220             break;
00221 
00222         case WM_COMMAND:
00223             switch (LOWORD(wParam))
00224             {
00225                 case IDOK:
00226                     if (AddSelectedUsersToGroup(hwndDlg, pGroupData))
00227                         EndDialog(hwndDlg, IDOK);
00228                     else
00229                         EndDialog(hwndDlg, IDCANCEL);
00230                     break;
00231 
00232                 case IDCANCEL:
00233                     EndDialog(hwndDlg, IDCANCEL);
00234                     break;
00235             }
00236             break;
00237 
00238         default:
00239             return FALSE;
00240     }
00241 
00242     return TRUE;
00243 }
00244 
00245 
00246 static VOID
00247 AddUsersToGroup(HWND hwndDlg,
00248                 PGENERAL_GROUP_DATA pGroupData)
00249 {
00250     HWND hwndLV;
00251 //    NET_API_STATUS status;
00252     PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL;
00253     DWORD dwRead;
00254     DWORD dwTotal;
00255     DWORD_PTR resumeHandle = 0;
00256     DWORD i;
00257     LV_ITEM lvi;
00258     TCHAR szGroupName[256];
00259 
00260     if (DialogBoxParam(hApplet,
00261                        MAKEINTRESOURCE(IDD_USER_ADD_MEMBERSHIP),
00262                        hwndDlg,
00263                        AddUsersToGroupDlgProc,
00264                        (LPARAM)pGroupData) == IDOK)
00265     {
00266         hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS);
00267 
00268         (void)ListView_DeleteAllItems(hwndLV);
00269 
00270 //        DebugPrintf(_T("Removed all users from the list!"));
00271 
00272         /* Set group members */
00273         NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo,
00274                                 MAX_PREFERRED_LENGTH, &dwRead, &dwTotal,
00275                                 &resumeHandle);
00276 
00277         for (i = 0; i < dwRead; i++)
00278         {
00279             ZeroMemory(&lvi, sizeof(lvi));
00280             lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
00281             lvi.pszText = membersInfo[i].lgrmi1_name;
00282             lvi.state = 0;
00283             lvi.iImage = (membersInfo[i].lgrmi1_sidusage == SidTypeGroup ||
00284                           membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) ? 1 : 0;
00285 
00286             if (membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup)
00287             {
00288                 TCHAR szSid[256];
00289 
00290                 GetTextSid(membersInfo[i].lgrmi1_sid, szSid);
00291 
00292                 wsprintf(szGroupName,
00293                          TEXT("%s (%s)"),
00294                          membersInfo[i].lgrmi1_name,
00295                          szSid);
00296 
00297                 lvi.pszText = szGroupName;
00298             }
00299 
00300 
00301             (void)ListView_InsertItem(hwndLV, &lvi);
00302         }
00303 
00304         NetApiBufferFree(membersInfo);
00305     }
00306 }
00307 
00308 
00309 static VOID
00310 RemoveUserFromGroup(HWND hwndDlg,
00311                     PGENERAL_GROUP_DATA pGroupData)
00312 {
00313     TCHAR szUserName[UNLEN];
00314     TCHAR szText[256];
00315     LOCALGROUP_MEMBERS_INFO_3 memberInfo;
00316     HWND hwndLV;
00317     INT nItem;
00318     NET_API_STATUS status;
00319 
00320     hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS);
00321     nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00322     if (nItem == -1)
00323         return;
00324 
00325     /* Get the new user name */
00326     ListView_GetItemText(hwndLV,
00327                          nItem, 0,
00328                          szUserName,
00329                          UNLEN);
00330 
00331     /* Display a warning message because the remove operation cannot be reverted */
00332     wsprintf(szText, TEXT("Do you really want to remove the user \"%s\" from the group \"%s\"?"),
00333              szUserName, pGroupData->szGroupName);
00334     if (MessageBox(NULL, szText, TEXT("User Accounts"), MB_ICONWARNING | MB_YESNO) == IDNO)
00335         return;
00336 
00337     memberInfo.lgrmi3_domainandname = szUserName;
00338 
00339     status = NetLocalGroupDelMembers(NULL, pGroupData->szGroupName,
00340                                      3, (LPBYTE)&memberInfo, 1);
00341     if (status != NERR_Success)
00342     {
00343         TCHAR szText[256];
00344         wsprintf(szText, TEXT("Error: %u"), status);
00345         MessageBox(NULL, szText, TEXT("NetLocalGroupDelMembers"), MB_ICONERROR | MB_OK);
00346         return;
00347     }
00348 
00349     (void)ListView_DeleteItem(hwndLV, nItem);
00350 
00351     if (ListView_GetItemCount(hwndLV) == 0)
00352         EnableWindow(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_REMOVE), FALSE);
00353 }
00354 
00355 
00356 static BOOL
00357 OnNotify(HWND hwndDlg,
00358          PGENERAL_GROUP_DATA pGroupData,
00359          LPARAM lParam)
00360 {
00361     LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam;
00362 
00363     switch (((LPNMHDR)lParam)->idFrom)
00364     {
00365         case IDC_GROUP_GENERAL_MEMBERS:
00366             switch (((LPNMHDR)lParam)->code)
00367             {
00368                 case NM_CLICK:
00369                     EnableWindow(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_REMOVE), (lpnmlv->iItem != -1));
00370                     break;
00371 
00372                 case LVN_KEYDOWN:
00373                     if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_DELETE)
00374                     {
00375                         RemoveUserFromGroup(hwndDlg, pGroupData);
00376                     }
00377                     break;
00378 
00379             }
00380             break;
00381     }
00382 
00383     return FALSE;
00384 }
00385 
00386 
00387 static VOID
00388 GetGeneralGroupData(HWND hwndDlg,
00389                     PGENERAL_GROUP_DATA pGroupData)
00390 {
00391     PLOCALGROUP_INFO_1 groupInfo = NULL;
00392     PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL;
00393     DWORD dwRead;
00394     DWORD dwTotal;
00395     DWORD_PTR resumeHandle = 0;
00396     DWORD i;
00397     LV_ITEM lvi;
00398     HWND hwndLV;
00399     LV_COLUMN column;
00400     RECT rect;
00401     HIMAGELIST hImgList;
00402     HICON hIcon;
00403     TCHAR szGroupName[256];
00404 
00405 
00406     hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS);
00407 
00408     /* Create the image list */
00409     hImgList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 5, 5);
00410     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_GROUP), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00411     ImageList_AddIcon(hImgList, hIcon);
00412     DestroyIcon(hIcon);
00413     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00414     ImageList_AddIcon(hImgList, hIcon);
00415     DestroyIcon(hIcon);
00416 
00417     (void)ListView_SetImageList(hwndLV, hImgList, LVSIL_SMALL);
00418 
00419     /* Set the list column */
00420     GetClientRect(hwndLV, &rect);
00421 
00422     memset(&column, 0x00, sizeof(column));
00423     column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
00424     column.fmt = LVCFMT_LEFT;
00425     column.cx = (INT)(rect.right - rect.left);
00426     column.iSubItem = 0;
00427     (void)ListView_InsertColumn(hwndLV, 0, &column);
00428 
00429     /* Set group name */
00430     SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, pGroupData->szGroupName);
00431 
00432     /* Set group description */
00433     NetLocalGroupGetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&groupInfo);
00434     SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment);
00435     NetApiBufferFree(groupInfo);
00436 
00437     /* Set group members */
00438     NetLocalGroupGetMembers(NULL, pGroupData->szGroupName, 1, (LPBYTE*)&membersInfo,
00439                             MAX_PREFERRED_LENGTH, &dwRead, &dwTotal,
00440                             &resumeHandle);
00441 
00442     for (i = 0; i < dwRead; i++)
00443     {
00444         ZeroMemory(&lvi, sizeof(lvi));
00445         lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
00446         lvi.pszText = membersInfo[i].lgrmi1_name;
00447         lvi.state = 0;
00448         if (membersInfo[i].lgrmi1_sidusage == SidTypeGroup ||
00449             membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup)
00450         {
00451             lvi.iImage = 0;
00452         }
00453         else if (membersInfo[i].lgrmi1_sidusage == SidTypeUser)
00454         {
00455             /* FIXME: handle locked user properly! */
00456             lvi.iImage = 1;
00457         }
00458 
00459         if (membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup)
00460         {
00461             TCHAR szSid[256];
00462 
00463             GetTextSid(membersInfo[i].lgrmi1_sid, szSid);
00464 
00465             wsprintf(szGroupName,
00466                      TEXT("%s (%s)"),
00467                      membersInfo[i].lgrmi1_name,
00468                      szSid);
00469 
00470             lvi.pszText = szGroupName;
00471         }
00472 
00473         (void)ListView_InsertItem(hwndLV, &lvi);
00474     }
00475 
00476     NetApiBufferFree(membersInfo);
00477 }
00478 
00479 
00480 static BOOL
00481 SetGeneralGroupData(HWND hwndDlg,
00482                     PGENERAL_GROUP_DATA pGroupData)
00483 {
00484     LOCALGROUP_INFO_1 groupInfo;
00485     LPTSTR pszComment = NULL;
00486     INT nLength;
00487     NET_API_STATUS status;
00488     DWORD dwIndex;
00489 
00490     /* Get the group description */
00491     nLength = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION));
00492     if (nLength == 0)
00493     {
00494         groupInfo.lgrpi1_comment = NULL;
00495     }
00496     else
00497     {
00498         pszComment = HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(TCHAR));
00499         GetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, pszComment, nLength + 1);
00500         groupInfo.lgrpi1_comment = pszComment;
00501     }
00502 
00503     status = NetLocalGroupSetInfo(NULL, pGroupData->szGroupName, 1, (LPBYTE)&groupInfo, &dwIndex);
00504     if (status != NERR_Success)
00505     {
00506         DebugPrintf(_T("Status: %lu  Index: %lu"), status, dwIndex);
00507     }
00508 
00509     if (pszComment)
00510         HeapFree(GetProcessHeap(), 0, pszComment);
00511 
00512     return TRUE;
00513 }
00514 
00515 
00516 INT_PTR CALLBACK
00517 GroupGeneralPageProc(HWND hwndDlg,
00518                      UINT uMsg,
00519                      WPARAM wParam,
00520                      LPARAM lParam)
00521 {
00522     PGENERAL_GROUP_DATA pGroupData;
00523 
00524     UNREFERENCED_PARAMETER(lParam);
00525     UNREFERENCED_PARAMETER(wParam);
00526     UNREFERENCED_PARAMETER(hwndDlg);
00527 
00528     pGroupData= (PGENERAL_GROUP_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00529 
00530     switch (uMsg)
00531     {
00532         case WM_INITDIALOG:
00533             pGroupData = (PGENERAL_GROUP_DATA)HeapAlloc(GetProcessHeap(),
00534                                                         HEAP_ZERO_MEMORY,
00535                                                         sizeof(GENERAL_GROUP_DATA) + 
00536                                                         lstrlen((LPTSTR)((PROPSHEETPAGE *)lParam)->lParam) * sizeof(TCHAR));
00537             lstrcpy(pGroupData->szGroupName, (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
00538 
00539             SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)pGroupData);
00540 
00541             GetGeneralGroupData(hwndDlg,
00542                                 pGroupData);
00543             break;
00544 
00545         case WM_COMMAND:
00546             switch (LOWORD(wParam))
00547             {
00548                 case IDC_GROUP_GENERAL_DESCRIPTION:
00549                     if (HIWORD(wParam) == EN_CHANGE)
00550                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00551                     break;
00552 
00553                 case IDC_GROUP_GENERAL_ADD:
00554                     AddUsersToGroup(hwndDlg, pGroupData);
00555                     break;
00556 
00557                 case IDC_GROUP_GENERAL_REMOVE:
00558                     RemoveUserFromGroup(hwndDlg, pGroupData);
00559                     break;
00560             }
00561             break;
00562 
00563         case WM_NOTIFY:
00564             if (((LPPSHNOTIFY)lParam)->hdr.code == PSN_APPLY)
00565             {
00566                 SetGeneralGroupData(hwndDlg, pGroupData);
00567                 return TRUE;
00568             }
00569             else
00570             {
00571                 return OnNotify(hwndDlg, pGroupData, lParam);
00572             }
00573             break;
00574 
00575         case WM_DESTROY:
00576             HeapFree(GetProcessHeap(), 0, pGroupData);
00577             break;
00578     }
00579 
00580     return FALSE;
00581 }
00582 
00583 
00584 static VOID
00585 InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LPTSTR pszGroup)
00586 {
00587     ZeroMemory(psp, sizeof(PROPSHEETPAGE));
00588     psp->dwSize = sizeof(PROPSHEETPAGE);
00589     psp->dwFlags = PSP_DEFAULT;
00590     psp->hInstance = hApplet;
00591     psp->pszTemplate = MAKEINTRESOURCE(idDlg);
00592     psp->pfnDlgProc = DlgProc;
00593     psp->lParam = (LPARAM)pszGroup;
00594 }
00595 
00596 
00597 BOOL
00598 GroupProperties(HWND hwndDlg)
00599 {
00600     PROPSHEETPAGE psp[1];
00601     PROPSHEETHEADER psh;
00602     TCHAR szGroupName[UNLEN];
00603     INT nItem;
00604     HWND hwndLV;
00605 
00606     hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);
00607     nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00608     if (nItem == -1)
00609         return FALSE;
00610 
00611     /* Get the new user name */
00612     ListView_GetItemText(hwndLV,
00613                          nItem, 0,
00614                          szGroupName,
00615                          UNLEN);
00616 
00617     ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
00618     psh.dwSize = sizeof(PROPSHEETHEADER);
00619     psh.dwFlags =  PSH_PROPSHEETPAGE | PSH_PROPTITLE;
00620     psh.hwndParent = hwndDlg;
00621     psh.hInstance = hApplet;
00622     psh.hIcon = NULL;
00623     psh.pszCaption = szGroupName;
00624     psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
00625     psh.nStartPage = 0;
00626     psh.ppsp = psp;
00627 
00628     InitPropSheetPage(&psp[0], IDD_GROUP_GENERAL, (DLGPROC)GroupGeneralPageProc, szGroupName);
00629 
00630     return (PropertySheet(&psh) == IDOK);
00631 }

Generated on Sat May 26 2012 04:19:48 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.