2 * PROJECT: ReactOS msgina.dll
3 * FILE: dll/win32/msgina/tui.c
4 * PURPOSE: ReactOS Logon GINA DLL
5 * PROGRAMMER: Hervé Poussineau (hpoussin@reactos.org)
14 IN OUT PGINA_CONTEXT pgContext
)
16 TRACE("TUIInitialize(%p)\n", pgContext
);
18 return AllocConsole();
22 TUIDisplayStatusMessage(
23 IN PGINA_CONTEXT pgContext
,
29 static LPCWSTR newLine
= L
"\n";
32 TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage
);
34 UNREFERENCED_PARAMETER(pgContext
);
35 UNREFERENCED_PARAMETER(hDesktop
);
36 UNREFERENCED_PARAMETER(dwOptions
);
37 UNREFERENCED_PARAMETER(pTitle
);
41 GetStdHandle(STD_OUTPUT_HANDLE
),
47 GetStdHandle(STD_OUTPUT_HANDLE
),
55 TUIRemoveStatusMessage(
56 IN PGINA_CONTEXT pgContext
)
58 UNREFERENCED_PARAMETER(pgContext
);
66 IN UINT uIdResourceText
,
70 static LPCWSTR newLine
= L
"\n";
73 if (0 == LoadStringW(hDllInstance
, uIdResourceText
, Prompt
, 256))
76 GetStdHandle(STD_OUTPUT_HANDLE
),
77 Prompt
, wcslen(Prompt
),
85 GetStdHandle(STD_OUTPUT_HANDLE
),
86 newLine
, wcslen(newLine
),
97 IN OUT PGINA_CONTEXT pgContext
)
99 TRACE("TUIDisplaySASNotice()\n");
101 UNREFERENCED_PARAMETER(pgContext
);
103 DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
);
104 DisplayResourceText(IDS_PRESSCTRLALTDELETE
, TRUE
);
109 IN OUT PGINA_CONTEXT pgContext
,
112 TRACE("TUILoggedOnSAS()\n");
114 UNREFERENCED_PARAMETER(pgContext
);
116 if (dwSasType
!= WLX_SAS_TYPE_CTRL_ALT_DEL
)
118 /* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
119 return WLX_SAS_ACTION_NONE
;
122 FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
123 return WLX_SAS_ACTION_LOGOFF
;
128 IN UINT uIdResourcePrompt
,
130 IN DWORD BufferLength
,
134 WCHAR charToDisplay
[] = { 0, UNICODE_NULL
};
136 if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE
), 0))
139 if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE
)))
142 if (!DisplayResourceText(uIdResourcePrompt
, FALSE
))
149 if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE
), &readChar
, 1, &count
, NULL
))
151 if (readChar
== '\r' || readChar
== '\n')
154 charToDisplay
[0] = L
'\n';
156 GetStdHandle(STD_OUTPUT_HANDLE
),
158 wcslen(charToDisplay
),
165 /* Display the char */
166 charToDisplay
[0] = readChar
;
168 GetStdHandle(STD_OUTPUT_HANDLE
),
170 wcslen(charToDisplay
),
174 Buffer
[i
++] = readChar
;
175 /* FIXME: buffer overflow if the user writes too many chars! */
176 UNREFERENCED_PARAMETER(BufferLength
);
177 /* FIXME: handle backspace */
179 Buffer
[i
] = UNICODE_NULL
;
183 /* Still display the \n */
184 static LPCWSTR newLine
= L
"\n";
187 GetStdHandle(STD_OUTPUT_HANDLE
),
198 IN OUT PGINA_CONTEXT pgContext
)
203 NTSTATUS SubStatus
= STATUS_SUCCESS
;
205 TRACE("TUILoggedOutSAS()\n");
207 /* Ask the user for credentials */
208 if (!ReadString(IDS_ASKFORUSER
, UserName
, 256, TRUE
))
209 return WLX_SAS_ACTION_NONE
;
210 if (!ReadString(IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
211 return WLX_SAS_ACTION_NONE
;
213 Status
= DoLoginTasks(pgContext
, UserName
, NULL
, Password
, &SubStatus
);
214 if (Status
== STATUS_SUCCESS
)
216 if (CreateProfile(pgContext
, UserName
, NULL
, Password
))
217 return WLX_SAS_ACTION_LOGON
;
220 return WLX_SAS_ACTION_NONE
;
225 IN OUT PGINA_CONTEXT pgContext
)
233 TRACE("TUILockedSAS()\n");
235 UNREFERENCED_PARAMETER(pgContext
);
237 if (!DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
))
238 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
240 /* Ask the user for credentials */
241 if (!ReadString(IDS_ASKFORUSER
, UserName
, 256, TRUE
))
242 return WLX_SAS_ACTION_NONE
;
243 if (!ReadString(IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
244 return WLX_SAS_ACTION_NONE
;
246 Status
= ConnectToLsa(pgContext
);
247 if (!NT_SUCCESS(Status
))
249 WARN("ConnectToLsa() failed\n");
250 return WLX_SAS_ACTION_NONE
;
253 Status
= MyLogonUser(pgContext
->LsaHandle
,
254 pgContext
->AuthenticationPackage
,
260 if (!NT_SUCCESS(Status
))
262 WARN("MyLogonUser() failed\n");
263 return WLX_SAS_ACTION_NONE
;
267 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
271 TUIDisplayLockedNotice(
272 IN OUT PGINA_CONTEXT pgContext
)
276 GINA_UI GinaTextUI
= {
278 TUIDisplayStatusMessage
,
279 TUIRemoveStatusMessage
,
284 TUIDisplayLockedNotice
,