如何在VC中刷新设备管理器

 #include "stdafx.h"
#include <windows.h>

/*
 * where use the typedef keyword, you can use the originality instead such as use DWORD instead of DEVINST
 */
typedef DWORD  DEVINST;
typedef DEVINST *PDEVINST;

typedef DWORD        RETURN_TYPE;
typedef RETURN_TYPE  CONFIGRET;

typedef CHAR   *DEVINSTID_A; // Device ID ANSI name.

#define CM_LOCATE_DEVNODE_NORMAL       0x00000000
#define CR_SUCCESS        0x00000000

/*
 * this function prototype for get CM_Locate_DevNodeW function address
 *  how to use CM_Locate_DevNodeW function, you may see about DDK Documentation
 */
typedef CONFIGRET (__stdcall *CM_LOCATE_DEVNODE_FUNC) (
              OUT   PDEVINST       pdnDevInst,
              IN    DEVINSTID_A    pDeviceID,  OPTIONAL
              IN    DWORD          ulFlags            
              );

/*
 * this function prototype for get CM_Reenumerate_DevNode function address
 *  how to use CM_Reenumerate_DevNode function, you may see about DDK Documentation
 */
typedef CONFIGRET (__stdcall *CM_Reenumerate_DevNode_FUNC) (
              IN    DEVINST   dnDevInst,
              IN    DWORD     ulFlags
              );

CM_LOCATE_DEVNODE_FUNC _Get_Locate_DevNode = NULL;
CM_Reenumerate_DevNode_FUNC _Get_Reenumerate_DevNode = NULL;

HINSTANCE handle;
 DEVINST devInst;
 CONFIGRET status;

 handle = LoadLibrary("cfgmgr32.dll");
 if ( handle == 0 ) {
  printf("LoadLibrary failed!");
 }

 _Get_Locate_DevNode = (CM_LOCATE_DEVNODE_FUNC)GetProcAddress(handle, "CM_Locate_DevNodeW");
 if ( _Get_Locate_DevNode != NULL ) {
  status = _Get_Locate_DevNode(&devInst, NULL, CM_LOCATE_DEVNODE_NORMAL);
  if ( status != CR_SUCCESS) {
   printf("_Get_Locate_DevNode failed!");
  }
 }

 _Get_Reenumerate_DevNode = (CM_Reenumerate_DevNode_FUNC)GetProcAddress(handle, "CM_Reenumerate_DevNode");
 if ( _Get_Reenumerate_DevNode != NULL ) {
  status = _Get_Reenumerate_DevNode(devInst, 0);
  if ( status != CR_SUCCESS) {
   printf("_Get_Reenumerate_DevNode failed!");
  }
 }

 FreeLibrary(handle);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值