public static uint Request(SafeFileHandle hPort) { uint HRESULT = 0; uint lpBytesReturned = 0; OKTOPUS_RESET_REQUEST Request = new OKTOPUS_RESET_REQUEST(); OKTOPUS_RESET_REPLY Reply = new OKTOPUS_RESET_REPLY(); Request.OpCode = (ulong)IOFLOWUSER_OPCODE.OpCodeReset; Reply.Result = 0; // Pin buffers for duration of synchronous call to FilterSendMessage. GCHandle gchRequest = GCHandle.Alloc(Request, GCHandleType.Pinned); GCHandle gchReply = GCHandle.Alloc(Reply, GCHandleType.Pinned); // FilterSendMessage() ref http://msdn.microsoft.com/en-us/library/windows/hardware/ff541513(v=vs.85).aspx HRESULT = FilterSendMessage(hPort, // HANDLE hPort, gchRequest.AddrOfPinnedObject(), // LPVOID lpInBuffer, (uint)Marshal.SizeOf(Request), // DWORD dwInBufferSize, gchReply.AddrOfPinnedObject(), // LPVOID lpOutBuffer, (uint)Marshal.SizeOf(Reply), // DWORD dwOutBufferSize, out lpBytesReturned); // LPDWORD lpBytesReturned if (HRESULT != S_OK) { Marshal.ThrowExceptionForHR((int)HRESULT); } gchRequest.Free(); gchReply.Free(); if (Reply.Result != (uint)RESULTCODES.OKTO_RESULT_SUCCESS) { throw new ExceptionIoFlow(DecodeOktoResult(Reply.Result)); } return(HRESULT); }
public static uint Request(SafeFileHandle hPort) { uint HRESULT = 0; uint lpBytesReturned = 0; OKTOPUS_RESET_REQUEST Request = new OKTOPUS_RESET_REQUEST(); OKTOPUS_RESET_REPLY Reply = new OKTOPUS_RESET_REPLY(); Request.OpCode = (ulong)IOFLOWUSER_OPCODE.OpCodeReset; Reply.Result = 0; // Pin buffers for duration of synchronous call to FilterSendMessage. GCHandle gchRequest = GCHandle.Alloc(Request, GCHandleType.Pinned); GCHandle gchReply = GCHandle.Alloc(Reply, GCHandleType.Pinned); // FilterSendMessage() ref http://msdn.microsoft.com/en-us/library/windows/hardware/ff541513(v=vs.85).aspx HRESULT = FilterSendMessage(hPort, // HANDLE hPort, gchRequest.AddrOfPinnedObject(), // LPVOID lpInBuffer, (uint)Marshal.SizeOf(Request), // DWORD dwInBufferSize, gchReply.AddrOfPinnedObject(), // LPVOID lpOutBuffer, (uint)Marshal.SizeOf(Reply), // DWORD dwOutBufferSize, out lpBytesReturned); // LPDWORD lpBytesReturned if (HRESULT != S_OK) { Marshal.ThrowExceptionForHR((int)HRESULT); } gchRequest.Free(); gchReply.Free(); if (Reply.Result != (uint)RESULTCODES.OKTO_RESULT_SUCCESS) { throw new ExceptionIoFlow(DecodeOktoResult(Reply.Result)); } return HRESULT; }