VBoxGINA.cpp revision 1ab1576a9b15fe6c522370e781354682de5396ac
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/** @file
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync *
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * VBoxGINA -- Windows Logon DLL for VirtualBox
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync *
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
00550544656e1a1537bad42c4f4bacef814637cavboxsync *
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * available from http://www.virtualbox.org. This file is free software;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * you can redistribute it and/or modify it under the terms of the GNU
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * General Public License (GPL) as published by the Free Software
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync *
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * additional information or have any questions.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include <stdio.h>
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include <stdlib.h>
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include <windows.h>
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include "winwlx.h"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include "VBoxGINA.h"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include "Helper.h"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#include "Dialog.h"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/*
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Global variables
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/** DLL instance handle */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncHINSTANCE hDllInstance;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/** Version of Winlogon */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncDWORD wlxVersion;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/** Handle to Winlogon service */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncHANDLE hGinaWlx;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/** Winlog function dispatch table */
101e4426c962b6d124219de44d4fd2cf2a23b178vboxsyncPWLX_DISPATCH_VERSION_1_1 pWlxFuncs;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/**
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * Function pointers to MSGINA entry points
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXNEGOTIATE GWlxNegotiate;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXINITIALIZE GWlxInitialize;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXDISPLAYSASNOTICE GWlxDisplaySASNotice;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXLOGGEDOUTSAS GWlxLoggedOutSAS;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXACTIVATEUSERSHELL GWlxActivateUserShell;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXLOGGEDONSAS GWlxLoggedOnSAS;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXDISPLAYLOCKEDNOTICE GWlxDisplayLockedNotice;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXWKSTALOCKEDSAS GWlxWkstaLockedSAS;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXISLOCKOK GWlxIsLockOk;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXISLOGOFFOK GWlxIsLogoffOk;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXLOGOFF GWlxLogoff;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXSHUTDOWN GWlxShutdown;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/* GINA 1.1 */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXSTARTAPPLICATION GWlxStartApplication;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXSCREENSAVERNOTIFY GWlxScreenSaverNotify;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/* GINA 1.3 */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXNETWORKPROVIDERLOAD GWlxNetworkProviderLoad;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXDISPLAYSTATUSMESSAGE GWlxDisplayStatusMessage;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXGETSTATUSMESSAGE GWlxGetStatusMessage;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXREMOVESTATUSMESSAGE GWlxRemoveStatusMessage;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/* GINA 1.4 */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXGETCONSOLESWITCHCREDENTIALS GWlxGetConsoleSwitchCredentials;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXRECONNECTNOTIFY GWlxReconnectNotify;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncPGWLXDISCONNECTNOTIFY GWlxDisconnectNotify;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/**
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * DLL entry point.
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI DllMain(HINSTANCE hInstance,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync DWORD dwReason,
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync LPVOID lpReserved)
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync{
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync switch (dwReason)
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync case DLL_PROCESS_ATTACH:
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync RTR3Init();
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync VbglR3Init();
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync LogRel(("VBoxGina: DLL loaded.\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync DisableThreadLibraryCalls(hInstance);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync hDllInstance = hInstance;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync break;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync case DLL_PROCESS_DETACH:
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync LogRel(("VBoxGina: DLL unloaded.\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync VbglR3Term();
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /// @todo RTR3Term();
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync break;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync default:
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync break;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync }
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync return TRUE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxNegotiate(DWORD dwWinlogonVersion,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync DWORD *pdwDllVersion)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync HINSTANCE hDll;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync#ifdef DEBUG
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* enable full log output */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync RTLogGroupSettings(RTLogDefaultInstance(), "all=~0");
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync#endif
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: dwWinlogonVersion: %d\n", dwWinlogonVersion));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* load the standard Microsoft GINA DLL */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!(hDll = LoadLibrary(TEXT("MSGINA.DLL"))))
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed loading MSGINA! last error = %d\n", GetLastError()));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /*
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync * Now get the entry points of the MSGINA
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxNegotiate = (PGWLXNEGOTIATE)GetProcAddress(hDll, "WlxNegotiate");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxNegotiate)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxNegotiate\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxInitialize = (PGWLXINITIALIZE)GetProcAddress(hDll, "WlxInitialize");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxInitialize)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxInitialize\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync }
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync GWlxDisplaySASNotice =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXDISPLAYSASNOTICE)GetProcAddress(hDll, "WlxDisplaySASNotice");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxDisplaySASNotice)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxDisplaySASNotice\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxLoggedOutSAS =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXLOGGEDOUTSAS)GetProcAddress(hDll, "WlxLoggedOutSAS");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxLoggedOutSAS)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxLoggedOutSAS\n"));
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxActivateUserShell =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXACTIVATEUSERSHELL)GetProcAddress(hDll, "WlxActivateUserShell");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxActivateUserShell)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxActivateUserShell\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxLoggedOnSAS =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXLOGGEDONSAS)GetProcAddress(hDll, "WlxLoggedOnSAS");
6bea637fe631bf8f14128c36c5da0fe98c0fa4edvboxsync if (!GWlxLoggedOnSAS)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxLoggedOnSAS\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync }
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync GWlxDisplayLockedNotice =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXDISPLAYLOCKEDNOTICE)GetProcAddress(hDll, "WlxDisplayLockedNotice");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxDisplayLockedNotice)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxDisplayLockedNotice\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxIsLockOk = (PGWLXISLOCKOK)GetProcAddress(hDll, "WlxIsLockOk");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxIsLockOk)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxIsLockOk\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxWkstaLockedSAS =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXWKSTALOCKEDSAS)GetProcAddress(hDll, "WlxWkstaLockedSAS");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxWkstaLockedSAS)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxWkstaLockedSAS\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync }
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync GWlxIsLogoffOk = (PGWLXISLOGOFFOK)GetProcAddress(hDll, "WlxIsLogoffOk");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxIsLogoffOk)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxIsLogoffOk\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxLogoff = (PGWLXLOGOFF)GetProcAddress(hDll, "WlxLogoff");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxLogoff)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxLogoff\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxShutdown = (PGWLXSHUTDOWN)GetProcAddress(hDll, "WlxShutdown");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!GWlxShutdown)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: failed resolving WlxShutdown\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync /* GINA 1.1, optional */
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync GWlxStartApplication = (PGWLXSTARTAPPLICATION)GetProcAddress(hDll, "WlxStartApplication");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxScreenSaverNotify = (PGWLXSCREENSAVERNOTIFY)GetProcAddress(hDll, "WlxScreenSaverNotify");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* GINA 1.3, optional */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxNetworkProviderLoad = (PGWLXNETWORKPROVIDERLOAD)GetProcAddress( hDll, "WlxNetworkProviderLoad");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisplayStatusMessage = (PGWLXDISPLAYSTATUSMESSAGE)GetProcAddress( hDll, "WlxDisplayStatusMessage");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxGetStatusMessage = (PGWLXGETSTATUSMESSAGE)GetProcAddress( hDll, "WlxGetStatusMessage");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxRemoveStatusMessage = (PGWLXREMOVESTATUSMESSAGE)GetProcAddress( hDll, "WlxRemoveStatusMessage");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* GINA 1.4, optional */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxGetConsoleSwitchCredentials =
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync (PGWLXGETCONSOLESWITCHCREDENTIALS)GetProcAddress(hDll, "WlxGetConsoleSwitchCredentials");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxReconnectNotify = (PGWLXRECONNECTNOTIFY)GetProcAddress(hDll, "WlxReconnectNotify");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisconnectNotify = (PGWLXDISCONNECTNOTIFY)GetProcAddress(hDll, "WlxDisconnectNotify");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNegotiate: optional function pointers:\n"
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync " WlxStartApplication: %p\n"
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync " WlxScreenSaverNotify: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxNetworkProviderLoad: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxDisplayStatusMessage: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxGetStatusMessage: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxRemoveStatusMessage: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxGetConsoleSwitchCredentials: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxReconnectNotify: %p\n"
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync " WlxDisconnectNotify: %p\n",
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxStartApplication, GWlxScreenSaverNotify, GWlxNetworkProviderLoad,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisplayStatusMessage, GWlxGetStatusMessage, GWlxRemoveStatusMessage,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxGetConsoleSwitchCredentials, GWlxReconnectNotify, GWlxDisconnectNotify));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync wlxVersion = dwWinlogonVersion;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync /* forward call */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxNegotiate(dwWinlogonVersion, pdwDllVersion);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxInitialize(LPWSTR lpWinsta, HANDLE hWlx, PVOID pvReserved,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PVOID pWinlogonFunctions, PVOID *pWlxContext)
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync{
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync Log(("VBoxGINA::WlxInitialize\n"));
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync /* store Winlogon function table */
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync pWlxFuncs = (PWLX_DISPATCH_VERSION_1_1)pWinlogonFunctions;
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync /* store handle to Winlogon service*/
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync hGinaWlx = hWlx;
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync /* hook the dialogs */
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync hookDialogBoxes(pWlxFuncs, wlxVersion);
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync /* forward call */
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync return GWlxInitialize(lpWinsta, hWlx, pvReserved, pWinlogonFunctions, pWlxContext);
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxDisplaySASNotice(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisplaySASNotice\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* check if there are credentials for us, if so simulat C-A-D */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (credentialsAvailable())
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisplaySASNotice: simulating C-A-D\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* automatic C-A-D */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync pWlxFuncs->WlxSasNotify(hGinaWlx, WLX_SAS_TYPE_CTRL_ALT_DEL);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync else
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisplaySASNotice: starting credentials poller\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* start the credentials poller thread */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync credentialsPollerCreate();
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisplaySASNotice(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncint WINAPI WlxLoggedOutSAS(PVOID pWlxContext, DWORD dwSasType, PLUID pAuthenticationId,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PSID pLogonSid, PDWORD pdwOptions, PHANDLE phToken,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PWLX_MPR_NOTIFY_INFO pMprNotifyInfo, PVOID *pProfile)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxLoggedOutSAS\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* when performing a direct logon without C-A-D, our poller might not be running */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!credentialsAvailable())
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync credentialsPollerCreate();
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync }
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync int iRet;
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync iRet = GWlxLoggedOutSAS(pWlxContext, dwSasType, pAuthenticationId, pLogonSid,
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync pdwOptions, phToken, pMprNotifyInfo, pProfile);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync if (iRet == WLX_SAS_ACTION_LOGON)
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync {
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync //
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync // copy pMprNotifyInfo and pLogonSid for later use
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync //
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync // pMprNotifyInfo->pszUserName
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync // pMprNotifyInfo->pszDomain
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync // pMprNotifyInfo->pszPassword
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync // pMprNotifyInfo->pszOldPassword
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync return iRet;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsyncBOOL WINAPI WlxActivateUserShell(PVOID pWlxContext, PWSTR pszDesktopName,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PWSTR pszMprLogonScript, PVOID pEnvironment)
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync{
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync Log(("VBoxGINA::WlxActivateUserShell\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync /* forward call to MSGINA */
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync return GWlxActivateUserShell(pWlxContext, pszDesktopName, pszMprLogonScript, pEnvironment);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncint WINAPI WlxLoggedOnSAS(PVOID pWlxContext, DWORD dwSasType, PVOID pReserved)
b84a3f2aac9529d5c5840512b12d81bc62d0e665vboxsync{
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync HKEY hKey;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync DWORD dwValue = 1;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync DWORD dwSize;
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync DWORD dwType;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync Log(("VBoxGINA::WlxLoggedOnSAS\n"));
968c867cc19737e4e1fd97c396fcf75a3d52dd27vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* Winlogon registry path */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync static TCHAR szPath[] = TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon");
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (!RegOpenKey(HKEY_LOCAL_MACHINE, szPath, &hKey))
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync dwSize = sizeof(DWORD);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync RegQueryValueEx(hKey, TEXT("SAS_S"), 0, &dwType, (PBYTE)&dwValue, &dwSize);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync RegCloseKey(hKey);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync else
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxLoggedOnSAS: could not open registry key! last error: %d\n", GetLastError()));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
1823a2b6757096c699825898c33f8d93089a1b4bvboxsync if (dwValue)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return WLX_SAS_ACTION_NONE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync else
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxLoggedOnSAS(pWlxContext, dwSasType, pReserved);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisplayLockedNotice\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisplayLockedNotice(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxIsLockOk\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxIsLockOk(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncint WINAPI WlxWkstaLockedSAS(PVOID pWlxContext, DWORD dwSasType)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxWkstaLockedSAS\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxWkstaLockedSAS(pWlxContext, dwSasType);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync BOOL bSuccess;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxIsLogoffOk\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync bSuccess = GWlxIsLogoffOk(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (bSuccess)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync {
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync //
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync // if it's ok to logoff, finish with the stored credentials
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync // and scrub the buffers
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync //
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync }
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return bSuccess;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxLogoff(PVOID pWlxContext)
22f5063af9740075661e9512a5b9ba92ea3a535evboxsync{
22f5063af9740075661e9512a5b9ba92ea3a535evboxsync Log(("VBoxGINA::WlxLogoff\n"));
22f5063af9740075661e9512a5b9ba92ea3a535evboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxLogoff(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxShutdown(PVOID pWlxContext, DWORD ShutdownType)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxShutdown\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxShutdown(pWlxContext, ShutdownType);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/*
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * GINA 1.1 entry points
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxScreenSaverNotify(PVOID pWlxContext, BOOL *pSecure)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxScreenSaverNotify\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxScreenSaverNotify)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxScreenSaverNotify(pWlxContext, pSecure);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* return something intelligent */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync *pSecure = TRUE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return TRUE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxStartApplication(PVOID pWlxContext, PWSTR pszDesktopName,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PVOID pEnvironment, PWSTR pszCmdLine)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxStartApplication\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxStartApplication)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxStartApplication(pWlxContext, pszDesktopName, pEnvironment, pszCmdLine);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/*
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * GINA 1.3 entry points
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxNetworkProviderLoad (PVOID pWlxContext, PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxNetworkProviderLoad\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxNetworkProviderLoad)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxNetworkProviderLoad(pWlxContext, pNprNotifyInfo);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxDisplayStatusMessage(PVOID pWlxContext, HDESK hDesktop, DWORD dwOptions,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PWSTR pTitle, PWSTR pMessage)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisplayStatusMessage\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxDisplayStatusMessage)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxDisplayStatusMessage(pWlxContext, hDesktop, dwOptions, pTitle, pMessage);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxGetStatusMessage(PVOID pWlxContext, DWORD *pdwOptions,
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync PWSTR pMessage, DWORD dwBufferSize)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxGetStatusMessage\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxGetStatusMessage)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxGetStatusMessage(pWlxContext, pdwOptions, pMessage, dwBufferSize);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxRemoveStatusMessage(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxRemoveStatusMessage\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxRemoveStatusMessage)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxRemoveStatusMessage(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync/*
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync * GINA 1.4 entry points
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncBOOL WINAPI WlxGetConsoleSwitchCredentials(PVOID pWlxContext,PVOID pCredInfo)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxGetConsoleSwitchCredentials\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward call to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxGetConsoleSwitchCredentials)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return GWlxGetConsoleSwitchCredentials(pWlxContext,pCredInfo);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync return FALSE;
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxReconnectNotify(PVOID pWlxContext)
00550544656e1a1537bad42c4f4bacef814637cavboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxReconnectNotify\n"));
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxReconnectNotify)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxReconnectNotify(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsyncVOID WINAPI WlxDisconnectNotify(PVOID pWlxContext)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync{
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync Log(("VBoxGINA::WlxDisconnectNotify\n"));
00550544656e1a1537bad42c4f4bacef814637cavboxsync
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync /* forward to MSGINA if present */
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync if (GWlxDisconnectNotify)
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync GWlxDisconnectNotify(pWlxContext);
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync}
0b74a2f80aba476dc8be8bc1c63891fc53945986vboxsync