⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbtree.h

📁 列举出WINDOWS中所有的USB设备的一个小程序。很实用
💻 H
字号:
// UsbTree.h: interface for the CUsbTree class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_USBTREE_H__B50A2AB4_4667_4828_9EF9_61AC1A281752__INCLUDED_)
#define AFX_USBTREE_H__B50A2AB4_4667_4828_9EF9_61AC1A281752__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#pragma warning( disable : 4200 )

#include <winioctl.h>
#include <usbioctl.h>

#if 0
typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME {
    ULONG ConnectionIndex;  /* INPUT */
    ULONG ActualLength;     /* OUTPUT */
    /* unicode name for the devnode. */
    WCHAR DriverKeyName[1];      /* OUTPUT */
} USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME;	

typedef struct _USB_NODE_CONNECTION_NAME {
    ULONG ConnectionIndex;  /* INPUT */
    ULONG ActualLength;     /* OUTPUT */
    /* unicode symbolic name for this node if it is a hub or parent driver
       null if this node is a device. */
    WCHAR NodeName[1];      /* OUTPUT */
} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME;	

typedef struct _USB_HUB_NAME {
    ULONG ActualLength;     /* OUTPUT */
    /* NULL terminated unicode symbolic name for the root hub */
    WCHAR HubName[1];       /* OUTPUT */
} USB_HUB_NAME, *PUSB_HUB_NAME;

typedef struct _USB_ROOT_HUB_NAME {
    ULONG ActualLength;     /* OUTPUT */
    /* NULL terminated unicode symbolic name for the root hub */
    WCHAR RootHubName[1];   /* OUTPUT */
} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME;

typedef struct _USB_HCD_DRIVERKEY_NAME {
    ULONG ActualLength;     /* OUTPUT */
    /* NULL terminated unicode driverkeyname for hcd */
    WCHAR DriverKeyName[1];   /* OUTPUT */
} USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME;	

#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN
#define USB_IOCTL_INTERNAL_INDEX       0x0000
#define USB_IOCTL_INDEX                0x00ff

#define IOCTL_GET_HCD_DRIVERKEY_NAME CTL_CODE(FILE_DEVICE_USB,  \
                                                USB_IOCTL_INDEX+10,  \
                                                METHOD_BUFFERED,  \
                                                FILE_ANY_ACCESS)                                                
#define IOCTL_USB_GET_ROOT_HUB_NAME  CTL_CODE(FILE_DEVICE_USB,  \
                                                USB_IOCTL_INDEX+3,  \
                                                METHOD_BUFFERED,  \
                                                FILE_ANY_ACCESS)   
#endif

#define MAX_PORTS_NUM			16
#define MAX_HC_DEVNAME_LEN		16

#define UT_SUCESS						0
#define UT_BUFFER_TOO_SMALL				0xE1000001	// 缓冲区太小
#define UT_INVALID_BUFFER				0xE1000002	// 缓存指针非法
#define UT_UNABLE_GET_HCDNAME			0xE1000003	// 无法获取HC的DriverName
#define UT_FAIL_MEM_ACCESS				0xE1000004	// 内存访问错误
#define UT_UNABLE_LOCATE_NODE			0xE1000005	// 无法定位节点
#define UT_UNABLE_GET_DEVDESC			0xE1000006	// 无法获取设备描述名称
#define UT_UNABLE_GET_ROOTHUB			0xE1000007	// 无法获取根集线器名称
#define UT_UNABLE_ACCESS_DEV			0xE1000008	// 无法访问设备
#define UT_UNABLE_GET_NODEINFO			0xE1000009	// 无法获取节点信息
#define UT_UNABLE_GET_DRVNAME			0xE100000A	// 无法获取设备的驱动名称

typedef struct 
{
	TCHAR	szDevName[MAX_HC_DEVNAME_LEN];
	TCHAR	szDriverName[MAX_PATH];
	TCHAR	szDevDesc[MAX_PATH];
	TCHAR	szRootHub[MAX_PATH];
} HC_InfoStruct;

typedef struct 
{
	BOOL	bExtHub;
	BOOL	bConnected;
	TCHAR	szHubName[MAX_PATH];
	TCHAR	szDriverName[MAX_PATH];
	TCHAR	szDevDesc[MAX_PATH];
} HubPortStruct;

typedef struct 
{
	TCHAR	szHubName[MAX_PATH];
} HUB_InfoStruct;

class CUsbTree  
{
public:
	CUsbTree();
	virtual ~CUsbTree();

private:
	DWORD GetHCDDriverKeyName(
		IN HANDLE	hHcd,
		IN OUT LPDWORD pdwNameLen,
		OUT LPTSTR szHcdDrvName
	);
	DWORD GetDriverKeyName(
		IN HANDLE	hHubDevice,
		IN DWORD	dwPortIndex,
		IN OUT LPDWORD pdwNameLen,
		OUT LPTSTR szDrvName
	);
	DWORD GetExternalHubName(
		IN HANDLE	hHubDevice,
		IN DWORD	dwPortIndex,
		IN OUT LPDWORD pdwNameLen,
		OUT LPTSTR szExtHubName
	);
	DWORD GetRootHubName(
		IN HANDLE	hHcd,
		IN OUT LPDWORD pdwNameLen,
		OUT LPTSTR szRootHubName
	);
	DWORD DriverNameToDeviceDesc (
		IN LPTSTR szDrvName,
		IN OUT LPDWORD pdwDevDescLen,
		OUT LPTSTR szDevDesc
	);

// Enum Procedure
public:
	DWORD EnumHostControllers(		// 枚举USB主机控制器
		IN OUT LPDWORD pdwHCCount, 
		OUT HC_InfoStruct * lpHCInfo
	);
	DWORD EnumerateHubPorts(		// 枚举USB集线器的端口
		IN LPCTSTR		szHubName,
		IN OUT LPDWORD	pdwPortNum,
		OUT HubPortStruct *	lpHubPorts
	);

};

#endif // !defined(AFX_USBTREE_H__B50A2AB4_4667_4828_9EF9_61AC1A281752__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -