⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ginafunc.h

📁 这是一本学习 window编程的很好的参考教材
💻 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 + -