11 KiB
source_files, generated_at, model, schema_version, sha256
| source_files | generated_at | model | schema_version | sha256 | ||||
|---|---|---|---|---|---|---|---|---|
|
2026-04-17T15:36:27.113042+00:00 | zai-org/GLM-5-FP8 | 1 | 9419e177c65ead81 |
USBFramework Module Documentation
1. Purpose
The USBFramework module provides low-level Windows API interoperability for USB device communication in the DTS system. It encapsulates P/Invoke declarations and helper logic for three distinct areas: file I/O operations (kernel32.dll), HID-class device communication (hid.dll), and device management/enumeration (setupapi.dll, user32.dll). The module enables the application to discover, connect to, and communicate with USB devices through their device paths and interface class GUIDs, while also supporting device arrival/removal notifications.
2. Public Interface
FileIODeclarations (DTS.Common.USBFramework)
A static container class for Windows kernel32.dll file I/O P/Invoke declarations.
Constants:
GENERIC_READ(0x80000000),GENERIC_WRITE(0x40000000)FILE_SHARE_READ(0x00000001),FILE_SHARE_WRITE(0x00000002)FILE_FLAG_OVERLAPPED(0x40000000)INVALID_HANDLE_VALUE(-1)OPEN_EXISTING(3)WAIT_TIMEOUT(0x102),WAIT_OBJECT_0(0),WAIT_FAILED(0xFFFFFFFF),WAIT_ABANDONED(0x00000080)FSCTL_SET_COMPRESSION(0x9C040)
Structures:
OVERLAPPED- Sequential layout structure withInternal,InternalHigh,Offset,OffsetHigh,hEventfieldsSECURITY_ATTRIBUTES- Sequential layout structure withnLength,lpSecurityDescriptor,bInheritHandlefields (allint)
P/Invoke Functions:
int CancelIo(int hFile)int CloseHandle(int hObject)int CreateEvent(ref SECURITY_ATTRIBUTES SecurityAttributes, int bManualReset, int bInitialState, string lpName)int CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, uint dwFlagsAndAttributes, int hTemplateFile)int GetLastError()int ReadFile(int hFile, ref byte lpBuffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, int lpOverlapped)uint WaitForSingleObject(int hHandle, int dwMilliseconds)int WriteFile(int hFile, ref byte lpBuffer, int nNumberOfBytesToWrite, ref int lpNumberOfBytesWritten, int lpOverlapped)int DeviceIoControl(IntPtr hDevice, int dwIoControlCode, ref short lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int nOutBufferSize, ref int lpBytesReturned, IntPtr lpOverlapped)
FileIO (DTS.Common.USBFramework)
A secondary file I/O declaration class with safer handle types.
Constants:
FILE_ATTRIBUTE_NORMAL(0x80),FILE_FLAG_OVERLAPPED(0x40000000)FILE_SHARE_READ(0x1),FILE_SHARE_WRITE(0x2)GENERIC_READ(0x80000000),GENERIC_WRITE(0x40000000)INVALID_HANDLE_VALUE(-1),OPEN_EXISTING(3)
Structure:
SECURITY_ATTRIBUTES- Sequential layout withnLength(int),lpSecurityDescriptor(IntPtr),bInheritHandle(int)
P/Invoke Functions:
bool CloseHandle(SafeFileHandle hObject)SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile)
HIDDeclarations (DTS.DASLib.Connection.USBFramework)
A sealed class containing P/Invoke declarations for HID-class device communication via hid.dll.
Constants:
HidP_Input(0),HidP_Output(1),HidP_Feature(2)
Structures:
HIDD_ATTRIBUTES- ContainsSize(int),VendorID(short),ProductID(short),VersionNumber(short)HIDP_CAPS- Device capabilities including report byte lengths, usage info, and 17-elementReservedarrayHidP_Value_Caps- Value capabilities structure with extensive fields for usage ranges, logical/physical min/max, bit sizes, etc.
P/Invoke Functions:
bool HidD_FlushQueue(int HidDeviceObject)bool HidD_FreePreparsedData(ref IntPtr PreparsedData)int HidD_GetAttributes(int HidDeviceObject, ref HIDD_ATTRIBUTES Attributes)bool HidD_GetFeature(int HidDeviceObject, ref byte lpReportBuffer, int ReportBufferLength)bool HidD_GetInputReport(int HidDeviceObject, ref byte lpReportBuffer, int ReportBufferLength)void HidD_GetHidGuid(ref System.Guid HidGuid)bool HidD_GetNumInputBuffers(int HidDeviceObject, ref int NumberBuffers)bool HidD_GetPreparsedData(int HidDeviceObject, ref IntPtr PreparsedData)bool HidD_SetFeature(int HidDeviceObject, ref byte lpReportBuffer, int ReportBufferLength)bool HidD_SetNumInputBuffers(int HidDeviceObject, int NumberBuffers)bool HidD_SetOutputReport(int HidDeviceObject, ref byte lpReportBuffer, int ReportBufferLength)int HidP_GetCaps(IntPtr PreparsedData, ref HIDP_CAPS Capabilities)int HidP_GetValueCaps(short ReportType, ref byte ValueCaps, ref short ValueCapsLength, IntPtr PreparsedData)
DeviceManagementDeclarations (DTS.Common.USBFramework)
A class containing P/Invoke declarations for device management via setupapi.dll, user32.dll, and advapi32.dll.
Constants:
- Device event types:
DBT_DEVICEARRIVAL(0x8000),DBT_DEVICEREMOVECOMPLETE(0x8004) - Device types:
DBT_DEVTYP_DEVICEINTERFACE(5),DBT_DEVTYP_HANDLE(6) - Notification flags:
DEVICE_NOTIFY_ALL_INTERFACE_CLASSES(4),DEVICE_NOTIFY_SERVICE_HANDLE(1),DEVICE_NOTIFY_WINDOW_HANDLE(0) WM_DEVICECHANGE(0x219)- Error codes:
ERROR_INSUFFICIENT_BUFFER(122),NO_ERROR(0),ERROR_NO_MORE_ITEMS(259) - SetupAPI flags:
DIGCF_PRESENT(0x00000002),DIGCF_DEVICEINTERFACE(0x00000010),DIGCF_ALLCLASSES(0x00000004) - Registry property constants:
SPDRP_FRIENDLYNAME,SPDRP_DEVICEDESC,SPDRP_DRIVER
Structures:
DEV_BROADCAST_DEVICEINTERFACE- For registering device notificationsDEV_BROADCAST_DEVICEINTERFACE_1- For reading device name and class GUIDDEV_BROADCAST_HANDLE,DEV_BROADCAST_HDRSP_DEVICE_INTERFACE_DATA,SP_DEVICE_INTERFACE_DETAIL_DATA,SP_DEVINFO_DATA
Enum:
RegSAM- Registry access mask flags
P/Invoke Functions:
IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, int Flags)int SetupDiCreateDeviceInfoList(ref System.Guid ClassGuid, int hwndParent)int SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet)int SetupDiEnumDeviceInterfaces(IntPtr DeviceInfoSet, IntPtr DeviceInfoData, ref System.Guid InterfaceClassGuid, int MemberIndex, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData)IntPtr SetupDiGetClassDevs(ref System.Guid ClassGuid, string Enumerator, int hwndParent, uint Flags)bool SetupDiGetDeviceInterfaceDetail(IntPtr DeviceInfoSet, ref SP_DEVICE_INTERFACE_DATA DeviceInterfaceData, IntPtr DeviceInterfaceDetailData, int DeviceInterfaceDetailDataSize, ref int RequiredSize, IntPtr DeviceInfoData)bool SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, uint MemberIndex, out SP_DEVINFO_DATA DeviceInfoData)IntPtr SetupDiGetClassDevsA(ref Guid ClassGuid, uint Enumerator, IntPtr hwndParent, uint Flags)bool SetupDiGetDeviceRegistryPropertyA(IntPtr DeviceInfoSet, SP_DEVINFO_DATA DeviceInfoData, uint Property, uint PropertyRegDataType, StringBuilder PropertyBuffer, uint PropertyBufferSize, IntPtr RequiredSize)int SetupDiOpenDevRegKey(IntPtr DeviceInfoSet, ref SP_DEVINFO_DATA DeviceInfoData, uint Scope, uint HwProfile, uint KeyType, RegSAM samDesired)uint RegQueryValueEx(int hKey, string lpValueName, uint lpReserved, out uint lpType, ref byte[] lpData, ref uint lpcbData)bool UnregisterDeviceNotification(IntPtr Handle)int GetLastError()
DeviceManagement (DTS.Common.USBFramework)
A concrete class implementing IDisposable that provides high-level device management operations.
Methods:
-
void Dispose()- Empty implementation; no resources released. -
bool DeviceNameMatch(Message m, string mydevicePathName)- Compares the device path name from aWM_DEVICECHANGEmessage against a known device path. Returnstrueif names match (case-insensitive),falseotherwise. Only processes messages wheredbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE. -
bool FindDeviceFromGuid(Guid myGuid, ref string[] devicePathName)- Enumerates all present devices matching the specified interface class GUID. PopulatesdevicePathNamearray with device paths. Returnstrueif at least one device found. Caller must pre-allocate the string array. -
bool RegisterForDeviceNotifications(IntPtr formHandle, Guid classGuid, ref IntPtr deviceNotificationHandle)- Registers a window to receive device arrival/removal notifications for a specific interface class. Returnstrueon success. -
void StopReceivingDeviceNotifications(IntPtr deviceNotificationHandle)- Unregisters device notifications. Failures are silently ignored. -
bool GetDeviceRegistryProperty(Guid myGuid)- Enumerates devices and logs their driver registry property (SPDRP_DRIVER) viaAPILogger.Log(). Returnstrueon success.
Static Fields:
IS64_BIT_PROCESS- Readonly boolean, computed as(IntPtr.Size == 8)
3. Invariants
- Handle Validity: All handle parameters passed to P/Invoke functions must be valid; the module does not validate handles before use.
- Array Pre-allocation:
FindDeviceFromGuidrequires the caller to pre-allocate thedevicePathNamestring array with sufficient size; the method does not resize the array. - Structure Size:
SP_DEVICE_INTERFACE_DATA.cbSizeandSP_DEVICE_INTERFACE_DETAIL_DATA.cbSizemust be set before passing to API functions;DeviceManagementhandles this internally. - Memory Management:
FindDeviceFromGuidallocates unmanaged memory viaMarshal.AllocHGlobaland must free it viaMarshal.FreeHGlobal; thefinallyblock ensures cleanup even on exceptions. - 32/64-bit Compatibility: The code explicitly handles pointer size differences via
IS64_BIT_PROCESSfor structure marshaling inFindDeviceFromGuidandRegisterForDeviceNotifications. - Device Path String Size: In
DeviceNameMatch, the device name string size is calculated as(dbch_size - 28) / 2, assuming 28 bytes for the header structure.
4. Dependencies
This module depends on:
System(core types)System.Runtime.InteropServices(P/Invoke, Marshal)System.Text(StringBuilder)System.Diagnostics(Debug - commented out but imported)System.Windows.Forms(Message type)Microsoft.Win32.SafeHandles(SafeFileHandle)DTS.Common.Utilities.Logging(APILogger - used inDeviceManagement.GetDeviceRegistryProperty)
What depends on this module:
- Not determinable from the provided source files alone.
5. Gotchas
-
Namespace Inconsistency:
HIDDeclarationsresides in namespaceDTS.DASLib.Connection.USBFramework, while all other classes are inDTS.Common.USBFramework. This may cause confusion or require multiple using directives. -
Duplicate Constants:
FileIODeclarationsandFileIOboth define the same constants (e.g.,GENERIC_READ,GENERIC_WRITE,FILE_FLAG_OVERLAPPED,INVALID_HANDLE_VALUE,OPEN_EXISTING) with identical or similar values. The purpose of this duplication is unclear from source. -
Duplicate SECURITY_ATTRIBUTES: Two different
SECURITY_ATTRIBUTESstructures exist—one inFileIODeclarations(with `int