"Unicodify" msgina

Add stubs for locking/unlocking

svn path=/trunk/; revision=23541
This commit is contained in:
Hervé Poussineau 2006-08-10 18:41:23 +00:00
parent e3d8854be7
commit 65cde24d6c
8 changed files with 212 additions and 160 deletions

View file

@ -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

View file

@ -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,
};

View file

@ -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

View file

@ -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 */

View file

@ -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>

View file

@ -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 */

View file

@ -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;
}

View file

@ -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,
};