windows-nt/Source/XPSP1/NT/ds/security/gina/testgina/testgina.h
2020-09-26 16:20:57 +08:00

328 lines
9.5 KiB
C

//+---------------------------------------------------------------------------
//
// 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