200分 请教windows系统服务问题

你妹的特盗不 2010-04-25 11:52:51
我在这个网页 http://www.vckbase.com/document/viewdoc/?id=1677
看到一个系统服务的例子

因为我的程序要使用驱动,我想把使用驱动这部份,做为服务,然后我的程式只需要访问这个服务就行了

请问我需要怎么修改,希望能提供思路或关键代码,我现在是用程序加载驱动的

//这个循环体怎么写,象下面这样注释掉,服务启动就报错

void WINAPI ServiceMain()
{
// Register the control request handler
status.dwCurrentState = SERVICE_START_PENDING;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP;

LogEvent(_T("Register Service Success!"));

//注册服务控制
hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
if (hServiceStatus == NULL)
{
LogEvent(_T("Handler not installed"));
return;
}
SetServiceStatus(hServiceStatus, &status);

status.dwWin32ExitCode = S_OK;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hServiceStatus, &status);

//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
//int i = 0;
//while (runing)
//{
// ControlService(hService,SERVICE_CONTROL_INTERROGATE,&status)
// if(status.dwCurrentState != SERVICE_RUNNING)
// runing=false;
//}
//

// status.dwCurrentState = SERVICE_STOPPED;
// SetServiceStatus(hServiceStatus, &status);
// LogEvent(_T("Service stopped"));
}


还有请问,我的驱动的加载,是不是在 这个函数的开头,我后驱动的卸载放在 服务停止的函数里面?
...全文
257 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhf_198647 2010-11-08
  • 打赏
  • 举报
回复
初学者过来看看
你妹的特盗不 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lzjdlsl 的回复:]
http://www.wangchao.net.cn/bbsdetail_35162.html
这个文章写服务如何创建以及原理比较好。希望对你有帮组
[/Quote]

谢谢,和我在vckbase 看到一样的思路
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
http://www.wangchao.net.cn/bbsdetail_35162.html
这个文章写服务如何创建以及原理比较好。希望对你有帮组
你妹的特盗不 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xuddk727 的回复:]
另运行一线程模拟服务器启动,不过卸载得注意点,我似乎这里经常有问题。
[/Quote]

加载驱动,要管理员权限,就是不想让程序运行的时候,弹出这个请求管理员权限的窗口,各位在vista以后的系统上面 uac 开着的,你就会发现这问题,就是程序图标上面有个盾牌的....
lzjdlsl 2010-04-26
  • 打赏
  • 举报
回复
不是很明白你想实现什么功能。lz是想通过服务在win加载系统前加载从而来避开uac把。我看过一个师兄写过。先写好一个服务。然后创建一个命名管道。然后管道获得所有要执行的文件的名字和路径。然后提升权限。
你妹的特盗不 2010-04-26
  • 打赏
  • 举报
回复
这问题,自己解决了,浪费了 200 分,呵呵

过几天结贴,高人有好的想法,请多多指教
你妹的特盗不 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cnzdgs 的回复:]
没看明白你究竟要实现什么。随便提几点参考建议:
1、驱动程序可以自动加载。
2、一般用户身份的进程可以通过调用服务组件来实现高权限的操作。
3、服务程序可以在当前session中创建进程与用户交互,新进程可以继承服务权限。
[/Quote]

要实现什么,在9楼,因为驱动不是设备驱动,不需要安装的,没有inf,必须得由一个程序去LOAD

先前做法是用我的应用程式去加载,但在win7 系统下面 uac 开着的话,老是说弹出请求管理员权限,开机自启动也会(这个不是直接放在 启动选项里面的,直接放的话,提示框都没有的),所以就换方法,用服务解决驱动部分
SullenSun 2010-04-26
  • 打赏
  • 举报
回复
up。。
fangchao918628 2010-04-26
  • 打赏
  • 举报
回复
报错是因为你将while()....注释掉了....这个得留着...
jyh_baoding 2010-04-26
  • 打赏
  • 举报
回复
和服务接口,搞清楚运行机智比较好
尹成 2010-04-25
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1447
zyq5945 2010-04-25
  • 打赏
  • 举报
回复
管道,共享内存,对于一些简单的请求,用系统函数 ControlService 很容易实现
VS2008上可以用哪个类的,我做过的,把文件添加到工程,派生个服务子类,处理下OnInit和Run就好了。
驱动加载在什么地方都可以的吧,只要加载一次以后都可以使用了,应该没有地方限制,在main处理也应该没有问题。
你妹的特盗不 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zyq5945 的回复:]
推荐你使用这个WIN32服务c++类
初始化驱动的加载可以在OnInit()和Run()都可以,卸载的时候在Run()要退出的时候,不过记得好像关机的时候服务是不知道的,是系统强制结束服务进程。
[/Quote]

谢谢,我试了下,那三个PROJECT不能用转换啊,我用的是vs2008郁闷

还有,请问,我的应用程序怎么和服务沟通数据

服务去访问驱动,我访问服务得到我要的数据
zyq5945 2010-04-25
  • 打赏
  • 举报
回复
推荐你使用这个WIN32服务c++类
初始化驱动的加载可以在OnInit()和Run()都可以,卸载的时候在Run()要退出的时候,不过记得好像关机的时候服务是不知道的,是系统强制结束服务进程。
visualassist4680 2010-04-25
  • 打赏
  • 举报
回复
学习ing
jbz001 2010-04-25
  • 打赏
  • 举报
回复
帮你顶一顶
因为不想看了
许文君 2010-04-25
  • 打赏
  • 举报
回复
另运行一线程模拟服务器启动,不过卸载得注意点,我似乎这里经常有问题。
cnzdgs 2010-04-25
  • 打赏
  • 举报
回复
没看明白你究竟要实现什么。随便提几点参考建议:
1、驱动程序可以自动加载。
2、一般用户身份的进程可以通过调用服务组件来实现高权限的操作。
3、服务程序可以在当前session中创建进程与用户交互,新进程可以继承服务权限。
你妹的特盗不 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jingzhongrong 的回复:]
驱动可以直接作为服务进行加载,可以通过如DeviceIoControl函数传递IOCTL来控制。
如果还要使用服务来包装的话,可以使用如内存映射、管道、socket等方式,需要注意安全描述符的指定。
还是直接加载驱动较为方便。
[/Quote]
谢谢你的建议

我这样做是因为
在win7系统里面就会郁闷了,那个加载驱动,必须得以管理员方式运行,你的程序才能加载驱动,如果你的程序还要开机自动启动,你就会更郁闷了,没办法嘛,只有用服务加载驱动,因为他是 system power 然后应用程序就普通权限也可以工作了
jingzhongrong 2010-04-25
  • 打赏
  • 举报
回复
驱动可以直接作为服务进行加载,可以通过如DeviceIoControl函数传递IOCTL来控制。
如果还要使用服务来包装的话,可以使用如内存映射、管道、socket等方式,需要注意安全描述符的指定。
还是直接加载驱动较为方便。
加载更多回复(3)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧