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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
VC 捕获Windows关机事件
环境VC6.0 MFC 某些时候我们需要在系统关机的时候进行相应的处理。 在某个窗口添加窗口过程函数 LRESULT CMyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if
VC++实现启用和禁用设备的例子
一个启用和禁用设备的例子,该代码展示了禁用和启用USB设备的功能。如果需要禁用软驱和光驱,需要修改相应的参数。-Enable and disable a device example, the code to display the disable and enable USB devices. If you need to disable the floppy drive and optical disk drive, a need to amend the corresponding parameters.
windows系统对鼠标点击事件的处理过程
Windows用这个消息来做什么? “HITTEST”就是“命中测试”的意思,WM_NCHITTEST消息用来获取鼠标当前命中的位置。 WM_NCHITTEST的消息响应函数会根据鼠标当前的坐标来判断鼠标命中了窗口的哪个部位,消息响应函数的返回值指出了部位,例如它可能会返回HTCAPTION,或者HTCLIENT等。(其返回值有很多,请查阅MSDN)。 为了便于理解,我先描述一下Windows
用SetupDi* 启用/禁用网卡
#include #include #include #include #include // cfgmgr32.h 在Microsoft Windows 2000 DDK 中. #pragma comment(lib,"setupapi.lib") BOOL I
使用windows钩子捕获进程的启动和关闭消息
2012年12月13日补充: 这篇文章写的时候是我还在上学的时候,所以不管是从技术实现角度还是文笔都显得很嫩,在此向所有无意间看到这篇文章的人表示抱歉。我写了这篇文章之后2年有人想问我要源代码,唉,如果我下次写文章一定贴上源代码,不过那么老的代码我实在是不大情愿找出来了。 我希望这篇文章已经把实现原理的每一个细节都点到了,虽然讲了很多废话,但是细节都埋在废话当中。 我自己简单看了一下我自己的
检测网卡状态(禁用,启用)
#include #pragma comment(lib, "IPHLPAPI.lib") ////////////////////// void CMFCTestDlg::OnBnClickedButton1() { PIP_ADAPTER_INFO info; info = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO)); ULO
启用禁用设备
想要实现类似设备管理器的功能,其实也不是很难,无非就是调用一些API函数,就像本文描述的,采用的API函数就是SetupDi系列的函数。不过这类函数有很多,具体的请参见MSDN,而实现设备启用、停用仅需要用到的就只有5个函数:        SetupDiGetClassDevs                  // 获取设备信息集        SetupDiEnumDeviceInfo 
win32 c++控制台应用程序捕获ctrl+c程序关闭事件
#include #include bool ctrlhandler(DWORD fdwctrltype) { switch (fdwctrltype) { // handle the ctrl-c signal. case CTRL_C_EVENT: printf("ctrl-c event\n\n"); return(false); // ctrl-close: con
程序禁用启用网络/网卡
 关于C++程序实现禁用启用网络/网卡,我四月份好像贴出过一个函数,结果后来搞得网上到处都是。好些人还在给我mail问我一些相关的问题,现在把已经修改好的函数再贴一次。//----------------------------------------------------------------//函数名: DisableNetInterface//创建人: sam young (
VC6捕获鼠标事件(移动、单击等)的一些总结(MFC消息、DriectInput、钩子)
鼠标事件,无非是WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE(就说这基本的三个命令吧),开始以为很容易获取这些事件,但在实现过程中,并不是想象中的那么简单: ① 在基于MFC中的对话框应用程序中,可以在 PreTranslateMessage 中获取(【主对话框】的或者是【CWinApp】的,应该说放在【CWinApp】中的PreTranslate