我的Gina要求有这样的功能,用户可以用指纹识别代替WIn2000默认的用户验证;也可以用Win2000默认的用户认证。现在我遇到问题是,不能进行切换。我发现原因是:出在pWlxContext变量上,如果我用自己定义的函数去初始化pWlxContext,那么我的指纹认证部分是可用的;如果用标准的导出的函数,那么Win2000默认的用户认证是可用的。我怎样保证二者可用。
下面是我的部分代码:
typedef struct {
HANDLE hWlx;
LPWSTR station;
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
HANDLE hDllInstance;
HANDLE UserToken;
} GINA_CONTEXT, *PGINA_CONTEXT;PGINA_CONTEXT pContext, p; WlxInitialize(LPWSTR lpWinsta, HANDLE hWlx, PVOID pvReserved,
PVOID pWinlogonFunctions, PVOID *pWlxContext)
{
//下面是初始化pWlxContext,pWlxContext是传出参数
pContext = (PGINA_CONTEXT) LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, sizeof(GINA_CONTEXT));
*pWlxContext= (PVOID)pContext;
pContext->pWlxFuncs=(PWLX_DISPATCH_VERSION_1_3)pWinlogonFunctions;
pWlxFunctions = (PWLX_DISPATCH_VERSION_1_3)pWinlogonFunctions;
pContext->hWlx = hWlx; pContext->station = lpWinsta;
pContext->pWlxFuncs->WlxUseCtrlAltDel(hWlx);
fNew=TRUE;
}int WINAPI
WlxLoggedOutSAS(PVOID pWlxContext, DWORD dwSasType,
PLUID pAuthenticationId, PSID pLogonSid,
PDWORD pdwOptions, PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{ p = (PGINA_CONTEXT)pWlxContext;
fStatus=p->pWlxFuncs->WlxDialogBoxParam(p->hWlx, ghInst,
(LPTSTR)MAKEINTRESOURCE(IDD_WELCOME),
NULL, WelcomeDlgProc, (LPARAM)p);
if(FALSE==fStatus)
{
fNew=FALSE;
}
else
{
fNew=TRUE;
}
if(FALSE==fNew)
{
用标准Gina中导出的函数进行Logon
}
else{
用指纹识别进行Logon
}
}
请指教 ,一定给分
下面是我的部分代码:
typedef struct {
HANDLE hWlx;
LPWSTR station;
PWLX_DISPATCH_VERSION_1_3 pWlxFuncs;
HANDLE hDllInstance;
HANDLE UserToken;
} GINA_CONTEXT, *PGINA_CONTEXT;PGINA_CONTEXT pContext, p; WlxInitialize(LPWSTR lpWinsta, HANDLE hWlx, PVOID pvReserved,
PVOID pWinlogonFunctions, PVOID *pWlxContext)
{
//下面是初始化pWlxContext,pWlxContext是传出参数
pContext = (PGINA_CONTEXT) LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, sizeof(GINA_CONTEXT));
*pWlxContext= (PVOID)pContext;
pContext->pWlxFuncs=(PWLX_DISPATCH_VERSION_1_3)pWinlogonFunctions;
pWlxFunctions = (PWLX_DISPATCH_VERSION_1_3)pWinlogonFunctions;
pContext->hWlx = hWlx; pContext->station = lpWinsta;
pContext->pWlxFuncs->WlxUseCtrlAltDel(hWlx);
fNew=TRUE;
}int WINAPI
WlxLoggedOutSAS(PVOID pWlxContext, DWORD dwSasType,
PLUID pAuthenticationId, PSID pLogonSid,
PDWORD pdwOptions, PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{ p = (PGINA_CONTEXT)pWlxContext;
fStatus=p->pWlxFuncs->WlxDialogBoxParam(p->hWlx, ghInst,
(LPTSTR)MAKEINTRESOURCE(IDD_WELCOME),
NULL, WelcomeDlgProc, (LPARAM)p);
if(FALSE==fStatus)
{
fNew=FALSE;
}
else
{
fNew=TRUE;
}
if(FALSE==fNew)
{
用标准Gina中导出的函数进行Logon
}
else{
用指纹识别进行Logon
}
}
请指教 ,一定给分
Mail:[email protected]