关于自定义GinaDLL的问题,如何真正绕过xp的登录窗口
当自定义GinaDLL在注册表进行注册之后,他将在xp默认登录之前调用自定义的GinaDLL,我试了以下代码:
其代码没有完全构造Gina,而是在引用原始msGina.dll基础上,更新了其中的一些函数。在下面的代码中,WlxLoggedOutSAS中加入了自己的代码,先判断一个我自己画的对话框中的用户名和密码(这里简单起见,明文验证)正确,然后:
这里我不得不重新调用(下面加粗加红的部分)原来的验证函数以完成登录。
这样做的演示形式是:用户登录xp后,首先看到是我自定义的Gina界面,验证通过后,还有进入原来xp的登录界面,而我想做的就是能够直接绕过xp的登录,不用再出现那个原来的登录界面。理论说来,就是调用msGina中MyWlxLoggedOutSAS函数下那个直接登录的API函数,可是我还不清楚是什么,或者是还需要注意什么地方。
还望大虾指点。
代码如下:
// 在没有任何一个用户登陆的情况下,Winlogon.exe接收到SAS事件调用该函数
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
//=========================加入自己的登陆=========================
Clogin login;
if (login.DoModal()==IDCANCEL)
{
return WLX_SAS_ACTION_NONE;
}
if(login.bCLOSE==TRUE)
{
return WLX_SAS_ACTION_SHUTDOWN;
}
if(login.DoModal()==IDOK)
{
char UserName[40];
char PassWord[40];
strcpy(UserName,theApp.MyUser);
strcpy(PassWord,theApp.MyPass);
if(!strcmp(UserName,"Administrator")&&!strcmp(PassWord,"123456"))
{
return theApp.MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,
pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
}
}
AfxMessageBox("密码或者用户名错误!不能登陆!");
return WLX_SAS_ACTION_NONE;
}
[解决办法]