| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1992 人关注过本帖
标题:C++ 以服务形式加载驱动的问题!急切!!!
只看楼主 加入收藏
无名小卒也想飞
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-30
收藏
 问题点数:0 回复次数:2 
C++ 以服务形式加载驱动的问题!急切!!!
代码核心如下:

BOOL LoadDriver( IN LPCTSTR lpFileName )
{
    HANDLE hDevice=0;
    SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE );
    if ( NULL != hSCManager )
    {
        SC_HANDLE hService = CreateService( hSCManager, SERVICE_NAME,
            SERVICE_NAME, SERVICE_START,
            SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
            SERVICE_ERROR_IGNORE, lpFileName, NULL, NULL, NULL, NULL, NULL );
        
        if ( ERROR_SERVICE_EXISTS == GetLastError() )
        {
            hService = OpenService( hSCManager, SERVICE_NAME, SERVICE_START );
        }
        if(!StartService( hService, 0, NULL ))
        {
            cout<<"StartService Error!\n";
            return false;
        }
        CloseServiceHandle( hService );
        CloseServiceHandle( hSCManager );
        hDevice = CreateFileA( DEVICE_NAME,GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
    }
    if(hDevice)
    {
        cout<<"hDevice return true!\n";
        return true;
    }
    else
    {
        cout<<"Error: hDevice->false !\n";
        return false;
    }
}

BOOL UnloadDriver()
{
    SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE );
    if ( NULL != hSCManager )
    {
        SC_HANDLE hService = OpenService( hSCManager, SERVICE_NAME, DELETE | SERVICE_STOP );
        if ( NULL != hService )
        {
            SERVICE_STATUS ss;
            if(!ControlService( hService, SERVICE_CONTROL_STOP, &ss ))
                cout<<"ControlService - >失败!\n";
            else
                cout<<"ControlService ->成功!\n";
            CloseServiceHandle( hService );
        }
        else
            return false;
        CloseServiceHandle( hSCManager );
    }
    else
        return false;
    return true;
}

——————————————————————————————————

问题如下,程序开始运行,LoadDriver() -> 成功,然后UnloadDriver() -> 成功; 看似没问题了,但如果再LoadDriver(), 却失败!! 因为StartService()失败了!!!  ::如果关闭程序,再重新运行,LoadDriver() 又是成功的~~~~。 我不知道原因,也就不知道如何去解决了,请高人指点一下。

我的目标就是需要程序运行的时候反复地执行如下步骤都能成功:

LoadDriver()->UnloadDriver()->LoadDriver()->UnloadDriver()->LoadDriver()->UnloadDriver()->..............................

请高人指点一下。
搜索更多相关主题的帖子: SERVICE NULL 加载 HANDLE 形式 
2008-07-16 18:33
linren
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2005-12-11
收藏
得分:0 
会不会是因为没有
DeleteService(hService);

生活就是一个七日接着又一个七日
2008-07-16 22:24
无名小卒也想飞
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2008-6-30
收藏
得分:0 
不是因为DeleteService(hService); ,我曾试过DeleteService,问题一样是出现。还试过 CloseHandle(hDevice)了, 问题是一样没有解决。

在网上找了下,听说动态卸载驱动比较难(还是不能实现?),唉,对这方面不懂。

等待解决方法,我在网上搜都搜不到,只好来问了....
2008-07-16 23:02
快速回复:C++ 以服务形式加载驱动的问题!急切!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038009 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved