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