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

users.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/users.c
00005  * PURPOSE:         Users property page
00006  *
00007  * PROGRAMMERS:     Eric Kohl
00008  */
00009 
00010 /*
00011  * TODO:
00012  *  - Add new user to the users group.
00013  *  - Remove a user from all groups.
00014  *  - Use localized messages.
00015  */
00016 
00017 #include "usrmgr.h"
00018 
00019 
00020 typedef struct _USER_DATA
00021 {
00022     HMENU hPopupMenu;
00023 
00024     INT iCurrentItem;
00025 
00026 } USER_DATA, *PUSER_DATA;
00027 
00028 
00029 
00030 static BOOL
00031 CheckPasswords(HWND hwndDlg,
00032                INT nIdDlgItem1,
00033                INT nIdDlgItem2)
00034 {
00035     TCHAR szPassword1[256];
00036     TCHAR szPassword2[256];
00037     UINT uLen1;
00038     UINT uLen2;
00039 
00040     uLen1 = GetDlgItemText(hwndDlg, nIdDlgItem1, szPassword1, 256);
00041     uLen2 = GetDlgItemText(hwndDlg, nIdDlgItem2, szPassword2, 256);
00042 
00043     /* Check the passwords */
00044     if (uLen1 != uLen2 || _tcscmp(szPassword1, szPassword2) != 0)
00045     {
00046         MessageBox(hwndDlg,
00047                    TEXT("The passwords you entered are not the same!"),
00048                    TEXT("ERROR"),
00049                    MB_OK | MB_ICONERROR);
00050         return FALSE;
00051     }
00052 
00053 
00054     return TRUE;
00055 }
00056 
00057 
00058 INT_PTR CALLBACK
00059 ChangePasswordDlgProc(HWND hwndDlg,
00060                       UINT uMsg,
00061                       WPARAM wParam,
00062                       LPARAM lParam)
00063 {
00064     UNREFERENCED_PARAMETER(wParam);
00065 
00066     switch (uMsg)
00067     {
00068         case WM_INITDIALOG:
00069             break;
00070 
00071         case WM_COMMAND:
00072             switch (LOWORD(wParam))
00073             {
00074                 case IDOK:
00075                     if (CheckPasswords(hwndDlg, IDC_EDIT_PASSWORD1, IDC_EDIT_PASSWORD2))
00076                         EndDialog(hwndDlg, 0);
00077                     break;
00078 
00079                 case IDCANCEL:
00080                     EndDialog(hwndDlg, 0);
00081                     break;
00082             }
00083             break;
00084 
00085         default:
00086             return FALSE;
00087     }
00088 
00089     return TRUE;
00090 }
00091 
00092 
00093 static VOID
00094 UpdateUserOptions(HWND hwndDlg,
00095                   PUSER_INFO_3 userInfo,
00096                   BOOL bInit)
00097 {
00098     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_CANNOT_CHANGE),
00099                  !userInfo->usri3_password_expired);
00100     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_NEVER_EXPIRES),
00101                  !userInfo->usri3_password_expired);
00102 
00103     EnableWindow(GetDlgItem(hwndDlg, IDC_USER_NEW_FORCE_CHANGE),
00104                  (userInfo->usri3_flags & (UF_PASSWD_CANT_CHANGE | UF_DONT_EXPIRE_PASSWD)) == 0);
00105 
00106     if (bInit)
00107     {
00108         CheckDlgButton(hwndDlg, IDC_USER_NEW_FORCE_CHANGE,
00109                        userInfo->usri3_password_expired ? BST_CHECKED : BST_UNCHECKED);
00110 
00111         CheckDlgButton(hwndDlg, IDC_USER_NEW_CANNOT_CHANGE,
00112                        (userInfo->usri3_flags & UF_PASSWD_CANT_CHANGE) ? BST_CHECKED : BST_UNCHECKED);
00113 
00114         CheckDlgButton(hwndDlg, IDC_USER_NEW_NEVER_EXPIRES,
00115                        (userInfo->usri3_flags & UF_DONT_EXPIRE_PASSWD) ? BST_CHECKED : BST_UNCHECKED);
00116 
00117         CheckDlgButton(hwndDlg, IDC_USER_NEW_DISABLED,
00118                        (userInfo->usri3_flags & UF_ACCOUNTDISABLE) ? BST_CHECKED : BST_UNCHECKED);
00119     }
00120 }
00121 
00122 
00123 INT_PTR CALLBACK
00124 NewUserDlgProc(HWND hwndDlg,
00125                UINT uMsg,
00126                WPARAM wParam,
00127                LPARAM lParam)
00128 {
00129     PUSER_INFO_3 userInfo;
00130     INT nLength;
00131 
00132     UNREFERENCED_PARAMETER(wParam);
00133 
00134     userInfo = (PUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER);
00135 
00136     switch (uMsg)
00137     {
00138         case WM_INITDIALOG:
00139             userInfo = (PUSER_INFO_3)lParam;
00140             SetWindowLongPtr(hwndDlg, DWLP_USER, lParam);
00141             SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, EM_SETLIMITTEXT, 20, 0);
00142             UpdateUserOptions(hwndDlg, userInfo, TRUE);
00143             break;
00144 
00145         case WM_COMMAND:
00146             switch (LOWORD(wParam))
00147             {
00148                 case IDC_USER_NEW_NAME:
00149                     if (HIWORD(wParam) == EN_CHANGE)
00150                     {
00151                         nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);
00152                         EnableWindow(GetDlgItem(hwndDlg, IDOK), (nLength > 0));
00153                     }
00154                     break;
00155 
00156                 case IDC_USER_NEW_FORCE_CHANGE:
00157                     userInfo->usri3_password_expired = !userInfo->usri3_password_expired;
00158                     UpdateUserOptions(hwndDlg, userInfo, FALSE);
00159                     break;
00160 
00161                 case IDC_USER_NEW_CANNOT_CHANGE:
00162                     userInfo->usri3_flags ^= UF_PASSWD_CANT_CHANGE;
00163                     UpdateUserOptions(hwndDlg, userInfo, FALSE);
00164                     break;
00165 
00166                 case IDC_USER_NEW_NEVER_EXPIRES:
00167                     userInfo->usri3_flags ^= UF_DONT_EXPIRE_PASSWD;
00168                     UpdateUserOptions(hwndDlg, userInfo, FALSE);
00169                     break;
00170 
00171                 case IDC_USER_NEW_DISABLED:
00172                     userInfo->usri3_flags ^= UF_ACCOUNTDISABLE;
00173                     break;
00174 
00175                 case IDOK:
00176                     if (!CheckAccountName(hwndDlg, IDC_USER_NEW_NAME, NULL))
00177                     {
00178                         SetFocus(GetDlgItem(hwndDlg, IDC_USER_NEW_NAME));
00179                         SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, EM_SETSEL, 0, -1);
00180                         break;
00181                     }
00182 
00183                     if (!CheckPasswords(hwndDlg, IDC_USER_NEW_PASSWORD1, IDC_USER_NEW_PASSWORD2))
00184                     {
00185                         SetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD1, TEXT(""));
00186                         SetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD2, TEXT(""));
00187                         break;
00188                     }
00189 
00190                     /* Store the user name */
00191                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);
00192                     if (nLength > 0)
00193                     {
00194                         userInfo->usri3_name = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));
00195                         GetDlgItemText(hwndDlg, IDC_USER_NEW_NAME, userInfo->usri3_name, nLength + 1);
00196                     }
00197 
00198                     /* Store the full user name */
00199                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_FULL_NAME, WM_GETTEXTLENGTH, 0, 0);
00200                     if (nLength > 0)
00201                     {
00202                         userInfo->usri3_full_name = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));
00203                         GetDlgItemText(hwndDlg, IDC_USER_NEW_FULL_NAME, userInfo->usri3_full_name, nLength + 1);
00204                     }
00205 
00206                     /* Store the description */
00207                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_DESCRIPTION, WM_GETTEXTLENGTH, 0, 0);
00208                     if (nLength > 0)
00209                     {
00210                         userInfo->usri3_comment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));
00211                         GetDlgItemText(hwndDlg, IDC_USER_NEW_DESCRIPTION, userInfo->usri3_comment, nLength + 1);
00212                     }
00213 
00214                     /* Store the password */
00215                     nLength = SendDlgItemMessage(hwndDlg, IDC_USER_NEW_PASSWORD1, WM_GETTEXTLENGTH, 0, 0);
00216                     if (nLength > 0)
00217                     {
00218                         userInfo->usri3_password = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));
00219                         GetDlgItemText(hwndDlg, IDC_USER_NEW_PASSWORD1, userInfo->usri3_password, nLength + 1);
00220                     }
00221 
00222                     EndDialog(hwndDlg, IDOK);
00223                     break;
00224 
00225                 case IDCANCEL:
00226                     EndDialog(hwndDlg, IDCANCEL);
00227                     break;
00228             }
00229             break;
00230 
00231         default:
00232             return FALSE;
00233     }
00234 
00235     return TRUE;
00236 }
00237 
00238 
00239 static VOID
00240 UserNew(HWND hwndDlg)
00241 {
00242     USER_INFO_3 user;
00243     NET_API_STATUS status;
00244     LV_ITEM lvi;
00245     INT iItem;
00246     HWND hwndLV;
00247 
00248     ZeroMemory(&user, sizeof(USER_INFO_3));
00249 
00250     user.usri3_priv = USER_PRIV_USER;
00251     user.usri3_flags = UF_SCRIPT;
00252     user.usri3_acct_expires = TIMEQ_FOREVER;
00253     user.usri3_max_storage = USER_MAXSTORAGE_UNLIMITED;
00254     user.usri3_primary_group_id = DOMAIN_GROUP_RID_USERS;
00255 
00256     user.usri3_password_expired = TRUE;
00257 
00258     if (DialogBoxParam(hApplet,
00259                        MAKEINTRESOURCE(IDD_USER_NEW),
00260                        hwndDlg,
00261                        NewUserDlgProc,
00262                        (LPARAM)&user) == IDOK)
00263     {
00264 #if 0
00265         status = NetUserAdd(NULL,
00266                             3,
00267                             (LPBYTE)&user,
00268                             NULL);
00269 #else
00270         status = NERR_Success;
00271 #endif
00272         if (status != NERR_Success)
00273         {
00274             TCHAR szText[256];
00275             wsprintf(szText, TEXT("Error: %u"), status);
00276             MessageBox(NULL, szText, TEXT("NetUserAdd"), MB_ICONERROR | MB_OK);
00277             return;
00278         }
00279 
00280         hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST);
00281 
00282         ZeroMemory(&lvi, sizeof(lvi));
00283         lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
00284         lvi.pszText = user.usri3_name;
00285         lvi.state = 0;
00286         lvi.iImage = (user.usri3_flags & UF_ACCOUNTDISABLE) ? 1 : 0;
00287         iItem = ListView_InsertItem(hwndLV, &lvi);
00288 
00289         ListView_SetItemText(hwndLV, iItem, 1,
00290                              user.usri3_full_name);
00291 
00292         ListView_SetItemText(hwndLV, iItem, 2,
00293                              user.usri3_comment);
00294     }
00295 
00296     if (user.usri3_name)
00297         HeapFree(GetProcessHeap(), 0, user.usri3_name);
00298 
00299     if (user.usri3_full_name)
00300         HeapFree(GetProcessHeap(), 0, user.usri3_full_name);
00301 
00302     if (user.usri3_comment)
00303         HeapFree(GetProcessHeap(), 0, user.usri3_comment);
00304 
00305     if (user.usri3_password)
00306         HeapFree(GetProcessHeap(), 0, user.usri3_password);
00307 }
00308 
00309 
00310 static VOID
00311 UserRename(HWND hwndDlg)
00312 {
00313     HWND hwndLV;
00314     INT nItem;
00315 
00316     hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST);
00317     if (hwndLV == NULL)
00318         return;
00319 
00320     nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00321     if (nItem != -1)
00322     {
00323         (void)ListView_EditLabel(hwndLV, nItem);
00324     }
00325 }
00326 
00327 
00328 static BOOL
00329 UserDelete(HWND hwndDlg)
00330 {
00331     TCHAR szUserName[UNLEN];
00332     TCHAR szText[256];
00333     INT nItem;
00334     HWND hwndLV;
00335     NET_API_STATUS status;
00336 
00337     hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST);
00338     nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00339     if (nItem == -1)
00340         return FALSE;
00341 
00342     /* Get the new user name */
00343     ListView_GetItemText(hwndLV,
00344                          nItem, 0,
00345                          szUserName,
00346                          UNLEN);
00347 
00348     /* Display a warning message because the delete operation cannot be reverted */
00349     wsprintf(szText, TEXT("Do you really want to delete the user \"%s\"?"), szUserName);
00350     if (MessageBox(NULL, szText, TEXT("User Accounts"), MB_ICONWARNING | MB_YESNO) == IDNO)
00351         return FALSE;
00352 
00353     /* Delete the user */
00354 #if 0
00355     status = NetUserDel(NULL, szUserName);
00356 #else
00357     status = NERR_Success;
00358 #endif
00359     if (status != NERR_Success)
00360     {
00361         TCHAR szText[256];
00362         wsprintf(szText, TEXT("Error: %u"), status);
00363         MessageBox(NULL, szText, TEXT("NetUserDel"), MB_ICONERROR | MB_OK);
00364         return FALSE;
00365     }
00366 
00367     /* Delete the user from the list */
00368     (void)ListView_DeleteItem(hwndLV, nItem);
00369 
00370     return TRUE;
00371 }
00372 
00373 
00374 static VOID
00375 SetUsersListColumns(HWND hwndListView)
00376 {
00377     LV_COLUMN column;
00378     RECT rect;
00379     TCHAR szStr[32];
00380 
00381     GetClientRect(hwndListView, &rect);
00382 
00383     memset(&column, 0x00, sizeof(column));
00384     column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT;
00385     column.fmt=LVCFMT_LEFT;
00386     column.cx = (INT)((rect.right - rect.left) * 0.25);
00387     column.iSubItem = 0;
00388     LoadString(hApplet, IDS_NAME, szStr, sizeof(szStr) / sizeof(szStr[0]));
00389     column.pszText = szStr;
00390     (void)ListView_InsertColumn(hwndListView, 0, &column);
00391 
00392     column.cx = (INT)((rect.right - rect.left) * 0.50);
00393     column.iSubItem = 1;
00394     LoadString(hApplet, IDS_FULLNAME, szStr, sizeof(szStr) / sizeof(szStr[0]));
00395     column.pszText = szStr;
00396     (void)ListView_InsertColumn(hwndListView, 1, &column);
00397 
00398     column.cx = (INT)((rect.right - rect.left) * 0.25);
00399     column.iSubItem = 2;
00400     LoadString(hApplet, IDS_DESCRIPTION, szStr, sizeof(szStr) / sizeof(szStr[0]));
00401     column.pszText = szStr;
00402     (void)ListView_InsertColumn(hwndListView, 2, &column);
00403 }
00404 
00405 
00406 static VOID
00407 UpdateUsersList(HWND hwndListView)
00408 {
00409     NET_API_STATUS netStatus;
00410     PUSER_INFO_20 pBuffer;
00411     DWORD entriesread;
00412     DWORD totalentries;
00413     DWORD resume_handle = 0;
00414     DWORD i;
00415     LV_ITEM lvi;
00416     INT iItem;
00417 
00418 
00419     for (;;)
00420     {
00421         netStatus = NetUserEnum(NULL, 20, FILTER_NORMAL_ACCOUNT,
00422                                 (LPBYTE*)&pBuffer,
00423                                 1024, &entriesread,
00424                                 &totalentries, &resume_handle);
00425         if (netStatus != NERR_Success && netStatus != ERROR_MORE_DATA)
00426             break;
00427 
00428         for (i = 0; i < entriesread; i++)
00429         {
00430            memset(&lvi, 0x00, sizeof(lvi));
00431            lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
00432            lvi.pszText = pBuffer[i].usri20_name;
00433            lvi.state = 0;
00434            lvi.iImage = (pBuffer[i].usri20_flags & UF_ACCOUNTDISABLE) ? 1 : 0;
00435            iItem = ListView_InsertItem(hwndListView, &lvi);
00436 
00437            ListView_SetItemText(hwndListView, iItem, 1,
00438                                 pBuffer[i].usri20_full_name);
00439 
00440            ListView_SetItemText(hwndListView, iItem, 2,
00441                                 pBuffer[i].usri20_comment);
00442         }
00443 
00444         NetApiBufferFree(pBuffer);
00445 
00446         /* No more data left */
00447         if (netStatus != ERROR_MORE_DATA)
00448             break;
00449     }
00450 
00451 }
00452 
00453 
00454 static VOID
00455 OnInitDialog(HWND hwndDlg)
00456 {
00457     HWND hwndListView;
00458     HIMAGELIST hImgList;
00459     HICON hIcon;
00460 
00461     /* Create the image list */
00462     hImgList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 5, 5);
00463     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00464     ImageList_AddIcon(hImgList, hIcon);
00465     hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_LOCKED_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
00466     ImageList_AddIcon(hImgList, hIcon);
00467     DestroyIcon(hIcon);
00468 
00469     hwndListView = GetDlgItem(hwndDlg, IDC_USERS_LIST);
00470 
00471     (VOID)ListView_SetImageList(hwndListView, hImgList, LVSIL_SMALL);
00472 
00473     (void)ListView_SetExtendedListViewStyle(hwndListView, LVS_EX_FULLROWSELECT);
00474 
00475     SetUsersListColumns(hwndListView);
00476 
00477     UpdateUsersList(hwndListView);
00478 }
00479 
00480 
00481 static BOOL
00482 OnBeginLabelEdit(LPNMLVDISPINFO pnmv)
00483 {
00484     HWND hwndEdit;
00485 
00486     hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom);
00487     if (hwndEdit == NULL)
00488         return TRUE;
00489 
00490     SendMessage(hwndEdit, EM_SETLIMITTEXT, 20, 0);
00491 
00492     return FALSE;
00493 }
00494 
00495 
00496 static BOOL
00497 OnEndLabelEdit(LPNMLVDISPINFO pnmv)
00498 {
00499     TCHAR szOldUserName[UNLEN];
00500     TCHAR szNewUserName[UNLEN];
00501     //USER_INFO_0 useri0;
00502     NET_API_STATUS status;
00503 
00504     /* Leave, if there is no valid listview item */
00505     if (pnmv->item.iItem == -1)
00506         return FALSE;
00507 
00508     /* Get the new user name */
00509     ListView_GetItemText(pnmv->hdr.hwndFrom,
00510                          pnmv->item.iItem, 0,
00511                          szOldUserName,
00512                          UNLEN);
00513 
00514     /* Leave, if the user canceled the edit action */
00515     if (pnmv->item.pszText == NULL)
00516         return FALSE;
00517 
00518     /* Get the new user name */
00519     lstrcpy(szNewUserName, pnmv->item.pszText);
00520 
00521     /* Leave, if the user name was not changed */
00522     if (lstrcmp(szOldUserName, szNewUserName) == 0)
00523         return FALSE;
00524 
00525     /* Check the user name for illegal characters */
00526     if (!CheckAccountName(NULL, 0, szNewUserName))
00527         return FALSE;
00528 
00529     /* Change the user name */
00530     //useri0.usri0_name = szNewUserName;
00531 
00532 #if 0
00533     status = NetUserSetInfo(NULL, szOldUserName, 0, (LPBYTE)&useri0, NULL);
00534 #else
00535     status = NERR_Success;
00536 #endif
00537     if (status != NERR_Success)
00538     {
00539         TCHAR szText[256];
00540         wsprintf(szText, TEXT("Error: %u"), status);
00541         MessageBox(NULL, szText, TEXT("NetUserSetInfo"), MB_ICONERROR | MB_OK);
00542         return FALSE;
00543     }
00544 
00545     /* Update the listview item */
00546     ListView_SetItemText(pnmv->hdr.hwndFrom,
00547                          pnmv->item.iItem, 0,
00548                          szNewUserName);
00549 
00550     return TRUE;
00551 }
00552 
00553 
00554 static BOOL
00555 OnNotify(HWND hwndDlg, PUSER_DATA pUserData, NMHDR *phdr)
00556 {
00557     LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr;
00558 
00559     switch (phdr->idFrom)
00560     {
00561         case IDC_USERS_LIST:
00562             switch(phdr->code)
00563             {
00564                 case NM_CLICK:
00565                     pUserData->iCurrentItem = lpnmlv->iItem;
00566                     break;
00567 
00568                 case NM_DBLCLK:
00569                     if (lpnmlv->iItem != -1)
00570                     {
00571                         UINT uItem;
00572 
00573                         uItem =  GetMenuDefaultItem(GetSubMenu(pUserData->hPopupMenu, 1),
00574                                                     FALSE, 0);
00575                         if (uItem != (UINT)-1)
00576                             SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(uItem, 0), 0);
00577                     }
00578                     break;
00579 
00580                 case NM_RCLICK:
00581                     ClientToScreen(GetDlgItem(hwndDlg, IDC_USERS_LIST), &lpnmlv->ptAction);
00582                     TrackPopupMenu(GetSubMenu(pUserData->hPopupMenu, (lpnmlv->iItem == -1) ? 0 : 1),
00583                                    TPM_LEFTALIGN, lpnmlv->ptAction.x, lpnmlv->ptAction.y, 0, hwndDlg, NULL);
00584                     break;
00585 
00586                 case LVN_BEGINLABELEDIT:
00587                     return OnBeginLabelEdit((LPNMLVDISPINFO)phdr);
00588 
00589                 case LVN_ENDLABELEDIT:
00590                     return OnEndLabelEdit((LPNMLVDISPINFO)phdr);
00591             }
00592             break;
00593     }
00594 
00595     return FALSE;
00596 }
00597 
00598 
00599 static VOID
00600 UpdateUserProperties(HWND hwndDlg)
00601 {
00602     TCHAR szUserName[UNLEN];
00603     INT iItem;
00604     HWND hwndLV;
00605     PUSER_INFO_2 pUserInfo = NULL;
00606     LV_ITEM lvi;
00607 
00608     hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST);
00609     iItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
00610     if (iItem == -1)
00611         return;
00612 
00613     /* Get the new user name */
00614     ListView_GetItemText(hwndLV,
00615                          iItem, 0,
00616                          szUserName,
00617                          UNLEN);
00618 
00619     NetUserGetInfo(NULL, szUserName, 2, (LPBYTE*)&pUserInfo);
00620 
00621     memset(&lvi, 0x00, sizeof(lvi));
00622     lvi.iItem = iItem;
00623     lvi.iSubItem = 0;
00624     lvi.mask = LVIF_IMAGE;
00625     lvi.iImage = (pUserInfo->usri2_flags & UF_ACCOUNTDISABLE) ? 1 : 0;
00626     (void)ListView_SetItem(hwndLV, &lvi);
00627 
00628     ListView_SetItemText(hwndLV, iItem, 1,
00629                          pUserInfo->usri2_full_name);
00630 
00631     ListView_SetItemText(hwndLV, iItem, 2,
00632                          pUserInfo->usri2_comment);
00633 
00634     NetApiBufferFree(pUserInfo);
00635 }
00636 
00637 
00638 INT_PTR CALLBACK
00639 UsersPageProc(HWND hwndDlg,
00640               UINT uMsg,
00641               WPARAM wParam,
00642               LPARAM lParam)
00643 {
00644     PUSER_DATA pUserData;
00645 
00646     UNREFERENCED_PARAMETER(wParam);
00647 
00648     pUserData = (PUSER_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00649 
00650     switch (uMsg)
00651     {
00652         case WM_INITDIALOG:
00653             pUserData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(USER_DATA));
00654             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pUserData);
00655 
00656             pUserData->hPopupMenu = LoadMenu(hApplet, MAKEINTRESOURCE(IDM_POPUP_USER));
00657 
00658             OnInitDialog(hwndDlg);
00659             SetMenuDefaultItem(GetSubMenu(pUserData->hPopupMenu, 1),
00660                                IDM_USER_PROPERTIES,
00661                                FALSE);
00662             break;
00663 
00664         case WM_COMMAND:
00665             switch (LOWORD(wParam))
00666             {
00667                 case IDM_USER_CHANGE_PASSWORD:
00668                     DialogBoxParam(hApplet,
00669                                    MAKEINTRESOURCE(IDD_CHANGE_PASSWORD),
00670                                    hwndDlg,
00671                                    ChangePasswordDlgProc,
00672                                    (LPARAM)NULL);
00673                     break;
00674 
00675                 case IDM_USER_RENAME:
00676                     UserRename(hwndDlg);
00677                     break;
00678 
00679                 case IDM_USER_NEW:
00680                     UserNew(hwndDlg);
00681                     break;
00682 
00683                 case IDM_USER_DELETE:
00684                     UserDelete(hwndDlg);
00685                     break;
00686 
00687                 case IDM_USER_PROPERTIES:
00688                     if (UserProperties(hwndDlg))
00689                     {
00690                         UpdateUserProperties(hwndDlg);
00691                     }
00692                     break;
00693             }
00694             break;
00695 
00696         case WM_NOTIFY:
00697             return OnNotify(hwndDlg, pUserData, (NMHDR *)lParam);
00698 
00699         case WM_DESTROY:
00700             DestroyMenu(pUserData->hPopupMenu);
00701             HeapFree(GetProcessHeap(), 0, pUserData);
00702             break;
00703     }
00704 
00705     return FALSE;
00706 }

Generated on Fri May 25 2012 04:19:08 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.