[WINLOGON]

Formatting. No code changes.

svn path=/trunk/; revision=58406
This commit is contained in:
Eric Kohl 2013-03-02 20:30:36 +00:00
parent 95e9b1a4a7
commit 65ad79656d
4 changed files with 744 additions and 724 deletions

View file

@ -15,9 +15,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon);
/* FUNCTIONS ****************************************************************/ /* FUNCTIONS ****************************************************************/
#ifndef USE_GETLASTINPUTINFO #ifndef USE_GETLASTINPUTINFO
static LRESULT CALLBACK static
KeyboardActivityProc( LRESULT
IN INT nCode, CALLBACK
KeyboardActivityProc(IN INT nCode,
IN WPARAM wParam, IN WPARAM wParam,
IN LPARAM lParam) IN LPARAM lParam)
{ {
@ -25,9 +26,11 @@ KeyboardActivityProc(
return CallNextHookEx(NULL, nCode, wParam, lParam); return CallNextHookEx(NULL, nCode, wParam, lParam);
} }
static LRESULT CALLBACK
MouseActivityProc( static
IN INT nCode, LRESULT
CALLBACK
MouseActivityProc(IN INT nCode,
IN WPARAM wParam, IN WPARAM wParam,
IN LPARAM lParam) IN LPARAM lParam)
{ {
@ -36,9 +39,10 @@ MouseActivityProc(
} }
#endif #endif
static VOID
LoadScreenSaverParameters( static
OUT LPDWORD Timeout) VOID
LoadScreenSaverParameters(OUT LPDWORD Timeout)
{ {
BOOL Enabled; BOOL Enabled;
@ -64,9 +68,11 @@ LoadScreenSaverParameters(
} }
} }
static DWORD WINAPI
ScreenSaverThreadMain( static
IN LPVOID lpParameter) DWORD
WINAPI
ScreenSaverThreadMain(IN LPVOID lpParameter)
{ {
PWLSESSION Session = (PWLSESSION)lpParameter; PWLSESSION Session = (PWLSESSION)lpParameter;
HANDLE HandleArray[3]; HANDLE HandleArray[3];
@ -125,6 +131,7 @@ ScreenSaverThreadMain(
TimeToWait = 10; /* Try again in 10 ms */ TimeToWait = 10; /* Try again in 10 ms */
} }
#endif #endif
if (TimeToWait > Timeout) if (TimeToWait > Timeout)
{ {
/* GetTickCount() got back to 0 */ /* GetTickCount() got back to 0 */
@ -149,6 +156,7 @@ ScreenSaverThreadMain(
WARN("GetLastInputInfo() failed with error %lu\n", GetLastError()); WARN("GetLastInputInfo() failed with error %lu\n", GetLastError());
continue; continue;
} }
if (lastInputInfo.dwTime + Timeout > GetTickCount()) if (lastInputInfo.dwTime + Timeout > GetTickCount())
continue; continue;
#endif #endif
@ -170,22 +178,26 @@ cleanup:
RevertToSelf(); RevertToSelf();
if (Session->hUserActivity) if (Session->hUserActivity)
CloseHandle(Session->hUserActivity); CloseHandle(Session->hUserActivity);
if (Session->hEndOfScreenSaver) if (Session->hEndOfScreenSaver)
CloseHandle(Session->hEndOfScreenSaver); CloseHandle(Session->hEndOfScreenSaver);
#ifndef USE_GETLASTINPUTINFO #ifndef USE_GETLASTINPUTINFO
if (Session->KeyboardHook) if (Session->KeyboardHook)
UnhookWindowsHookEx(Session->KeyboardHook); UnhookWindowsHookEx(Session->KeyboardHook);
if (Session->MouseHook) if (Session->MouseHook)
UnhookWindowsHookEx(Session->MouseHook); UnhookWindowsHookEx(Session->MouseHook);
#endif #endif
CloseHandle(Session->hEndOfScreenSaverThread); CloseHandle(Session->hEndOfScreenSaverThread);
CloseHandle(Session->hScreenSaverParametersChanged); CloseHandle(Session->hScreenSaverParametersChanged);
return 0; return 0;
} }
BOOL BOOL
InitializeScreenSaver( InitializeScreenSaver(IN OUT PWLSESSION Session)
IN OUT PWLSESSION Session)
{ {
HANDLE ScreenSaverThread; HANDLE ScreenSaverThread;
@ -197,6 +209,7 @@ InitializeScreenSaver(
ERR("WL: Unable to register keyboard hook\n"); ERR("WL: Unable to register keyboard hook\n");
return FALSE; return FALSE;
} }
Session->MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseActivityProc, hAppInstance, 0); Session->MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseActivityProc, hAppInstance, 0);
if (!Session->MouseHook) if (!Session->MouseHook)
{ {
@ -211,6 +224,7 @@ InitializeScreenSaver(
WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError()); WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError());
return TRUE; return TRUE;
} }
Session->hEndOfScreenSaverThread = CreateEventW(NULL, FALSE, FALSE, NULL); Session->hEndOfScreenSaverThread = CreateEventW(NULL, FALSE, FALSE, NULL);
if (!Session->hEndOfScreenSaverThread) if (!Session->hEndOfScreenSaverThread)
{ {
@ -219,8 +233,7 @@ InitializeScreenSaver(
return TRUE; return TRUE;
} }
ScreenSaverThread = CreateThread( ScreenSaverThread = CreateThread(NULL,
NULL,
0, 0,
ScreenSaverThreadMain, ScreenSaverThreadMain,
Session, Session,
@ -234,9 +247,9 @@ InitializeScreenSaver(
return TRUE; return TRUE;
} }
VOID VOID
StartScreenSaver( StartScreenSaver(IN PWLSESSION Session)
IN PWLSESSION Session)
{ {
HKEY hKey = NULL, hCurrentUser = NULL; HKEY hKey = NULL, hCurrentUser = NULL;
WCHAR szApplicationName[MAX_PATH]; WCHAR szApplicationName[MAX_PATH];
@ -256,8 +269,7 @@ StartScreenSaver(
goto cleanup; goto cleanup;
} }
rc = RegOpenCurrentUser( rc = RegOpenCurrentUser(KEY_READ,
KEY_READ,
&hCurrentUser); &hCurrentUser);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
{ {
@ -265,8 +277,7 @@ StartScreenSaver(
goto cleanup; goto cleanup;
} }
rc = RegOpenKeyExW( rc = RegOpenKeyExW(hCurrentUser,
hCurrentUser,
L"Control Panel\\Desktop", L"Control Panel\\Desktop",
0, 0,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
@ -277,8 +288,7 @@ StartScreenSaver(
goto cleanup; goto cleanup;
} }
rc = RegQueryValueExW( rc = RegQueryValueExW(hKey,
hKey,
L"SCRNSAVE.EXE", L"SCRNSAVE.EXE",
0, 0,
&dwType, &dwType,
@ -311,9 +321,9 @@ StartScreenSaver(
ZeroMemory(&ProcessInformation, sizeof(PROCESS_INFORMATION)); ZeroMemory(&ProcessInformation, sizeof(PROCESS_INFORMATION));
StartupInfo.cb = sizeof(STARTUPINFOW); StartupInfo.cb = sizeof(STARTUPINFOW);
StartupInfo.dwFlags = STARTF_SCRNSAVER; StartupInfo.dwFlags = STARTF_SCRNSAVER;
/* FIXME: run the screen saver on the screen saver desktop */ /* FIXME: run the screen saver on the screen saver desktop */
ret = CreateProcessW( ret = CreateProcessW(szApplicationName,
szApplicationName,
szCommandLine, szCommandLine,
NULL, NULL,
NULL, NULL,
@ -328,6 +338,7 @@ StartScreenSaver(
ERR("WL: Unable to start %S, error %lu\n", szApplicationName, GetLastError()); ERR("WL: Unable to start %S, error %lu\n", szApplicationName, GetLastError());
goto cleanup; goto cleanup;
} }
CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hThread);
SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, 0); SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, 0);
@ -342,6 +353,7 @@ StartScreenSaver(
/* Kill the screen saver */ /* Kill the screen saver */
TerminateProcess(ProcessInformation.hProcess, 0); TerminateProcess(ProcessInformation.hProcess, 0);
} }
SetEvent(Session->hEndOfScreenSaver); SetEvent(Session->hEndOfScreenSaver);
CloseHandle(ProcessInformation.hProcess); CloseHandle(ProcessInformation.hProcess);
@ -350,8 +362,10 @@ cleanup:
RevertToSelf(); RevertToSelf();
if (hKey) if (hKey)
RegCloseKey(hKey); RegCloseKey(hKey);
if (hCurrentUser) if (hCurrentUser)
RegCloseKey(hCurrentUser); RegCloseKey(hCurrentUser);
if (!ret) if (!ret)
{ {
PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0); PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0);

View file

@ -26,8 +26,7 @@ GetSetupType(VOID)
TRACE("GetSetupType()\n"); TRACE("GetSetupType()\n");
/* Open key */ /* Open key */
dwError = RegOpenKeyExW( dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
HKEY_LOCAL_MACHINE,
L"SYSTEM\\Setup", L"SYSTEM\\Setup",
0, 0,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
@ -37,8 +36,7 @@ GetSetupType(VOID)
/* Read key */ /* Read key */
dwSize = sizeof(DWORD); dwSize = sizeof(DWORD);
dwError = RegQueryValueExW( dwError = RegQueryValueExW(hKey,
hKey,
L"SetupType", L"SetupType",
NULL, NULL,
&dwType, &dwType,
@ -54,9 +52,11 @@ GetSetupType(VOID)
return dwSetupType; return dwSetupType;
} }
static DWORD WINAPI
RunSetupThreadProc( static
IN LPVOID lpParameter) DWORD
WINAPI
RunSetupThreadProc(IN LPVOID lpParameter)
{ {
PROCESS_INFORMATION ProcessInformation; PROCESS_INFORMATION ProcessInformation;
STARTUPINFOW StartupInfo; STARTUPINFOW StartupInfo;
@ -72,8 +72,7 @@ RunSetupThreadProc(
TRACE("RunSetup() called\n"); TRACE("RunSetup() called\n");
/* Open key */ /* Open key */
dwError = RegOpenKeyExW( dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
HKEY_LOCAL_MACHINE,
L"SYSTEM\\Setup", L"SYSTEM\\Setup",
0, 0,
KEY_QUERY_VALUE, KEY_QUERY_VALUE,
@ -83,8 +82,7 @@ RunSetupThreadProc(
/* Read key */ /* Read key */
dwSize = (sizeof(Shell) / sizeof(Shell[0])) - 1; dwSize = (sizeof(Shell) / sizeof(Shell[0])) - 1;
dwError = RegQueryValueExW( dwError = RegQueryValueExW(hKey,
hKey,
L"CmdLine", L"CmdLine",
NULL, NULL,
&dwType, &dwType,
@ -115,8 +113,8 @@ RunSetupThreadProc(
StartupInfo.dwFlags = 0; StartupInfo.dwFlags = 0;
StartupInfo.cbReserved2 = 0; StartupInfo.cbReserved2 = 0;
StartupInfo.lpReserved2 = 0; StartupInfo.lpReserved2 = 0;
Result = CreateProcessW(
NULL, Result = CreateProcessW(NULL,
CommandLine, CommandLine,
NULL, NULL,
NULL, NULL,
@ -146,12 +144,19 @@ RunSetupThreadProc(
return TRUE; return TRUE;
} }
BOOL BOOL
RunSetup(VOID) RunSetup(VOID)
{ {
HANDLE hThread; HANDLE hThread;
hThread = CreateThread(NULL, 0, RunSetupThreadProc, NULL, 0, NULL); hThread = CreateThread(NULL,
0,
RunSetupThreadProc,
NULL,
0,
NULL);
return hThread != NULL; return hThread != NULL;
} }

View file

@ -21,7 +21,8 @@ PWLSESSION WLSession = NULL;
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
static BOOL static
BOOL
StartServicesManager(VOID) StartServicesManager(VOID)
{ {
STARTUPINFOW StartupInfo; STARTUPINFOW StartupInfo;
@ -41,8 +42,7 @@ StartServicesManager(VOID)
TRACE("WL: Creating new process - %S\n", ServiceString); TRACE("WL: Creating new process - %S\n", ServiceString);
res = CreateProcessW( res = CreateProcessW(ServiceString,
ServiceString,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -69,7 +69,8 @@ StartServicesManager(VOID)
} }
static BOOL static
BOOL
StartLsass(VOID) StartLsass(VOID)
{ {
STARTUPINFOW StartupInfo; STARTUPINFOW StartupInfo;
@ -89,8 +90,7 @@ StartLsass(VOID)
TRACE("WL: Creating new process - %S\n", ServiceString); TRACE("WL: Creating new process - %S\n", ServiceString);
res = CreateProcessW( res = CreateProcessW(ServiceString,
ServiceString,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -110,7 +110,8 @@ StartLsass(VOID)
} }
static VOID static
VOID
WaitForLsass(VOID) WaitForLsass(VOID)
{ {
HANDLE hEvent; HANDLE hEvent;
@ -146,8 +147,9 @@ WaitForLsass(VOID)
} }
static BOOL static
InitKeyboardLayouts() BOOL
InitKeyboardLayouts(VOID)
{ {
WCHAR wszKeyName[12], wszKLID[10]; WCHAR wszKeyName[12], wszKLID[10];
DWORD dwSize = sizeof(wszKLID), dwType, i = 1; DWORD dwSize = sizeof(wszKLID), dwType, i = 1;
@ -211,8 +213,7 @@ InitKeyboardLayouts()
BOOL BOOL
DisplayStatusMessage( DisplayStatusMessage(IN PWLSESSION Session,
IN PWLSESSION Session,
IN HDESK hDesktop, IN HDESK hDesktop,
IN UINT ResourceId) IN UINT ResourceId)
{ {
@ -230,9 +231,9 @@ DisplayStatusMessage(
return Session->Gina.Functions.WlxDisplayStatusMessage(Session->Gina.Context, hDesktop, 0, NULL, StatusMsg); return Session->Gina.Functions.WlxDisplayStatusMessage(Session->Gina.Context, hDesktop, 0, NULL, StatusMsg);
} }
BOOL BOOL
RemoveStatusMessage( RemoveStatusMessage(IN PWLSESSION Session)
IN PWLSESSION Session)
{ {
if (Session->Gina.Version < WLX_VERSION_1_3) if (Session->Gina.Version < WLX_VERSION_1_3)
return TRUE; return TRUE;
@ -240,9 +241,11 @@ RemoveStatusMessage(
return Session->Gina.Functions.WlxRemoveStatusMessage(Session->Gina.Context); return Session->Gina.Functions.WlxRemoveStatusMessage(Session->Gina.Context);
} }
static INT_PTR CALLBACK
GinaLoadFailedWindowProc( static
IN HWND hwndDlg, INT_PTR
CALLBACK
GinaLoadFailedWindowProc(IN HWND hwndDlg,
IN UINT uMsg, IN UINT uMsg,
IN WPARAM wParam, IN WPARAM wParam,
IN LPARAM lParam) IN LPARAM lParam)
@ -259,6 +262,7 @@ GinaLoadFailedWindowProc(
} }
break; break;
} }
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
int len; int len;
@ -270,9 +274,11 @@ GinaLoadFailedWindowProc(
wsprintfW(text, templateText, (LPWSTR)lParam); wsprintfW(text, templateText, (LPWSTR)lParam);
SetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, text); SetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, text);
} }
SetFocus(GetDlgItem(hwndDlg, IDOK)); SetFocus(GetDlgItem(hwndDlg, IDOK));
return TRUE; return TRUE;
} }
case WM_CLOSE: case WM_CLOSE:
{ {
EndDialog(hwndDlg, IDCANCEL); EndDialog(hwndDlg, IDCANCEL);
@ -283,9 +289,10 @@ GinaLoadFailedWindowProc(
return FALSE; return FALSE;
} }
int WINAPI
WinMain( int
IN HINSTANCE hInstance, WINAPI
WinMain(IN HINSTANCE hInstance,
IN HINSTANCE hPrevInstance, IN HINSTANCE hPrevInstance,
IN LPSTR lpCmdLine, IN LPSTR lpCmdLine,
IN int nShowCmd) IN int nShowCmd)
@ -321,6 +328,7 @@ WinMain(
NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse);
ExitProcess(1); ExitProcess(1);
} }
ZeroMemory(WLSession, sizeof(WLSESSION)); ZeroMemory(WLSession, sizeof(WLSESSION));
WLSession->DialogTimeout = 120; /* 2 minutes */ WLSession->DialogTimeout = 120; /* 2 minutes */
@ -330,6 +338,7 @@ WinMain(
NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse);
ExitProcess(1); ExitProcess(1);
} }
LockWorkstation(WLSession); LockWorkstation(WLSession);
/* Load default keyboard layouts */ /* Load default keyboard layouts */
@ -365,7 +374,6 @@ WinMain(
DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP); DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP);
/* Wait for the LSA server */ /* Wait for the LSA server */
WaitForLsass(); WaitForLsass();
@ -383,8 +391,10 @@ WinMain(
ERR("RtlAdjustPrivilege() failed with error %lu\n", LsaNtStatusToWinError(Status)); ERR("RtlAdjustPrivilege() failed with error %lu\n", LsaNtStatusToWinError(Status));
return 1; return 1;
} }
Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode); Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode);
} }
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ERR("LsaRegisterLogonProcess() failed with error %lu\n", LsaNtStatusToWinError(Status)); ERR("LsaRegisterLogonProcess() failed with error %lu\n", LsaNtStatusToWinError(Status));

View file

@ -262,51 +262,42 @@ CreateUserEnvironment(IN PWLSESSION Session);
/* sas.c */ /* sas.c */
BOOL BOOL
SetDefaultLanguage( SetDefaultLanguage(IN BOOL UserProfile);
IN BOOL UserProfile);
BOOL BOOL
InitializeSAS( InitializeSAS(IN OUT PWLSESSION Session);
IN OUT PWLSESSION Session);
/* screensaver.c */ /* screensaver.c */
BOOL BOOL
InitializeScreenSaver( InitializeScreenSaver(IN OUT PWLSESSION Session);
IN OUT PWLSESSION Session);
VOID VOID
StartScreenSaver( StartScreenSaver(IN PWLSESSION Session);
IN PWLSESSION Session);
/* winlogon.c */ /* winlogon.c */
BOOL BOOL
PlaySoundRoutine( PlaySoundRoutine(IN LPCWSTR FileName,
IN LPCWSTR FileName,
IN UINT Logon, IN UINT Logon,
IN UINT Flags); IN UINT Flags);
BOOL BOOL
DisplayStatusMessage( DisplayStatusMessage(IN PWLSESSION Session,
IN PWLSESSION Session,
IN HDESK hDesktop, IN HDESK hDesktop,
IN UINT ResourceId); IN UINT ResourceId);
BOOL BOOL
RemoveStatusMessage( RemoveStatusMessage(IN PWLSESSION Session);
IN PWLSESSION Session);
/* wlx.c */ /* wlx.c */
BOOL BOOL
GinaInit( GinaInit(IN OUT PWLSESSION Session);
IN OUT PWLSESSION Session);
BOOL BOOL
CreateWindowStationAndDesktops( CreateWindowStationAndDesktops(IN OUT PWLSESSION Session);
IN OUT PWLSESSION Session);
NTSTATUS NTSTATUS
HandleShutdown( HandleShutdown(IN OUT PWLSESSION Session,
IN OUT PWLSESSION Session,
IN DWORD wlxAction); IN DWORD wlxAction);
VOID WINAPI WlxUseCtrlAltDel(HANDLE hWlx); VOID WINAPI WlxUseCtrlAltDel(HANDLE hWlx);