我在这个网页 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"));
}
还有请问,我的驱动的加载,是不是在 这个函数的开头,我后驱动的卸载放在 服务停止的函数里面?
看到一个系统服务的例子因为我的程序要使用驱动,我想把使用驱动这部份,做为服务,然后我的程式只需要访问这个服务就行了请问我需要怎么修改,希望能提供思路或关键代码,我现在是用程序加载驱动的//这个循环体怎么写,象下面这样注释掉,服务启动就报错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"));
}
还有请问,我的驱动的加载,是不是在 这个函数的开头,我后驱动的卸载放在 服务停止的函数里面?
初始化驱动的加载可以在OnInit()和Run()都可以,卸载的时候在Run()要退出的时候,不过记得好像关机的时候服务是不知道的,是系统强制结束服务进程。
谢谢,我试了下,那三个PROJECT不能用转换啊,我用的是vs2008郁闷还有,请问,我的应用程序怎么和服务沟通数据服务去访问驱动,我访问服务得到我要的数据
VS2008上可以用哪个类的,我做过的,把文件添加到工程,派生个服务子类,处理下OnInit和Run就好了。
驱动加载在什么地方都可以的吧,只要加载一次以后都可以使用了,应该没有地方限制,在main处理也应该没有问题。
在停止的时候,卸载我的驱动,服务里面debug能读出数据出来
如果还要使用服务来包装的话,可以使用如内存映射、管道、socket等方式,需要注意安全描述符的指定。
还是直接加载驱动较为方便。
在win7系统里面就会郁闷了,那个加载驱动,必须得以管理员方式运行,你的程序才能加载驱动,如果你的程序还要开机自动启动,你就会更郁闷了,没办法嘛,只有用服务加载驱动,因为他是 system power 然后应用程序就普通权限也可以工作了
1、驱动程序可以自动加载。
2、一般用户身份的进程可以通过调用服务组件来实现高权限的操作。
3、服务程序可以在当前session中创建进程与用户交互,新进程可以继承服务权限。
要实现什么,在9楼,因为驱动不是设备驱动,不需要安装的,没有inf,必须得由一个程序去LOAD先前做法是用我的应用程式去加载,但在win7 系统下面 uac 开着的话,老是说弹出请求管理员权限,开机自启动也会(这个不是直接放在 启动选项里面的,直接放的话,提示框都没有的),所以就换方法,用服务解决驱动部分
加载驱动,要管理员权限,就是不想让程序运行的时候,弹出这个请求管理员权限的窗口,各位在vista以后的系统上面 uac 开着的,你就会发现这问题,就是程序图标上面有个盾牌的....
这个文章写服务如何创建以及原理比较好。希望对你有帮组
谢谢,和我在vckbase 看到一样的思路