我在写入写入SafeFileHandle的FileStream时遇到一些问题,此文件用于将数据写入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);
成功创建了流,但Position和Length都返回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)
提前致谢。
答案 0 :(得分:0)
你检查了异常中给定的win错误代码吗? 关于跟踪,应该包含错误代码。
你可能超过数据的限制吗?