692 lines
16 KiB
C
692 lines
16 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997-2008 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
UVCVIEW.H
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This is the header file for UVCVIEW
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
user mode
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
04-25-97 : created
|
||
|
04/13/2005 : major bug fixing
|
||
|
|
||
|
--*/
|
||
|
|
||
|
/*****************************************************************************
|
||
|
I N C L U D E S
|
||
|
*****************************************************************************/
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include <initguid.h>
|
||
|
#include <devioctl.h>
|
||
|
#include <dbt.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stddef.h>
|
||
|
#include <commctrl.h>
|
||
|
#include <usbioctl.h>
|
||
|
#include <usbiodef.h>
|
||
|
#include <intsafe.h>
|
||
|
#include <strsafe.h>
|
||
|
#include <specstrings.h>
|
||
|
#include <usb.h>
|
||
|
#include <usbuser.h>
|
||
|
#include <basetyps.h>
|
||
|
#include <wtypes.h>
|
||
|
#include <objbase.h>
|
||
|
#include <io.h>
|
||
|
#include <conio.h>
|
||
|
#include <shellapi.h>
|
||
|
#include <cfgmgr32.h>
|
||
|
#include <shlwapi.h>
|
||
|
#include <setupapi.h>
|
||
|
#include <winioctl.h>
|
||
|
#include <devpkey.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
// This is mostly a private USB Audio descriptor header
|
||
|
#include "usbdesc.h"
|
||
|
|
||
|
// This is the inbox USBVideo driver descriptor header (copied locally)
|
||
|
#include "uvcdesc.h"
|
||
|
|
||
|
/*****************************************************************************
|
||
|
P R A G M A S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
/*****************************************************************************
|
||
|
D E F I N E S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
// define H264_SUPPORT to add H.264 support to uvcview.exe
|
||
|
#define H264_SUPPORT
|
||
|
|
||
|
#define TEXT_ITEM_LENGTH 64
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
#undef DBG
|
||
|
#define DBG 1
|
||
|
#endif
|
||
|
|
||
|
#if DBG
|
||
|
#define OOPS() Oops(__FILE__, __LINE__)
|
||
|
#else
|
||
|
#define OOPS()
|
||
|
#endif
|
||
|
|
||
|
#if DBG
|
||
|
|
||
|
#define ALLOC(dwBytes) MyAlloc(__FILE__, __LINE__, (dwBytes))
|
||
|
|
||
|
#define REALLOC(hMem, dwBytes) MyReAlloc((hMem), (dwBytes))
|
||
|
|
||
|
#define FREE(hMem) MyFree((hMem))
|
||
|
|
||
|
#define CHECKFORLEAKS() MyCheckForLeaks()
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define ALLOC(dwBytes) allocate_mem(dwBytes) // GlobalAlloc(GPTR,(dwBytes))
|
||
|
|
||
|
//#define REALLOC(hMem, dwBytes) GlobalReAlloc((hMem), (dwBytes), (GMEM_MOVEABLE|GMEM_ZEROINIT))
|
||
|
|
||
|
#define FREE(hMem) free(hMem) // GlobalFree((hMem))
|
||
|
|
||
|
#define CHECKFORLEAKS()
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#define DEVICE_CONFIGURATION_TEXT_LENGTH 10240
|
||
|
|
||
|
#define STR_INVALID_POWER_STATE "(invalid state) "
|
||
|
#define STR_UNKNOWN_CONTROLLER_FLAVOR "Unknown"
|
||
|
|
||
|
FORCEINLINE void* allocate_mem(size_t len)
|
||
|
{
|
||
|
void* mem = malloc(len);
|
||
|
|
||
|
if (mem)
|
||
|
memset(mem, 0, len);
|
||
|
|
||
|
return mem;
|
||
|
}
|
||
|
|
||
|
FORCEINLINE
|
||
|
VOID
|
||
|
InitializeListHead(
|
||
|
_Out_ PLIST_ENTRY ListHead
|
||
|
)
|
||
|
{
|
||
|
ListHead->Flink = ListHead->Blink = ListHead;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// BOOLEAN
|
||
|
// IsListEmpty(
|
||
|
// PLIST_ENTRY ListHead
|
||
|
// );
|
||
|
//
|
||
|
|
||
|
#define IsListEmpty(ListHead) \
|
||
|
((ListHead)->Flink == (ListHead))
|
||
|
|
||
|
//
|
||
|
// PLIST_ENTRY
|
||
|
// RemoveHeadList(
|
||
|
// PLIST_ENTRY ListHead
|
||
|
// );
|
||
|
//
|
||
|
|
||
|
#define RemoveHeadList(ListHead) \
|
||
|
(ListHead)->Flink;\
|
||
|
{RemoveEntryList((ListHead)->Flink)}
|
||
|
|
||
|
//
|
||
|
// VOID
|
||
|
// RemoveEntryList(
|
||
|
// PLIST_ENTRY Entry
|
||
|
// );
|
||
|
//
|
||
|
|
||
|
#define RemoveEntryList(Entry) {\
|
||
|
PLIST_ENTRY _EX_Blink;\
|
||
|
PLIST_ENTRY _EX_Flink;\
|
||
|
_EX_Flink = (Entry)->Flink;\
|
||
|
_EX_Blink = (Entry)->Blink;\
|
||
|
_EX_Blink->Flink = _EX_Flink;\
|
||
|
_EX_Flink->Blink = _EX_Blink;\
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// VOID
|
||
|
// InsertTailList(
|
||
|
// PLIST_ENTRY ListHead,
|
||
|
// PLIST_ENTRY Entry
|
||
|
// );
|
||
|
//
|
||
|
|
||
|
#define InsertTailList(ListHead,Entry) {\
|
||
|
PLIST_ENTRY _EX_Blink;\
|
||
|
PLIST_ENTRY _EX_ListHead;\
|
||
|
_EX_ListHead = (ListHead);\
|
||
|
_EX_Blink = _EX_ListHead->Blink;\
|
||
|
(Entry)->Flink = _EX_ListHead;\
|
||
|
(Entry)->Blink = _EX_Blink;\
|
||
|
_EX_Blink->Flink = (Entry);\
|
||
|
_EX_ListHead->Blink = (Entry);\
|
||
|
}
|
||
|
|
||
|
// global version for USB Video Class spec version (pre-release)
|
||
|
#define BCDVDC 0x0083
|
||
|
|
||
|
// A.2 Video Interface Subclass Codes
|
||
|
#define SC_VIDEO_INTERFACE_COLLECTION 0x03
|
||
|
|
||
|
// A.3 Video Interface Protocol Codes
|
||
|
#define PC_PROTOCOL_UNDEFINED 0x00
|
||
|
|
||
|
// USB Video Class spec version
|
||
|
#define NOT_UVC 0x0
|
||
|
#define UVC10 0x100
|
||
|
#define UVC11 0x110
|
||
|
|
||
|
#ifdef H264_SUPPORT
|
||
|
#define UVC15 0x150
|
||
|
#endif
|
||
|
|
||
|
#define OUTPUT_MESSAGE_MAX_LENGTH 1024
|
||
|
#define MAX_DEVICE_PROP 200
|
||
|
#define MAX_DRIVER_KEY_NAME 256
|
||
|
|
||
|
/*****************************************************************************
|
||
|
T Y P E D E F S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
typedef enum _TREEICON
|
||
|
{
|
||
|
ComputerIcon,
|
||
|
HubIcon,
|
||
|
NoDeviceIcon,
|
||
|
GoodDeviceIcon,
|
||
|
BadDeviceIcon,
|
||
|
GoodSsDeviceIcon,
|
||
|
NoSsDeviceIcon
|
||
|
} TREEICON;
|
||
|
|
||
|
// Callback function for walking TreeView items
|
||
|
//
|
||
|
typedef VOID
|
||
|
(*LPFNTREECALLBACK)(
|
||
|
HWND hTreeWnd,
|
||
|
HTREEITEM hTreeItem,
|
||
|
PVOID pContext
|
||
|
);
|
||
|
|
||
|
|
||
|
// Callback notification function called at end of every tree depth
|
||
|
typedef VOID
|
||
|
(*LPFNTREENOTIFYCALLBACK)(PVOID pContext);
|
||
|
|
||
|
//
|
||
|
// Structure used to build a linked list of String Descriptors
|
||
|
// retrieved from a device.
|
||
|
//
|
||
|
|
||
|
typedef struct _STRING_DESCRIPTOR_NODE
|
||
|
{
|
||
|
struct _STRING_DESCRIPTOR_NODE *Next;
|
||
|
UCHAR DescriptorIndex;
|
||
|
USHORT LanguageID;
|
||
|
USB_STRING_DESCRIPTOR StringDescriptor[1];
|
||
|
} STRING_DESCRIPTOR_NODE, *PSTRING_DESCRIPTOR_NODE;
|
||
|
|
||
|
//
|
||
|
// A collection of device properties. The device can be hub, host controller or usb device
|
||
|
//
|
||
|
typedef struct _USB_DEVICE_PNP_STRINGS
|
||
|
{
|
||
|
PCHAR DeviceId;
|
||
|
PCHAR DeviceDesc;
|
||
|
PCHAR HwId;
|
||
|
PCHAR Service;
|
||
|
PCHAR DeviceClass;
|
||
|
PCHAR PowerState;
|
||
|
} USB_DEVICE_PNP_STRINGS, *PUSB_DEVICE_PNP_STRINGS;
|
||
|
|
||
|
typedef struct _DEVICE_INFO_NODE {
|
||
|
HDEVINFO DeviceInfo;
|
||
|
LIST_ENTRY ListEntry;
|
||
|
SP_DEVINFO_DATA DeviceInfoData;
|
||
|
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
|
||
|
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceDetailData;
|
||
|
PSTR DeviceDescName;
|
||
|
ULONG DeviceDescNameLength;
|
||
|
PSTR DeviceDriverName;
|
||
|
ULONG DeviceDriverNameLength;
|
||
|
DEVICE_POWER_STATE LatestDevicePowerState;
|
||
|
} DEVICE_INFO_NODE, *PDEVICE_INFO_NODE;
|
||
|
|
||
|
//
|
||
|
// Structures assocated with TreeView items through the lParam. When an item
|
||
|
// is selected, the lParam is retrieved and the structure it which it points
|
||
|
// is used to display information in the edit control.
|
||
|
//
|
||
|
|
||
|
typedef enum _USBDEVICEINFOTYPE
|
||
|
{
|
||
|
HostControllerInfo,
|
||
|
RootHubInfo,
|
||
|
ExternalHubInfo,
|
||
|
DeviceInfo
|
||
|
} USBDEVICEINFOTYPE, *PUSBDEVICEINFOTYPE;
|
||
|
|
||
|
typedef struct _USBHOSTCONTROLLERINFO
|
||
|
{
|
||
|
USBDEVICEINFOTYPE DeviceInfoType;
|
||
|
LIST_ENTRY ListEntry;
|
||
|
PCHAR DriverKey;
|
||
|
ULONG VendorID;
|
||
|
ULONG DeviceID;
|
||
|
ULONG SubSysID;
|
||
|
ULONG Revision;
|
||
|
USB_POWER_INFO USBPowerInfo[6];
|
||
|
BOOL BusDeviceFunctionValid;
|
||
|
ULONG BusNumber;
|
||
|
USHORT BusDevice;
|
||
|
USHORT BusFunction;
|
||
|
PUSB_CONTROLLER_INFO_0 ControllerInfo;
|
||
|
PUSB_DEVICE_PNP_STRINGS UsbDeviceProperties;
|
||
|
} USBHOSTCONTROLLERINFO, *PUSBHOSTCONTROLLERINFO;
|
||
|
|
||
|
typedef struct _USBROOTHUBINFO
|
||
|
{
|
||
|
USBDEVICEINFOTYPE DeviceInfoType;
|
||
|
PUSB_NODE_INFORMATION HubInfo;
|
||
|
PUSB_HUB_INFORMATION_EX HubInfoEx;
|
||
|
PCHAR HubName;
|
||
|
PUSB_PORT_CONNECTOR_PROPERTIES PortConnectorProps;
|
||
|
PUSB_DEVICE_PNP_STRINGS UsbDeviceProperties;
|
||
|
PDEVICE_INFO_NODE DeviceInfoNode;
|
||
|
PUSB_HUB_CAPABILITIES_EX HubCapabilityEx;
|
||
|
|
||
|
} USBROOTHUBINFO, *PUSBROOTHUBINFO;
|
||
|
|
||
|
typedef struct _USBEXTERNALHUBINFO
|
||
|
{
|
||
|
USBDEVICEINFOTYPE DeviceInfoType;
|
||
|
PUSB_NODE_INFORMATION HubInfo;
|
||
|
PUSB_HUB_INFORMATION_EX HubInfoEx;
|
||
|
PCHAR HubName;
|
||
|
PUSB_NODE_CONNECTION_INFORMATION_EX ConnectionInfo;
|
||
|
PUSB_PORT_CONNECTOR_PROPERTIES PortConnectorProps;
|
||
|
PUSB_DESCRIPTOR_REQUEST ConfigDesc;
|
||
|
PUSB_DESCRIPTOR_REQUEST BosDesc;
|
||
|
PSTRING_DESCRIPTOR_NODE StringDescs;
|
||
|
PUSB_NODE_CONNECTION_INFORMATION_EX_V2 ConnectionInfoV2; // NULL if root HUB
|
||
|
PUSB_DEVICE_PNP_STRINGS UsbDeviceProperties;
|
||
|
PDEVICE_INFO_NODE DeviceInfoNode;
|
||
|
PUSB_HUB_CAPABILITIES_EX HubCapabilityEx;
|
||
|
} USBEXTERNALHUBINFO, *PUSBEXTERNALHUBINFO;
|
||
|
|
||
|
|
||
|
// HubInfo, HubName may be in USBDEVICEINFOTYPE, so they can be removed
|
||
|
typedef struct
|
||
|
{
|
||
|
USBDEVICEINFOTYPE DeviceInfoType;
|
||
|
PUSB_NODE_INFORMATION HubInfo; // NULL if not a HUB
|
||
|
PUSB_HUB_INFORMATION_EX HubInfoEx; // NULL if not a HUB
|
||
|
PCHAR HubName; // NULL if not a HUB
|
||
|
PUSB_NODE_CONNECTION_INFORMATION_EX ConnectionInfo; // NULL if root HUB
|
||
|
PUSB_PORT_CONNECTOR_PROPERTIES PortConnectorProps;
|
||
|
PUSB_DESCRIPTOR_REQUEST ConfigDesc; // NULL if root HUB
|
||
|
PUSB_DESCRIPTOR_REQUEST BosDesc; // NULL if root HUB
|
||
|
PSTRING_DESCRIPTOR_NODE StringDescs;
|
||
|
PUSB_NODE_CONNECTION_INFORMATION_EX_V2 ConnectionInfoV2; // NULL if root HUB
|
||
|
PUSB_DEVICE_PNP_STRINGS UsbDeviceProperties;
|
||
|
PDEVICE_INFO_NODE DeviceInfoNode;
|
||
|
PUSB_HUB_CAPABILITIES_EX HubCapabilityEx; // NULL if not a HUB
|
||
|
} USBDEVICEINFO, *PUSBDEVICEINFO;
|
||
|
|
||
|
typedef struct _STRINGLIST
|
||
|
{
|
||
|
#ifdef H264_SUPPORT
|
||
|
ULONGLONG ulFlag;
|
||
|
#else
|
||
|
ULONG ulFlag;
|
||
|
#endif
|
||
|
PCHAR pszString;
|
||
|
PCHAR pszModifier;
|
||
|
|
||
|
} STRINGLIST, * PSTRINGLIST;
|
||
|
|
||
|
typedef struct _DEVICE_GUID_LIST {
|
||
|
HDEVINFO DeviceInfo;
|
||
|
LIST_ENTRY ListHead;
|
||
|
} DEVICE_GUID_LIST, *PDEVICE_GUID_LIST;
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
G L O B A L S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
//
|
||
|
// USBVIEW.C
|
||
|
//
|
||
|
|
||
|
BOOL gDoConfigDesc;
|
||
|
BOOL gDoAnnotation;
|
||
|
BOOL gLogDebug;
|
||
|
int TotalHubs;
|
||
|
|
||
|
//
|
||
|
// ENUM.C
|
||
|
//
|
||
|
|
||
|
PCHAR ConnectionStatuses[];
|
||
|
|
||
|
//
|
||
|
// DISPVID.C
|
||
|
//
|
||
|
DEFINE_GUID(YUY2_Format,0x32595559L,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71);
|
||
|
DEFINE_GUID(NV12_Format,0x3231564EL,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71);
|
||
|
|
||
|
#ifdef H264_SUPPORT
|
||
|
DEFINE_GUID(H264_Format,0x34363248, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
|
||
|
#endif
|
||
|
|
||
|
// The following flags/variables are all initialized in Display.c InitializePerDeviceSettings()
|
||
|
//
|
||
|
// Save the default frame from the MJPEG, Uncompressed, Vendor and Frame Based Format descriptor
|
||
|
// Check for this when processing the individual Frame descriptors
|
||
|
UCHAR g_chMJPEGFrameDefault;
|
||
|
UCHAR g_chUNCFrameDefault;
|
||
|
UCHAR g_chVendorFrameDefault;
|
||
|
UCHAR g_chFrameBasedFrameDefault;
|
||
|
|
||
|
// Spec version of UVC device
|
||
|
UINT g_chUVCversion;
|
||
|
|
||
|
// Base address of the USBDEVICEINFO for device we're parsing
|
||
|
PUSBDEVICEINFO CurrentUSBDeviceInfo;
|
||
|
|
||
|
// Base address of the Configuration descriptor we're parsing
|
||
|
PUSB_CONFIGURATION_DESCRIPTOR CurrentConfigDesc;
|
||
|
|
||
|
// Length of the current configuration descriptor
|
||
|
DWORD dwConfigLength;
|
||
|
// Our current position from the beginning of the config descriptor
|
||
|
DWORD dwConfigIndex;
|
||
|
|
||
|
//
|
||
|
// DISPLAY.C
|
||
|
//
|
||
|
int gDeviceSpeed;
|
||
|
|
||
|
// Save the current Configuration starting and ending addresses
|
||
|
// Used in ValidateDescAddress()
|
||
|
//
|
||
|
PUSB_CONFIGURATION_DESCRIPTOR g_pConfigDesc;
|
||
|
PSTRING_DESCRIPTOR_NODE g_pStringDescs;
|
||
|
PUCHAR g_descEnd;
|
||
|
|
||
|
/*****************************************************************************
|
||
|
F U N C T I O N P R O T O T Y P E S
|
||
|
*****************************************************************************/
|
||
|
|
||
|
//
|
||
|
// USBVIEW.C
|
||
|
//
|
||
|
|
||
|
HTREEITEM
|
||
|
AddLeaf (
|
||
|
HTREEITEM hTreeParent,
|
||
|
LPARAM lParam,
|
||
|
_In_ LPTSTR lpszText,
|
||
|
TREEICON TreeIcon
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Oops
|
||
|
(
|
||
|
_In_ PCHAR File,
|
||
|
ULONG Line
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// DISPLAY.C
|
||
|
//
|
||
|
|
||
|
EXTERN_C UINT IsIADDevice (PUSBDEVICEINFO info);
|
||
|
EXTERN_C UINT IsUVCDevice (PUSBDEVICEINFO info);
|
||
|
EXTERN_C PCHAR GetVendorString(USHORT idVendor);
|
||
|
EXTERN_C PCHAR GetLangIDString(USHORT idLang);
|
||
|
EXTERN_C UINT GetConfigurationSize (PUSBDEVICEINFO info);
|
||
|
EXTERN_C PUSB_COMMON_DESCRIPTOR
|
||
|
GetNextDescriptor(
|
||
|
_In_reads_bytes_(TotalLength)
|
||
|
PUSB_COMMON_DESCRIPTOR FirstDescriptor,
|
||
|
_In_
|
||
|
ULONG TotalLength,
|
||
|
_In_
|
||
|
PUSB_COMMON_DESCRIPTOR StartDescriptor,
|
||
|
_In_ long
|
||
|
DescriptorType
|
||
|
);
|
||
|
|
||
|
HRESULT
|
||
|
UpdateTreeItemDeviceInfo(
|
||
|
HWND hTreeWnd,
|
||
|
HTREEITEM hTreeItem
|
||
|
);
|
||
|
|
||
|
PCHAR
|
||
|
GetTextBuffer(
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
ResetTextBuffer(
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
CreateTextBuffer (
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DestroyTextBuffer (
|
||
|
);
|
||
|
|
||
|
UINT
|
||
|
GetTextBufferPos (
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
UpdateEditControl (
|
||
|
HWND hEditWnd,
|
||
|
HWND hTreeWnd,
|
||
|
HTREEITEM hTreeItem
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID __cdecl
|
||
|
AppendBuffer (
|
||
|
LPCTSTR lpFormat,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
VOID __cdecl
|
||
|
AppendTextBuffer (
|
||
|
LPCTSTR lpFormat,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisplayStringDescriptor (
|
||
|
UCHAR Index,
|
||
|
PSTRING_DESCRIPTOR_NODE StringDescs,
|
||
|
DEVICE_POWER_STATE LatestDevicePowerState
|
||
|
);
|
||
|
|
||
|
PCHAR
|
||
|
GetStringFromList(
|
||
|
PSTRINGLIST slPowerState,
|
||
|
ULONG ulNumElements,
|
||
|
|
||
|
#ifdef H264_SUPPORT
|
||
|
ULONGLONG ulFlag,
|
||
|
#else
|
||
|
ULONG ulFlag,
|
||
|
#endif
|
||
|
_In_ PCHAR szDefault
|
||
|
);
|
||
|
|
||
|
EXTERN_C PCHAR GetPowerStateString(
|
||
|
WDMUSB_POWER_STATE powerState
|
||
|
);
|
||
|
|
||
|
EXTERN_C PCHAR GetControllerFlavorString(
|
||
|
USB_CONTROLLER_FLAVOR flavor
|
||
|
);
|
||
|
|
||
|
EXTERN_C ULONG GetEhciDebugPort(
|
||
|
ULONG vendorId,
|
||
|
ULONG deviceId
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
WalkTreeTopDown(
|
||
|
_In_ HTREEITEM hTreeItem,
|
||
|
_In_ LPFNTREECALLBACK lpfnTreeCallback,
|
||
|
_In_opt_ PVOID pContext,
|
||
|
_In_opt_ LPFNTREENOTIFYCALLBACK lpfnTreeNotifyCallback
|
||
|
);
|
||
|
|
||
|
VOID RefreshTree (VOID);
|
||
|
|
||
|
//
|
||
|
// ENUM.C
|
||
|
//
|
||
|
|
||
|
VOID
|
||
|
EnumerateHostControllers (
|
||
|
HTREEITEM hTreeParent,
|
||
|
ULONG *DevicesConnected
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
CleanupItem (
|
||
|
HWND hTreeWnd,
|
||
|
HTREEITEM hTreeItem,
|
||
|
PVOID pContext
|
||
|
);
|
||
|
|
||
|
DEVICE_POWER_STATE
|
||
|
AcquireDevicePowerState(
|
||
|
_Inout_ PDEVICE_INFO_NODE pNode
|
||
|
);
|
||
|
|
||
|
_Success_(return == TRUE)
|
||
|
BOOL
|
||
|
GetDeviceProperty(
|
||
|
_In_ HDEVINFO DeviceInfoSet,
|
||
|
_In_ PSP_DEVINFO_DATA DeviceInfoData,
|
||
|
_In_ DWORD Property,
|
||
|
_Outptr_ LPTSTR *ppBuffer
|
||
|
);
|
||
|
|
||
|
void
|
||
|
ClearDeviceList(
|
||
|
PDEVICE_GUID_LIST DeviceList
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// DEBUG.C
|
||
|
//
|
||
|
|
||
|
_Success_(return != NULL)
|
||
|
_Post_writable_byte_size_(dwBytes)
|
||
|
HGLOBAL
|
||
|
MyAlloc (
|
||
|
_In_ PCHAR File,
|
||
|
ULONG Line,
|
||
|
DWORD dwBytes
|
||
|
);
|
||
|
|
||
|
_Success_(return != NULL)
|
||
|
_Post_writable_byte_size_(dwBytes)
|
||
|
HGLOBAL
|
||
|
MyReAlloc (
|
||
|
HGLOBAL hMem,
|
||
|
DWORD dwBytes
|
||
|
);
|
||
|
|
||
|
HGLOBAL
|
||
|
MyFree (
|
||
|
HGLOBAL hMem
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
MyCheckForLeaks (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// DEVNODE.C
|
||
|
//
|
||
|
|
||
|
|
||
|
PUSB_DEVICE_PNP_STRINGS
|
||
|
DriverNameToDeviceProperties(
|
||
|
_In_reads_bytes_(cbDriverName) PCHAR DriverName,
|
||
|
_In_ size_t cbDriverName
|
||
|
);
|
||
|
|
||
|
VOID FreeDeviceProperties(
|
||
|
_In_ PUSB_DEVICE_PNP_STRINGS *ppDevProps
|
||
|
);
|
||
|
//
|
||
|
// DISPAUD.C
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
DisplayAudioDescriptor (
|
||
|
PUSB_AUDIO_COMMON_DESCRIPTOR CommonDesc,
|
||
|
UCHAR bInterfaceSubClass
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// DISPVID.C
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
DisplayVideoDescriptor (
|
||
|
PVIDEO_SPECIFIC VidCommonDesc,
|
||
|
UCHAR bInterfaceSubClass,
|
||
|
PSTRING_DESCRIPTOR_NODE StringDescs,
|
||
|
DEVICE_POWER_STATE LatestDevicePowerState
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// DISPLAY.C
|
||
|
//
|
||
|
|
||
|
BOOL
|
||
|
ValidateDescAddress (
|
||
|
PUSB_COMMON_DESCRIPTOR commonDesc
|
||
|
);
|
||
|
|
||
|
#ifdef CUSTOM_USBVIEW
|
||
|
EXTERN_C PUSBDEVICEINFO enumerate_hub_port(HANDLE hHubDevice, ULONG port_index);
|
||
|
EXTERN_C PUSBDEVICEINFO get_usb_device_info(const char* device_name/*\\\\.\\USB..*/);
|
||
|
EXTERN_C void free_usb_device_info(PUSBDEVICEINFO pudi);
|
||
|
#endif
|