*/
#include "precomp.h"
+#include <sddl.h>
+
+
+typedef struct _PROFILEDATA
+{
+ PWSTR pszFullName;
+} PROFILEDATA, *PPROFILEDATA;
static VOID
AddUserProfile(HWND hwndListView,
LPTSTR lpProfileSid)
{
+ PPROFILEDATA pProfileData = NULL;
+ PWSTR pszAccountName = NULL;
+ PWSTR pszDomainName = NULL;
+ SID_NAME_USE Use;
+ DWORD dwAccountNameSize, dwDomainNameSize;
+ DWORD dwProfileData;
+ PWSTR ptr;
+ PSID pSid = NULL;
LV_ITEM lvi;
+ if (!ConvertStringSidToSid(lpProfileSid,
+ &pSid))
+ return;
+
+ dwAccountNameSize = 0;
+ dwDomainNameSize = 0;
+ LookupAccountSidW(NULL,
+ pSid,
+ NULL,
+ &dwAccountNameSize,
+ NULL,
+ &dwDomainNameSize,
+ &Use);
+
+ pszDomainName = HeapAlloc(GetProcessHeap(),
+ 0,
+ dwDomainNameSize * sizeof(WCHAR));
+ if (pszDomainName == NULL)
+ goto done;
+
+ pszAccountName = HeapAlloc(GetProcessHeap(),
+ 0,
+ dwAccountNameSize * sizeof(WCHAR));
+ if (pszAccountName == NULL)
+ goto done;
+
+ if (!LookupAccountSidW(NULL,
+ pSid,
+ pszAccountName,
+ &dwAccountNameSize,
+ pszDomainName,
+ &dwDomainNameSize,
+ &Use))
+ goto done;
+
+ /* Show only the user accounts */
+ if (Use != SidTypeUser)
+ goto done;
+
+ dwProfileData = sizeof(PROFILEDATA) +
+ ((wcslen(pszDomainName) + wcslen(pszAccountName) + 2) * sizeof(WCHAR));
+ pProfileData = HeapAlloc(GetProcessHeap(),
+ 0,
+ dwProfileData);
+ if (pProfileData == NULL)
+ goto done;
+
+ ptr = (PWSTR)((ULONG_PTR)pProfileData + sizeof(PROFILEDATA));
+ pProfileData->pszFullName = ptr;
+
+ wsprintf(pProfileData->pszFullName, L"%s\\%s", pszDomainName, pszAccountName);
+
memset(&lvi, 0x00, sizeof(lvi));
lvi.mask = LVIF_TEXT | LVIF_STATE;
- lvi.pszText = lpProfileSid;
+ lvi.pszText = pProfileData->pszFullName;
lvi.state = 0;
ListView_InsertItem(hwndListView, &lvi);
+
+done:
+ if (pProfileData == NULL)
+ HeapFree(GetProcessHeap(), 0, pProfileData);
+
+ if (pszDomainName == NULL)
+ HeapFree(GetProcessHeap(), 0, pszDomainName);
+
+ if (pszAccountName == NULL)
+ HeapFree(GetProcessHeap(), 0, pszAccountName);
+
+ if (pSid != NULL)
+ LocalFree(pSid);
}
static VOID
-OnInitDialog(HWND hwndDlg)
+OnInitUserProfileDialog(HWND hwndDlg)
{
/* Initialize the list view control */
SetListViewColumns(GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST));
switch (uMsg)
{
case WM_INITDIALOG:
- OnInitDialog(hwndDlg);
+ OnInitUserProfileDialog(hwndDlg);
break;
case WM_COMMAND:
if (nmhdr->idFrom == IDC_USERACCOUNT_LINK && nmhdr->code == NM_CLICK)
{
- ShellExecute(hwndDlg,
- TEXT("open"),
- TEXT("rundll32.exe"),
- TEXT("shell32.dll, Control_RunDLL nusrmgr.cpl"),
- NULL,
- SW_SHOWNORMAL);
+ ShellExecuteW(hwndDlg, NULL, L"usrmgr.cpl", NULL, NULL, 0);
}
break;
}