MyGina.dll动态库基本完成!!自己的窗体 已经出现到 windows 登陆以前可是怎么传递参数,可以在点击我的里边的确定后判断用户 跳过 windows 登陆窗体呢?
(也就是说我现在的窗体虽然出现在登陆前,但是没有起到 windows登陆窗体的效果)这个函数怎么改????WlxLoggedOutSAS  (不知道是不是改这个函数)

解决方案 »

  1.   

    你的窗口是在你的MyGina.dll中实现的吗?WinLogon初始化时会创建3个桌面:
    (1)、winlogon桌面:主要显示window 安全等界面,如你按下CTRL+ALT+DEL,登陆的界面等
    (2)、应用程序桌面:我们平时见到的那个有我的电脑的界面
    (3)、屏幕保护桌面:屏幕保护显示界面。
    你需要从MSGINA.DLL中获取WlxLoggedOnSAS这个函数。
    然后在里面写一句return WLX_SAS_ACTION_NONE;这样就可以将屏幕切换到应用程序桌面,从而跳过Windows原来的登陆窗口。
      

  2.   

    是的我的窗体是在MyGina.dll中的
    MSGINA.DLL 我们现在已经在注册表里加了 GINADLL MG_SZ  MyGina.dll
    return WLX_SAS_ACTION_NONE; 这种方法不行!!各位高手继续进!!!
      

  3.   

    算了,问你们个简单点的吧,winlogon 调用登陆窗体 的函数是哪个?用户名和密码 是怎么传递的?
      

  4.   

    登陆的时候,会调用WlxLoggedOutSAS函数,可以替换此函数取得用户名和密码/********************************************************************/
    //在启动到登陆界面时,系统(Winlogon.exe)会调用WlxLoggedOutSAS!int  WINAPI WlxLoggedOutSAS (
      PVOID                  pWlxContext, 
      DWORD                 dwSasType, 
      PLUID                   pAuthenticationId, 
      PSID                    pLogonSid, 
      PDWORD                pdwOptions, 
      PHANDLE                phToken, 
      PWLX_MPR_NOTIFY_INFO pMprNotifyInfo, 
      PVOID *                 pProfile) 
    {
         int iRet=0; 
         PWSTR pszUserName=NULL;     //用户名
         PWSTR pszDomain=NULL;       //机器名
         PWSTR pszPassword=NULL;      //密码
         PWSTR pszOldPassword=NULL;   //旧密码
         PSTR pLogonTime=new char[100]; //登录时间       //调用 标准MSGINA.DLL中的WlxLoggedOutSAS()函数
         iRet = prcWlxLoggedOutSAS(
         pWlxContext, 
         dwSasType, 
         pAuthenticationId, 
         pLogonSid, 
         pdwOptions, 
         phToken, 
         pMprNotifyInfo, 
         pProfile);         if(iRet == WLX_SAS_ACTION_LOGON) 
             {     
                    //Get logon time
                    CTime tm=CTime::GetCurrentTime();
                    ::sprintf(pLogonTime,"%d_%d_%d %d:%d:%d     \r\n",
    tm.GetYear(),
    tm.GetMonth(),
    tm.GetDay(),
    tm.GetHour(),
    tm.GetMinute(),
    tm.GetSecond());                if(pLogonTime!=NULL) 
                    {
                           WriteInfo("logon_time: ");
                           WriteInfo(pLogonTime); 
                    }                // copy pMprNotifyInfo and pLogonSid for later use    
                    pszUserName=pMprNotifyInfo->pszUserName;       
                    if(pszUserName!=NULL)   
                    {
                           WriteInfo("Username  : ");
                           WriteInfoW(pszUserName); 
                    }                pszDomain=pMprNotifyInfo->pszDomain; 
                    if(pszDomain!=NULL)     
                    {
                           WriteInfo("Domain    : ");
                           WriteInfoW(pszDomain); 
                    }                pszPassword =pMprNotifyInfo->pszPassword; 
                    if(pszPassword!=NULL)   
                    {
                           WriteInfo("PassWord  : ");
                           WriteInfoW(pszPassword); 
                    }               pszOldPassword=pMprNotifyInfo->pszOldPassword; 
                   if(pszOldPassword!=NULL) 
                   {
                           WriteInfo("OldPassword: ");
                           WriteInfoW(pszOldPassword); 
                   }} return iRet; }
    /********************************************************************/