3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS User Manager Control Panel
5 * FILE: dll/cpl/usrmgr/users.c
6 * PURPOSE: Users property page
8 * PROGRAMMERS: Eric Kohl
14 typedef struct _USER_DATA
20 } USER_DATA
, *PUSER_DATA
;
25 SetPassword(HWND hwndDlg
)
27 TCHAR szPassword1
[256];
28 TCHAR szPassword2
[256];
32 uLen1
= GetDlgItemText(hwndDlg
, IDC_EDIT_PASSWORD1
, szPassword1
, 256);
33 uLen2
= GetDlgItemText(hwndDlg
, IDC_EDIT_PASSWORD2
, szPassword2
, 256);
35 /* Check the passwords */
36 if (uLen1
!= uLen2
|| _tcscmp(szPassword1
, szPassword2
) != 0)
39 TEXT("The passwords you entered are not the same!"),
41 MB_OK
| MB_ICONERROR
);
51 ChangePasswordDlgProc(HWND hwndDlg
,
56 UNREFERENCED_PARAMETER(wParam
);
64 switch (LOWORD(wParam
))
67 if (SetPassword(hwndDlg
))
68 EndDialog(hwndDlg
, 0);
72 EndDialog(hwndDlg
, 0);
87 SetUsersListColumns(HWND hwndListView
)
93 GetClientRect(hwndListView
, &rect
);
95 memset(&column
, 0x00, sizeof(column
));
96 column
.mask
=LVCF_FMT
| LVCF_WIDTH
| LVCF_SUBITEM
| LVCF_TEXT
;
97 column
.fmt
=LVCFMT_LEFT
;
98 column
.cx
= (INT
)((rect
.right
- rect
.left
) * 0.25);
100 LoadString(hApplet
, IDS_NAME
, szStr
, sizeof(szStr
) / sizeof(szStr
[0]));
101 column
.pszText
= szStr
;
102 (void)ListView_InsertColumn(hwndListView
, 0, &column
);
104 column
.cx
= (INT
)((rect
.right
- rect
.left
) * 0.50);
106 LoadString(hApplet
, IDS_FULLNAME
, szStr
, sizeof(szStr
) / sizeof(szStr
[0]));
107 column
.pszText
= szStr
;
108 (void)ListView_InsertColumn(hwndListView
, 1, &column
);
110 column
.cx
= (INT
)((rect
.right
- rect
.left
) * 0.25);
112 LoadString(hApplet
, IDS_DESCRIPTION
, szStr
, sizeof(szStr
) / sizeof(szStr
[0]));
113 column
.pszText
= szStr
;
114 (void)ListView_InsertColumn(hwndListView
, 2, &column
);
119 UpdateUsersList(HWND hwndListView
)
121 NET_API_STATUS netStatus
;
122 PUSER_INFO_20 pBuffer
;
125 DWORD resume_handle
= 0;
134 netStatus
= NetUserEnum(NULL
, 20, FILTER_NORMAL_ACCOUNT
,
137 &totalentries
, &resume_handle
);
138 if (netStatus
!= NERR_Success
&& netStatus
!= ERROR_MORE_DATA
)
141 for (i
= 0; i
< entriesread
; i
++)
143 memset(&lvi
, 0x00, sizeof(lvi
));
144 lvi
.mask
= LVIF_TEXT
| LVIF_STATE
| LVIF_IMAGE
; // | LVIF_PARAM;
145 // lvi.lParam = (LPARAM)VarData;
146 lvi
.pszText
= pBuffer
[i
].usri20_name
;
147 lvi
.state
= 0; //(i == 0) ? LVIS_SELECTED : 0;
148 lvi
.iImage
= (pBuffer
[i
].usri20_flags
& UF_ACCOUNTDISABLE
) ? 1 : 0;
149 iItem
= ListView_InsertItem(hwndListView
, &lvi
);
151 ListView_SetItemText(hwndListView
, iItem
, 1,
152 pBuffer
[i
].usri20_full_name
);
154 ListView_SetItemText(hwndListView
, iItem
, 2,
155 pBuffer
[i
].usri20_comment
);
158 NetApiBufferFree(&pBuffer
);
160 /* No more data left */
161 if (netStatus
!= ERROR_MORE_DATA
)
169 OnInitDialog(HWND hwndDlg
)
175 /* Create the image list */
176 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 5, 5);
177 hIcon
= LoadImage(hApplet
, MAKEINTRESOURCE(IDI_USER
), IMAGE_ICON
, 16, 16, LR_DEFAULTCOLOR
);
178 ImageList_AddIcon(hImgList
, hIcon
);
179 hIcon
= LoadImage(hApplet
, MAKEINTRESOURCE(IDI_LOCKED_USER
), IMAGE_ICON
, 16, 16, LR_DEFAULTCOLOR
);
180 ImageList_AddIcon(hImgList
, hIcon
);
183 hwndListView
= GetDlgItem(hwndDlg
, IDC_USERS_LIST
);
185 (VOID
)ListView_SetImageList(hwndListView
, hImgList
, LVSIL_SMALL
);
187 (void)ListView_SetExtendedListViewStyle(hwndListView
, LVS_EX_FULLROWSELECT
);
189 SetUsersListColumns(hwndListView
);
191 UpdateUsersList(hwndListView
);
193 // (void)ListView_SetColumnWidth(hwndListView, 3, LVSCW_AUTOSIZE_USEHEADER);
194 // (void)ListView_Update(hwndListView, 0);
199 OnEndLabelEdit(LPNMLVDISPINFO pnmv
)
201 TCHAR szOldUserName
[UNLEN
];
202 TCHAR szNewUserName
[UNLEN
];
204 NET_API_STATUS status
;
206 if (pnmv
->item
.iItem
== -1)
209 ListView_GetItemText(pnmv
->hdr
.hwndFrom
,
213 lstrcpy(szNewUserName
, pnmv
->item
.pszText
);
215 if (lstrcmp(szOldUserName
, szNewUserName
) == 0)
218 useri0
.usri0_name
= szNewUserName
;
221 status
= NetUserSetInfo(NULL
, szOldUserName
, 0, (LPBYTE
)&useri0
, NULL
);
223 status
= NERR_Success
;
225 if (status
!= NERR_Success
)
228 wsprintf(szText
, _T("Error: %u"), status
);
229 MessageBox(NULL
, szText
, _T("NetUserSetInfo"), MB_ICONERROR
| MB_OK
);
233 ListView_SetItemText(pnmv
->hdr
.hwndFrom
,
242 OnNotify(HWND hwndDlg
, PUSER_DATA pUserData
, NMHDR
*phdr
)
244 LPNMLISTVIEW lpnmlv
= (LPNMLISTVIEW
)phdr
;
246 switch (phdr
->idFrom
)
252 pUserData
->iCurrentItem
= lpnmlv
->iItem
;
253 if (lpnmlv
->iItem
== -1)
264 case LVN_ENDLABELEDIT
:
265 return OnEndLabelEdit((LPNMLVDISPINFO
)phdr
);
268 ClientToScreen(GetDlgItem(hwndDlg
, IDC_USERS_LIST
), &lpnmlv
->ptAction
);
269 TrackPopupMenu(GetSubMenu(pUserData
->hPopupMenu
, (lpnmlv
->iItem
== -1) ? 0 : 1),
270 TPM_LEFTALIGN
, lpnmlv
->ptAction
.x
, lpnmlv
->ptAction
.y
, 0, hwndDlg
, NULL
);
281 UsersPageProc(HWND hwndDlg
,
286 PUSER_DATA pUserData
;
288 UNREFERENCED_PARAMETER(wParam
);
290 pUserData
= (PUSER_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
295 pUserData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(USER_DATA
));
296 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pUserData
);
298 pUserData
->hPopupMenu
= LoadMenu(hApplet
, MAKEINTRESOURCE(IDM_POPUP_USER
));
300 OnInitDialog(hwndDlg
);
304 switch (LOWORD(wParam
))
306 case IDM_USER_CHANGE_PASSWORD
:
307 DialogBoxParam(hApplet
,
308 MAKEINTRESOURCE(IDD_CHANGE_PASSWORD
),
310 ChangePasswordDlgProc
,
314 case IDM_USER_RENAME
:
319 hwndLV
= GetDlgItem(hwndDlg
, IDC_USERS_LIST
);
320 nItem
= ListView_GetNextItem(hwndLV
, -1, LVNI_SELECTED
);
323 (void)ListView_EditLabel(hwndLV
, nItem
);
328 case IDM_USER_PROPERTIES
:
335 return OnNotify(hwndDlg
, pUserData
, (NMHDR
*)lParam
);
338 DestroyMenu(pUserData
->hPopupMenu
);
339 HeapFree(GetProcessHeap(), 0, pUserData
);