2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/propsheet_logon.c
5 * PURPOSE: Logon property page
14 typedef struct _LOGONDATA
16 ENUM_SERVICE_STATUS_PROCESS
*pService
;
17 LPQUERY_SERVICE_CONFIG pServiceConfig
;
18 WCHAR szAccountName
[64];
19 WCHAR szPassword1
[64];
20 WCHAR szPassword2
[64];
22 BOOL bAccountNameChanged
;
23 } LOGONDATA
, *PLOGONDATA
;
29 PLOGONDATA pLogonData
,
32 BOOL y
= bLocalSystem
? FALSE
: TRUE
;
34 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_INTERACTIVE
), bLocalSystem
);
35 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_ACCOUNTNAME
), y
);
36 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_SEARCH
), y
);
37 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_PW1TEXT
), y
);
38 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_PASSWORD1
), y
);
39 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_PW2TEXT
), y
);
40 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_PASSWORD2
), y
);
42 if (bLocalSystem
== TRUE
&& pLogonData
->bInitial
== FALSE
)
44 GetDlgItemText(hwndDlg
, IDC_LOGON_ACCOUNTNAME
, pLogonData
->szAccountName
, 64);
45 GetDlgItemText(hwndDlg
, IDC_LOGON_PASSWORD1
, pLogonData
->szPassword1
, 64);
46 GetDlgItemText(hwndDlg
, IDC_LOGON_PASSWORD2
, pLogonData
->szPassword2
, 64);
49 SetDlgItemText(hwndDlg
, IDC_LOGON_ACCOUNTNAME
, bLocalSystem
? L
"" : pLogonData
->szAccountName
);
50 SetDlgItemText(hwndDlg
, IDC_LOGON_PASSWORD1
, bLocalSystem
? L
"" : pLogonData
->szPassword1
);
51 SetDlgItemText(hwndDlg
, IDC_LOGON_PASSWORD2
, bLocalSystem
? L
"" : pLogonData
->szPassword2
);
53 pLogonData
->bInitial
= FALSE
;
58 * Logon Property dialog callback.
59 * Controls messages to the Logon dialog
69 PLOGONDATA pLogonData
;
71 /* Get the window context */
72 pLogonData
= (PLOGONDATA
)GetWindowLongPtr(hwndDlg
,
74 if (pLogonData
== NULL
&& uMsg
!= WM_INITDIALOG
)
82 pLogonData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(LOGONDATA
));
83 if (pLogonData
!= NULL
)
85 SetWindowLongPtr(hwndDlg
,
87 (LONG_PTR
)pLogonData
);
89 pLogonData
->bInitial
= TRUE
;
90 pLogonData
->pService
= ((PSERVICEPROPSHEET
)(((LPPROPSHEETPAGE
)lParam
)->lParam
))->pService
;
92 pLogonData
->pServiceConfig
= GetServiceConfig(pLogonData
->pService
->lpServiceName
);
93 if (pLogonData
->pServiceConfig
!= NULL
)
95 if (pLogonData
->pServiceConfig
->lpServiceStartName
== NULL
||
96 _wcsicmp(pLogonData
->pServiceConfig
->lpServiceStartName
, L
"LocalSystem") == 0)
98 PostMessageW(GetDlgItem(hwndDlg
, IDC_LOGON_SYSTEMACCOUNT
), BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
99 PostMessageW(hwndDlg
, WM_COMMAND
, IDC_LOGON_SYSTEMACCOUNT
, 0);
103 wcscpy(pLogonData
->szAccountName
, pLogonData
->pServiceConfig
->lpServiceStartName
);
104 PostMessageW(GetDlgItem(hwndDlg
, IDC_LOGON_THISACCOUNT
), BM_SETCHECK
, (WPARAM
)BST_CHECKED
, 0);
105 PostMessageW(hwndDlg
, WM_COMMAND
, IDC_LOGON_THISACCOUNT
, 0);
110 EnableWindow(GetDlgItem(hwndDlg
, IDC_LOGON_HWPROFILE
), FALSE
);
114 if (pLogonData
->pServiceConfig
)
115 HeapFree(GetProcessHeap(), 0, pLogonData
->pServiceConfig
);
117 HeapFree(GetProcessHeap(), 0, pLogonData
);
121 switch(LOWORD(wParam
))
123 case IDC_LOGON_SYSTEMACCOUNT
:
124 SetControlStates(hwndDlg
, pLogonData
, TRUE
);
127 case IDC_LOGON_THISACCOUNT
:
128 SetControlStates(hwndDlg
, pLogonData
, FALSE
);
131 case IDC_LOGON_ACCOUNTNAME
:
132 if (HIWORD(wParam
) == EN_CHANGE
)
134 pLogonData
->bAccountNameChanged
= TRUE
;
135 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
144 switch (((LPNMHDR
)lParam
)->code
)