Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by dumbledad · Jan 19, 2017 at 11:28 AM · usbfilestreamdevices

Why is my FileStream constructor throwing an exception for an overlapped HID device 'file' handle?

I'm writing code that needs to read and write (overlapped) from a custom USB device. To test that this works I have written a C# Win32 .Net Framework console app which successfully uses FileStream to talk to the USB device. Here's a snippet from the working code

 var hidHandle = CreateFile(devpath, FileAccess.ReadWrite, FileShare.ReadWrite, IntPtr.Zero, FileMode.Open, FileOptions.Asynchronous, IntPtr.Zero);
 IntPtr lpData;
 if (HidD_GetPreparsedData(hidHandle, out lpData))
 {
     HidCaps devcaps;
     HidP_GetCaps(lpData, out devcaps);
     InputReportByteLength = devcaps.InputReportByteLength; // 65
     OutputReportByteLength = devcaps.OutputReportByteLength; // 65
     fs = new FileStream(hidHandle, FileAccess.ReadWrite, InputReportByteLength, true);
 }

I can then use fs to read and write to the USB device.

When I copy the code over into Unity the call to the FileStream constructor fails and I get this exception thrown:

Invalid handle
at System.IO.FileStream..ctor (IntPtr handle, FileAccess access, Boolean ownsHandle, Int32 bufferSize, Boolean isAsync, Boolean noBuffering) [0x0007d] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileStream.cs:97 at System.IO.FileStream..ctor (IntPtr handle, FileAccess access, Boolean ownsHandle, Int32 bufferSize, Boolean isAsync) [0x00000] in :0
at System.IO.FileStream..ctor (Microsoft.Win32.SafeHandles.SafeFileHandle handle, FileAccess access, Int32 bufferSize, Boolean isAsync) [0x00000] in :0
at (wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (Microsoft.Win32.SafeHandles.SafeFileHandle,System.IO.FileAccess,int,bool)
at Zanzibar.HIDConnector.HIDDevice.USBThreadWorker () [0x0006a] in C:\\Users\\timregan\\Source\\Zanzibar\\Software\\Playground\\UnityHID\\HidTest\\Assets\\HIDDevice.cs:81

The file handle is not invalid, it has already been used successfully in the code fragment to obtain the InputReportByteLength.

I do not understand why code that works under .Net 2.0 targetting Win32 is failing under Unity. My guess is that it is something to do with overlapping 'file' access. Note that the FileOptions.Asynchronous flag passed into this external call is the FILE_FLAG_OVERLAPPED flag in CreateFile

 [DllImport("kernel32.dll")]
 protected static extern SafeFileHandle CreateFile(String pFileName, FileAccess dwDesiredAccess, FileShare dwShareMode, IntPtr pSecurityAttributes, FileMode dwCreationDisposition, FileOptions dwFlagsAndAttributes, IntPtr hTemplateFile);

Does anyone know how to use FileStream to talk to an overlapped HID device 'file' in Unity? Or how to diagnose why this works in a console app and not under Unity?

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image PeymanJackpot · Aug 10, 2021 at 07:44 PM 0
Share

Hi! I have the exact same problem. did you solve yours?

1 Reply

· Add your reply
  • Sort: 
avatar image
1

Answer by WarlockD · Aug 24, 2021 at 11:17 PM

Short Answer, you can't. If you try to open a device string, it will say "invalid directory" because it validates it as a directory instead of a device. You do the same with a handle, it checks the file type and it returns "unknown" so it spits out invalid handle.

Have to do what I did is either replace the version of mono or use harmony to patch a hack. Either way it sucks as it works fine on even older version of .net on windows.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

7 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Questions about portability 0 Answers

Missing FileStream constructor(s): FileStream(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync); 1 Answer

System.IO.IOException: Win32 IO returned 25?anyone 2 Answers

Using x360ce in Unity (potential USB joystick fix!) 1 Answer

Possible to use an external camera (USB) while running on Android? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges