社区
进程/线程/DLL
帖子详情
在NT的service中调用其他进程
paradox
2000-03-07 07:39:00
在用 ATL 生成的 NT service中,调用其他进程(比如记事本),
进程虽然可以起来,但没有用户界面,不知什么原因?
...全文
94
1
打赏
收藏
在NT的service中调用其他进程
在用 ATL 生成的 NT service中,调用其他进程(比如记事本), 进程虽然可以起来,但没有用户界面,不知什么原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lu0
2000-03-07
打赏
举报
回复
当然没有用户界面.如果要用用户界面,通常需要
window station ("WinSta0")和desktop ("Default").这要求SERVICE运行于
LocalSystem帐号下.否则就不行.
当一个已经登录的用户需要和SERVICE交互时,用户进程可以通过传递自己的
STATION和DESKTOP给SERVICE.然后SERVICE将可以把该STATION和DESKTOP设置
为自己的用户界面.MS提供了如下例程:
DWORD dwGuiThreadId = 0;
int
UserMessageBox(
RPC_BINDING_HANDLE h,
LPSTR lpszWindowStation,
LPSTR lpszDesktop,
LPSTR lpszText,
LPSTR lpszTitle,
UINT fuStyle)
{
DWORD dwThreadId;
HWINSTA hwinstaSave;
HDESK hdeskSave;
HWINSTA hwinstaUser;
HDESK hdeskUser;
int result;
// Ensure connection to service window station and desktop, and
// save their handles.
GetDesktopWindow();
hwinstaSave = GetProcessWindowStation();
dwThreadId = GetCurrentThreadId();
hdeskSave = GetThreadDesktop(dwThreadId);
// Impersonate the client and connect to the User's
// window station and desktop.
RpcImpersonateClient(h);
hwinstaUser = OpenWindowStation(lpszWindowStation, FALSE, MAXIMUM_ALLOWED);
if (hwinstaUser == NULL)
{
RpcRevertToSelf();
return 0;
}
SetProcessWindowStation(hwinstaUser);
hdeskUser = OpenDesktop(lpszDesktop, 0, FALSE, MAXIMUM_ALLOWED);
RpcRevertToSelf();
if (hdeskUser == NULL)
{
SetProcessWindowStation(hwinstaSave);
CloseWindowStation(hwinstaUser);
return 0;
}
SetThreadDesktop(hdeskUser);
// Display message box.
dwGuiThreadId = dwThreadId;
result = MessageBox(NULL, lpszText, lpszTitle, fuStyle);
dwGuiThreadId = 0;
// Restore window station and desktop.
SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
CloseDesktop(hdeskUser);
CloseWindowStation(hwinstaUser);
return result;
}
(推荐)Win32 API大全
在附录部分,讲解如何在Visual Basic和Delphi
中
对其
调用
。 本书是从事Windows应用程序开发的软件工程师的必备参考手册。 控件与消息函数 共91个函数 硬件与系统函数 共98个函数 设备场景函数 共73个函数 ...
NT
Service
服务详解
NT
Service
服务详解 http://www.panshy.com/articles/dev-124.html I、 摘要 WIN
NT
下的服务就类似*NIX下面的守护
进程
一样,而且现在越来越多的软件开始设计成服务的形式,从XP推出之后,通过服务来实现多用户...
NT
服务启动Windows程序 --
NT
Service
然而,许多现存的ActiveX控件很难,有时候根本不可能在控制台程序
中
使用。另一方面,MFC和VB程序都是Windows应用程序,所以在MFC或VB程序
中
使用ActiveX控件相当简单。要是能使MFC和VB程序像
NT
服务一样运行就不错
NT
Service
编程 操作
NT
服务
操作
NT
服务: OpenSCManager 打开目标计算机上的“服务控制管理器”-SCM,返回指向该管理器的指针。 Open
Service
打开服务,返回指向该服务的指针。 Start
Service
传递一个字符串数组,并将其作为参数,...
NT
Service
的几个注意点和示例代码
如何编写
NT
Service
在MSDN->Platform SDK->DLLs, Processes, and Threads->
Service
中
说得很清楚了,在这里我就不多说了,这里我就只说一些我个人认为的在编写
service
过程
中
要注意的地方。 0、在我们通过控制面板或...
进程/线程/DLL
15,472
社区成员
49,183
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章