public unsafe string GetDeviceString(byte index) { return(WithHandle(winUsbHandle => { var packet = SetupPacket.MakeGetStringDescriptor(index); var buffer = ArrayPool <byte> .Shared.Rent(StringDescriptor.MaxSize); fixed(void *bufferPtr = &buffer[0]) { if (!WinUsb_ControlTransfer(winUsbHandle, packet, bufferPtr, StringDescriptor.MaxSize, out var descriptorLength, null)) { ArrayPool <byte> .Shared.Return(buffer); return null; } ArrayPool <byte> .Shared.Return(buffer); return StringDescriptor.GetString((StringDescriptor *)bufferPtr); } })); }
static void PrintStringDescriptor(StringDescriptor descriptor) { Console.WriteLine($"Type: {descriptor.Type}"); Console.WriteLine($"Value: {descriptor.Value}"); }