📄 ginafunc.h
字号:
#ifndef __GINA_FUNC_H__
#define __GINA_FUNC_H__
#define ULONG_PTR unsigned long
typedef struct _WLX_CLIENT_CREDENTIALS_INFO
{
DWORD dwType;
PWSTR pszUserName;
PWSTR pszDomain;
PWSTR pszPassword;
BOOL fPromptForPassword;
}WLX_CLIENT_CREDENTIALS_INFO_V1_0, *PWLX_CLIENT_CREDENTIALS_INFO_V1_0;
typedef BOOL (WINAPI *PWLX_CLOSE_USER_DESKTOP)
(
HANDLE hWlx,
PWLX_DESKTOP pDesktop,
HANDLE hToken
);
typedef BOOL (WINAPI *PWLX_SET_OPTION)
(
HANDLE hWlx,
DWORD Option,
ULONG_PTR Value,
ULONG_PTR *OldValue
);
typedef BOOL (WINAPI *PWLX_GET_OPTION)
(
HANDLE hWlx,
DWORD Option,
ULONG_PTR *Value
);
typedef VOID (WINAPI *PWLX_WIN31_MIGRATE)
(
HANDLE hWlx
);
typedef BOOL (WINAPI *PWLX_QUERY_CLIENT_CREDENTIALS)
(
PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
typedef BOOL (WINAPI *PWLX_QUERY_IC_CREDENTIALS)
(
PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred
);
typedef BOOL (WINAPI *PWLX_DISCONNECT)
(
);
#define WLX_DIRECTORY_LENGTH 1024
typedef struct _WLX_TERMINAL_SERVICES_DATA
{
WCHAR ProfilePath[WLX_DIRECTORY_LENGTH + 1];
WCHAR HomeDir[WLX_DIRECTORY_LENGTH + 1];
WCHAR HomeDirDrive[4];
} WLX_TERMINAL_SERVICES_DATA, *PWLX_TERMINAL_SERVICES_DATA;
typedef DWORD (WINAPI *PWLX_QUERY_TERMINAL_SERVICES_DATA)
(
HANDLE hWlx,
PWLX_TERMINAL_SERVICES_DATA pTSData,
WCHAR *UserName,
WCHAR *Domain
);
typedef struct __win32_DISPATCH_VERSION_1_3
{
PWLX_USE_CTRL_ALT_DEL WlxUseCtrlAltDel;
PWLX_SET_CONTEXT_POINTER WlxSetContextPointer;
PWLX_SAS_NOTIFY WlxSasNotify;
PWLX_SET_TIMEOUT WlxSetTimeout;
PWLX_ASSIGN_SHELL_PROTECTION WlxAssignShellProtection;
PWLX_MESSAGE_BOX WlxMessageBox;
PWLX_DIALOG_BOX WlxDialogBox;
PWLX_DIALOG_BOX_PARAM WlxDialogBoxParam;
PWLX_DIALOG_BOX_INDIRECT WlxDialogBoxIndirect;
PWLX_DIALOG_BOX_INDIRECT_PARAM WlxDialogBoxIndirectParam;
PWLX_SWITCH_DESKTOP_TO_USER WlxSwitchDesktopToUser;
PWLX_SWITCH_DESKTOP_TO_WINLOGON WlxSwitchDesktopToWinlogon;
PWLX_CHANGE_PASSWORD_NOTIFY WlxChangePasswordNotify;
PWLX_GET_SOURCE_DESKTOP WlxGetSourceDesktop;
PWLX_SET_RETURN_DESKTOP WlxSetReturnDesktop;
PWLX_CREATE_USER_DESKTOP WlxCreateUserDesktop;
PWLX_CHANGE_PASSWORD_NOTIFY_EX WlxChangePasswordNotifyEx;
PWLX_CLOSE_USER_DESKTOP WlxCloseUserDesktop;
PWLX_SET_OPTION WlxSetOption;
PWLX_GET_OPTION WlxGetOption;
PWLX_WIN31_MIGRATE WlxWin31Migrate;
PWLX_QUERY_CLIENT_CREDENTIALS WlxQueryClientCredentials;
PWLX_QUERY_IC_CREDENTIALS WlxQueryInetConnectorCredentials;
PWLX_DISCONNECT WlxDisconnect;
PWLX_QUERY_TERMINAL_SERVICES_DATA WlxQueryTerminalServicesData;
} WLX_DISPATCH_VERSION_1_3, *PWLX_DISPATCH_VERSION_1_3;
typedef struct
{
HANDLE hWlx;
LPWSTR station;
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
HANDLE hDllInstance;
HANDLE UserToken;
}GINA_CONTEXT, *PGINA_CONTEXT;
// GINA function define
typedef BOOL (WINAPI *F_WlxNegotiate)
(
DWORD dwWinLogonVersion,
PDWORD pdwDllVersion
);
typedef BOOL (WINAPI *F_WlxInitialize)
(
LPWSTR lpWinsta,
HANDLE hWlx,
PVOID pvReserved,
PVOID pWinlogonFunctions,
PVOID *pWlxContext
);
typedef VOID (WINAPI *F_WlxDisplaySASNotice)
(
PVOID pWlxContext
);
typedef int (WINAPI *F_WlxLoggedOutSAS)
(
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
PVOID * pProfile
);
typedef BOOL (WINAPI *F_WlxActivateUserShell)
(
PVOID pWlxContext,
PWSTR pszDesktopName,
PWSTR pszMprLogonScript,
PVOID pEnvironment
);
typedef int (WINAPI *F_WlxLoggedOnSAS)
(
PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved
);
typedef VOID (WINAPI *F_WlxDisplayLockedNotice)
(
PVOID pWlxContext
);
typedef int (WINAPI *F_WlxWkstaLockedSAS)
(
PVOID pWlxContext,
DWORD dwSasType
);
typedef BOOL (WINAPI *F_WlxIsLockOk)
(
PVOID pWlxContext
);
typedef BOOL (WINAPI *F_WlxIsLogoffOk)
(
PVOID pWlxContext
);
typedef VOID (WINAPI *F_WlxLogoff)
(
PVOID pWlxContext
);
typedef VOID (WINAPI *F_WlxShutdown)
(
PVOID pWlxContext,
DWORD ShutdownType
);
// version 1.1
typedef BOOL (WINAPI *F_WlxScreenSaverNotify)
(
PVOID pWlxContext,
BOOL * pSecure
);
typedef BOOL (WINAPI *F_WlxStartApplication)
(
PVOID pWlxContext,
PWSTR pszDesktopName,
PVOID pEnvironment,
PWSTR pszCmdLine
);
// version 1.3
typedef BOOL (WINAPI *F_WlxNetworkProviderLoad)
(
PVOID pWlxContext,
PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);
typedef BOOL (WINAPI *F_WlxDisplayStatusMessage)
(
PVOID pWlxContext,
HDESK hDesktop,
DWORD dwOptions,
PWSTR pTitle,
PWSTR pMessage
);
typedef BOOL (WINAPI *F_WlxGetStatusMessage)
(
PVOID pWlxContext,
DWORD * pdwOptions,
PWSTR pMessage,
DWORD dwBufferSize
);
typedef BOOL (WINAPI *F_WlxRemoveStatusMessage)
(
PVOID pWlxContext
);
// function
F_WlxNegotiate p_WlxNegotiate = NULL;
F_WlxInitialize p_WlxInitialize = NULL;
F_WlxDisplaySASNotice p_WlxDisplaySASNotice = NULL;
F_WlxLoggedOutSAS p_WlxLoggedOutSAS = NULL;
F_WlxActivateUserShell p_WlxActivateUserShell = NULL;
F_WlxLoggedOnSAS p_WlxLoggedOnSAS = NULL;
F_WlxDisplayLockedNotice p_WlxDisplayLockedNotice = NULL;
F_WlxWkstaLockedSAS p_WlxWkstaLockedSAS = NULL;
F_WlxIsLockOk p_WlxIsLockOk = NULL;
F_WlxIsLogoffOk p_WlxIsLogoffOk = NULL;
F_WlxLogoff p_WlxLogoff = NULL;
F_WlxShutdown p_WlxShutdown = NULL;
F_WlxScreenSaverNotify p_WlxScreenSaverNotify = NULL;
F_WlxStartApplication p_WlxStartApplication = NULL;
F_WlxNetworkProviderLoad p_WlxNetworkProviderLoad = NULL;
F_WlxDisplayStatusMessage p_WlxDisplayStatusMessage = NULL;
F_WlxGetStatusMessage p_WlxGetStatusMessage = NULL;
F_WlxRemoveStatusMessage p_WlxRemoveStatusMessage = NULL;
// init GINA function
static HINSTANCE g_hGinaDll = NULL;
#define GINA_DLLNAME _T("msgina.dll")
BOOL LoadGinaDll()
{
g_hGinaDll = LoadLibrary(GINA_DLLNAME);
if(g_hGinaDll != NULL)
{
p_WlxNegotiate = (F_WlxNegotiate )GetProcAddress(g_hGinaDll, _T("WlxNegotiate"));
p_WlxInitialize = (F_WlxInitialize )GetProcAddress(g_hGinaDll, _T("WlxInitialize"));
p_WlxDisplaySASNotice = (F_WlxDisplaySASNotice )GetProcAddress(g_hGinaDll, _T("WlxDisplaySASNotice"));
p_WlxLoggedOutSAS = (F_WlxLoggedOutSAS )GetProcAddress(g_hGinaDll, _T("WlxLoggedOutSAS"));
p_WlxActivateUserShell = (F_WlxActivateUserShell )GetProcAddress(g_hGinaDll, _T("WlxActivateUserShell"));
p_WlxLoggedOnSAS = (F_WlxLoggedOnSAS )GetProcAddress(g_hGinaDll, _T("WlxLoggedOnSAS"));
p_WlxDisplayLockedNotice = (F_WlxDisplayLockedNotice )GetProcAddress(g_hGinaDll, _T("WlxDisplayLockedNotice"));
p_WlxWkstaLockedSAS = (F_WlxWkstaLockedSAS )GetProcAddress(g_hGinaDll, _T("WlxWkstaLockedSAS"));
p_WlxIsLockOk = (F_WlxIsLockOk )GetProcAddress(g_hGinaDll, _T("WlxIsLockOk"));
p_WlxIsLogoffOk = (F_WlxIsLogoffOk )GetProcAddress(g_hGinaDll, _T("WlxIsLogoffOk"));
p_WlxLogoff = (F_WlxLogoff )GetProcAddress(g_hGinaDll, _T("WlxLogoff"));
p_WlxShutdown = (F_WlxShutdown )GetProcAddress(g_hGinaDll, _T("WlxShutdown"));
p_WlxScreenSaverNotify = (F_WlxScreenSaverNotify )GetProcAddress(g_hGinaDll, _T("WlxScreenSaverNotify"));
p_WlxStartApplication = (F_WlxStartApplication )GetProcAddress(g_hGinaDll, _T("WlxStartApplication"));
p_WlxNetworkProviderLoad = (F_WlxNetworkProviderLoad )GetProcAddress(g_hGinaDll, _T("WlxNetworkProviderLoad"));
p_WlxDisplayStatusMessage = (F_WlxDisplayStatusMessage )GetProcAddress(g_hGinaDll, _T("WlxDisplayStatusMessage"));
p_WlxGetStatusMessage = (F_WlxGetStatusMessage )GetProcAddress(g_hGinaDll, _T("WlxGetStatusMessage"));
p_WlxRemoveStatusMessage = (F_WlxRemoveStatusMessage )GetProcAddress(g_hGinaDll, _T("WlxRemoveStatusMessage"));
}
return
p_WlxNegotiate &&
p_WlxInitialize &&
p_WlxDisplaySASNotice &&
p_WlxLoggedOutSAS &&
p_WlxActivateUserShell &&
p_WlxLoggedOnSAS &&
p_WlxDisplayLockedNotice &&
p_WlxWkstaLockedSAS &&
p_WlxIsLockOk &&
p_WlxIsLogoffOk &&
p_WlxLogoff &&
p_WlxShutdown &&
p_WlxScreenSaverNotify &&
p_WlxStartApplication &&
p_WlxNetworkProviderLoad &&
p_WlxDisplayStatusMessage &&
p_WlxGetStatusMessage &&
p_WlxRemoveStatusMessage;
}
void ReleaseGinaDll()
{
if(g_hGinaDll != NULL)
{
FreeLibrary(g_hGinaDll);
}
}
#endif //__GINA_FUNC_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -