Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than Structures, prefix the name with the module name and a period.
USB_NODE_INFORMATION (Structures)
.
C# Definition:
// We need a separate struct to hold the union due to the fact that on 64-bit USB_HUB_NODE gets marshaled
// as 8 bytes while on 32-bit it gets marshaled as 4 bytes. We cannot explicitly lay out the members of this
// struct since FieldOffset requires a constant but here FieldOffset might be 4 or 8 depending on the platform.
[StructLayout(LayoutKind.Sequential)]
struct USB_NODE_INFORMATION
{
public USB_HUB_NODE NodeType; /* hub, mi parent */
public UsbNodeUnion u;
}
// Simpler version if you do not care about USB_MI_PARENT_INFORMATION
[StructLayout(LayoutKind.Sequential)]
struct USB_NODE_INFORMATION
{
public int NodeType;
public USB_HUB_INFORMATION HubInformation; // Yeah, I'm assuming we'll just use the first form
}
VB Definition:
Structure USB_NODE_INFORMATION
Public TODO
End Structure
User-Defined Field Types:
enum USB_HUB_NODE : uint
{
UsbHub,
UsbMIParent
}
None.
[StructLayout(LayoutKind.Sequential)]
struct USB_MI_PARENT_INFORMATION
{
public uint NumberOfInterfaces;
};
// Separate union where we explicitly lay out the members
[StructLayout(LayoutKind.Explicit)]
struct UsbNodeUnion
{
[FieldOffset(0)]
public USB_HUB_INFORMATION HubInformation;
[FieldOffset(0)]
public USB_MI_PARENT_INFORMATION MiParentInformation;
}
Notes:
Although this is a nested structure (and a Union too), you might find it easier to use if you just pick one of the forms
IntPtr h = CreateFile(Root.HubDevicePath, GENERIC_WRITE, FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
if (h.ToInt32() != INVALID_HANDLE_VALUE)
{
USB_NODE_INFORMATION NodeInfo = new USB_NODE_INFORMATION();
NodeInfo.NodeType = (int)USB_HUB_NODE.UsbHub;
int nBytes = Marshal.SizeOf(NodeInfo);
IntPtr ptrNodeInfo = Marshal.AllocHGlobal(nBytes);
Marshal.StructureToPtr(NodeInfo, ptrNodeInfo, true);
// get the Hub Information
if (DeviceIoControl(h2, IOCTL_USB_GET_NODE_INFORMATION, ptrNodeInfo, nBytes, ptrNodeInfo, nBytes, out nBytesReturned, IntPtr.Zero))
{
NodeInfo = (USB_NODE_INFORMATION)Marshal.PtrToStructure(ptrNodeInfo, typeof(USB_NODE_INFORMATION));
// Do something here
}
Marshal.FreeHGlobal(ptrNodeInfo);
CloseHandle(h);
}
Used with DeviceIoControl and [USB_NODE_INFORMATION] to get information about ports on a USB Hub
5/15/2017 4:53:40 AM - -94.229.131.27
Please edit this page!
Do you have...
helpful tips?
corrections to the existing content?
alternate definitions?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing any supporting types needed.