xref: /reactos/dll/cpl/sysdm/userprofile.c (revision da5f10af)
1 /*
2  * PROJECT:     ReactOS System Control Panel Applet
3  * LICENSE:     GPL - See COPYING in the top level directory
4  * FILE:        dll/cpl/sysdm/userprofile.c
5  * PURPOSE:     Computer settings for networking
6  * COPYRIGHT:   Copyright Thomas Weidenmueller <w3seek@reactos.org>
7  *              Copyright 2006 Ged Murphy <gedmurphy@gmail.com>
8  *
9  */
10 
11 #include "precomp.h"
12 
13 static VOID
14 SetListViewColumns(HWND hwndListView)
15 {
16     LV_COLUMN column;
17     RECT rect;
18     TCHAR szStr[32];
19 
20     GetClientRect(hwndListView, &rect);
21 
22     SendMessage(hwndListView, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT);
23 
24     memset(&column, 0x00, sizeof(column));
25     column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT;
26     column.fmt = LVCFMT_LEFT;
27     column.cx = (INT)((rect.right - rect.left) * 0.40);
28     column.iSubItem = 0;
29     LoadString(hApplet, IDS_USERPROFILE_NAME, szStr, 32);
30     column.pszText = szStr;
31     (void)ListView_InsertColumn(hwndListView, 0, &column);
32 
33     column.fmt = LVCFMT_RIGHT;
34     column.cx = (INT)((rect.right - rect.left) * 0.15);
35     column.iSubItem = 1;
36     LoadString(hApplet, IDS_USERPROFILE_SIZE, szStr, 32);
37     column.pszText = szStr;
38     (void)ListView_InsertColumn(hwndListView, 1, &column);
39 
40     column.fmt = LVCFMT_LEFT;
41     column.cx = (INT)((rect.right - rect.left) * 0.15);
42     column.iSubItem = 2;
43     LoadString(hApplet, IDS_USERPROFILE_TYPE, szStr, 32);
44     column.pszText = szStr;
45     (void)ListView_InsertColumn(hwndListView, 2, &column);
46 
47     column.fmt = LVCFMT_LEFT;
48     column.cx = (INT)((rect.right - rect.left) * 0.15);
49     column.iSubItem = 3;
50     LoadString(hApplet, IDS_USERPROFILE_STATUS, szStr, 32);
51     column.pszText = szStr;
52     (void)ListView_InsertColumn(hwndListView, 3, &column);
53 
54     column.fmt = LVCFMT_LEFT;
55     column.cx = (INT)((rect.right - rect.left) * 0.15) - GetSystemMetrics(SM_CYHSCROLL);
56     column.iSubItem = 4;
57     LoadString(hApplet, IDS_USERPROFILE_MODIFIED, szStr, 32);
58     column.pszText = szStr;
59     (void)ListView_InsertColumn(hwndListView, 4, &column);
60 }
61 
62 
63 static VOID
64 AddUserProfile(HWND hwndListView,
65                LPTSTR lpProfileSid)
66 {
67     LV_ITEM lvi;
68 
69     memset(&lvi, 0x00, sizeof(lvi));
70     lvi.mask = LVIF_TEXT | LVIF_STATE;
71     lvi.pszText = lpProfileSid;
72     lvi.state = 0;
73     ListView_InsertItem(hwndListView, &lvi);
74 }
75 
76 
77 static VOID
78 AddUserProfiles(HWND hwndListView)
79 {
80     HKEY hKeyUserProfiles;
81     DWORD dwIndex;
82     TCHAR szProfileSid[64];
83     DWORD dwSidLength;
84     FILETIME ftLastWrite;
85 
86     if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
87                      _T("Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList"),
88                      0,
89                      KEY_READ,
90                      &hKeyUserProfiles))
91         return;
92 
93     for (dwIndex = 0; ; dwIndex++)
94     {
95         dwSidLength = 64;
96         if (RegEnumKeyEx(hKeyUserProfiles,
97                          dwIndex,
98                          szProfileSid,
99                          &dwSidLength,
100                          NULL,
101                          NULL,
102                          NULL,
103                          &ftLastWrite))
104             break;
105 
106         AddUserProfile(hwndListView, szProfileSid);
107     }
108 
109     RegCloseKey(hKeyUserProfiles);
110 }
111 
112 
113 static VOID
114 OnInitUserProfileDialog(HWND hwndDlg)
115 {
116     /* Initialize the list view control */
117     SetListViewColumns(GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST));
118 
119     AddUserProfiles(GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST));
120 
121     /* Disable the "Delete" and "Copy To" buttons if the user is not an admin */
122     if (!IsUserAnAdmin())
123     {
124          EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), FALSE);
125          EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), FALSE);
126     }
127 }
128 
129 
130 /* Property page dialog callback */
131 INT_PTR CALLBACK
132 UserProfileDlgProc(HWND hwndDlg,
133                    UINT uMsg,
134                    WPARAM wParam,
135                    LPARAM lParam)
136 {
137     switch (uMsg)
138     {
139         case WM_INITDIALOG:
140             OnInitUserProfileDialog(hwndDlg);
141             break;
142 
143         case WM_COMMAND:
144             if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
145             {
146                 EndDialog(hwndDlg,
147                           LOWORD(wParam));
148                 return TRUE;
149             }
150             break;
151 
152         case WM_NOTIFY:
153         {
154             NMHDR *nmhdr = (NMHDR *)lParam;
155 
156             if (nmhdr->idFrom == IDC_USERACCOUNT_LINK && nmhdr->code == NM_CLICK)
157             {
158                 ShellExecuteW(hwndDlg, NULL, L"usrmgr.cpl", NULL, NULL, 0);
159             }
160             break;
161         }
162     }
163 
164     return FALSE;
165 }
166