Windows Notify Package想必有人用过,但是我现在遇见了一个问题。
我自己写了一个dll,挂接进去,而且exe也被成功执行起来了,可是却看不到exe的UI我尝试适用了FindWindow去查找窗口,但是没找到。
启动exe我尝试适用了ShellExecute和CreateProcess,执行成功,返回值都表示exe已经被呼叫起来,但是就是看不到GUI。有什么办法能把呼叫起来的exe显示出来,而且要置顶呢?
我自己写了一个dll,挂接进去,而且exe也被成功执行起来了,可是却看不到exe的UI我尝试适用了FindWindow去查找窗口,但是没找到。
启动exe我尝试适用了ShellExecute和CreateProcess,执行成功,返回值都表示exe已经被呼叫起来,但是就是看不到GUI。有什么办法能把呼叫起来的exe显示出来,而且要置顶呢?
解决方案 »
- 自己做个基于dialog登陆窗口,如何向域服务器去验证密码?
- 如何实现类似于CS中的控制台程序
- 关于WaitForMultipleObjects返回值得问题
- windows操作系统/我的文档/My Pictures里的图片预览功能,谁知道怎吗做的?
- 这是什么错误,太奇怪了???????,说找不到什么预编译的指导语句
- 请问如何根据一个数据库表创建另外一个数据库表
- 关于一个简单的聊天程序在WIN2000中的问题
- 请高手指点,在线等
- how to make a childframe or mainframe produce a scroll bar?
- 计算机专业的要不要考个计算机三级或者四级证书充充胖子呢???
- SUM的用法难道有错吗? 在线等 SELECT SUM(分数) FROM 测试表
- 如何用DrawFrameControl绘制 滚动条
获得explorer.exe的session,然后使用CreateProcessAsUser模拟当前用户启动exe,从而显示UI
再CreateProcess中指定为default desktop,创建到默认的桌面上。早在05年就利用Windows Notify Package来写木马了。。~~当时我就是用上述的方法进行GUI进程创建的。
PROCESS_INFORMATION pi = {0};
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpTitle = NULL;
si.lpDesktop = _T("WinSta0\\Default");
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.dwFlags = 0;;
si.wShowWindow = SW_SHOW;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
BOOL b = CreateProcess(NULL, _T("F:\\wtl_test_dlg1.exe"), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);我是用这种办法来创建Process的,可是会出现winlogo.exe挂掉的情况~
而且好像界面也没显示出来,晕哪儿写错了
但是我若输入密码登录进去,就发现exe已经被执行起来了,
下面是代码
我做了稍微的修改,但是和sample基本就一模一样
BOOL GetTokenByName(HANDLE* phToken,TCHAR* pszName)
{
if((phToken == NULL) || (pszName == NULL))
{
return FALSE;
} HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE); pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32))
{
do
{
if(!::_tcscmp(::_tcsupr(pe32.szExeFile), ::_tcsupr(pszName)))
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE,pe32.th32ProcessID);
bRet = OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,phToken);
CloseHandle (hProcessSnap);
return (bRet);
}
}while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; CloseHandle (hProcessSnap);
return (bRet);
}HANDLE hToken = NULL;
if(GetTokenByName(&hToken, _T("EXPLORER.EXE")) == FALSE)
{
return;
}
PROCESS_INFORMATION pi = {0};
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpTitle = NULL;
si.lpDesktop = _T("WinSta0\\Default");
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.dwFlags = 0;;
si.wShowWindow = SW_SHOW;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
//BOOL b = CreateProcess(NULL, _T("F:\\wtl_test_dlg1.exe"), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
BOOL b = ::CreateProcessAsUser(hToken,
_T("F:\\wtl_test_dlg1.exe"),
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);
if(b)
{
LOGGER_DEBUG(pLogger, _T("Dll module - EventHandler_Lock - CreateProcess\r\n"));
}
else
{
LOGGER_DEBUG(pLogger, _T("Dll module - EventHandler_Lock - CreateProcess failed.\r\n"));
}
if(hToken)
::CloseHandle(hToken);
log显示CreaetProcessAsUser是调用成功的~
汗。好orz的问题,真要吐血身亡了~
GetTokenByName和CreateProcessAsUser都被成功调用了~
就是运行起来的exe的窗口不能显示,一定要登录进去才行~
当我登录到XP,或者按Win+L锁定的时候,这个exe要被运行起来,而且界面一定要显示在logon的那个界面上,也就是说,当看到logon界面的时候,我的exe界面也要能看到,而且要置顶。至于登录进去之后能不能看到我的那个exe程序的UI不管。那现在我的问题是,我能把exe运行起来,但是却看不到界面,而且我使用FindWindow都找不到,exe里面去SetWindowPos也不行。就这样~
我看了一下网上很多例子都是会说用这个
可是exe是跑起来了,但是就是看不到UIorz
晕不会要自己写gina.dll来替换才能实现这个功能吧~这会儿要郁闷了,写gina.dll超级恶心麻烦
2位兄弟啊,有没有简单点的办法啊~
郁闷的一天,又是一个无解的问题orz