https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f949e256b599457f1e2e9…
commit f949e256b599457f1e2e9a8ba6b0f5d2551ce249
Author: Kyle Katarn <contact(a)kcsoftwares.com>
AuthorDate: Mon Apr 27 18:25:19 2020 +0200
Commit: GitHub <noreply(a)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))
{