阅读:3504回复:4
StartService出错,新手,请大家指点一下
小弟刚刚接触WDM,拿书上的例子做实验,结果在启动服务时老是出错.用ddk制作的系统文件是ProcDrv.sys,win32应用程序部分代码如下:
#include<windows.h> #include<winioctl.h> #include<stdio.h> #include"ProcDrv.h" int main() { char szDriverPath[256]; char szLinkName[]="slNTProcDrv"; char *p; ::GetFullPathName("ProcDrv.sys",256,szDriverPath,&p); SC_HANDLE hSCM=::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if(hSCM==NULL) { printf("打开服务控制管理器失败,可能是因为没有Administrator权限\n"); return -1; } SC_HANDLE hService=::CreateService(hSCM,szLinkName,szLinkName,SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL, szDriverPath,NULL,0,NULL,NULL,NULL); if(hService==NULL) { int nError=::GetLastError(); if((nError==ERROR_SERVICE_EXISTS)||(nError=ERROR_SERVICE_MARKED_FOR_DELETE)) { hService=::OpenService(hSCM,szLinkName,SERVICE_ALL_ACCESS); } } if(hService==NULL) { printf("创建服务出错!\n"); return -1; } if(!::StartService(hService,0,NULL)) //调用DriverEntry { int nError=::GetLastError(); if(nError!=ERROR_SERVICE_ALREADY_RUNNING) { printf("启动服务出错!%d\n",nError); return -1; } } 运行结果提示:启动服务出错!123 我用winobj查看了一下,好象也没有找到对象名和连接名,返回的错误代码是123,Error Lookup中提示的是文件名、目录名或卷标语法不正确。 是不是需要对sys进行安装,还要修改注册表 刚刚学习WDM,请各位前辈指点一下 |
|
沙发#
发布于:2007-05-15 07:16
你的 .sys文件放在哪了?能保证windows 能找到吗?
|
|
|
板凳#
发布于:2007-05-16 23:27
谢谢楼上的,.sys的位置是没有问题的
错误已经解决,可能是因为我乱改注册表把系统给弄乱了 重装了系统之后又可以正常启动了 |
|
地板#
发布于:2011-02-16 15:54
我也遇到了这种问题 我是在安装了驱动之后 在启动的时候也是startservice报文件名目录名或卷标语法不正确 请问除了重装系统 还能有什么解决方案吗
|
|
地下室#
发布于:2011-02-20 22:18
最大的可能是驱动程序编译有问题 操作系统加载器未找到驱动入口 也就是DRIVERENTRY
如果你不是用WDK直接编译的! |
|