C# 具有设备的文件流和异步I/O

C# 具有设备的文件流和异步I/O,c#,filestream,hid,safefilehandle,C#,Filestream,Hid,Safefilehandle,我在写入FileStream时遇到一些问题写入SafeFileHandle时,此文件用于将数据写入HID设备。我将发布代码片段,因为它们出现在几个不同的对象中 这是句柄创建代码: HidHandle = FileIO.CreateFile(pDevicePathName, FileIO.GENERIC_READ | FileIO.GENERIC_WRITE, FileIO.FILE_SHARE_READ | FileIO.FILE_SHARE_WRITE, IntPtr.Zero, FileIO

我在写入FileStream时遇到一些问题写入SafeFileHandle时,此文件用于将数据写入HID设备。我将发布代码片段,因为它们出现在几个不同的对象中

这是句柄创建代码:

HidHandle = FileIO.CreateFile(pDevicePathName, FileIO.GENERIC_READ | FileIO.GENERIC_WRITE, FileIO.FILE_SHARE_READ | FileIO.FILE_SHARE_WRITE, IntPtr.Zero, FileIO.OPEN_EXISTING, FileIO.FILE_FLAG_OVERLAPPED, 0);
返回的句柄是有效的

然后流:

FileStreamDevice = new FileStream(HidHandle, FileAccess.ReadWrite, 65, true);
流已成功创建,但位置和长度都返回NotSupportedException(这很正常)

然后,我发送消息:

byte[] pMsg = new byte[65];    

ManualResetEvent manualevent = new ManualResetEvent(false);

IAsyncResult asynResult = device.FileStreamDevice.BeginWrite(pMsg, 0, pMsg.Length, 
            new AsyncCallback(End_Write), new DeviceAsyncState(device.FileStreamDeviceData, manualevent));
这将立即返回以下异常消息:

 'The parameter is incorrect'
这是堆栈跟踪的顶部:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.BeginWriteCore(Byte[] bytes, Int32 offset, Int32 numBytes, AsyncCallback userCallback, Object stateObject) 

提前感谢。

您是否检查了异常中给定的win错误代码? 关于跟踪,应该包含一个错误代码


是否有可能超出的数据长度限制?

您正在将构造函数的isAsync参数设置为true。但是,只有当HidHandle为重叠I/O打开时,这才有效。如果不是,则它将失败,并显示语句异常消息。您需要使用Write()而不是BeginWrite()。HidHandle是为重叠I/O打开的,它设置了“FileIO.FILE\u FLAG\u overlapped”参数。当您调用Write()而不是BeginWrite()时会发生什么?如果它仍然失败,那么请考虑这个错误代码来自驱动程序。您解决了这个问题吗?我在向HIDYes写入数据时也遇到了类似的问题,问题是HID设备要求我按照其输出缓冲区大小写入准确的字节数。