in src/native/windows/apps/prunmgr/prunmgr.c [764:967]
INT_PTR CALLBACK __logonProperty(HWND hDlg,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
LPPSHNOTIFY lpShn;
WCHAR szBuf[SIZ_DESLEN];
switch (uMessage) {
case WM_INITDIALOG:
{
BOOL bNamedAccount = FALSE;
BOOL bLocalSystemAccount = FALSE;
startPage = 1;
if (!bpropCentered)
apxCenterWindow(GetParent(hDlg), NULL);
bpropCentered = TRUE;
SendMessage(GetDlgItem(hDlg, IDC_PPSLUSER), EM_LIMITTEXT, 63, 0);
SendMessage(GetDlgItem(hDlg, IDC_PPSLPASS), EM_LIMITTEXT, 63, 0);
SendMessage(GetDlgItem(hDlg, IDC_PPSLCPASS), EM_LIMITTEXT, 63, 0);
// LocalService
if (lstrcmpiW(_currentEntry->szObjectName, STAT_SERVICE) == 0) {
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, IDC_PPSLLSRV);
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_SERVICE);
}
// NetworkService
else if (lstrcmpiW(_currentEntry->szObjectName, STAT_NET_SERVICE) == 0) {
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, IDC_PPSLNSRV);
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_NET_SERVICE);
}
// LocalSystem
else if (lstrcmpiW(_currentEntry->szObjectName, STAT_SYSTEM) == 0) {
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, IDC_PPSLLSYS);
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_SYSTEM);
bLocalSystemAccount = TRUE;
if (_currentEntry->lpConfig->dwServiceType & SERVICE_INTERACTIVE_PROCESS) {
CheckDlgButton(hDlg, IDC_PPSLID, BST_CHECKED);
}
}
else {
bNamedAccount = TRUE;
CheckRadioButton(hDlg, IDC_PPSLLSYS, IDC_PPSLUA, IDC_PPSLUA);
SetDlgItemTextW(hDlg, IDC_PPSLUSER, _currentEntry->szObjectName);
SetDlgItemTextW(hDlg, IDC_PPSLPASS, EMPTY_PASSWORD);
SetDlgItemTextW(hDlg, IDC_PPSLCPASS, EMPTY_PASSWORD);
}
EnableWindow(GetDlgItem(hDlg, IDC_PPSLID), bLocalSystemAccount);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLUSER), bNamedAccount);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLBROWSE), bNamedAccount);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLPASS), bNamedAccount);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLPASS), bNamedAccount);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLCPASS), bNamedAccount);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLCPASS), bNamedAccount);
}
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_PPSLLSRV:
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_SERVICE);
SetDlgItemTextW(hDlg, IDC_PPSLPASS, L"");
SetDlgItemTextW(hDlg, IDC_PPSLCPASS, L"");
EnableWindow(GetDlgItem(hDlg, IDC_PPSLID), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLUSER), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLBROWSE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLCPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLCPASS), FALSE);
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, (INT)wParam);
if (lstrcmpiW(_currentEntry->szObjectName, STAT_SERVICE)) {
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
}
else {
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
}
break;
case IDC_PPSLNSRV:
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_NET_SERVICE);
SetDlgItemTextW(hDlg, IDC_PPSLPASS, L"");
SetDlgItemTextW(hDlg, IDC_PPSLCPASS, L"");
EnableWindow(GetDlgItem(hDlg, IDC_PPSLID), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLUSER), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLBROWSE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLCPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLCPASS), FALSE);
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, (INT)wParam);
if (lstrcmpiW(_currentEntry->szObjectName, STAT_NET_SERVICE)) {
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
}
else {
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
}
break;
case IDC_PPSLLSYS:
SetDlgItemTextW(hDlg, IDC_PPSLUSER, STAT_SYSTEM);
SetDlgItemTextW(hDlg, IDC_PPSLPASS, L"");
SetDlgItemTextW(hDlg, IDC_PPSLCPASS, L"");
EnableWindow(GetDlgItem(hDlg, IDC_PPSLID), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLUSER), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLBROWSE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLCPASS), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLCPASS), FALSE);
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, (INT)wParam);
if (lstrcmpiW(_currentEntry->szObjectName, STAT_SYSTEM)) {
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
}
else {
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
}
break;
case IDC_PPSLUA:
SetDlgItemTextW(hDlg, IDC_PPSLUSER, _currentEntry->szObjectName);
SetDlgItemTextW(hDlg, IDC_PPSLPASS, EMPTY_PASSWORD);
SetDlgItemTextW(hDlg, IDC_PPSLCPASS, EMPTY_PASSWORD);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLID), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLUSER), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLBROWSE), TRUE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLPASS), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLPASS), TRUE);
EnableWindow(GetDlgItem(hDlg, IDL_PPSLCPASS), TRUE);
EnableWindow(GetDlgItem(hDlg, IDC_PPSLCPASS), TRUE);
CheckRadioButton(hDlg, IDC_PPSLLSRV, IDC_PPSLUA, (INT)wParam);
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
break;
case IDC_PPSLID:
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
break;
case IDC_PPSLUSER:
if (HIWORD(wParam) == EN_CHANGE) {
GetDlgItemTextW(hDlg, IDC_PPSLUSER, szBuf, SIZ_RESMAX);
if (!lstrcmpiW(szBuf, _currentEntry->szObjectName)) {
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
}
else {
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
}
}
break;
case IDC_PPSLPASS:
case IDC_PPSLCPASS:
if (HIWORD(wParam) == EN_CHANGE) {
WCHAR szP[SIZ_RESLEN];
WCHAR szC[SIZ_RESLEN];
GetDlgItemTextW(hDlg, IDC_PPSLPASS, szP, SIZ_RESMAX);
GetDlgItemTextW(hDlg, IDC_PPSLCPASS, szC, SIZ_RESMAX);
/* check for valid password match */
if (szP[0] == L' ' && szC[0] == L' ') {
PropSheet_UnChanged(GetParent(hDlg), hDlg);
CLR_BIT_FLAG(_propertyChanged, 2);
}
else if (!lstrcmpW(szP, szC)) {
PropSheet_Changed(GetParent(hDlg), hDlg);
SET_BIT_FLAG(_propertyChanged, 2);
}
}
break;
case IDC_PPSLBROWSE:
{
WCHAR szUser[SIZ_RESLEN];
if (apxDlgSelectUser(hDlg, szUser))
SetDlgItemTextW(hDlg, IDC_PPSLUSER, szUser);
}
break;
}
break;
case WM_NOTIFY:
lpShn = (LPPSHNOTIFY )lParam;
switch (lpShn->hdr.code) {
case PSN_APPLY: /* sent when OK or Apply button pressed */
if (__generalLogonSave(hDlg))
PropSheet_UnChanged(GetParent(hDlg), hDlg);
else {
SET_BIT_FLAG(_propertyChanged, 2);
SetWindowLong(hDlg, DWLP_MSGRESULT,
PSNRET_INVALID_NOCHANGEPAGE);
return TRUE;
}
break;
}
break;
default:
break;
}
return FALSE;
}