https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f949e256b599457f1e2e9a...
commit f949e256b599457f1e2e9a8ba6b0f5d2551ce249 Author: Kyle Katarn contact@kcsoftwares.com AuthorDate: Mon Apr 27 18:25:19 2020 +0200 Commit: GitHub noreply@github.com CommitDate: Mon Apr 27 18:25:19 2020 +0200
[SYSDM] User Profiles fix of OnDestroy (CORE-16921) (#2614) --- dll/cpl/sysdm/userprofile.c | 59 +++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 39 deletions(-)
diff --git a/dll/cpl/sysdm/userprofile.c b/dll/cpl/sysdm/userprofile.c index faef5431970..58e35f964bd 100644 --- a/dll/cpl/sysdm/userprofile.c +++ b/dll/cpl/sysdm/userprofile.c @@ -125,7 +125,6 @@ ChangeUserProfileType( ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; Item.iItem = iSelected; - Item.iSubItem = 0; if (!ListView_GetItem(hwndListView, &Item)) return FALSE;
@@ -170,7 +169,6 @@ DeleteUserProfile( ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; Item.iItem = iSelected; - Item.iSubItem = 0; if (!ListView_GetItem(hwndListView, &Item)) return FALSE;
@@ -253,7 +251,6 @@ CopyUserProfile( ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; Item.iItem = iSelected; - Item.iSubItem = 0; if (!ListView_GetItem(hwndListView, &Item)) return FALSE;
@@ -645,9 +642,9 @@ UpdateButtonState( iSelected = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED); if (iSelected != -1) { + ZeroMemory(&Item, sizeof(LVITEM)); Item.mask = LVIF_PARAM; Item.iItem = iSelected; - Item.iSubItem = 0; if (ListView_GetItem(hwndListView, &Item)) { if (Item.lParam != 0) @@ -804,48 +801,36 @@ OnInitUserProfileDialog(HWND hwndDlg) AddUserProfiles(hwndDlg, GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST), bAdmin); }
- -static -VOID -OnDestroy( - _In_ HWND hwndDlg) -{ - HWND hwndList; - INT nItems, i; - LVITEM Item; - - hwndList = GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST); - - nItems = ListView_GetItemCount(hwndList); - for (i = 0; i < nItems; i++) - { - Item.iItem = i; - Item.iSubItem = 0; - if (ListView_GetItem(hwndList, &Item)) - { - if (Item.lParam != 0) - HeapFree(GetProcessHeap(), 0, (PVOID)Item.lParam); - } - } -} - - static VOID OnNotify( _In_ HWND hwndDlg, _In_ NMHDR *nmhdr) { + LPNMLISTVIEW pNMLV; + if (nmhdr->idFrom == IDC_USERACCOUNT_LINK && nmhdr->code == NM_CLICK) { ShellExecuteW(hwndDlg, NULL, L"usrmgr.cpl", NULL, NULL, 0); } else if (nmhdr->idFrom == IDC_USERPROFILE_LIST) { - if (nmhdr->code == LVN_ITEMCHANGED) - UpdateButtonState(hwndDlg, nmhdr->hwndFrom); - else if (nmhdr->code == NM_DBLCLK) - ChangeUserProfileType(hwndDlg); + switch(nmhdr->code) + { + case LVN_ITEMCHANGED: + UpdateButtonState(hwndDlg, nmhdr->hwndFrom); + break; + + case NM_DBLCLK: + ChangeUserProfileType(hwndDlg); + break; + + case LVN_DELETEITEM: + pNMLV = (LPNMLISTVIEW)nmhdr; + if (pNMLV->lParam != 0) + HeapFree(GetProcessHeap(), 0, (LPVOID)pNMLV->lParam); + break; + } } }
@@ -862,11 +847,7 @@ UserProfileDlgProc(HWND hwndDlg, case WM_INITDIALOG: OnInitUserProfileDialog(hwndDlg); return TRUE; - - case WM_DESTROY: - OnDestroy(hwndDlg); - break; - + case WM_COMMAND: switch (LOWORD(wParam)) {