Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenusers.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
1.7.6.1
|