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_PARAM;
145 // lvi.lParam = (LPARAM)VarData;
146 lvi
.pszText
= pBuffer
[i
].usri20_name
;
147 lvi
.state
= 0; //(i == 0) ? LVIS_SELECTED : 0;
148 iItem
= ListView_InsertItem(hwndListView
, &lvi
);
150 ListView_SetItemText(hwndListView
, iItem
, 1,
151 pBuffer
[i
].usri20_full_name
);
153 ListView_SetItemText(hwndListView
, iItem
, 2,
154 pBuffer
[i
].usri20_comment
);
157 NetApiBufferFree(&pBuffer
);
159 /* No more data left */
160 if (netStatus
!= ERROR_MORE_DATA
)
168 OnInitDialog(HWND hwndDlg
)
172 /* Set user environment variables */
173 hwndListView
= GetDlgItem(hwndDlg
, IDC_USERS_LIST
);
175 (void)ListView_SetExtendedListViewStyle(hwndListView
, LVS_EX_FULLROWSELECT
);
177 SetUsersListColumns(hwndListView
);
179 UpdateUsersList(hwndListView
);
181 // (void)ListView_SetColumnWidth(hwndListView, 3, LVSCW_AUTOSIZE_USEHEADER);
182 // (void)ListView_Update(hwndListView, 0);
187 OnEndLabelEdit(LPNMLVDISPINFO pnmv
)
189 TCHAR szOldUserName
[UNLEN
];
190 TCHAR szNewUserName
[UNLEN
];
192 NET_API_STATUS status
;
194 if (pnmv
->item
.iItem
== -1)
197 ListView_GetItemText(pnmv
->hdr
.hwndFrom
,
201 lstrcpy(szNewUserName
, pnmv
->item
.pszText
);
203 if (lstrcmp(szOldUserName
, szNewUserName
) == 0)
206 useri0
.usri0_name
= szNewUserName
;
209 status
= NetUserSetInfo(NULL
, szOldUserName
, 0, (LPBYTE
)&useri0
, NULL
);
211 status
= NERR_Success
;
213 if (status
!= NERR_Success
)
216 wsprintf(szText
, _T("Error: %u"), status
);
217 MessageBox(NULL
, szText
, _T("NetUserSetInfo"), MB_ICONERROR
| MB_OK
);
221 ListView_SetItemText(pnmv
->hdr
.hwndFrom
,
230 OnNotify(HWND hwndDlg
, PUSER_DATA pUserData
, NMHDR
*phdr
)
232 LPNMLISTVIEW lpnmlv
= (LPNMLISTVIEW
)phdr
;
234 switch (phdr
->idFrom
)
240 pUserData
->iCurrentItem
= lpnmlv
->iItem
;
241 if (lpnmlv
->iItem
== -1)
252 case LVN_ENDLABELEDIT
:
253 return OnEndLabelEdit((LPNMLVDISPINFO
)phdr
);
256 ClientToScreen(GetDlgItem(hwndDlg
, IDC_USERS_LIST
), &lpnmlv
->ptAction
);
257 TrackPopupMenu(GetSubMenu(pUserData
->hPopupMenu
, (lpnmlv
->iItem
== -1) ? 0 : 1),
258 TPM_LEFTALIGN
, lpnmlv
->ptAction
.x
, lpnmlv
->ptAction
.y
, 0, hwndDlg
, NULL
);
269 UsersPageProc(HWND hwndDlg
,
274 PUSER_DATA pUserData
;
276 UNREFERENCED_PARAMETER(wParam
);
278 pUserData
= (PUSER_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
283 pUserData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(USER_DATA
));
284 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pUserData
);
286 pUserData
->hPopupMenu
= LoadMenu(hApplet
, MAKEINTRESOURCE(IDM_POPUP_USER
));
288 OnInitDialog(hwndDlg
);
292 switch (LOWORD(wParam
))
294 case IDM_USER_CHANGE_PASSWORD
:
295 DialogBoxParam(hApplet
,
296 MAKEINTRESOURCE(IDD_CHANGE_PASSWORD
),
298 ChangePasswordDlgProc
,
302 case IDM_USER_RENAME
:
307 hwndLV
= GetDlgItem(hwndDlg
, IDC_USERS_LIST
);
308 nItem
= ListView_GetNextItem(hwndLV
, -1, LVNI_SELECTED
);
311 (void)ListView_EditLabel(hwndLV
, nItem
);
316 case IDM_USER_PROPERTIES
:
323 return OnNotify(hwndDlg
, pUserData
, (NMHDR
*)lParam
);
326 DestroyMenu(pUserData
->hPopupMenu
);
327 HeapFree(GetProcessHeap(), 0, pUserData
);