mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 02:41:22 +00:00
[MSGINA]
Convert tabs to spaces. No code changes! svn path=/trunk/; revision=58963
This commit is contained in:
parent
bfe3492dc4
commit
c1d4f2f390
5 changed files with 1111 additions and 1111 deletions
|
@ -11,222 +11,222 @@ WINE_DEFAULT_DEBUG_CHANNEL(msgina);
|
||||||
|
|
||||||
typedef struct _DISPLAYSTATUSMSG
|
typedef struct _DISPLAYSTATUSMSG
|
||||||
{
|
{
|
||||||
PGINA_CONTEXT Context;
|
PGINA_CONTEXT Context;
|
||||||
HDESK hDesktop;
|
HDESK hDesktop;
|
||||||
DWORD dwOptions;
|
DWORD dwOptions;
|
||||||
PWSTR pTitle;
|
PWSTR pTitle;
|
||||||
PWSTR pMessage;
|
PWSTR pMessage;
|
||||||
HANDLE StartupEvent;
|
HANDLE StartupEvent;
|
||||||
} DISPLAYSTATUSMSG, *PDISPLAYSTATUSMSG;
|
} DISPLAYSTATUSMSG, *PDISPLAYSTATUSMSG;
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
GUIInitialize(
|
GUIInitialize(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
TRACE("GUIInitialize(%p)\n", pgContext);
|
TRACE("GUIInitialize(%p)\n", pgContext);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK
|
static INT_PTR CALLBACK
|
||||||
StatusMessageWindowProc(
|
StatusMessageWindowProc(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN UINT uMsg,
|
IN UINT uMsg,
|
||||||
IN WPARAM wParam,
|
IN WPARAM wParam,
|
||||||
IN LPARAM lParam)
|
IN LPARAM lParam)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(wParam);
|
UNREFERENCED_PARAMETER(wParam);
|
||||||
|
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lParam;
|
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lParam;
|
||||||
if (!msg)
|
if (!msg)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
msg->Context->hStatusWindow = hwndDlg;
|
msg->Context->hStatusWindow = hwndDlg;
|
||||||
|
|
||||||
if (msg->pTitle)
|
if (msg->pTitle)
|
||||||
SetWindowTextW(hwndDlg, msg->pTitle);
|
SetWindowTextW(hwndDlg, msg->pTitle);
|
||||||
SetDlgItemTextW(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
SetDlgItemTextW(hwndDlg, IDC_STATUSLABEL, msg->pMessage);
|
||||||
SetEvent(msg->StartupEvent);
|
SetEvent(msg->StartupEvent);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD WINAPI
|
static DWORD WINAPI
|
||||||
StartupWindowThread(LPVOID lpParam)
|
StartupWindowThread(LPVOID lpParam)
|
||||||
{
|
{
|
||||||
HDESK hDesk;
|
HDESK hDesk;
|
||||||
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lpParam;
|
PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lpParam;
|
||||||
|
|
||||||
/* When SetThreadDesktop is called the system closes the desktop handle when needed
|
/* When SetThreadDesktop is called the system closes the desktop handle when needed
|
||||||
so we have to create a new handle because this handle may still be in use by winlogon */
|
so we have to create a new handle because this handle may still be in use by winlogon */
|
||||||
if (!DuplicateHandle ( GetCurrentProcess(),
|
if (!DuplicateHandle ( GetCurrentProcess(),
|
||||||
msg->hDesktop,
|
msg->hDesktop,
|
||||||
GetCurrentProcess(),
|
GetCurrentProcess(),
|
||||||
(HANDLE*)&hDesk,
|
(HANDLE*)&hDesk,
|
||||||
0,
|
0,
|
||||||
FALSE,
|
FALSE,
|
||||||
DUPLICATE_SAME_ACCESS))
|
DUPLICATE_SAME_ACCESS))
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!SetThreadDesktop(hDesk))
|
if(!SetThreadDesktop(hDesk))
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DialogBoxParam(
|
DialogBoxParam(
|
||||||
hDllInstance,
|
hDllInstance,
|
||||||
MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG),
|
MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG),
|
||||||
GetDesktopWindow(),
|
GetDesktopWindow(),
|
||||||
StatusMessageWindowProc,
|
StatusMessageWindowProc,
|
||||||
(LPARAM)lpParam);
|
(LPARAM)lpParam);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, lpParam);
|
HeapFree(GetProcessHeap(), 0, lpParam);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
GUIDisplayStatusMessage(
|
GUIDisplayStatusMessage(
|
||||||
IN PGINA_CONTEXT pgContext,
|
IN PGINA_CONTEXT pgContext,
|
||||||
IN HDESK hDesktop,
|
IN HDESK hDesktop,
|
||||||
IN DWORD dwOptions,
|
IN DWORD dwOptions,
|
||||||
IN PWSTR pTitle,
|
IN PWSTR pTitle,
|
||||||
IN PWSTR pMessage)
|
IN PWSTR pMessage)
|
||||||
{
|
{
|
||||||
PDISPLAYSTATUSMSG msg;
|
PDISPLAYSTATUSMSG msg;
|
||||||
HANDLE Thread;
|
HANDLE Thread;
|
||||||
DWORD ThreadId;
|
DWORD ThreadId;
|
||||||
|
|
||||||
TRACE("GUIDisplayStatusMessage(%ws)\n", pMessage);
|
TRACE("GUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||||
|
|
||||||
if (!pgContext->hStatusWindow)
|
if (!pgContext->hStatusWindow)
|
||||||
{
|
{
|
||||||
msg = (PDISPLAYSTATUSMSG)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DISPLAYSTATUSMSG));
|
msg = (PDISPLAYSTATUSMSG)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DISPLAYSTATUSMSG));
|
||||||
if(!msg)
|
if(!msg)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
msg->Context = pgContext;
|
msg->Context = pgContext;
|
||||||
msg->dwOptions = dwOptions;
|
msg->dwOptions = dwOptions;
|
||||||
msg->pTitle = pTitle;
|
msg->pTitle = pTitle;
|
||||||
msg->pMessage = pMessage;
|
msg->pMessage = pMessage;
|
||||||
msg->hDesktop = hDesktop;
|
msg->hDesktop = hDesktop;
|
||||||
|
|
||||||
msg->StartupEvent = CreateEventW(
|
msg->StartupEvent = CreateEventW(
|
||||||
NULL,
|
NULL,
|
||||||
TRUE,
|
TRUE,
|
||||||
FALSE,
|
FALSE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (!msg->StartupEvent)
|
if (!msg->StartupEvent)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
Thread = CreateThread(
|
Thread = CreateThread(
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
StartupWindowThread,
|
StartupWindowThread,
|
||||||
(PVOID)msg,
|
(PVOID)msg,
|
||||||
0,
|
0,
|
||||||
&ThreadId);
|
&ThreadId);
|
||||||
if (Thread)
|
if (Thread)
|
||||||
{
|
{
|
||||||
CloseHandle(Thread);
|
CloseHandle(Thread);
|
||||||
WaitForSingleObject(msg->StartupEvent, INFINITE);
|
WaitForSingleObject(msg->StartupEvent, INFINITE);
|
||||||
CloseHandle(msg->StartupEvent);
|
CloseHandle(msg->StartupEvent);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pTitle)
|
if (pTitle)
|
||||||
SetWindowTextW(pgContext->hStatusWindow, pTitle);
|
SetWindowTextW(pgContext->hStatusWindow, pTitle);
|
||||||
|
|
||||||
SetDlgItemTextW(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
SetDlgItemTextW(pgContext->hStatusWindow, IDC_STATUSLABEL, pMessage);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
GUIRemoveStatusMessage(
|
GUIRemoveStatusMessage(
|
||||||
IN PGINA_CONTEXT pgContext)
|
IN PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
if (pgContext->hStatusWindow)
|
if (pgContext->hStatusWindow)
|
||||||
{
|
{
|
||||||
EndDialog(pgContext->hStatusWindow, 0);
|
EndDialog(pgContext->hStatusWindow, 0);
|
||||||
pgContext->hStatusWindow = NULL;
|
pgContext->hStatusWindow = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK
|
static INT_PTR CALLBACK
|
||||||
EmptyWindowProc(
|
EmptyWindowProc(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN UINT uMsg,
|
IN UINT uMsg,
|
||||||
IN WPARAM wParam,
|
IN WPARAM wParam,
|
||||||
IN LPARAM lParam)
|
IN LPARAM lParam)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(hwndDlg);
|
UNREFERENCED_PARAMETER(hwndDlg);
|
||||||
UNREFERENCED_PARAMETER(uMsg);
|
UNREFERENCED_PARAMETER(uMsg);
|
||||||
UNREFERENCED_PARAMETER(wParam);
|
UNREFERENCED_PARAMETER(wParam);
|
||||||
UNREFERENCED_PARAMETER(lParam);
|
UNREFERENCED_PARAMETER(lParam);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
GUIDisplaySASNotice(
|
GUIDisplaySASNotice(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
INT result;
|
INT result;
|
||||||
|
|
||||||
TRACE("GUIDisplaySASNotice()\n");
|
TRACE("GUIDisplaySASNotice()\n");
|
||||||
|
|
||||||
/* Display the notice window */
|
/* Display the notice window */
|
||||||
result = DialogBoxParam(
|
result = DialogBoxParam(
|
||||||
pgContext->hDllInstance,
|
pgContext->hDllInstance,
|
||||||
MAKEINTRESOURCE(IDD_NOTICE_DLG),
|
MAKEINTRESOURCE(IDD_NOTICE_DLG),
|
||||||
GetDesktopWindow(),
|
GetDesktopWindow(),
|
||||||
EmptyWindowProc,
|
EmptyWindowProc,
|
||||||
(LPARAM)NULL);
|
(LPARAM)NULL);
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
{
|
{
|
||||||
/* Failed to display the window. Do as if the user
|
/* Failed to display the window. Do as if the user
|
||||||
* already has pressed CTRL+ALT+DELETE */
|
* already has pressed CTRL+ALT+DELETE */
|
||||||
pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
|
pgContext->pWlxFuncs->WlxSasNotify(pgContext->hWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the text contained in a textbox. Allocates memory in pText
|
/* Get the text contained in a textbox. Allocates memory in pText
|
||||||
* to contain the text. Returns TRUE in case of success */
|
* to contain the text. Returns TRUE in case of success */
|
||||||
static BOOL
|
static BOOL
|
||||||
GetTextboxText(
|
GetTextboxText(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN INT TextboxId,
|
IN INT TextboxId,
|
||||||
OUT LPWSTR *pText)
|
OUT LPWSTR *pText)
|
||||||
{
|
{
|
||||||
LPWSTR Text;
|
LPWSTR Text;
|
||||||
int Count;
|
int Count;
|
||||||
|
|
||||||
Count = GetWindowTextLength(GetDlgItem(hwndDlg, TextboxId));
|
Count = GetWindowTextLength(GetDlgItem(hwndDlg, TextboxId));
|
||||||
Text = HeapAlloc(GetProcessHeap(), 0, (Count + 1) * sizeof(WCHAR));
|
Text = HeapAlloc(GetProcessHeap(), 0, (Count + 1) * sizeof(WCHAR));
|
||||||
if (!Text)
|
if (!Text)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (Count != GetWindowTextW(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
if (Count != GetWindowTextW(GetDlgItem(hwndDlg, TextboxId), Text, Count + 1))
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, Text);
|
HeapFree(GetProcessHeap(), 0, Text);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
*pText = Text;
|
*pText = Text;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
|
@ -260,209 +260,209 @@ OnInitSecurityDlg(HWND hwnd,
|
||||||
|
|
||||||
static INT_PTR CALLBACK
|
static INT_PTR CALLBACK
|
||||||
LoggedOnWindowProc(
|
LoggedOnWindowProc(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN UINT uMsg,
|
IN UINT uMsg,
|
||||||
IN WPARAM wParam,
|
IN WPARAM wParam,
|
||||||
IN LPARAM lParam)
|
IN LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam);
|
OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam);
|
||||||
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
SetFocus(GetDlgItem(hwndDlg, IDNO));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
{
|
{
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDC_LOCK:
|
case IDC_LOCK:
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_LOCK_WKSTA);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case IDC_LOGOFF:
|
case IDC_LOGOFF:
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_LOGOFF);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case IDC_SHUTDOWN:
|
case IDC_SHUTDOWN:
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN_POWER_OFF);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case IDC_TASKMGR:
|
case IDC_TASKMGR:
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_TASKLIST);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
{
|
{
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
GUILoggedOnSAS(
|
GUILoggedOnSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext,
|
IN OUT PGINA_CONTEXT pgContext,
|
||||||
IN DWORD dwSasType)
|
IN DWORD dwSasType)
|
||||||
{
|
{
|
||||||
INT result;
|
INT result;
|
||||||
|
|
||||||
TRACE("GUILoggedOnSAS()\n");
|
TRACE("GUILoggedOnSAS()\n");
|
||||||
|
|
||||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||||
{
|
{
|
||||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT ; the dialog will
|
||||||
* close itself thanks to the use of WlxDialogBoxParam */
|
* close itself thanks to the use of WlxDialogBoxParam */
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
|
result = pgContext->pWlxFuncs->WlxSwitchDesktopToWinlogon(
|
||||||
pgContext->hWlx);
|
pgContext->hWlx);
|
||||||
|
|
||||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||||
pgContext->hWlx,
|
pgContext->hWlx,
|
||||||
pgContext->hDllInstance,
|
pgContext->hDllInstance,
|
||||||
MAKEINTRESOURCEW(IDD_LOGGEDON_DLG),
|
MAKEINTRESOURCEW(IDD_LOGGEDON_DLG),
|
||||||
GetDesktopWindow(),
|
GetDesktopWindow(),
|
||||||
LoggedOnWindowProc,
|
LoggedOnWindowProc,
|
||||||
(LPARAM)pgContext);
|
(LPARAM)pgContext);
|
||||||
|
|
||||||
if (result < WLX_SAS_ACTION_LOGON ||
|
if (result < WLX_SAS_ACTION_LOGON ||
|
||||||
result > WLX_SAS_ACTION_SWITCH_CONSOLE)
|
result > WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||||
{
|
{
|
||||||
result = WLX_SAS_ACTION_NONE;
|
result = WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == WLX_SAS_ACTION_NONE)
|
if (result == WLX_SAS_ACTION_NONE)
|
||||||
{
|
{
|
||||||
result = pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
|
result = pgContext->pWlxFuncs->WlxSwitchDesktopToUser(
|
||||||
pgContext->hWlx);
|
pgContext->hWlx);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT_PTR CALLBACK
|
static INT_PTR CALLBACK
|
||||||
LoggedOutWindowProc(
|
LoggedOutWindowProc(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN UINT uMsg,
|
IN UINT uMsg,
|
||||||
IN WPARAM wParam,
|
IN WPARAM wParam,
|
||||||
IN LPARAM lParam)
|
IN LPARAM lParam)
|
||||||
{
|
{
|
||||||
PGINA_CONTEXT pgContext;
|
PGINA_CONTEXT pgContext;
|
||||||
|
|
||||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||||
|
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
/* FIXME: take care of DontDisplayLastUserName, NoDomainUI, ShutdownWithoutLogon */
|
/* FIXME: take care of DontDisplayLastUserName, NoDomainUI, ShutdownWithoutLogon */
|
||||||
pgContext = (PGINA_CONTEXT)lParam;
|
pgContext = (PGINA_CONTEXT)lParam;
|
||||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||||
SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
|
SetFocus(GetDlgItem(hwndDlg, IDC_USERNAME));
|
||||||
|
|
||||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
if (pgContext->hBitmap)
|
if (pgContext->hBitmap)
|
||||||
{
|
{
|
||||||
hdc = BeginPaint(hwndDlg, &ps);
|
hdc = BeginPaint(hwndDlg, &ps);
|
||||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||||
EndPaint(hwndDlg, &ps);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
DeleteObject(pgContext->hBitmap);
|
DeleteObject(pgContext->hBitmap);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
{
|
{
|
||||||
switch (LOWORD(wParam))
|
switch (LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDOK:
|
case IDOK:
|
||||||
{
|
{
|
||||||
LPWSTR UserName = NULL, Password = NULL;
|
LPWSTR UserName = NULL, Password = NULL;
|
||||||
INT result = WLX_SAS_ACTION_NONE;
|
INT result = WLX_SAS_ACTION_NONE;
|
||||||
|
|
||||||
if (GetTextboxText(hwndDlg, IDC_USERNAME, &UserName) && *UserName == '\0')
|
if (GetTextboxText(hwndDlg, IDC_USERNAME, &UserName) && *UserName == '\0')
|
||||||
break;
|
break;
|
||||||
if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) &&
|
if (GetTextboxText(hwndDlg, IDC_PASSWORD, &Password) &&
|
||||||
DoLoginTasks(pgContext, UserName, NULL, Password))
|
DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||||
{
|
{
|
||||||
result = WLX_SAS_ACTION_LOGON;
|
result = WLX_SAS_ACTION_LOGON;
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(), 0, UserName);
|
HeapFree(GetProcessHeap(), 0, UserName);
|
||||||
HeapFree(GetProcessHeap(), 0, Password);
|
HeapFree(GetProcessHeap(), 0, Password);
|
||||||
EndDialog(hwndDlg, result);
|
EndDialog(hwndDlg, result);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
{
|
{
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_NONE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case IDC_SHUTDOWN:
|
case IDC_SHUTDOWN:
|
||||||
{
|
{
|
||||||
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN);
|
EndDialog(hwndDlg, WLX_SAS_ACTION_SHUTDOWN);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
GUILoggedOutSAS(
|
GUILoggedOutSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
TRACE("GUILoggedOutSAS()\n");
|
TRACE("GUILoggedOutSAS()\n");
|
||||||
|
|
||||||
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
result = pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||||
pgContext->hWlx,
|
pgContext->hWlx,
|
||||||
pgContext->hDllInstance,
|
pgContext->hDllInstance,
|
||||||
MAKEINTRESOURCEW(IDD_LOGGEDOUT_DLG),
|
MAKEINTRESOURCEW(IDD_LOGGEDOUT_DLG),
|
||||||
GetDesktopWindow(),
|
GetDesktopWindow(),
|
||||||
LoggedOutWindowProc,
|
LoggedOutWindowProc,
|
||||||
(LPARAM)pgContext);
|
(LPARAM)pgContext);
|
||||||
if (result >= WLX_SAS_ACTION_LOGON &&
|
if (result >= WLX_SAS_ACTION_LOGON &&
|
||||||
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
result <= WLX_SAS_ACTION_SWITCH_CONSOLE)
|
||||||
{
|
{
|
||||||
WARN("WlxLoggedOutSAS() returns 0x%x\n", result);
|
WARN("WlxLoggedOutSAS() returns 0x%x\n", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
WARN("WlxDialogBoxParam() failed (0x%x)\n", result);
|
WARN("WlxDialogBoxParam() failed (0x%x)\n", result);
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
GUILockedSAS(
|
GUILockedSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
TRACE("GUILockedSAS()\n");
|
TRACE("GUILockedSAS()\n");
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -485,71 +485,71 @@ OnInitLockedDlg(HWND hwnd,
|
||||||
|
|
||||||
static INT_PTR CALLBACK
|
static INT_PTR CALLBACK
|
||||||
LockedWindowProc(
|
LockedWindowProc(
|
||||||
IN HWND hwndDlg,
|
IN HWND hwndDlg,
|
||||||
IN UINT uMsg,
|
IN UINT uMsg,
|
||||||
IN WPARAM wParam,
|
IN WPARAM wParam,
|
||||||
IN LPARAM lParam)
|
IN LPARAM lParam)
|
||||||
{
|
{
|
||||||
PGINA_CONTEXT pgContext;
|
PGINA_CONTEXT pgContext;
|
||||||
|
|
||||||
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA);
|
||||||
|
|
||||||
switch (uMsg)
|
switch (uMsg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
pgContext = (PGINA_CONTEXT)lParam;
|
pgContext = (PGINA_CONTEXT)lParam;
|
||||||
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext);
|
||||||
|
|
||||||
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR);
|
||||||
OnInitLockedDlg(hwndDlg, pgContext);
|
OnInitLockedDlg(hwndDlg, pgContext);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
if (pgContext->hBitmap)
|
if (pgContext->hBitmap)
|
||||||
{
|
{
|
||||||
hdc = BeginPaint(hwndDlg, &ps);
|
hdc = BeginPaint(hwndDlg, &ps);
|
||||||
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP);
|
||||||
EndPaint(hwndDlg, &ps);
|
EndPaint(hwndDlg, &ps);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
{
|
||||||
DeleteObject(pgContext->hBitmap);
|
DeleteObject(pgContext->hBitmap);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
GUIDisplayLockedNotice(
|
GUIDisplayLockedNotice(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
TRACE("GUIdisplayLockedNotice()\n");
|
TRACE("GUIdisplayLockedNotice()\n");
|
||||||
|
|
||||||
pgContext->pWlxFuncs->WlxDialogBoxParam(
|
pgContext->pWlxFuncs->WlxDialogBoxParam(
|
||||||
pgContext->hWlx,
|
pgContext->hWlx,
|
||||||
pgContext->hDllInstance,
|
pgContext->hDllInstance,
|
||||||
MAKEINTRESOURCEW(IDD_LOCKED_DLG),
|
MAKEINTRESOURCEW(IDD_LOCKED_DLG),
|
||||||
GetDesktopWindow(),
|
GetDesktopWindow(),
|
||||||
LockedWindowProc,
|
LockedWindowProc,
|
||||||
(LPARAM)pgContext);
|
(LPARAM)pgContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
GINA_UI GinaGraphicalUI = {
|
GINA_UI GinaGraphicalUI = {
|
||||||
GUIInitialize,
|
GUIInitialize,
|
||||||
GUIDisplayStatusMessage,
|
GUIDisplayStatusMessage,
|
||||||
GUIRemoveStatusMessage,
|
GUIRemoveStatusMessage,
|
||||||
GUIDisplaySASNotice,
|
GUIDisplaySASNotice,
|
||||||
GUILoggedOnSAS,
|
GUILoggedOnSAS,
|
||||||
GUILoggedOutSAS,
|
GUILoggedOutSAS,
|
||||||
GUILockedSAS,
|
GUILockedSAS,
|
||||||
GUIDisplayLockedNotice,
|
GUIDisplayLockedNotice,
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -23,25 +23,25 @@
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE hWlx;
|
HANDLE hWlx;
|
||||||
LPWSTR station;
|
LPWSTR station;
|
||||||
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
|
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
|
||||||
HANDLE hDllInstance;
|
HANDLE hDllInstance;
|
||||||
HWND hStatusWindow;
|
HWND hStatusWindow;
|
||||||
DWORD AutoLogonState;
|
DWORD AutoLogonState;
|
||||||
|
|
||||||
/* Informations to be filled during logon */
|
/* Informations to be filled during logon */
|
||||||
WCHAR UserName[256];
|
WCHAR UserName[256];
|
||||||
WCHAR Domain[256];
|
WCHAR Domain[256];
|
||||||
SYSTEMTIME LogonTime;
|
SYSTEMTIME LogonTime;
|
||||||
HANDLE UserToken;
|
HANDLE UserToken;
|
||||||
PLUID pAuthenticationId;
|
PLUID pAuthenticationId;
|
||||||
PDWORD pdwOptions;
|
PDWORD pdwOptions;
|
||||||
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo;
|
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo;
|
||||||
PVOID *pProfile;
|
PVOID *pProfile;
|
||||||
|
|
||||||
/* Current logo to display */
|
/* Current logo to display */
|
||||||
HBITMAP hBitmap;
|
HBITMAP hBitmap;
|
||||||
} GINA_CONTEXT, *PGINA_CONTEXT;
|
} GINA_CONTEXT, *PGINA_CONTEXT;
|
||||||
|
|
||||||
extern HINSTANCE hDllInstance;
|
extern HINSTANCE hDllInstance;
|
||||||
|
@ -57,23 +57,23 @@ typedef VOID (*PFGINA_DISPLAYLOCKEDNOTICE)(PGINA_CONTEXT);
|
||||||
|
|
||||||
typedef struct _GINA_UI
|
typedef struct _GINA_UI
|
||||||
{
|
{
|
||||||
PFGINA_INITIALIZE Initialize;
|
PFGINA_INITIALIZE Initialize;
|
||||||
PFGINA_DISPLAYSTATUSMESSAGE DisplayStatusMessage;
|
PFGINA_DISPLAYSTATUSMESSAGE DisplayStatusMessage;
|
||||||
PFGINA_REMOVESTATUSMESSAGE RemoveStatusMessage;
|
PFGINA_REMOVESTATUSMESSAGE RemoveStatusMessage;
|
||||||
PFGINA_DISPLAYSASNOTICE DisplaySASNotice;
|
PFGINA_DISPLAYSASNOTICE DisplaySASNotice;
|
||||||
PFGINA_LOGGEDONSAS LoggedOnSAS;
|
PFGINA_LOGGEDONSAS LoggedOnSAS;
|
||||||
PFGINA_LOGGEDOUTSAS LoggedOutSAS;
|
PFGINA_LOGGEDOUTSAS LoggedOutSAS;
|
||||||
PFGINA_LOCKEDSAS LockedSAS;
|
PFGINA_LOCKEDSAS LockedSAS;
|
||||||
PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice;
|
PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice;
|
||||||
} GINA_UI, *PGINA_UI;
|
} GINA_UI, *PGINA_UI;
|
||||||
|
|
||||||
/* msgina.c */
|
/* msgina.c */
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
DoLoginTasks(
|
DoLoginTasks(
|
||||||
IN OUT PGINA_CONTEXT pgContext,
|
IN OUT PGINA_CONTEXT pgContext,
|
||||||
IN PWSTR UserName,
|
IN PWSTR UserName,
|
||||||
IN PWSTR Domain,
|
IN PWSTR Domain,
|
||||||
IN PWSTR Password);
|
IN PWSTR Password);
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -22,20 +22,20 @@ ShellShutdownDialog(
|
||||||
DWORD Unknown,
|
DWORD Unknown,
|
||||||
BOOL bHideLogoff)
|
BOOL bHideLogoff)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(hParent);
|
UNREFERENCED_PARAMETER(hParent);
|
||||||
UNREFERENCED_PARAMETER(Unknown);
|
UNREFERENCED_PARAMETER(Unknown);
|
||||||
UNREFERENCED_PARAMETER(bHideLogoff);
|
UNREFERENCED_PARAMETER(bHideLogoff);
|
||||||
|
|
||||||
/* Return values:
|
/* Return values:
|
||||||
* 0x00: Cancelled/Help
|
* 0x00: Cancelled/Help
|
||||||
* 0x01: Log off user
|
* 0x01: Log off user
|
||||||
* 0x02: Shutdown
|
* 0x02: Shutdown
|
||||||
* 0x04: Reboot
|
* 0x04: Reboot
|
||||||
* 0x10: Standby
|
* 0x10: Standby
|
||||||
* 0x40: Hibernate
|
* 0x40: Hibernate
|
||||||
*/
|
*/
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,12 +44,12 @@ ShellShutdownDialog(
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
WlxIsLockOk(
|
WlxIsLockOk(
|
||||||
PVOID pWlxContext)
|
PVOID pWlxContext)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,11 +58,11 @@ WlxIsLockOk(
|
||||||
*/
|
*/
|
||||||
VOID WINAPI
|
VOID WINAPI
|
||||||
WlxLogoff(
|
WlxLogoff(
|
||||||
PVOID pWlxContext)
|
PVOID pWlxContext)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,13 +71,13 @@ WlxLogoff(
|
||||||
*/
|
*/
|
||||||
VOID WINAPI
|
VOID WINAPI
|
||||||
WlxShutdown(
|
WlxShutdown(
|
||||||
PVOID pWlxContext,
|
PVOID pWlxContext,
|
||||||
DWORD ShutdownType)
|
DWORD ShutdownType)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
UNREFERENCED_PARAMETER(ShutdownType);
|
UNREFERENCED_PARAMETER(ShutdownType);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,18 +86,18 @@ WlxShutdown(
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
WlxGetStatusMessage(
|
WlxGetStatusMessage(
|
||||||
PVOID pWlxContext,
|
PVOID pWlxContext,
|
||||||
DWORD *pdwOptions,
|
DWORD *pdwOptions,
|
||||||
PWSTR pMessage,
|
PWSTR pMessage,
|
||||||
DWORD dwBufferSize)
|
DWORD dwBufferSize)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
UNREFERENCED_PARAMETER(pdwOptions);
|
UNREFERENCED_PARAMETER(pdwOptions);
|
||||||
UNREFERENCED_PARAMETER(pMessage);
|
UNREFERENCED_PARAMETER(pMessage);
|
||||||
UNREFERENCED_PARAMETER(dwBufferSize);
|
UNREFERENCED_PARAMETER(dwBufferSize);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -106,14 +106,14 @@ WlxGetStatusMessage(
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
WlxNetworkProviderLoad(
|
WlxNetworkProviderLoad(
|
||||||
PVOID pWlxContext,
|
PVOID pWlxContext,
|
||||||
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
|
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
UNREFERENCED_PARAMETER(pNprNotifyInfo);
|
UNREFERENCED_PARAMETER(pNprNotifyInfo);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,11 +122,11 @@ WlxNetworkProviderLoad(
|
||||||
*/
|
*/
|
||||||
VOID WINAPI
|
VOID WINAPI
|
||||||
WlxDisconnectNotify(
|
WlxDisconnectNotify(
|
||||||
PVOID pWlxContext)
|
PVOID pWlxContext)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -135,13 +135,13 @@ WlxDisconnectNotify(
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
WlxGetConsoleSwitchCredentials(
|
WlxGetConsoleSwitchCredentials(
|
||||||
PVOID pWlxContext,
|
PVOID pWlxContext,
|
||||||
PVOID pCredInfo)
|
PVOID pCredInfo)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pWlxContext);
|
UNREFERENCED_PARAMETER(pWlxContext);
|
||||||
UNREFERENCED_PARAMETER(pCredInfo);
|
UNREFERENCED_PARAMETER(pCredInfo);
|
||||||
|
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,255 +11,255 @@ WINE_DEFAULT_DEBUG_CHANNEL(msgina);
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
TUIInitialize(
|
TUIInitialize(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
TRACE("TUIInitialize(%p)\n", pgContext);
|
TRACE("TUIInitialize(%p)\n", pgContext);
|
||||||
|
|
||||||
return AllocConsole();
|
return AllocConsole();
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
TUIDisplayStatusMessage(
|
TUIDisplayStatusMessage(
|
||||||
IN PGINA_CONTEXT pgContext,
|
IN PGINA_CONTEXT pgContext,
|
||||||
IN HDESK hDesktop,
|
IN HDESK hDesktop,
|
||||||
IN DWORD dwOptions,
|
IN DWORD dwOptions,
|
||||||
IN PWSTR pTitle,
|
IN PWSTR pTitle,
|
||||||
IN PWSTR pMessage)
|
IN PWSTR pMessage)
|
||||||
{
|
{
|
||||||
static LPCWSTR newLine = L"\n";
|
static LPCWSTR newLine = L"\n";
|
||||||
DWORD result;
|
DWORD result;
|
||||||
|
|
||||||
TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage);
|
TRACE("TUIDisplayStatusMessage(%ws)\n", pMessage);
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
UNREFERENCED_PARAMETER(hDesktop);
|
UNREFERENCED_PARAMETER(hDesktop);
|
||||||
UNREFERENCED_PARAMETER(dwOptions);
|
UNREFERENCED_PARAMETER(dwOptions);
|
||||||
UNREFERENCED_PARAMETER(pTitle);
|
UNREFERENCED_PARAMETER(pTitle);
|
||||||
|
|
||||||
return
|
return
|
||||||
WriteConsoleW(
|
WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
pMessage,
|
pMessage,
|
||||||
wcslen(pMessage),
|
wcslen(pMessage),
|
||||||
&result,
|
&result,
|
||||||
NULL) &&
|
NULL) &&
|
||||||
WriteConsoleW(
|
WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
newLine,
|
newLine,
|
||||||
wcslen(newLine),
|
wcslen(newLine),
|
||||||
&result,
|
&result,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
TUIRemoveStatusMessage(
|
TUIRemoveStatusMessage(
|
||||||
IN PGINA_CONTEXT pgContext)
|
IN PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
|
|
||||||
/* Nothing to do */
|
/* Nothing to do */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
DisplayResourceText(
|
DisplayResourceText(
|
||||||
IN UINT uIdResourceText,
|
IN UINT uIdResourceText,
|
||||||
IN BOOL AddNewLine)
|
IN BOOL AddNewLine)
|
||||||
{
|
{
|
||||||
WCHAR Prompt[256];
|
WCHAR Prompt[256];
|
||||||
static LPCWSTR newLine = L"\n";
|
static LPCWSTR newLine = L"\n";
|
||||||
DWORD count;
|
DWORD count;
|
||||||
|
|
||||||
if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
|
if (0 == LoadStringW(hDllInstance, uIdResourceText, Prompt, 256))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!WriteConsoleW(
|
if (!WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
Prompt, wcslen(Prompt),
|
Prompt, wcslen(Prompt),
|
||||||
&count, NULL))
|
&count, NULL))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (AddNewLine)
|
if (AddNewLine)
|
||||||
{
|
{
|
||||||
if (!WriteConsoleW(
|
if (!WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
newLine, wcslen(newLine),
|
newLine, wcslen(newLine),
|
||||||
&count, NULL))
|
&count, NULL))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
TUIDisplaySASNotice(
|
TUIDisplaySASNotice(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
TRACE("TUIDisplaySASNotice()\n");
|
TRACE("TUIDisplaySASNotice()\n");
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
|
|
||||||
DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE);
|
DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE);
|
||||||
DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE);
|
DisplayResourceText(IDS_PRESSCTRLALTDELETE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
TUILoggedOnSAS(
|
TUILoggedOnSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext,
|
IN OUT PGINA_CONTEXT pgContext,
|
||||||
IN DWORD dwSasType)
|
IN DWORD dwSasType)
|
||||||
{
|
{
|
||||||
TRACE("TUILoggedOnSAS()\n");
|
TRACE("TUILoggedOnSAS()\n");
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
|
|
||||||
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
if (dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL)
|
||||||
{
|
{
|
||||||
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
|
/* Nothing to do for WLX_SAS_TYPE_TIMEOUT */
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
|
FIXME("FIXME: TUILoggedOnSAS(): Let's suppose the user wants to log off...\n");
|
||||||
return WLX_SAS_ACTION_LOGOFF;
|
return WLX_SAS_ACTION_LOGOFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
ReadString(
|
ReadString(
|
||||||
IN UINT uIdResourcePrompt,
|
IN UINT uIdResourcePrompt,
|
||||||
IN OUT PWSTR Buffer,
|
IN OUT PWSTR Buffer,
|
||||||
IN DWORD BufferLength,
|
IN DWORD BufferLength,
|
||||||
IN BOOL ShowString)
|
IN BOOL ShowString)
|
||||||
{
|
{
|
||||||
DWORD count, i;
|
DWORD count, i;
|
||||||
WCHAR charToDisplay[] = { 0, UNICODE_NULL };
|
WCHAR charToDisplay[] = { 0, UNICODE_NULL };
|
||||||
|
|
||||||
if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0))
|
if (!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)))
|
if (!FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!DisplayResourceText(uIdResourcePrompt, FALSE))
|
if (!DisplayResourceText(uIdResourcePrompt, FALSE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
WCHAR readChar;
|
WCHAR readChar;
|
||||||
if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &readChar, 1, &count, NULL))
|
if (!ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &readChar, 1, &count, NULL))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (readChar == '\r' || readChar == '\n')
|
if (readChar == '\r' || readChar == '\n')
|
||||||
{
|
{
|
||||||
/* End of string */
|
/* End of string */
|
||||||
charToDisplay[0] = L'\n';
|
charToDisplay[0] = L'\n';
|
||||||
WriteConsoleW(
|
WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
charToDisplay,
|
charToDisplay,
|
||||||
wcslen(charToDisplay),
|
wcslen(charToDisplay),
|
||||||
&count,
|
&count,
|
||||||
NULL);
|
NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ShowString)
|
if (ShowString)
|
||||||
{
|
{
|
||||||
/* Display the char */
|
/* Display the char */
|
||||||
charToDisplay[0] = readChar;
|
charToDisplay[0] = readChar;
|
||||||
WriteConsoleW(
|
WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
charToDisplay,
|
charToDisplay,
|
||||||
wcslen(charToDisplay),
|
wcslen(charToDisplay),
|
||||||
&count,
|
&count,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
Buffer[i++] = readChar;
|
Buffer[i++] = readChar;
|
||||||
/* FIXME: buffer overflow if the user writes too many chars! */
|
/* FIXME: buffer overflow if the user writes too many chars! */
|
||||||
UNREFERENCED_PARAMETER(BufferLength);
|
UNREFERENCED_PARAMETER(BufferLength);
|
||||||
/* FIXME: handle backspace */
|
/* FIXME: handle backspace */
|
||||||
}
|
}
|
||||||
Buffer[i] = UNICODE_NULL;
|
Buffer[i] = UNICODE_NULL;
|
||||||
|
|
||||||
if (!ShowString)
|
if (!ShowString)
|
||||||
{
|
{
|
||||||
/* Still display the \n */
|
/* Still display the \n */
|
||||||
static LPCWSTR newLine = L"\n";
|
static LPCWSTR newLine = L"\n";
|
||||||
DWORD result;
|
DWORD result;
|
||||||
WriteConsoleW(
|
WriteConsoleW(
|
||||||
GetStdHandle(STD_OUTPUT_HANDLE),
|
GetStdHandle(STD_OUTPUT_HANDLE),
|
||||||
newLine,
|
newLine,
|
||||||
wcslen(newLine),
|
wcslen(newLine),
|
||||||
&result,
|
&result,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
TUILoggedOutSAS(
|
TUILoggedOutSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
WCHAR UserName[256];
|
WCHAR UserName[256];
|
||||||
WCHAR Password[256];
|
WCHAR Password[256];
|
||||||
|
|
||||||
TRACE("TUILoggedOutSAS()\n");
|
TRACE("TUILoggedOutSAS()\n");
|
||||||
|
|
||||||
/* Ask the user for credentials */
|
/* Ask the user for credentials */
|
||||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
|
|
||||||
if (DoLoginTasks(pgContext, UserName, NULL, Password))
|
if (DoLoginTasks(pgContext, UserName, NULL, Password))
|
||||||
return WLX_SAS_ACTION_LOGON;
|
return WLX_SAS_ACTION_LOGON;
|
||||||
else
|
else
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INT
|
static INT
|
||||||
TUILockedSAS(
|
TUILockedSAS(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
HANDLE hToken;
|
HANDLE hToken;
|
||||||
WCHAR UserName[256];
|
WCHAR UserName[256];
|
||||||
WCHAR Password[256];
|
WCHAR Password[256];
|
||||||
|
|
||||||
TRACE("TUILockedSAS()\n");
|
TRACE("TUILockedSAS()\n");
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(pgContext);
|
UNREFERENCED_PARAMETER(pgContext);
|
||||||
|
|
||||||
if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE))
|
if (!DisplayResourceText(IDS_LOGGEDOUTSAS, TRUE))
|
||||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||||
|
|
||||||
/* Ask the user for credentials */
|
/* Ask the user for credentials */
|
||||||
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
if (!ReadString(IDS_ASKFORUSER, UserName, 256, TRUE))
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
if (!ReadString(IDS_ASKFORPASSWORD, Password, 256, FALSE))
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
|
|
||||||
if (!LogonUserW(UserName, NULL, Password,
|
if (!LogonUserW(UserName, NULL, Password,
|
||||||
LOGON32_LOGON_UNLOCK,
|
LOGON32_LOGON_UNLOCK,
|
||||||
LOGON32_PROVIDER_DEFAULT,
|
LOGON32_PROVIDER_DEFAULT,
|
||||||
&hToken))
|
&hToken))
|
||||||
{
|
{
|
||||||
TRACE("LogonUserW() failed\n");
|
TRACE("LogonUserW() failed\n");
|
||||||
return WLX_SAS_ACTION_NONE;
|
return WLX_SAS_ACTION_NONE;
|
||||||
}
|
}
|
||||||
CloseHandle(hToken);
|
CloseHandle(hToken);
|
||||||
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
return WLX_SAS_ACTION_UNLOCK_WKSTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
TUIDisplayLockedNotice(
|
TUIDisplayLockedNotice(
|
||||||
IN OUT PGINA_CONTEXT pgContext)
|
IN OUT PGINA_CONTEXT pgContext)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
GINA_UI GinaTextUI = {
|
GINA_UI GinaTextUI = {
|
||||||
TUIInitialize,
|
TUIInitialize,
|
||||||
TUIDisplayStatusMessage,
|
TUIDisplayStatusMessage,
|
||||||
TUIRemoveStatusMessage,
|
TUIRemoveStatusMessage,
|
||||||
TUIDisplaySASNotice,
|
TUIDisplaySASNotice,
|
||||||
TUILoggedOnSAS,
|
TUILoggedOnSAS,
|
||||||
TUILoggedOutSAS,
|
TUILoggedOutSAS,
|
||||||
TUILockedSAS,
|
TUILockedSAS,
|
||||||
TUIDisplayLockedNotice,
|
TUIDisplayLockedNotice,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue