zzluck
驱动牛犊
驱动牛犊
  • 注册日期2007-07-11
  • 最后登录2011-05-18
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望147点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
阅读:1524回复:3

求助:如何在VC中实现对设备的启动和停止,Windows提供那些API。谢谢

楼主#
更多 发布于:2007-08-31 10:56
 
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-08-31 21:24
/*
*    开始驱动服务
*/
BOOL StartSvr(const char * szSvrName)
{
    SC_HANDLE m_sManager;
    SC_HANDLE m_sService;
    CHAR DriverName[256];
    
    GetCurrentDirectory(sizeof(DriverName), DriverName);        //取当前目录
    strcat(DriverName, "\\test.sys");                            //取驱动程序的全路径
    printf("%s\n", DriverName);
    
    m_sManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if (!m_sManager)
    {
        printf("OpenSCManager Failed!\n");
        return FALSE;
    }
    m_sService = CreateService(
        m_sManager,
        szSvrName,
        szSvrName,
        SERVICE_ALL_ACCESS,
        SERVICE_KERNEL_DRIVER,
        SERVICE_AUTO_START,
        SERVICE_ERROR_NORMAL,
        DriverName,
        NULL, NULL, NULL, NULL, NULL);

    if ((ERROR_SERVICE_EXISTS != GetLastError()) &&
        (NULL == m_sService))
    {
        printf("CreateService Failed!\n");
        CloseServiceHandle(m_sService);
        CloseServiceHandle(m_sManager);
        return FALSE;
    }
    m_sService = OpenService(m_sManager, szSvrName, SERVICE_ALL_ACCESS);  
    if (NULL == m_sService)
    {
        printf("OpenService Failed!\n");
        CloseServiceHandle(m_sService);
        CloseServiceHandle(m_sManager);
        return FALSE;
    }
    //Ready For Start Service
    if (!StartService(m_sService, 0, NULL) &&
        (ERROR_SERVICE_ALREADY_RUNNING != GetLastError()))
    {
        //ERROR_PATH_NOT_FOUND
        printf("StartService Failed Errcode:%08x!\n", GetLastError());
        CloseServiceHandle(m_sService);
        CloseServiceHandle(m_sManager);
        return FALSE;
    }
    printf("This is Hide sys Console\n");
    CloseServiceHandle(m_sService);
    CloseServiceHandle(m_sManager);
    return TRUE;
}
/*
*    卸载驱动程序和服务
*/
VOID DelSvr(const char * szSvrName)
{
    SC_HANDLE hServiceMgr, hServiceTwdm;
    SERVICE_STATUS SvrSta;

    hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if(NULL == hServiceMgr)
    {
        printf( "DelSvr::OpenSCManager() Faild %d ! \n", GetLastError() );
        return;
    }
    else
    {
        printf( "DelSvr::OpenSCManager() ok ! \n" );
    }
    hServiceTwdm = OpenService( hServiceMgr, TEXT(szSvrName), SERVICE_ALL_ACCESS );
    
    if( hServiceTwdm == NULL )
    {
        CloseServiceHandle( hServiceMgr );
        printf( "DelSvr::OpenService() Faild %d ! \n", GetLastError() );
        return;
    }
    else
    {
        printf( "DelSvr::OpenService() ok ! \n" );
    }
    //停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。
    if( !ControlService(hServiceTwdm, SERVICE_CONTROL_STOP , &SvrSta))
    {
        printf( "DelSvr::ControlService() Faild %d !\n", GetLastError() );
    }
    else
    {
        printf( "DelSvr::ControlService() ok !\n" );
    }
    //动态卸载驱动程序。
    if(!DeleteService(hServiceTwdm))
    {
        printf("DelSvr::DeleteSrevice() Faild %d !\n", GetLastError());
    }
    else
    {
        printf("DelSvr::DeleteSrevice() ok !\n");
    }
    CloseServiceHandle(hServiceTwdm);
    CloseServiceHandle(hServiceMgr);
    return;
}
canjob
驱动牛犊
驱动牛犊
  • 注册日期2007-09-10
  • 最后登录2008-01-22
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-10 08:56
CreateFile,CloseHandle算不算
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
地板#
发布于:2007-09-12 22:39
用户被禁言,该主题自动屏蔽!
游客

返回顶部