Самоучитель по программированию систем защиты




Протокол взаимодействия процесса Winlogon и библиотеки GINA - часть 3


Если GINA получает от пользователя нестандартную SAS, она вызывает функцию Winlogon WlxSasNotify, после чего Winlogon вызывает одну из вышеперечисленных функций GINA, в зависимости от контекста, в котором была получена SAS.

Для изучения процесса идентификации и аутентификации можно использовать приводимый ниже модуль (DLL), который является «переходником» между WinLogon и стандартной MSGINA. Прототипы экспортируемых MSGINA.DLL описаны в файле winwlx.h стандартной поставки MS SDK.

#include <tchar.h>

#include <windows.h>

finclude <winioctl.h>

finclude "winwlx.h"

tinclude <lm.h>

#include <io.h>

tinclude <stdio.h>

tfinclude <fcntl.h>

#include "xgina,h"

int glob_lock;

HINSTANCE hMSGinaDLL

HINSTANCE hDllInstance;

HANDLE hGlobalWlxPWLX_DISPATCH_VERSION_l_0 pWlxFuncs

typedef BOOL ( WINAPI *WLXNEGOTIATE )( DWORD, DWORD* );

typedef BOOL ( WINAPI *WLXINITIALIZE )( LPWSTR, HANDLE, PVOID,

PVOID, PVOID ) ;

typedef VOID ( WINAPI *WLXDISPLAYSASNOTICE )( PVOID );

typedef int ( WINAPI *WLXLOGGEDOUTSAS )( PVOID, DWORD, PLUID,

PSID, PDWORD, PHANDLE, PWLX_MPR_NOTIFY_INFO, PVOID* );

typedef BOOL ( WINAPI *WLXACTIVATEUSERSHELL ) ( PVOID, PWSTR,

PWSTR, PVOID );

typedef int ( WINAPI *WLXLOGGEDONSAS )( PVOID, DWORD, PVOID );

typedef BOOL ( WINAPI *WLXISLOCKOK )(PVOID );

typedef VOID ( WINAPI *WLXDISPLAYLOCKEDNOTICE ) ( PVOID );

typedef int ( WINAPI *WLXWKSTALOCKEDSAS )( PVOID, DWORD );

typedef BOOL ( WINAPI *WLXISLOGOFFOK) ( PVOID );

typedef VOID ( WINAPI *WLXLOGOFF) ( PVOID );

typedef VOID ( WINAPI *WLXSHUTDOWN )( PVOID, DWORD );

WLXNEGOTIATE g^lpWlxNegotiate = NULL; WLXINITIALIZE g_lpWlxInitialize = NULL; WLXDISPLAYSASNOTICE g_lpWlxDisplaySASNotice = NULL; WLXLOGGEDOUTSAS g_lpWlxLoggedOutSAS = NULL; WLXACTIVATEUSERSHELL g_lpWlxActivateUserShell = NULL; WLXLOGGEDONSAS g_lpWlxLoggedOnSAS = NULL; WLXISLOCKOK g_lpWlx!sLockOk = NULL; WLXDISPLAYLOCKEDNOTICE g_lpWlxDisplayLockedNotice = NULL;

WLXWKSTALOCKEDSAS g_lpWlxWkstaLockedSAS = NULL; WLXISLOGOFFOK g_lpWlx!sLogoffOk = NULL; WLXLOGOFF g_lpWlxLogoff = NULL; WLXSHUTDOWN g_lpWlxShutdown = NULL; BOOL InitMSGinaDll()



Содержание  Назад  Вперед