为啥我地service收不到设备变化地event(附原始代码)??

来源:互联网
更新时间:2016/12/13 1:18:20
责任编辑:李志喜
字体:

14black" id=text> 这个服务能正常接收启动,停止,重新启动的消息

我已经调用RegisterDeviceNotification来注册获取设备变化的消息了

可是为什么当我的U盘插进拔出时,确不能捕获该消息???

C/C++ code #include <windows.h> #include <stdio.h> #include <dbt.h> char* SERVICE_NAME = "usbdetect"; SERVICE_STATUS_HANDLE hServiceStatus; HANDLE terminateEvent = NULL; void WriteToLog(char* str) { FILE* log; log = fopen("c:\\log.txt", "a+"); if(log == NULL) { OutputDebugString("Error: cannot open log file"); return; } fprintf(log,"%s\n",str); fclose(log); } BOOL SendStatus( DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode, DWORD dwCheckPoint, DWORD dwWaitHint ) { SERVICE_STATUS serviceStatus; BOOL success; serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; serviceStatus.dwCurrentState = dwCurrentState; serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_HARDWAREPROFILECHANGE; if(dwServiceSpecificExitCode = 0) serviceStatus.dwWin32ExitCode = dwWin32ExitCode; else { serviceStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR; serviceStatus.dwServiceSpecificExitCode = dwServiceSpecificExitCode; } serviceStatus.dwCheckPoint = dwCheckPoint; serviceStatus.dwWaitHint = dwWaitHint; success = SetServiceStatus( hServiceStatus,&serviceStatus ); if( !success ) SetEvent(terminateEvent); return success; } void WINAPI ServiceCtrlHandler(DWORD dwOpcode, DWORD evtype, PVOID evdata, PVOID Context) { switch (dwOpcode) { case SERVICE_CONTROL_DEVICEEVENT: switch(evtype) { case DBT_DEVICEARRIVAL: WriteToLog("DBT_DEVICEARRIVAL"); return; case DBT_DEVICEREMOVECOMPLETE: WriteToLog("DBT_DEVICEREMOVECOMPLETE"); return; default: WriteToLog("CONTROL_DEVICEEVENT: Other"); return; } case SERVICE_CONTROL_STOP: SendStatus( SERVICE_STOPPED,NO_ERROR,0,0,0 ); SetEvent(terminateEvent); WriteToLog("StopService"); return; case SERVICE_CONTROL_PAUSE: SendStatus( SERVICE_PAUSED,NO_ERROR,0,0,0 ); WriteToLog("PauseService"); return; case SERVICE_CONTROL_CONTINUE: SendStatus( SERVICE_RUNNING,NO_ERROR,0,0,0 ); WriteToLog("ResumeService"); return; default: WriteToLog("Other Service control"); return; } } void ServiceMain(DWORD argc, LPTSTR* argv) { BOOL success; // 创建一个事件 terminateEvent = CreateEvent(0, TRUE, FALSE, 0); // 注册ServiceCtrlHandler hServiceStatus = RegisterServiceCtrlHandler( SERVICE_NAME, (LPHANDLER_FUNCTION)ServiceCtrlHandler ); if(hServiceStatus == NULL){ WriteToLog("Error: RegisterServiceCtrlHandler"); return; } DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; HDEVNOTIFY hDeviceNotify = NULL; static const GUID GuidDevInterfaceList[] = { { 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, 0x4f, 0xc8, 0x35 } }; ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; for(int i = 0; i < sizeof(GuidDevInterfaceList); i++) { NotificationFilter.dbcc_classguid = GuidDevInterfaceList[i]; hDeviceNotify = RegisterDeviceNotification( hServiceStatus, &NotificationFilter,DEVICE_NOTIFY_SERVICE_HANDLE ); if(hDeviceNotify == NULL) { WriteToLog("Error: RegisterDeviceNotification"); return; } } success = SendStatus(SERVICE_RUNNING, NO_ERROR, 0 ,0 ,0); if(!success){ WriteToLog("Error: ServiceMain start service"); return; } WriteToLog("Service Start"); WaitForSingleObject(terminateEvent,INFINITE); } void main() { BOOL success; SERVICE_TABLE_ENTRY serviceTable[] = { { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } }; success = StartServiceCtrlDispatcher(serviceTable); if(!success) WriteToLog("Error: in StartServiceCtrlDispatcher"); }

www.xue163.com true /4/49725.html report 5554 为啥我地service收不到设备变化地event(附原始代码)??,14blackid=text这个服务能正常接收启动,停止,重新启动的消息我已经调用RegisterDeviceNotification来注册获取设备变化的消息了可是为什么当我的U盘插进拔出时,确不能捕获该消息???C/C++code#includ...
最近关注
首页推荐
热门图片
最新添加资讯
24小时热门资讯
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. 学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
荐闻 | 学网头条知识问答 | 装修 | 作业 | 荐闻 | 学网头条精彩微信 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 精彩微信 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技