读书人

关于自定义GinaDLL的有关问题怎么真

发布时间: 2012-05-29 12:16:00 作者: rapoo

关于自定义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;

}


[解决办法]

探讨
msGina是没有源代码的 我怎么知道怎么写里面的东东 微软可从来没有公布啊

[解决办法]
WlxActivateUserShell
如果验证通过,不调用原来的登录函数,改调用一下这个函数试试

读书人网 >C++

热点推荐