|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: testgina.h
//
// Contents: Main header file for testgina.exe
//
// History: 7-14-94 RichardW Created
//
//----------------------------------------------------------------------------
#define UNICODE
#ifndef RC_INVOKED
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntlsa.h>
#include <ntmsv1_0.h>
#include <lmsname.h>
#endif
#include <windows.h>
#include <shellapi.h>
#include <commctrl.h>
#include <stdio.h>
#ifndef RC_INVOKED
#include <winwlx.h>
typedef BOOL (WINAPI * PWLX_NEGOTIATE)( DWORD, DWORD *);
typedef BOOL (WINAPI * PWLX_INITIALIZE)( LPWSTR, HANDLE, PVOID, PVOID, PVOID *);
typedef VOID (WINAPI * PWLX_DISPLAYSASNOTICE)( PVOID );
typedef int (WINAPI * PWLX_LOGGEDOUTSAS)( PVOID, DWORD, PLUID, PSID, PDWORD, PHANDLE, PWLX_MPR_NOTIFY_INFO, PVOID);
typedef VOID (WINAPI * PWLX_ACTIVATEUSERSHELL)( PVOID, PWSTR, PWSTR, PVOID);
typedef int (WINAPI * PWLX_LOGGEDONSAS)( PVOID, DWORD, PWLX_MPR_NOTIFY_INFO);
typedef VOID (WINAPI * PWLX_DISPLAYLOCKEDNOTICE)( PVOID );
typedef int (WINAPI * PWLX_WKSTALOCKEDSAS)( PVOID, DWORD );
typedef VOID (WINAPI * PWLX_LOGOFF)( PVOID );
typedef VOID (WINAPI * PWLX_SHUTDOWN)( PVOID );
#define WLX_NEGOTIATE_NAME "WlxNegotiate"
#define WLX_INITIALIZE_NAME "WlxInitialize"
#define WLX_DISPLAYSASNOTICE_NAME "WlxDisplaySASNotice"
#define WLX_LOGGEDOUTSAS_NAME "WlxLoggedOutSAS"
#define WLX_ACTIVATEUSERSHELL_NAME "WlxActivateUserShell"
#define WLX_LOGGEDONSAS_NAME "WlxLoggedOnSAS"
#define WLX_DISPLAYLOCKED_NAME "WlxDisplayLockedNotice"
#define WLX_WKSTALOCKEDSAS_NAME "WlxWkstaLockedSAS"
#define WLX_LOGOFF_NAME "WlxLogoff"
#define WLX_SHUTDOWN_NAME "WlxShutdown"
#define WLX_NEGOTIATE_API 0
#define WLX_INITIALIZE_API 1
#define WLX_DISPLAYSASNOTICE_API 2
#define WLX_LOGGEDOUTSAS_API 3
#define WLX_ACTIVATEUSERSHELL_API 4
#define WLX_LOGGEDONSAS_API 5
#define WLX_DISPLAYLOCKED_API 6
#define WLX_WKSTALOCKEDSAS_API 7
#define WLX_LOGOFF_API 8
#define WLX_SHUTDOWN_API 9
typedef enum _WinstaState { Winsta_PreLoad, Winsta_Initialize, Winsta_NoOne, Winsta_NoOne_Display, Winsta_NoOne_SAS, Winsta_LoggedOnUser_StartShell, Winsta_LoggedOnUser, Winsta_LoggedOn_SAS, Winsta_Locked, Winsta_Locked_SAS, Winsta_WaitForShutdown, Winsta_Shutdown } WinstaState;
typedef struct _USER_SAS { DWORD Value; WCHAR Name[128]; } USER_SAS, * PUSER_SAS; #define MAX_USER_SASES 4
#define UPDATE_INITIALIZE 0
#define UPDATE_DISPLAY_NOTICE 1
#define UPDATE_SAS_RECEIVED 2
#define UPDATE_USER_LOGON 3
#define UPDATE_LOCK_WKSTA 4
#define UPDATE_UNLOCK_WKSTA 5
#define UPDATE_LOGOFF 6
#define UPDATE_SAS_BYPASS 7
#define UPDATE_SAS_COMPLETE 8
#define UDPATE_FORCE_LOGOFF 9
#define UPDATE_SHUTDOWN 10
void UpdateGinaState(DWORD Update);
void TestGinaError(DWORD, PWSTR);
#define GINAERR_INVALID_HANDLE 1
#define GINAERR_IMPROPER_CAD 2
#define GINAERR_INVALID_LEVEL 3
#define GINAERR_LOAD_FAILED 4
#define GINAERR_MISSING_FUNCTION 5
#define GINAERR_UNKNOWN_HWND 6
#define GINAERR_NO_WINDOW_FOR_SAS 7
#define GINAERR_INVALID_SAS_CODE 8
#define GINAERR_INVALID_RETURN 9
#define GINAERR_DIALOG_ERROR 10
#define MAX_DESKTOPS 16
#define WINLOGON_DESKTOP 0
#define DEFAULT_DESKTOP 1
#define SCREENSAVER_DESKTOP 2
void LoadParameters(void); void SaveParameters(void); void SaveGinaSpecificParameters(void); void LoadGinaSpecificParameters( VOID ); VOID UpdateSasMenu(VOID); VOID EnableOptions(BOOL Enable);
VOID WINAPI WlxUseCtrlAltDel(HANDLE); VOID WINAPI WlxSasNotify(HANDLE, DWORD); VOID WINAPI WlxSetContextPointer(HANDLE, PVOID); BOOL WINAPI WlxSetTimeout(HANDLE, DWORD); int WINAPI WlxAssignShellProtection(HANDLE, HANDLE, HANDLE, HANDLE); int WINAPI WlxMessageBox(HANDLE, HWND, LPWSTR, LPWSTR, UINT); int WINAPI WlxDialogBox(HANDLE, HANDLE, LPWSTR, HWND, DLGPROC); int WINAPI WlxDialogBoxIndirect(HANDLE, HANDLE, LPCDLGTEMPLATE, HWND, DLGPROC); int WINAPI WlxDialogBoxParam(HANDLE, HANDLE, LPWSTR, HWND, DLGPROC, LPARAM); int WINAPI WlxDialogBoxIndirectParam(HANDLE, HANDLE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); int WINAPI WlxSwitchDesktopToUser(HANDLE); int WINAPI WlxSwitchDesktopToWinlogon(HANDLE); int WINAPI WlxChangePasswordNotify(HANDLE, PWLX_MPR_NOTIFY_INFO, DWORD); BOOL WINAPI WlxGetSourceDesktop(HANDLE, PWLX_DESKTOP *); BOOL WINAPI WlxSetReturnDesktop(HANDLE, PWLX_DESKTOP); BOOL WINAPI WlxCreateUserDesktop(HANDLE, HANDLE, DWORD, PWSTR, PWLX_DESKTOP *); int WINAPI WlxChangePasswordNotifyEx( HANDLE, PWLX_MPR_NOTIFY_INFO, DWORD, PWSTR, PVOID); BOOL WINAPI WlxCloseUserDesktop( HANDLE, PWLX_DESKTOP, HANDLE ); BOOL WINAPI WlxSetOption( HANDLE, DWORD, ULONG_PTR, ULONG_PTR * ); BOOL WINAPI WlxGetOption( HANDLE, DWORD, ULONG_PTR * ); VOID WINAPI WlxWin31Migrate( HANDLE ); BOOL WINAPI WlxQueryClientCredentials( PWLX_CLIENT_CREDENTIALS_INFO_V1_0 ); BOOL WINAPI WlxQueryICCredentials( PWLX_CLIENT_CREDENTIALS_INFO_V1_0 ); BOOL WINAPI WlxDisconnect( VOID ); int UpdateMenuBar(void); void UpdateStatusBar(void); PingSAS(DWORD SasType);
BOOLEAN LoadGinaDll(void); BOOLEAN TestNegotiate(void); BOOLEAN TestInitialize(void); BOOLEAN TestDisplaySASNotice(void); int TestLoggedOutSAS(int SasType); int TestLoggedOnSAS(int SasType); int TestActivateUserShell(void); int TestWkstaLockedSAS(int SasType); int TestDisplayLockedNotice(void); int TestLogoff(void); BOOL InitializeDesktops( VOID );
BOOLEAN AmIBeingDebugged(void);
void LogEvent(long Mask, const char * Format, ...);
LRESULT CALLBACK WndProc( HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);
BOOL AssociateHandle(HANDLE); BOOL VerifyHandle(HANDLE); BOOL StashContext(PVOID); PVOID GetContext(VOID); BOOL ValidResponse( DWORD ApiNum, DWORD Response);
//
// Global Variables
extern HINSTANCE hDllInstance; extern HINSTANCE hAppInstance; extern DWORD DllVersion; extern HICON hIcon; extern HWND hMainWindow; extern HWND hStatusWindow; extern DWORD StatusHeight; extern DWORD fTestGina; extern DWORD GinaBreakFlags; extern WinstaState GinaState; extern DWORD LastRetCode; extern BOOL LastBoolRet; extern WCHAR szGinaDll[]; extern WLX_DISPATCH_VERSION_1_3 WlxDispatchTable; extern HANDLE hThread; extern DWORD SizeX, SizeY; extern DWORD PosX, PosY; extern DWORD StatusDeltaX, StatusDeltaY; extern DWORD StatusHeight; extern WLX_MPR_NOTIFY_INFO GlobalMprInfo; extern HMENU hDebugMenu; extern USER_SAS UserDefSas[4]; extern DWORD UserSases; extern PVOID pWlxContext; extern WCHAR GlobalProviderName[];
extern DWORD CurrentDesktop; extern PWLX_DESKTOP Desktops[]; extern DWORD OtherDesktop; extern DWORD DesktopCount;
#define WLX_SAS_ACTION_BOOL_RET 12
//
// Function Pointers in DLL:
//
extern PWLX_NEGOTIATE pWlxNegotiate; extern PWLX_INITIALIZE pWlxInitialize; extern PWLX_DISPLAYSASNOTICE pWlxDisplaySASNotice; extern PWLX_LOGGEDOUTSAS pWlxLoggedOutSAS; extern PWLX_ACTIVATEUSERSHELL pWlxActivateUserShell; extern PWLX_LOGGEDONSAS pWlxLoggedOnSAS; extern PWLX_DISPLAYLOCKEDNOTICE pWlxDisplayLockedNotice; extern PWLX_WKSTALOCKEDSAS pWlxWkstaLockedSAS; extern PWLX_LOGOFF pWlxLogoff; extern PWLX_SHUTDOWN pWlxShutdown;
#define GINA_USE_CAD 0x00000001 // DLL requested Use CAD
#define GINA_DLL_KNOWN 0x00000002 // DLL name has been determined
#define GINA_USE_SC 0x00000004
#define GINA_NEGOTIATE_OK 0x80000000 // Ok to call Negotiate
#define GINA_INITIALIZE_OK 0x40000000 // Ok to call Initialize
#define GINA_LOGGEDOUT_OK 0x20000000 // Ok to call LoggedOutSAS
#define GINA_ACTIVATE_OK 0x10000000 // Ok to call Activate
#define GINA_LOGGEDON_OK 0x08000000 // Ok to call LoggedOnSAS
#define GINA_DISPLAYLOCK_OK 0x04000000 // Ok to call DisplayLockedNotice
#define GINA_WKSTALOCK_OK 0x02000000 // Ok to call WkstaLockedSAS
#define GINA_LOGOFF_OK 0x01000000 // Ok to call Logoff
#define GINA_SHUTDOWN_OK 0x00800000 // Ok to call Shutdown
#define GINA_DISPLAY_OK 0x00400000 // Ok to call Display
#define GINA_ISLOCKOK_OK 0x00200000 // Ok to call IsLockOk
#define GINA_ISLOGOFFOK_OK 0x00100000 // Ok to call IsLogoffOk
#define GINA_RESTART_OK 0x00080000 // Ok to call RestartShell
#define GINA_SCREENSAVE_OK 0x00040000 // Ok to call ScreenSaverNotify
#define GINA_DISPLAYLOG_OK 0x00020000
#define BREAK_NEGOTIATE 0x00000001
#define BREAK_INITIALIZE 0x00000002
#define BREAK_DISPLAY 0x00000004
#define BREAK_LOGGEDOUT 0x00000008
#define BREAK_ACTIVATE 0x00000010
#define BREAK_LOGGEDON 0x00000020
#define BREAK_DISPLAYLOCKED 0x00000040
#define BREAK_WKSTALOCKED 0x00000080
#define BREAK_LOGOFF 0x00000100
#define BREAK_SHUTDOWN 0x00000200
#define FLAG_ON(dw, f) dw |= (f)
#define FLAG_OFF(dw, f) dw &= (~(f))
#define TEST_FLAG(dw, f) ((BOOL)(dw & (f)))
#endif // RC_INVOKED
#include "menu.h"
#include "dialogs.h"
#define TESTGINAICON 10
|