C 遍歷裝置

2021-10-02 07:47:14 字數 3217 閱讀 9436

最近需要對乙個加密狗進行檢測,裝置資訊如下:

看到hid#vid_3689&pid_8762這一段,覺得可以先遍歷所有的裝置:

然後再篩選出裡面所有的 hid 型別的裝置:

下面是**:

// test_console.cpp : 定義控制台應用程式的入口點。

//#include

"stdafx.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

extern

"c"#pragma comment(lib,"hid.lib")

#pragma comment(lib,"setupapi.lib")

using

namespace std;

void

enumhiddevice()

// 遍歷 hid 裝置

int idev =0;

while

(true)

; did.cbsize =

sizeof

(did);if

(!setupdienumdeviceinte***ces

( hdev,

// 裝置資訊集控制代碼

null

,// 列舉所有裝置介面(不限制型別)

&hidguid,

// 接收介面guid

idev,

// 下標

&did // [out] 指向 sp_device_inte***ce_data 結構體的指標))

// 初始化 sp_device_inte***ce_detail_data

dword buf_didd =

256;

psp_device_inte***ce_detail_data pdidd =

(psp_device_inte***ce_detail_data)

localalloc

(lptr,buf_didd)

; pdidd-

>cbsize =

sizeof

(*pdidd);if

(!setupdigetdeviceinte***cedetail

( hdev,

// 裝置資訊集控制代碼

&did,

// sp_device_inte***ce_data 結構體的指標

pdidd,

// [out] sp_device_inte***ce_detail_data

buf_didd,

// sp_device_inte***ce_detail_data 對應的緩衝區大小

null

,// [out] sp_device_inte***ce_data 緩衝區大小

null))

cout <<

"pdidd->devicepath = "

<< pdidd-

>devicepath << endl;

// 建立裝置

handle hdevhandle =

createfile

( pdidd-

>devicepath,

// 裝置名稱

generic_read | generic_write,

// 訪問許可權

file_share_read | file_share_write,

// 分享許可權

null

,// 返回的控制代碼不能被繼承

open_existing,

// 僅當裝置存在時開啟

file_attribute_normal,

// 不設定其他屬性

null

// 不設定擴充套件屬性);

if(invalid_handle_value == hdevhandle)

// 獲取裝置介面的 pid、vid

hidd_attributes hidattributes =

;

hidattributes.size =

sizeof

(hidattributes);if

(!hidd_getattributes

( hdevhandle,

// 裝置控制代碼

&hidattributes // [out] hidd_attributes 結構體指標))

// 判斷域之天加密狗:usb\\vid_3689&pid_8762

cout <<

"hidattributes.productid = "

<< hidattributes.productid << endl;

cout <<

"hidattributes.vendorid = "

<< hidattributes.vendorid << endl;

if(hidattributes.productid ==

8762

&& hidattributes.vendorid ==

3689

)// 清理

closehandle

(hdevhandle)

;localfree

(pdidd)

; idev++

; cout << endl;

}// 清理

setupdidestroydeviceinfolist

(hdev);}

int_tmain

(int argc, _tchar* ar**)

效果圖:(我現在沒有加密狗,自然檢測不到咯 ?)

遍歷PCI裝置

pc機在啟動的時候,都會看到乙個pci裝置清單,可以看到機器中的所有pci裝置,其實搜尋pci裝置的程式並不難編,本文通過乙個例項說明如何遍歷pci裝置。工作環境 ms dos 6.22,djgpp rhide 1 了解pci裝置 pci的含義是外設部件互連 peripheral component...

遍歷PCI裝置

原文 該文在2011年3月11日做過修改,其中 已為完整 pc機在啟動的時候,都會看到乙個pci裝置清單,可以看到機器中的所有pci裝置,其實搜尋pci裝置的程式並不難編,本文通過乙個例項說明如何遍歷pci裝置。工作環境 ms dos 6.22,djgpp rhide 1 了解pci裝置 pci的含...

遍歷系統硬體裝置資訊

以下 段演示如何顯示已經安裝的所有硬體裝置的列表 include include include include include int main int argc,char argv char envp enumerate through all devices in set.deviceinfo...