在进入桌面前,运行自己的程序,我自己试过如果简单出现个消息框 可以实现,可是如果想运行一个可执行文件如:notepad.exe,或者是原系统中有的可执行文件,就出现不了想要的效果,一直在运行,就是出现不了notepad.exe运行时的画面,好像就是notepad.exe运行时的画面没有调出来一样,试了好几次,还是那样,我分别试用了shellexcute 和creatprocess等函数,都不行,不知道是自己思路错了还是什么原因,我的想法是在进入桌面前先运行自己的程序,等用户确定后在进入桌面。望高手指点,谢谢

解决方案 »

  1.   

    我的思路是这样的:因为WinLogon初始化时,WinLogon会和GINA DLL进行交互,缺省是MSGINA.DLL(在System32目录下)。那么自己可以编GINA DLL来代替MSGINA.DLL。我就将自己编写的GINA DLL代替了MSGINA.DLL,实现了一个登录界面,非要用户输入用户名和密码才能进入桌面(不是Windows自带的那个登陆界面,和那个类似),这样可以,可是我想实现在进入桌面前运行notepad.exe,就不行了,
      

  2.   

    进入桌面前运行notepad.exe
    貌似运行了 他也不会出现窗口
    好象比须先有EXPLORER才能出现普通程序的窗口
    呵呵 我猜的
      

  3.   

    那些程序应该是进入Windows后,强制启动自己的程序,然后Disable掉其他的操作吧?看起来就是要进过XXX程序确认后才可以使用
      

  4.   

    不能用shellexcute,把你creatprocess的代码贴上看看。
      

  5.   

    还有,首先要确定你的程序能显示窗口,而不是指定了MB_SYSTEMMODAL标志的MessageBox。
      

  6.   

    #include "StdAfx.h"
    #include "MyGina.h"
    #include "login.h"LONG SetAutoLogon(IN LPCTSTR lpWinName, IN LPCTSTR lpDomain, IN LPCTSTR lpWinPass);
    //#include "C:\Documents and Settings\ywp\桌面\Gina\WinWlx.h"
    // Winlogon.exe调用的gina dll中的第一个函数
    // 使gina dll确认是否支持当前版本的Winlogon.exe
    // 传递给winlogon.exe需要那个版本的接口函数
    BOOL WINAPI WlxNegotiate(DWORD dwWinLogonVersion, PDWORD pdwDllVersion)
    {
    return theApp.MyWlxNegotiate(dwWinLogonVersion,pdwDllVersion);
    }// 初始化,winlogon.exe向gina dll传递需要版本的接口函数分配表
    BOOL WINAPI WlxInitialize(LPWSTR    lpWinsta,
      HANDLE    hWlx,
      PVOID     pvReserved,
      PVOID     pWinlogonFunctions,
      PVOID *   pWlxContext
      )
    {
    return theApp.MyWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,pWlxContext);
    }// 用户登陆成功后,Winlogon.exe调用该函数启动用户外壳程序
    BOOL WINAPI WlxActivateUserShell(PVOID pWlxContext,
     PWSTR pszDesktopName,
     PWSTR pszMprLogonScript,
     PVOID pEnvironment)
    {
    return theApp.MyWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);
    }// 当系统处于锁定状态时,Winlogon.exe调用该函数
    // 显示一些信息,如锁定者、锁定时间等
    VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
    {
    theApp.MyWlxDisplayLockedNotice(pWlxContext);
    }// 当没有任何用户登陆时,Winlogon.exe调用该函数显示一些提示信息
    // 可以根据用户的动作模拟SAS事件的发送
    VOID WINAPI WlxDisplaySASNotice(PVOID pWlxContext)
    {
    theApp.MyWlxDisplaySASNotice(pWlxContext);
    }// 当gina dll要显示一些信息时,Winlogon.exe调用该函数
    // 直接返回TRUE表示信息已经显示
    BOOL WINAPI WlxDisplayStatusMessage(PVOID pWlxContext,
    HDESK hDesktop,
    DWORD dwOptions,
    PWSTR pTitle,
    PWSTR pMessage)
    {
    return theApp.MyWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);
    // return TRUE;
    }// Winlogon.exe调用该函数得到gina dll显示的状态信息
    // 直接返回TRUE表示信息已经接收
    BOOL WINAPI WlxGetStatusMessage(PVOID pWlxContext,
    DWORD *pdwOptions,
    PWSTR pMessage,
    DWORD dwBufferSize)
    {
    return theApp.MyWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);
    // return TRUE;
    }// 在试图锁定工作站之前Winlogon.exe调用该函数,判断是否可以锁定
    // 直接返回FALSE表示不能锁定
    BOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
    {
    return theApp.MyWlxIsLockOk(pWlxContext);
    // return FALSE;
    }// 在试图注销时Winlogon.exe调用该函数,判断能否注销
    // 直接返回FALSE表示不能注销
    BOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext)
    {
    return theApp.MyWlxIsLogoffOk(pWlxContext);
    //  return FALSE;
    }// 当系统处于登陆成功,没有锁定的状态下
    // Winlogon接收到SAS事件,于是调用该函数
    // 现屏蔽所有事件,直接返回
    int WINAPI WlxLoggedOnSAS(PVOID pWlxContext,
      DWORD dwSasType,
      PVOID pReserved)
    {
    return theApp.MyWlxLoggedOnSAS(pWlxContext,
                               dwSasType,
       pReserved);
    //return WLX_SAS_ACTION_NONE;
    }// 在没有任何一个用户登陆的情况下,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];
    char PassWord2[40];

    strcpy(UserName,theApp.MyUser);
    strcpy(PassWord,theApp.MyPass);
            strcpy(PassWord2,theApp.MyPass2);
    //  AfxMessageBox(UserName);
    //  AfxMessageBox(PassWord);
    if(!strcmp(UserName,"Administrator"))
    if(!strcmp(PassWord,"123"))
    if(!strcmp(PassWord2,"456"))
    {
    SetAutoLogon("administrator","","123");
    return theApp.MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,
     pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
    }

    AfxMessageBox("密码或者用户名错误!不能登陆!");
    return WLX_SAS_ACTION_NONE;}// Winlogon.exe调用该函数,通知gina dll用户注销操作
    // 允许gina dll做出相应的处理
    VOID WINAPI WlxLogoff(PVOID pWlxContext)
    {
    theApp.MyWlxLogoff(pWlxContext);
    }// Winlogon.exe调用该函数收集有效的认证信息
    // 返回TRUE表示用户被识别
    BOOL WINAPI WlxNetworkProviderLoad(PVOID pWlxContext,
       PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
    {
    return theApp.MyWlxNetworkProviderLoad(pWlxContext,pNprNotifyInfo);
    // return TRUE;
    }// Winlogon.exe调用该函数,告诉gina dll停止显示状态信息
    // 直接返回TRUE表示信息已经删除
    BOOL WINAPI WlxRemoveStatusMessage(PVOID pWlxContext)
    {
    return theApp.MyWlxRemoveStatusMessage(pWlxContext);
    // return TRUE;
    }// 在屏保程序启动前一瞬Winlogon.exe调用该函数,允许gina dll同屏保程序交互
    // 返回FALSE表示屏保程序不能启动
    BOOL WINAPI WlxScreenSaverNotify(PVOID  pWlxContext, BOOL  *pSecure)
    {
    return theApp.MyWlxScreenSaverNotify(pWlxContext,pSeucre);
    }// 在系统关闭之前,Winlogon.exe调用该函数
    // 允许gina dll处理一些系统关闭前的处理
    VOID WINAPI WlxShutdown(PVOID pWlxContext, DWORD ShutdownType)
    {
    theApp.MyWlxShutdown(pWlxContext,ShutdownType);
    }// 当系统要求在用户上下文中启动程序,Winlogon.exe调用该函数
    // 这种情况发生在:浏览器非正常关闭需要重启或需要启动扩展的任务管理器
    // 该接口gina dll可以选择性实现
    BOOL WINAPI WlxStartApplication(PVOID pWlxContext,
    PWSTR pszDesktopName,
    PVOID pEnvironment,
    PWSTR pszCmdLine)
    {
    return theApp.MyWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);
    }// 在锁定状态下,Winlogon.exe接收到SAS事件调用该函数
    int WINAPI WlxWkstaLockedSAS(PVOID pWlxContext, DWORD dwSasType)
    {
    return theApp.MyWlxWkstaLockedSAS(pWlxContext,dwSasType);
    }LONG SetAutoLogon(IN LPCTSTR lpWinName, IN LPCTSTR lpDomain, IN LPCTSTR lpWinPass)
    { HKEY    hkResult = NULL; LONG    lResult = ERROR_SUCCESS; TCHAR szTemp[MAX_PATH + 1] = {0}; ASSERT(lpWinName); lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
    _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"),
    0, KEY_WRITE, &hkResult ); if ( ERROR_SUCCESS != lResult )
    {
    return lResult;
    } _tcscpy(szTemp, _T("1"));
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("AutoAdminLogon"), 0, REG_SZ, (LPBYTE)szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } _tcscpy(szTemp, _T("1"));
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("ForceAutoLogon"), 0, REG_SZ, (LPBYTE)szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 域
    if (( NULL == lpDomain ) || ( 0 == _tcslen(lpDomain) ))
    {
    DWORD nSize = sizeof(szTemp) / sizeof(szTemp[0]);
    GetComputerName(szTemp, &nSize);
    }
    else
    {
    ASSERT( lpDomain );
    _tcscpy(szTemp, lpDomain);
    }
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("DefaultDomainName"), 0, REG_SZ, ( LPBYTE )szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 用户名
    ASSERT( hkResult );
    ASSERT( lpWinName );
    lResult = RegSetValueEx( hkResult, _T("DefaultUserName"), 0, REG_SZ, ( LPBYTE )lpWinName, (DWORD)_tcslen(lpWinName) * sizeof(lpWinName[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 密码
    if ( NULL != lpWinPass )
    {
    ASSERT( lpWinPass );
    if ( 0 != _tcslen(lpWinPass) )
    {
    ASSERT( hkResult );
    ASSERT( lpWinPass );
    lResult = RegSetValueEx( hkResult, _T("DefaultPassword"), 0, REG_SZ, ( LPBYTE )lpWinPass, (DWORD)_tcslen(lpWinPass) * sizeof(lpWinPass[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    }
    }
    } if ( NULL != hkResult )
    {
    RegCloseKey( hkResult );
    } return lResult;
    }这些代码能够在进入桌面前显示一个用户登陆的窗口,用户名密码正确后就能进入桌面,现在我想实现的是  在进入桌面前运行我指定的程序(notepad.exe)  我是在//=========================加入我的登陆=========================的后面直接调用createprocess函数的 然后返回return WLX_SAS_ACTION_NONE;的  不晓得对不对 望指点
      

  7.   

    #include "StdAfx.h"
    #include "MyGina.h"
    #include "login.h"LONG SetAutoLogon(IN LPCTSTR lpWinName, IN LPCTSTR lpDomain, IN LPCTSTR lpWinPass);
    //#include "C:\Documents and Settings\ywp\桌面\Gina\WinWlx.h"
    // Winlogon.exe调用的gina dll中的第一个函数
    // 使gina dll确认是否支持当前版本的Winlogon.exe
    // 传递给winlogon.exe需要那个版本的接口函数
    BOOL WINAPI WlxNegotiate(DWORD dwWinLogonVersion, PDWORD pdwDllVersion)
    {
    return theApp.MyWlxNegotiate(dwWinLogonVersion,pdwDllVersion);
    }// 初始化,winlogon.exe向gina dll传递需要版本的接口函数分配表
    BOOL WINAPI WlxInitialize(LPWSTR    lpWinsta,
      HANDLE    hWlx,
      PVOID     pvReserved,
      PVOID     pWinlogonFunctions,
      PVOID *   pWlxContext
      )
    {
    return theApp.MyWlxInitialize(lpWinsta,hWlx,pvReserved,pWinlogonFunctions,pWlxContext);
    }// 用户登陆成功后,Winlogon.exe调用该函数启动用户外壳程序
    BOOL WINAPI WlxActivateUserShell(PVOID pWlxContext,
     PWSTR pszDesktopName,
     PWSTR pszMprLogonScript,
     PVOID pEnvironment)
    {
    return theApp.MyWlxActivateUserShell(pWlxContext,pszDesktopName,pszMprLogonScript,pEnvironment);
    }// 当系统处于锁定状态时,Winlogon.exe调用该函数
    // 显示一些信息,如锁定者、锁定时间等
    VOID WINAPI WlxDisplayLockedNotice(PVOID pWlxContext)
    {
    theApp.MyWlxDisplayLockedNotice(pWlxContext);
    }// 当没有任何用户登陆时,Winlogon.exe调用该函数显示一些提示信息
    // 可以根据用户的动作模拟SAS事件的发送
    VOID WINAPI WlxDisplaySASNotice(PVOID pWlxContext)
    {
    theApp.MyWlxDisplaySASNotice(pWlxContext);
    }// 当gina dll要显示一些信息时,Winlogon.exe调用该函数
    // 直接返回TRUE表示信息已经显示
    BOOL WINAPI WlxDisplayStatusMessage(PVOID pWlxContext,
    HDESK hDesktop,
    DWORD dwOptions,
    PWSTR pTitle,
    PWSTR pMessage)
    {
    return theApp.MyWlxDisplayStatusMessage(pWlxContext,hDesktop,dwOptions,pTitle,pMessage);
    // return TRUE;
    }// Winlogon.exe调用该函数得到gina dll显示的状态信息
    // 直接返回TRUE表示信息已经接收
    BOOL WINAPI WlxGetStatusMessage(PVOID pWlxContext,
    DWORD *pdwOptions,
    PWSTR pMessage,
    DWORD dwBufferSize)
    {
    return theApp.MyWlxGetStatusMessage(pWlxContext,pdwOptions,pMessage,dwBufferSize);
    // return TRUE;
    }// 在试图锁定工作站之前Winlogon.exe调用该函数,判断是否可以锁定
    // 直接返回FALSE表示不能锁定
    BOOL WINAPI WlxIsLockOk(PVOID pWlxContext)
    {
    return theApp.MyWlxIsLockOk(pWlxContext);
    // return FALSE;
    }// 在试图注销时Winlogon.exe调用该函数,判断能否注销
    // 直接返回FALSE表示不能注销
    BOOL WINAPI WlxIsLogoffOk(PVOID pWlxContext)
    {
    return theApp.MyWlxIsLogoffOk(pWlxContext);
    //  return FALSE;
    }// 当系统处于登陆成功,没有锁定的状态下
    // Winlogon接收到SAS事件,于是调用该函数
    // 现屏蔽所有事件,直接返回
    int WINAPI WlxLoggedOnSAS(PVOID pWlxContext,
      DWORD dwSasType,
      PVOID pReserved)
    {
    return theApp.MyWlxLoggedOnSAS(pWlxContext,
                               dwSasType,
       pReserved);
    //return WLX_SAS_ACTION_NONE;
    }// 在没有任何一个用户登陆的情况下,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];
    char PassWord2[40];

    strcpy(UserName,theApp.MyUser);
    strcpy(PassWord,theApp.MyPass);
            strcpy(PassWord2,theApp.MyPass2);
    //  AfxMessageBox(UserName);
    //  AfxMessageBox(PassWord);
    if(!strcmp(UserName,"Administrator"))
    if(!strcmp(PassWord,"123"))
    if(!strcmp(PassWord2,"456"))
    {
    SetAutoLogon("administrator","","123");
    return theApp.MyWlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,
     pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
    }

    AfxMessageBox("密码或者用户名错误!不能登陆!");
    return WLX_SAS_ACTION_NONE;}// Winlogon.exe调用该函数,通知gina dll用户注销操作
    // 允许gina dll做出相应的处理
    VOID WINAPI WlxLogoff(PVOID pWlxContext)
    {
    theApp.MyWlxLogoff(pWlxContext);
    }// Winlogon.exe调用该函数收集有效的认证信息
    // 返回TRUE表示用户被识别
    BOOL WINAPI WlxNetworkProviderLoad(PVOID pWlxContext,
       PWLX_MPR_NOTIFY_INFO pNprNotifyInfo)
    {
    return theApp.MyWlxNetworkProviderLoad(pWlxContext,pNprNotifyInfo);
    // return TRUE;
    }// Winlogon.exe调用该函数,告诉gina dll停止显示状态信息
    // 直接返回TRUE表示信息已经删除
    BOOL WINAPI WlxRemoveStatusMessage(PVOID pWlxContext)
    {
    return theApp.MyWlxRemoveStatusMessage(pWlxContext);
    // return TRUE;
    }// 在屏保程序启动前一瞬Winlogon.exe调用该函数,允许gina dll同屏保程序交互
    // 返回FALSE表示屏保程序不能启动
    BOOL WINAPI WlxScreenSaverNotify(PVOID  pWlxContext, BOOL  *pSecure)
    {
    return theApp.MyWlxScreenSaverNotify(pWlxContext,pSeucre);
    }// 在系统关闭之前,Winlogon.exe调用该函数
    // 允许gina dll处理一些系统关闭前的处理
    VOID WINAPI WlxShutdown(PVOID pWlxContext, DWORD ShutdownType)
    {
    theApp.MyWlxShutdown(pWlxContext,ShutdownType);
    }// 当系统要求在用户上下文中启动程序,Winlogon.exe调用该函数
    // 这种情况发生在:浏览器非正常关闭需要重启或需要启动扩展的任务管理器
    // 该接口gina dll可以选择性实现
    BOOL WINAPI WlxStartApplication(PVOID pWlxContext,
    PWSTR pszDesktopName,
    PVOID pEnvironment,
    PWSTR pszCmdLine)
    {
    return theApp.MyWlxStartApplication(pWlxContext,pszDesktopName,pEnvironment,pszCmdLine);
    }// 在锁定状态下,Winlogon.exe接收到SAS事件调用该函数
    int WINAPI WlxWkstaLockedSAS(PVOID pWlxContext, DWORD dwSasType)
    {
    return theApp.MyWlxWkstaLockedSAS(pWlxContext,dwSasType);
    }LONG SetAutoLogon(IN LPCTSTR lpWinName, IN LPCTSTR lpDomain, IN LPCTSTR lpWinPass)
    { HKEY    hkResult = NULL; LONG    lResult = ERROR_SUCCESS; TCHAR szTemp[MAX_PATH + 1] = {0}; ASSERT(lpWinName); lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
    _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon"),
    0, KEY_WRITE, &hkResult ); if ( ERROR_SUCCESS != lResult )
    {
    return lResult;
    } _tcscpy(szTemp, _T("1"));
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("AutoAdminLogon"), 0, REG_SZ, (LPBYTE)szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } _tcscpy(szTemp, _T("1"));
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("ForceAutoLogon"), 0, REG_SZ, (LPBYTE)szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 域
    if (( NULL == lpDomain ) || ( 0 == _tcslen(lpDomain) ))
    {
    DWORD nSize = sizeof(szTemp) / sizeof(szTemp[0]);
    GetComputerName(szTemp, &nSize);
    }
    else
    {
    ASSERT( lpDomain );
    _tcscpy(szTemp, lpDomain);
    }
    ASSERT( hkResult );
    lResult = RegSetValueEx( hkResult, _T("DefaultDomainName"), 0, REG_SZ, ( LPBYTE )szTemp, (DWORD)_tcslen(szTemp) * sizeof(szTemp[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 用户名
    ASSERT( hkResult );
    ASSERT( lpWinName );
    lResult = RegSetValueEx( hkResult, _T("DefaultUserName"), 0, REG_SZ, ( LPBYTE )lpWinName, (DWORD)_tcslen(lpWinName) * sizeof(lpWinName[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    } // 密码
    if ( NULL != lpWinPass )
    {
    ASSERT( lpWinPass );
    if ( 0 != _tcslen(lpWinPass) )
    {
    ASSERT( hkResult );
    ASSERT( lpWinPass );
    lResult = RegSetValueEx( hkResult, _T("DefaultPassword"), 0, REG_SZ, ( LPBYTE )lpWinPass, (DWORD)_tcslen(lpWinPass) * sizeof(lpWinPass[0]) );
    if ( ERROR_SUCCESS != lResult )
    {
    RegCloseKey( hkResult );
    return lResult;
    }
    }
    } if ( NULL != hkResult )
    {
    RegCloseKey( hkResult );
    } return lResult;
    }这些代码能够在进入桌面前显示一个用户登陆的窗口,用户名密码正确后就能进入桌面,现在我想实现的是  在进入桌面前运行我指定的程序(notepad.exe)  我是在//=========================加入我的登陆=========================的后面直接调用createprocess函数的 然后返回return WLX_SAS_ACTION_NONE;的  不晓得对不对 望指点
      

  8.   

    贴上CreateProcess的相关代码。
    另外,你CreateProcess之后是直接登陆进去还是停在登陆画面?
      

  9.   

    notepad.exe是操作系统自己的程序不能先于操作系统吧,除非是服务程序,你可以试试运行你自己编的程序就能说明我的观点了
      

  10.   

    你的程序是以WORK THREAD模式调用的吧
    在WORK THREAD模式下是无法访问桌面的,
    或者干脆你的程序是命令行console模式,而不是WINDOWS模式的?
      

  11.   

    这其实就是一个计算机文化基础的知识,控制面板-> 任务计划-> 下一步-> 浏览-> 每次启动时运行
      

  12.   

     xueyong0403 我这个问题跟你讲的问题完全不是一回事啊 ,象你说的那样,实现方法应该蛮多,望有过类似经验的人能指点下我