首页
社区
课程
招聘
[求助]当我强制结束另外一个Desktop下的explorer进程时弹出“我的文档”窗口
发表于: 2013-8-1 11:40 6510

[求助]当我强制结束另外一个Desktop下的explorer进程时弹出“我的文档”窗口

2013-8-1 11:40
6510
最近在做一个安全桌面相关的东西,碰到一个问题,几天都没解决,所以来这寻求帮助。
大概流程这样:
(1)
程序主线程运行在默认桌面下。
(2)
新起的线程里(暂且叫安全线程)通过CreateDesktop创建另外一个Desktop对象。
但后通过SetThreadDesktop设置新的线程绑定新建的桌面。
然后在线程里创建Explorer.exe进程。(让新建的Desktop出现任务栏以及桌面图标)
到此一切正常
(3)
最后,当程序退出,先退出安全线程,再退出主线程。
在退出安全线程的过程中,通过TerminateProcess强制结束新建的explorer进程。
发现在结束之后,立马会弹出"我的文档"窗口,而发现这个窗口是原来的桌面下的explorer进程弹出的。

同时,在自己分析的过程中也发现,如果一个桌面已经有explorer进程,再试图从命令行等方式运行explorer的时候,就会弹出“我的文档”窗口,但是我不清楚,这个和刚才的问题,有什么联系。

注意,我是在新的线程里CreateProcess的方式来起的新的explorer.exe进程(和新的桌面绑定),这和CreateProcess API中的STARTUPINFO配置参数有关系么,或者是否对原来桌面下的explorer线程也有影响?

请大家帮我分析分析。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 11
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你是不是应该模拟登录一下 桌面不是你创建explorer.exe进程出来的  它会自己创建 具体参考前不久那个泄漏的俄罗斯木马的代码  里面的 VNC 就是运行在另外一个桌面下。。。
2013-8-1 12:14
0
雪    币: 22
活跃值: (458)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
俄罗斯的~~~~
2013-8-1 12:19
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
TerminateProcess的参数填1试试
2013-8-1 12:48
0
雪    币: 29262
活跃值: (7789)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
5
http://bbs.pediy.com/showthread.php?t=131275

mark.
gina\winlogon\sas.c

LRESULT SASWndProc(
    HWND hwnd,
    UINT message,
    WPARAM wParam,
    LPARAM lParam)
{
    //...

    switch (message)
    {
	//...
        case WM_LOGONNOTIFY: // A private notification from Windows

            DebugLog((DEB_TRACE_SAS, "LOGONNOTIFY message %d\n", wParam ));

            switch (wParam)
            {
		//...
                case LOGON_RESTARTSHELL:
                    //
                    // Restart the shell after X seconds
                    //
                    // We don't restart the shell for the following conditions:
                    //
                    // 1) No one is logged on
                    // 2) We are in the process of logging off
                    //    (logoffflags will be non-zero)
                    // 3) The shell exiting gracefully
                    //    (Exit status is in lParam.  1 = graceful)
                    // 4) A new user has logged on after the request
                    //    to restart the shell.
                    //    (in the case of autoadminlogon, the new
                    //     user could be logged on before the restart
                    //     request comes through).
                    //

                    if (!pTerm->UserLoggedOn  ||
                        pTerm->LogoffFlags    ||
                        (lParam == 1)            ||
                        (pTerm->TickCount > (DWORD)GetMessageTime())) {

                        break;
                    }

                    SetTimer (hwnd, SHELL_RESTART_TIMER_ID, 2000, NULL);
                    break;

 		//...
            }

            return(0);

	//...
        case WM_TIMER:
            {
            LONG lResult;
            HKEY hKey;
            BOOL bRestart = TRUE;
            DWORD dwType, dwSize;


            //
            //  Restart the shell
            //

            if (wParam != SHELL_RESTART_TIMER_ID) {
                break;
            }

            KillTimer (hwnd, SHELL_RESTART_TIMER_ID);


            //
            // Check if we should restart the shell
            //

            lResult = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
                                    WINLOGON_KEY,
                                    0,
                                    KEY_READ,
                                    &hKey);

            if (lResult == ERROR_SUCCESS) {

                dwSize = sizeof(bRestart);
                RegQueryValueEx (hKey,
                                 TEXT("AutoRestartShell"),
                                 NULL,
                                 &dwType,
                                 (LPBYTE) &bRestart,
                                 &dwSize);

                RegCloseKey (hKey);
            }

            if (!pTerm->UserLoggedOn) {
                bRestart = FALSE;
            }

            if (bRestart) {
                PWCH  pchData;
                PWSTR pszTok;

                DebugLog((DEB_TRACE, "Restarting user's shell.\n"));


                pchData = AllocAndGetPrivateProfileString(APPLICATION_NAME,
                                                          SHELL_KEY,
                                                          TEXT("explorer.exe"),
                                                          NULL);

                if (!pchData) {
                    break;
                }

                wsprintfW (szDesktop, L"%s\\%s", pTerm->pWinStaWinlogon->lpWinstaName,
                           APPLICATION_DESKTOP_NAME);


                pszTok = wcstok(pchData, TEXT(","));
                while (pszTok)
                {
                    if (*pszTok == TEXT(' '))
                    {
                        while (*pszTok++ == TEXT(' '))
                            ;
                    }


                    if (StartApplication(pTerm,
                                    szDesktop,
                                    pTerm->pWinStaWinlogon->UserProcessData.pEnvironment,
                                    pszTok)) {

                        ReportWinlogonEvent(pTerm,
                                EVENTLOG_INFORMATION_TYPE,
                                EVENT_SHELL_RESTARTED,
                                0,
                                NULL,
                                1,
                                pszTok);
                    }

                    pszTok = wcstok(NULL, TEXT(","));
                }

                Free(pchData);
            }

            }
            break;

        default:
            return DefWindowProc(hwnd, message, wParam, lParam);

    }

    return 0L;
}
2013-8-1 13:28
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
soh
6
用1确实可以,谢谢你。
2013-8-1 13:57
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
soh
7
谢谢回复的每一个id,真心感谢。
2013-8-1 14:00
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
soh
8
谢谢你,这个连接非常有用,再次谢谢。
2013-8-1 14:01
0
游客
登录 | 注册 方可回帖
返回
//