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)
11 #include <wine/debug.h>
15 IN OUT PGINA_CONTEXT pgContext
)
17 TRACE("TUIInitialize(%p)\n", pgContext
);
19 return AllocConsole();
23 TUIDisplayStatusMessage(
24 IN PGINA_CONTEXT pgContext
,
30 static LPCWSTR newLine
= L
"\n";
33 TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage
);
37 GetStdHandle(STD_OUTPUT_HANDLE
),
43 GetStdHandle(STD_OUTPUT_HANDLE
),
51 TUIRemoveStatusMessage(
52 IN PGINA_CONTEXT pgContext
)
60 IN UINT uIdResourceText
,
64 static LPCWSTR newLine
= L
"\n";
67 if (!LoadStringW(hDllInstance
, uIdResourceText
, Prompt
, 256))
70 GetStdHandle(STD_OUTPUT_HANDLE
),
71 Prompt
, wcslen(Prompt
),
79 GetStdHandle(STD_OUTPUT_HANDLE
),
80 newLine
, wcslen(newLine
),
91 IN OUT PGINA_CONTEXT pgContext
)
93 TRACE("TUIDisplaySASNotice()\n");
95 DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
);
96 DisplayResourceText(IDS_PRESSCTRLALTDELETE
, TRUE
);
101 IN OUT PGINA_CONTEXT pgContext
,
104 TRACE("TUILoggedOnSAS()\n");
106 if (dwSasType
!= WLX_SAS_TYPE_CTRL_ALT_DEL
)
108 /* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
109 return WLX_SAS_ACTION_NONE
;
112 FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
113 return WLX_SAS_ACTION_LOGOFF
;
118 IN PGINA_CONTEXT pgContext
,
119 IN UINT uIdResourcePrompt
,
121 IN DWORD BufferLength
,
125 WCHAR charToDisplay
[] = { 0, UNICODE_NULL
};
127 if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE
), 0))
130 if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE
)))
133 if (!DisplayResourceText(uIdResourcePrompt
, FALSE
))
140 if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE
), &readChar
, 1, &count
, NULL
))
142 if (readChar
== '\r' || readChar
== '\n')
145 charToDisplay
[0] = L
'\n';
147 GetStdHandle(STD_OUTPUT_HANDLE
),
149 wcslen(charToDisplay
),
156 /* Display the char */
157 charToDisplay
[0] = readChar
;
159 GetStdHandle(STD_OUTPUT_HANDLE
),
161 wcslen(charToDisplay
),
165 Buffer
[i
++] = readChar
;
166 /* FIXME: buffer overflow if the user writes too many chars! */
167 /* FIXME: handle backspace */
169 Buffer
[i
] = UNICODE_NULL
;
173 /* Still display the \n */
174 static LPCWSTR newLine
= L
"\n";
177 GetStdHandle(STD_OUTPUT_HANDLE
),
188 IN OUT PGINA_CONTEXT pgContext
)
193 TRACE("TUILoggedOutSAS()\n");
195 /* Ask the user for credentials */
196 if (!ReadString(pgContext
, IDS_ASKFORUSER
, UserName
, 256, TRUE
))
197 return WLX_SAS_ACTION_NONE
;
198 if (!ReadString(pgContext
, IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
199 return WLX_SAS_ACTION_NONE
;
201 if (DoLoginTasks(pgContext
, UserName
, NULL
, Password
))
202 return WLX_SAS_ACTION_LOGON
;
204 return WLX_SAS_ACTION_NONE
;
209 IN OUT PGINA_CONTEXT pgContext
)
214 TRACE("TUILockedSAS()\n");
216 if (!DisplayResourceText(IDS_LOGGEDOUTSAS
, TRUE
))
217 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
219 /* Ask the user for credentials */
220 if (!ReadString(pgContext
, IDS_ASKFORUSER
, UserName
, 256, TRUE
))
221 return WLX_SAS_ACTION_NONE
;
222 if (!ReadString(pgContext
, IDS_ASKFORPASSWORD
, Password
, 256, FALSE
))
223 return WLX_SAS_ACTION_NONE
;
225 FIXME("FIXME: Check user/password\n");
226 return WLX_SAS_ACTION_UNLOCK_WKSTA
;
229 GINA_UI GinaTextUI
= {
231 TUIDisplayStatusMessage
,
232 TUIRemoveStatusMessage
,