阅读:1635回复:3
求助:如何在VC中实现对设备的启动和停止,Windows提供那些API。谢谢![]() |
|
沙发#
发布于: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; } |
|
板凳#
发布于:2007-09-10 08:56
CreateFile,CloseHandle算不算
|
|
禁止发言
![]() |
地板#
发布于:2007-09-12 22:39
用户被禁言,该主题自动屏蔽! |