2 zlanbl085321 ZLANBL085321 于 2016.03.08 19:40 提问

VC++捕获驱动被禁用或启用的消息(事件、信号)的Windows API函数

如果我通过程序禁用或启用了某个设备(比如网卡),从设备管理器就可以看到该设备被禁用或启用,这样看来,设备管理器应该是捕获了操作系统的某个消息或是等到了某个事件或信号,有没有哪位大神知道设备管理器是如何实现这一块的?具体用了哪个Win API函数?

3个回答

tangjingyunshiweifen
tangjingyunshiweifen   2016.03.09 10:43
已采纳

ON_WM_DEVICECHANGE()
里面扑捉
驱动启用 相当于虚拟device认到

BOOL OnDeviceChange(UINT nEventType,DWORD dwData)

{

//DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*) dwData;
PDEV_BROADCAST_HDR devHdr;
PDEV_BROADCAST_DEVICEINTERFACE devInterface;
switch (nEventType)

{

case DBT_DEVICEREMOVECOMPLETE://移除设备
break;
case DBT_DEVICEARRIVAL://添加设备

if (m_bAuto_Flash_wvkey)
{
devHdr = (PDEV_BROADCAST_HDR)dwData;
devInterface = (PDEV_BROADCAST_DEVICEINTERFACE)devHdr;
if (CheckPidVidByGuid(WceusbshGUID))
OnStartCallFlashWVKey();

    }
    break;  

default:  
    break;  
}  

return TRUE;  

}

ZLANBL085321
ZLANBL085321 我还没尝试你说的这个方法,暂时不知道禁止驱动是不是在这个消息处理函数中做,不过还是谢谢你哈
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.03.08 20:51

可以自己查询服务对应的状态 轮询

ZLANBL085321
ZLANBL085321 轮询查询没有捕获消息或信号那样即时
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.08 22:12

如果你是驱动的开发者就好办了,加广播,给运行的程序发送一个消息。否则,就需要动态查询设备状态了。

ZLANBL085321
ZLANBL085321 暂时还没从事驱动开发,而且我要的效果是像设备管理器那样捕获消息或信号,设备管理器只是应用层的开发啊
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!