mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
"Unicodify" msgina
Add stubs for locking/unlocking svn path=/trunk/; revision=23541
This commit is contained in:
parent
e3d8854be7
commit
65cde24d6c
8 changed files with 212 additions and 160 deletions
|
@ -47,7 +47,10 @@ END
|
|||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_PRESSCTRLALTDELETE "Press CONTROL+ALT+DELETE key combination\n"
|
||||
IDS_ASKFORUSER "User name: "
|
||||
IDS_ASKFORPASSWORD "Password: "
|
||||
IDS_LOGGEDOUTSAS "Welcome!"
|
||||
IDS_LOCKEDSAS "The computer is currently locked"
|
||||
IDS_PRESSCTRLALTDELETE "Press CONTROL+ALT+DELETE key combination"
|
||||
IDS_ASKFORUSER "User name: "
|
||||
IDS_ASKFORPASSWORD "Password: "
|
||||
IDS_FORCELOGOFF "This will close the the session of the current user, and loose all his unsaved work. Continue?"
|
||||
END
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#include "msgina.h"
|
||||
|
||||
#define YDEBUG
|
||||
//#define YDEBUG
|
||||
#include <wine/debug.h>
|
||||
|
||||
typedef struct _DISPLAYSTATUSMSG
|
||||
|
@ -46,17 +46,17 @@ StatusMessageWindowProc(
|
|||
msg->Context->hStatusWindow = hwndDlg;
|
||||
|
||||
if (msg->pTitle)
|
||||
SetWindowText(hwndDlg, msg->pTitle);
|
||||
SetDlgItemText(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
||||
SetWindowTextW(hwndDlg, msg->pTitle);
|
||||
SetDlgItemTextW(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
||||
if (!msg->Context->SignaledStatusWindowCreated)
|
||||
{
|
||||
msg->Context->SignaledStatusWindowCreated = TRUE;
|
||||
SetEvent(msg->StartupEvent);
|
||||
}
|
||||
break;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static DWORD WINAPI
|
||||
|
@ -141,9 +141,9 @@ GUIDisplayStatusMessage(
|
|||
}
|
||||
|
||||
if(pTitle)
|
||||
SetWindowText(pgContext->hStatusWindow, pTitle);
|
||||
SetWindowTextW(pgContext->hStatusWindow, pTitle);
|
||||
|
||||
SetDlgItemText(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
||||
SetDlgItemTextW(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -161,16 +161,6 @@ GUIRemoveStatusMessage(
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
DisplaySASNoticeWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
return DefWindowProc(hwndDlg, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
static VOID
|
||||
GUIDisplaySASNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
|
@ -184,7 +174,7 @@ GUIDisplaySASNotice(
|
|||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_NOTICE_DLG),
|
||||
NULL,
|
||||
DisplaySASNoticeWindowProc,
|
||||
NULL,
|
||||
(LPARAM)NULL);
|
||||
if (result == -1)
|
||||
{
|
||||
|
@ -209,7 +199,7 @@ GetTextboxText(
|
|||
Text = HeapAlloc(GetProcessHeap(), 0, (Count + 1) * sizeof(WCHAR));
|
||||
if (!Text)
|
||||
return FALSE;
|
||||
if (Count != GetWindowText(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
||||
if (Count != GetWindowTextW(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, Text);
|
||||
return FALSE;
|
||||
|
@ -218,6 +208,83 @@ GetTextboxText(
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LoggedOnWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_LOCK:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
||||
return TRUE;
|
||||
case IDC_LOGOFF:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
||||
return TRUE;
|
||||
case IDC_SHUTDOWN:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
||||
return TRUE;
|
||||
case IDC_TASKMGR:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
||||
return TRUE;
|
||||
}
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EndDialog(hwndDlg, IDNO);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILoggedOnSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
{
|
||||
INT result;
|
||||
|
||||
TRACE("GUILoggedOnSAS()\n");
|
||||
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
||||
* close itself thanks to the use of WlxDialogBoxParam */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDON_DLG),
|
||||
NULL,
|
||||
LoggedOnWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
if (result >= WLX_SAS_ACTION_LOGON &&
|
||||
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LoggedOutWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
|
@ -297,83 +364,6 @@ LoggedOutWindowProc(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK
|
||||
LoggedOnWindowProc(
|
||||
IN HWND hwndDlg,
|
||||
IN UINT uMsg,
|
||||
IN WPARAM wParam,
|
||||
IN LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_COMMAND:
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDC_LOCK:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
||||
return TRUE;
|
||||
case IDC_LOGOFF:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
||||
return TRUE;
|
||||
case IDC_SHUTDOWN:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
||||
return TRUE;
|
||||
case IDC_TASKMGR:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
||||
return TRUE;
|
||||
case IDCANCEL:
|
||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
||||
return TRUE;
|
||||
}
|
||||
case WM_CLOSE:
|
||||
{
|
||||
EndDialog(hwndDlg, IDNO);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILoggedOnSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext,
|
||||
IN DWORD dwSasType)
|
||||
{
|
||||
INT result;
|
||||
|
||||
TRACE("GUILoggedOnSAS()\n");
|
||||
|
||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||
{
|
||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
||||
* close itself thanks to the use of WlxDialogBoxParam */
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_LOGGEDON_DLG),
|
||||
NULL,
|
||||
LoggedOnWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
if (result >= WLX_SAS_ACTION_LOGON &&
|
||||
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILoggedOutSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
|
@ -385,7 +375,7 @@ GUILoggedOutSAS(
|
|||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||
pgContext->hWlx,
|
||||
pgContext->hDllInstance,
|
||||
MAKEINTRESOURCE(IDD_LOGGEDOUT_DLG),
|
||||
MAKEINTRESOURCEW(IDD_LOGGEDOUT_DLG),
|
||||
NULL,
|
||||
LoggedOutWindowProc,
|
||||
(LPARAM)pgContext);
|
||||
|
@ -400,6 +390,16 @@ GUILoggedOutSAS(
|
|||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT
|
||||
GUILockedSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
TRACE("GUILockedSAS()\n");
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
}
|
||||
|
||||
GINA_UI GinaGraphicalUI = {
|
||||
GUIInitialize,
|
||||
GUIDisplayStatusMessage,
|
||||
|
@ -407,4 +407,5 @@ GINA_UI GinaGraphicalUI = {
|
|||
GUIDisplaySASNotice,
|
||||
GUILoggedOnSAS,
|
||||
GUILoggedOutSAS,
|
||||
GUILockedSAS,
|
||||
};
|
||||
|
|
|
@ -94,7 +94,7 @@ ChooseGinaUI(VOID)
|
|||
BOOL ConsoleBoot = FALSE;
|
||||
LONG rc;
|
||||
|
||||
rc = RegOpenKeyEx(
|
||||
rc = RegOpenKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\CurrentControlSet\\Control",
|
||||
0,
|
||||
|
@ -178,7 +178,6 @@ WlxInitialize(
|
|||
return pGinaUI->Initialize(pgContext);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -190,12 +189,12 @@ WlxStartApplication(
|
|||
PWSTR pszCmdLine)
|
||||
{
|
||||
PGINA_CONTEXT pgContext = (PGINA_CONTEXT)pWlxContext;
|
||||
STARTUPINFO StartupInfo;
|
||||
STARTUPINFOW StartupInfo;
|
||||
PROCESS_INFORMATION ProcessInformation;
|
||||
WCHAR CurrentDirectory[MAX_PATH];
|
||||
BOOL Ret;
|
||||
|
||||
StartupInfo.cb = sizeof(STARTUPINFO);
|
||||
StartupInfo.cb = sizeof(STARTUPINFOW);
|
||||
StartupInfo.lpReserved = NULL;
|
||||
StartupInfo.lpTitle = pszCmdLine;
|
||||
StartupInfo.dwX = StartupInfo.dwY = StartupInfo.dwXSize = StartupInfo.dwYSize = 0L;
|
||||
|
@ -206,11 +205,11 @@ WlxStartApplication(
|
|||
StartupInfo.lpDesktop = pszDesktopName;
|
||||
|
||||
GetWindowsDirectoryW (CurrentDirectory, MAX_PATH);
|
||||
Ret = CreateProcessAsUser(pgContext->UserToken,
|
||||
NULL,
|
||||
Ret = CreateProcessAsUserW(pgContext->UserToken,
|
||||
pszCmdLine,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
FALSE,
|
||||
CREATE_UNICODE_ENVIRONMENT,
|
||||
pEnvironment,
|
||||
|
@ -237,7 +236,7 @@ WlxActivateUserShell(
|
|||
DWORD BufSize, ValueType;
|
||||
WCHAR pszUserInitApp[MAX_PATH];
|
||||
WCHAR pszExpUserInitApp[MAX_PATH];
|
||||
|
||||
TRACE("WlxActivateUserShell()\n");
|
||||
/* get the path of userinit */
|
||||
if(RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\ReactOS\\Windows NT\\CurrentVersion\\Winlogon",
|
||||
|
@ -247,7 +246,7 @@ WlxActivateUserShell(
|
|||
return FALSE;
|
||||
}
|
||||
BufSize = MAX_PATH * sizeof(WCHAR);
|
||||
if((RegQueryValueEx(hKey, L"Userinit", NULL, &ValueType, (LPBYTE)pszUserInitApp,
|
||||
if((RegQueryValueExW(hKey, L"Userinit", NULL, &ValueType, (LPBYTE)pszUserInitApp,
|
||||
&BufSize) != ERROR_SUCCESS) ||
|
||||
!((ValueType == REG_SZ) || (ValueType == REG_EXPAND_SZ)))
|
||||
{ERR("GINA: Failed: 2\n");
|
||||
|
@ -256,7 +255,7 @@ WlxActivateUserShell(
|
|||
return FALSE;
|
||||
}
|
||||
RegCloseKey(hKey);
|
||||
ExpandEnvironmentStrings(pszUserInitApp, pszExpUserInitApp, MAX_PATH);
|
||||
ExpandEnvironmentStringsW(pszUserInitApp, pszExpUserInitApp, MAX_PATH);
|
||||
|
||||
/* Start userinit */
|
||||
/* FIXME - allow to start more applications that are comma-separated */
|
||||
|
@ -363,27 +362,25 @@ DoLoginTasks(
|
|||
TOKEN_STATISTICS Stats;
|
||||
DWORD cbStats;
|
||||
|
||||
if(!LogonUserW(UserName, Domain, Password,
|
||||
if (!LogonUserW(UserName, Domain, Password,
|
||||
LOGON32_LOGON_INTERACTIVE, /* FIXME - use LOGON32_LOGON_UNLOCK instead! */
|
||||
LOGON32_PROVIDER_DEFAULT,
|
||||
pgContext->phToken))
|
||||
&pgContext->UserToken))
|
||||
{
|
||||
WARN("LogonUserW() failed\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(!*pgContext->phToken)
|
||||
if (!pgContext->UserToken)
|
||||
{
|
||||
WARN("*phToken == NULL!\n");
|
||||
WARN("UserToken == NULL!\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pgContext->UserToken =*pgContext->phToken;
|
||||
|
||||
*pgContext->pdwOptions = 0;
|
||||
*pgContext->pProfile =NULL;
|
||||
*pgContext->pProfile = NULL;
|
||||
|
||||
if(!GetTokenInformation(*pgContext->phToken,
|
||||
if (!GetTokenInformation(pgContext->UserToken,
|
||||
TokenStatistics,
|
||||
(PVOID)&Stats,
|
||||
sizeof(TOKEN_STATISTICS),
|
||||
|
@ -420,7 +417,7 @@ DoAutoLogon(
|
|||
if (pgContext->AutoLogonState == AUTOLOGON_DISABLED)
|
||||
return FALSE;
|
||||
|
||||
rc = RegOpenKeyEx(
|
||||
rc = RegOpenKeyExW(
|
||||
HKEY_LOCAL_MACHINE,
|
||||
L"SOFTWARE\\ReactOS\\Windows NT\\CurrentVersion\\WinLogon",
|
||||
0,
|
||||
|
@ -540,12 +537,12 @@ WlxLoggedOutSAS(
|
|||
OUT PVOID *pProfile)
|
||||
{
|
||||
PGINA_CONTEXT pgContext = (PGINA_CONTEXT)pWlxContext;
|
||||
INT res;
|
||||
|
||||
TRACE("WlxLoggedOutSAS()\n");
|
||||
|
||||
pgContext->pAuthenticationId = pAuthenticationId;
|
||||
pgContext->pdwOptions = pdwOptions;
|
||||
pgContext->phToken = phToken;
|
||||
pgContext->pNprNotifyInfo = pNprNotifyInfo;
|
||||
pgContext->pProfile = pProfile;
|
||||
|
||||
|
@ -554,10 +551,28 @@ WlxLoggedOutSAS(
|
|||
{
|
||||
/* User is local and registry contains information
|
||||
* to log on him automatically */
|
||||
*phToken = pgContext->UserToken;
|
||||
return WLX_SAS_ACTION_LOGON;
|
||||
}
|
||||
|
||||
return pGinaUI->LoggedOutSAS(pgContext);
|
||||
res = pGinaUI->LoggedOutSAS(pgContext);
|
||||
*phToken = pgContext->UserToken;
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
int WINAPI
|
||||
WlxWkstaLockedSAS(
|
||||
PVOID pWlxContext,
|
||||
DWORD dwSasType)
|
||||
{
|
||||
PGINA_CONTEXT pgContext = (PGINA_CONTEXT)pWlxContext;
|
||||
|
||||
TRACE("WlxWkstaLockedSAS()\n");
|
||||
|
||||
return pGinaUI->LockedSAS(pgContext);
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
|
|
|
@ -16,15 +16,14 @@ typedef struct
|
|||
LPWSTR station;
|
||||
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
|
||||
HANDLE hDllInstance;
|
||||
HANDLE UserToken;
|
||||
HWND hStatusWindow;
|
||||
BOOL SignaledStatusWindowCreated;
|
||||
DWORD AutoLogonState;
|
||||
|
||||
/* Informations to be filled during logon */
|
||||
HANDLE UserToken;
|
||||
PLUID pAuthenticationId;
|
||||
PDWORD pdwOptions;
|
||||
PHANDLE phToken;
|
||||
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo;
|
||||
PVOID *pProfile;
|
||||
|
||||
|
@ -40,6 +39,7 @@ typedef BOOL (*PFGINA_REMOVESTATUSMESSAGE)(PGINA_CONTEXT);
|
|||
typedef VOID (*PFGINA_DISPLAYSASNOTICE)(PGINA_CONTEXT);
|
||||
typedef INT (*PFGINA_LOGGEDONSAS)(PGINA_CONTEXT, DWORD);
|
||||
typedef INT (*PFGINA_LOGGEDOUTSAS)(PGINA_CONTEXT);
|
||||
typedef INT (*PFGINA_LOCKEDSAS)(PGINA_CONTEXT);
|
||||
typedef struct _GINA_UI
|
||||
{
|
||||
PFGINA_INITIALIZE Initialize;
|
||||
|
@ -48,6 +48,7 @@ typedef struct _GINA_UI
|
|||
PFGINA_DISPLAYSASNOTICE DisplaySASNotice;
|
||||
PFGINA_LOGGEDONSAS LoggedOnSAS;
|
||||
PFGINA_LOGGEDOUTSAS LoggedOutSAS;
|
||||
PFGINA_LOCKEDSAS LockedSAS;
|
||||
} GINA_UI, *PGINA_UI;
|
||||
|
||||
/* msgina.c */
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
<importlibrary definition="msgina.def" />
|
||||
<include base="msgina">.</include>
|
||||
<include base="msgina">include</include>
|
||||
<define name="UNICODE" />
|
||||
<define name="_UNICODE" />
|
||||
<define name="__REACTOS__" />
|
||||
<define name="__USE_W32API" />
|
||||
<library>ntdll</library>
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#define IDD_NOTICE_DLG 101
|
||||
#define IDD_LOGGEDON_DLG 102
|
||||
#define IDD_LOGGEDOUT_DLG 103
|
||||
#define IDD_LOCKED_DLG 104
|
||||
|
||||
#define IDC_LOGOFF 1001
|
||||
#define IDC_USERNAME 1002
|
||||
#define IDC_PASSWORD 1003
|
||||
|
@ -13,12 +15,16 @@
|
|||
#define IDC_STATUSLABEL 1005
|
||||
#define IDC_LOCK 1006
|
||||
#define IDC_ROSLOGO 1007
|
||||
#define IDI_ROSLOGO 1008
|
||||
#define IDS_ASKFORUSER 40000
|
||||
#define IDS_PRESSCTRLALTDELETE 40001
|
||||
#define IDC_TASKMGR 40002
|
||||
#define IDS_ASKFORPASSWORD 40002
|
||||
#define IDC_TASKMGR 1008
|
||||
|
||||
#define IDI_ROSLOGO 20000
|
||||
|
||||
#define IDS_LOGGEDOUTSAS 40000
|
||||
#define IDS_LOCKEDSAS 40001
|
||||
#define IDS_PRESSCTRLALTDELETE 40002
|
||||
#define IDS_ASKFORUSER 40003
|
||||
#define IDS_ASKFORPASSWORD 40004
|
||||
#define IDS_FORCELOGOFF 40005
|
||||
|
||||
#endif /* __MSGINA_RESOURCE_H */
|
||||
|
||||
|
|
|
@ -97,19 +97,6 @@ WlxShutdown(
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
int WINAPI
|
||||
WlxWkstaLockedSAS(
|
||||
PVOID pWlxContext,
|
||||
DWORD dwSasType)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
|
@ -118,8 +105,9 @@ WlxScreenSaverNotify(
|
|||
PVOID pWlxContext,
|
||||
BOOL *pSecure)
|
||||
{
|
||||
//HKLM\Software\Policies\Microsoft\Windows\Control Panel\Desktop : ScreenSaverIsSecure
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -55,24 +55,45 @@ TUIRemoveStatusMessage(
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
DisplayResourceText(
|
||||
IN UINT uIdResourceText,
|
||||
IN BOOL AddNewLine)
|
||||
{
|
||||
WCHAR Prompt[256];
|
||||
static LPCWSTR newLine = L"\n";
|
||||
DWORD count;
|
||||
|
||||
if (!LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
|
||||
return FALSE;
|
||||
if (!WriteConsole(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
Prompt, wcslen(Prompt),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (AddNewLine)
|
||||
{
|
||||
if (!WriteConsoleW(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
newLine, wcslen(newLine),
|
||||
&count, NULL))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static VOID
|
||||
TUIDisplaySASNotice(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
WCHAR CtrlAltDelPrompt[256];
|
||||
DWORD count;
|
||||
|
||||
TRACE("TUIDisplaySASNotice()\n");
|
||||
|
||||
if (LoadString(hDllInstance, IDS_PRESSCTRLALTDELETE, CtrlAltDelPrompt, 256))
|
||||
{
|
||||
WriteConsole(
|
||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||
CtrlAltDelPrompt,
|
||||
wcslen(CtrlAltDelPrompt),
|
||||
&count,
|
||||
NULL);
|
||||
}
|
||||
DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE);
|
||||
DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE);
|
||||
}
|
||||
|
||||
static INT
|
||||
|
@ -100,7 +121,6 @@ ReadString(
|
|||
IN DWORD BufferLength,
|
||||
IN BOOL ShowString)
|
||||
{
|
||||
WCHAR Prompt[256];
|
||||
DWORD count, i;
|
||||
|
||||
if (!SetConsoleMode(
|
||||
|
@ -110,10 +130,7 @@ ReadString(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (!LoadString(hDllInstance, uIdResourcePrompt, Prompt, 256))
|
||||
return FALSE;
|
||||
|
||||
if (!WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), Prompt, wcslen(Prompt), &count, NULL))
|
||||
if (!DisplayResourceText(uIdResourcePrompt, FALSE))
|
||||
return FALSE;
|
||||
|
||||
i = 0;
|
||||
|
@ -150,6 +167,28 @@ TUILoggedOutSAS(
|
|||
return WLX_SAS_ACTION_NONE;
|
||||
}
|
||||
|
||||
static INT
|
||||
TUILockedSAS(
|
||||
IN OUT PGINA_CONTEXT pgContext)
|
||||
{
|
||||
WCHAR UserName[256];
|
||||
WCHAR Password[256];
|
||||
|
||||
TRACE("TUILockedSAS()\n");
|
||||
|
||||
if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE))
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
|
||||
/* Ask the user for credentials */
|
||||
if (!ReadString(pgContext, IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
if (!ReadString(pgContext, IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||
return WLX_SAS_ACTION_NONE;
|
||||
|
||||
FIXME("FIXME: Check user/password\n");
|
||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||
}
|
||||
|
||||
GINA_UI GinaTextUI = {
|
||||
TUIInitialize,
|
||||
TUIDisplayStatusMessage,
|
||||
|
@ -157,4 +196,5 @@ GINA_UI GinaTextUI = {
|
|||
TUIDisplaySASNotice,
|
||||
TUILoggedOnSAS,
|
||||
TUILoggedOutSAS,
|
||||
TUILockedSAS,
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue