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)
12 IN OUT PGINA_CONTEXT pgContext
)
14 TRACE("TUIInitialize(%p)\n", pgContext
);
16 return AllocConsole();
20 TUIDisplayStatusMessage(
21 IN PGINA_CONTEXT pgContext
,
27 static LPCWSTR newLine
= L
"\n";
30 TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage
);
32 UNREFERENCED_PARAMETER(pgContext
);
33 UNREFERENCED_PARAMETER(hDesktop
);
34 UNREFERENCED_PARAMETER(dwOptions
);
35 UNREFERENCED_PARAMETER(pTitle
);
39 GetStdHandle(STD_OUTPUT_HANDLE
),
45 GetStdHandle(STD_OUTPUT_HANDLE
),
53 TUIRemoveStatusMessage(
54 IN PGINA_CONTEXT pgContext
)
56 UNREFERENCED_PARAMETER(pgContext
);
64 IN UINT uIdResourceText
,
68 static LPCWSTR newLine
= L
"\n";
71 if (0 == LoadStringW(hDllInstance
, uIdResourceText
, Prompt
, 256))
74 GetStdHandle(STD_OUTPUT_HANDLE
),
75 Prompt
, wcslen(Prompt
),
83 GetStdHandle(STD_OUTPUT_HANDLE
),
84 newLine
, wcslen(newLine
),
95 IN OUT PGINA_CONTEXT pgContext
)
97 TRACE("TUIDisplaySASNotice()\n");
99 UNREFERENCED_PARAMETER(pgContext
);
101 DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
);
102 DisplayResourceText(IDS_PRESSCTRLALTDELETE
, TRUE
);
107 IN OUT PGINA_CONTEXT pgContext
,
110 TRACE("TUILoggedOnSAS()\n");
112 UNREFERENCED_PARAMETER(pgContext
);
114 if (dwSasType
!= WLX_SAS_TYPE_CTRL_ALT_DEL
)
116 /* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
117 return WLX_SAS_ACTION_NONE
;
120 FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
121 return WLX_SAS_ACTION_LOGOFF
;
126 IN UINT uIdResourcePrompt
,
128 IN DWORD BufferLength
,
132 WCHAR charToDisplay
[] = { 0, UNICODE_NULL
};
134 if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE
), 0))
137 if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE
)))
140 if (!DisplayResourceText(uIdResourcePrompt
, FALSE
))
147 if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE
), &readChar
, 1, &count
, NULL
))
149 if (readChar
== '\r' || readChar
== '\n')
152 charToDisplay
[0] = L
'\n';
154 GetStdHandle(STD_OUTPUT_HANDLE
),
156 wcslen(charToDisplay
),
163 /* Display the char */
164 charToDisplay
[0] = readChar
;
166 GetStdHandle(STD_OUTPUT_HANDLE
),
168 wcslen(charToDisplay
),
172 Buffer
[i
++] = readChar
;
173 /* FIXME: buffer overflow if the user writes too many chars! */
174 UNREFERENCED_PARAMETER(BufferLength
);
175 /* FIXME: handle backspace */
177 Buffer
[i
] = UNICODE_NULL
;
181 /* Still display the \n */
182 static LPCWSTR newLine
= L
"\n";
185 GetStdHandle(STD_OUTPUT_HANDLE
),
196 IN OUT PGINA_CONTEXT pgContext
)
201 TRACE("TUILoggedOutSAS()\n");
203 /* Ask the user for credentials */
204 if (!ReadString(IDS_ASKFORUSER
, UserName
, 256, TRUE
))
205 return WLX_SAS_ACTION_NONE
;
206 if (!ReadString(IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
207 return WLX_SAS_ACTION_NONE
;
209 if (DoLoginTasks(pgContext
, UserName
, NULL
, Password
))
210 return WLX_SAS_ACTION_LOGON
;
212 return WLX_SAS_ACTION_NONE
;
217 IN OUT PGINA_CONTEXT pgContext
)
223 TRACE("TUILockedSAS()\n");
225 UNREFERENCED_PARAMETER(pgContext
);
227 if (!DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
))
228 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
230 /* Ask the user for credentials */
231 if (!ReadString(IDS_ASKFORUSER
, UserName
, 256, TRUE
))
232 return WLX_SAS_ACTION_NONE
;
233 if (!ReadString(IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
234 return WLX_SAS_ACTION_NONE
;
236 if (!LogonUserW(UserName
, NULL
, Password
,
237 LOGON32_LOGON_UNLOCK
,
238 LOGON32_PROVIDER_DEFAULT
,
241 TRACE("LogonUserW() failed\n");
242 return WLX_SAS_ACTION_NONE
;
245 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
249 TUIDisplayLockedNotice(
250 IN OUT PGINA_CONTEXT pgContext
)
254 GINA_UI GinaTextUI
= {
256 TUIDisplayStatusMessage
,
257 TUIRemoveStatusMessage
,
262 TUIDisplayLockedNotice
,