Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygentui.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS msgina.dll 00003 * FILE: dll/win32/msgina/tui.c 00004 * PURPOSE: ReactOS Logon GINA DLL 00005 * PROGRAMMER: Hervé Poussineau (hpoussin@reactos.org) 00006 */ 00007 00008 #include "msgina.h" 00009 00010 WINE_DEFAULT_DEBUG_CHANNEL(msgina); 00011 00012 static BOOL 00013 TUIInitialize( 00014 IN OUT PGINA_CONTEXT pgContext) 00015 { 00016 TRACE("TUIInitialize(%p)\n", pgContext); 00017 00018 return AllocConsole(); 00019 } 00020 00021 static BOOL 00022 TUIDisplayStatusMessage( 00023 IN PGINA_CONTEXT pgContext, 00024 IN HDESK hDesktop, 00025 IN DWORD dwOptions, 00026 IN PWSTR pTitle, 00027 IN PWSTR pMessage) 00028 { 00029 static LPCWSTR newLine = L"\n"; 00030 DWORD result; 00031 00032 TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage); 00033 00034 UNREFERENCED_PARAMETER(pgContext); 00035 UNREFERENCED_PARAMETER(hDesktop); 00036 UNREFERENCED_PARAMETER(dwOptions); 00037 UNREFERENCED_PARAMETER(pTitle); 00038 00039 return 00040 WriteConsoleW( 00041 GetStdHandle(STD_OUTPUT_HANDLE), 00042 pMessage, 00043 wcslen(pMessage), 00044 &result, 00045 NULL) && 00046 WriteConsoleW( 00047 GetStdHandle(STD_OUTPUT_HANDLE), 00048 newLine, 00049 wcslen(newLine), 00050 &result, 00051 NULL); 00052 } 00053 00054 static BOOL 00055 TUIRemoveStatusMessage( 00056 IN PGINA_CONTEXT pgContext) 00057 { 00058 UNREFERENCED_PARAMETER(pgContext); 00059 00060 /* Nothing to do */ 00061 return TRUE; 00062 } 00063 00064 static BOOL 00065 DisplayResourceText( 00066 IN UINT uIdResourceText, 00067 IN BOOL AddNewLine) 00068 { 00069 WCHAR Prompt[256]; 00070 static LPCWSTR newLine = L"\n"; 00071 DWORD count; 00072 00073 if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256)) 00074 return FALSE; 00075 if (!WriteConsoleW( 00076 GetStdHandle(STD_OUTPUT_HANDLE), 00077 Prompt, wcslen(Prompt), 00078 &count, NULL)) 00079 { 00080 return FALSE; 00081 } 00082 if (AddNewLine) 00083 { 00084 if (!WriteConsoleW( 00085 GetStdHandle(STD_OUTPUT_HANDLE), 00086 newLine, wcslen(newLine), 00087 &count, NULL)) 00088 { 00089 return FALSE; 00090 } 00091 } 00092 return TRUE; 00093 } 00094 00095 static VOID 00096 TUIDisplaySASNotice( 00097 IN OUT PGINA_CONTEXT pgContext) 00098 { 00099 TRACE("TUIDisplaySASNotice()\n"); 00100 00101 UNREFERENCED_PARAMETER(pgContext); 00102 00103 DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE); 00104 DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE); 00105 } 00106 00107 static INT 00108 TUILoggedOnSAS( 00109 IN OUT PGINA_CONTEXT pgContext, 00110 IN DWORD dwSasType) 00111 { 00112 TRACE("TUILoggedOnSAS()\n"); 00113 00114 UNREFERENCED_PARAMETER(pgContext); 00115 00116 if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL) 00117 { 00118 /* Nothing to do for WLX_SAS_TYPE_TIMEOUT */ 00119 return WLX_SAS_ACTION_NONE; 00120 } 00121 00122 FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n"); 00123 return WLX_SAS_ACTION_LOGOFF; 00124 } 00125 00126 static BOOL 00127 ReadString( 00128 IN UINT uIdResourcePrompt, 00129 IN OUT PWSTR Buffer, 00130 IN DWORD BufferLength, 00131 IN BOOL ShowString) 00132 { 00133 DWORD count, i; 00134 WCHAR charToDisplay[] = { 0, UNICODE_NULL }; 00135 00136 if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0)) 00137 return FALSE; 00138 00139 if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE))) 00140 return FALSE; 00141 00142 if (!DisplayResourceText(uIdResourcePrompt, FALSE)) 00143 return FALSE; 00144 00145 i = 0; 00146 for (;;) 00147 { 00148 WCHAR readChar; 00149 if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &readChar, 1, &count, NULL)) 00150 return FALSE; 00151 if (readChar == '\r' || readChar == '\n') 00152 { 00153 /* End of string */ 00154 charToDisplay[0] = L'\n'; 00155 WriteConsoleW( 00156 GetStdHandle(STD_OUTPUT_HANDLE), 00157 charToDisplay, 00158 wcslen(charToDisplay), 00159 &count, 00160 NULL); 00161 break; 00162 } 00163 if (ShowString) 00164 { 00165 /* Display the char */ 00166 charToDisplay[0] = readChar; 00167 WriteConsoleW( 00168 GetStdHandle(STD_OUTPUT_HANDLE), 00169 charToDisplay, 00170 wcslen(charToDisplay), 00171 &count, 00172 NULL); 00173 } 00174 Buffer[i++] = readChar; 00175 /* FIXME: buffer overflow if the user writes too many chars! */ 00176 UNREFERENCED_PARAMETER(BufferLength); 00177 /* FIXME: handle backspace */ 00178 } 00179 Buffer[i] = UNICODE_NULL; 00180 00181 if (!ShowString) 00182 { 00183 /* Still display the \n */ 00184 static LPCWSTR newLine = L"\n"; 00185 DWORD result; 00186 WriteConsoleW( 00187 GetStdHandle(STD_OUTPUT_HANDLE), 00188 newLine, 00189 wcslen(newLine), 00190 &result, 00191 NULL); 00192 } 00193 return TRUE; 00194 } 00195 00196 static INT 00197 TUILoggedOutSAS( 00198 IN OUT PGINA_CONTEXT pgContext) 00199 { 00200 WCHAR UserName[256]; 00201 WCHAR Password[256]; 00202 00203 TRACE("TUILoggedOutSAS()\n"); 00204 00205 /* Ask the user for credentials */ 00206 if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE)) 00207 return WLX_SAS_ACTION_NONE; 00208 if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE)) 00209 return WLX_SAS_ACTION_NONE; 00210 00211 if (DoLoginTasks(pgContext, UserName, NULL, Password)) 00212 return WLX_SAS_ACTION_LOGON; 00213 else 00214 return WLX_SAS_ACTION_NONE; 00215 } 00216 00217 static INT 00218 TUILockedSAS( 00219 IN OUT PGINA_CONTEXT pgContext) 00220 { 00221 HANDLE hToken; 00222 WCHAR UserName[256]; 00223 WCHAR Password[256]; 00224 00225 TRACE("TUILockedSAS()\n"); 00226 00227 UNREFERENCED_PARAMETER(pgContext); 00228 00229 if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE)) 00230 return WLX_SAS_ACTION_UNLOCK_WKSTA; 00231 00232 /* Ask the user for credentials */ 00233 if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE)) 00234 return WLX_SAS_ACTION_NONE; 00235 if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE)) 00236 return WLX_SAS_ACTION_NONE; 00237 00238 if (!LogonUserW(UserName, NULL, Password, 00239 LOGON32_LOGON_UNLOCK, 00240 LOGON32_PROVIDER_DEFAULT, 00241 &hToken)) 00242 { 00243 TRACE("LogonUserW() failed\n"); 00244 return WLX_SAS_ACTION_NONE; 00245 } 00246 CloseHandle(hToken); 00247 return WLX_SAS_ACTION_UNLOCK_WKSTA; 00248 } 00249 00250 GINA_UI GinaTextUI = { 00251 TUIInitialize, 00252 TUIDisplayStatusMessage, 00253 TUIRemoveStatusMessage, 00254 TUIDisplaySASNotice, 00255 TUILoggedOnSAS, 00256 TUILoggedOutSAS, 00257 TUILockedSAS, 00258 }; Generated on Sat May 26 2012 04:18:05 for ReactOS by
1.7.6.1
|