3066|2

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

安装驱动程序 [复制链接]

我写了一个驱动程序,在使用的时候用以下代码:
SC_HANDLE hServiceMgr, hServiceTwdm;
       
        BOOL bRtn;
        DWORD dwRtn, dwSize = 256;
        char szDir[256];
       
        GetCurrentDirectory( dwSize, szDir );//取当前目录
        strcat(szDir, "\\HelloWord.sys" ); //取驱动程序的全路径

       LPCTSTR lpszBinaryPathName = TEXT(szDir);


        hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS ); //打开服务控制管理器
        if (NULL == hServiceMgr)
                return 0;
        hServiceTwdm = CreateService(hServiceMgr,
                TEXT("Hello"),
                TEXT("Helloword"),       // 注册表驱动程序的 DisplayName 值
                SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限
                SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序
                SERVICE_DEMAND_START, // 注册表驱动程序的 Start 值
                SERVICE_ERROR_IGNORE, // 注册表驱动程序的 ErrorControl 值
                lpszBinaryPathName, // 注册表驱动程序的 ImagePath 值
                NULL,
                NULL,
                NULL,
                NULL,
                NULL);
        if (NULL == hServiceTwdm)
        {
               
                dwRtn = GetLastError();
                if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS )
                {
                        CloseServiceHandle( hServiceMgr );
                        printf( "CrateService() Faild %d ! \n", dwRtn );
                        return 0;
                }
        }

        hServiceTwdm = OpenService(hServiceMgr, TEXT("FirstMyDriver"), SERVICE_ALL_ACCESS);

        if (NULL == hServiceTwdm)
        {
                CloseServiceHandle( hServiceMgr );
                return 0;
        }
        BOOL bRet = StartService(hServiceTwdm, NULL, NULL );
        if( !bRtn )
        {
                dwRtn = GetLastError();
                if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING )
                {
                        printf( "StartService() Faild %d ! \n", dwRtn );
                        CloseServiceHandle( hServiceTwdm );
                        CloseServiceHandle( hServiceMgr );
                        return 0;
                }
                else
                {
                        if( dwRtn != ERROR_IO_PENDING )
                        {
                                printf( "StartService() Faild ERROR_IO_PENDING ! \n");
                        }
                        else
                        {
                                printf( "StartService() Faild ERROR_SERVICE_ALREADY_RUNNING ! \n");
                        }
                }
        }

当执行StartService的时候,电脑出现蓝屏,后来电脑就没有反应了,像是死机,可是电源灯是亮的,请各位高手帮我一下,我使用操作系统是XP,+ DDK200

最新回复

这个肯定是驱动程序的问题,照楼主以上的做,进行源码调试吧  详情 回复 发表于 2007-9-27 14:40
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
应该是你的驱动有问题:检查一下你驱动的DriverEntry函数,或者用windbg查看蓝屏文件。
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个肯定是驱动程序的问题,照楼主以上的做,进行源码调试吧
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表