📄 usbtree.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 + -