コード例 #1
0
ファイル: Driver.cs プロジェクト: sibaoli/Moirai
            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);
            }
コード例 #2
0
ファイル: Driver.cs プロジェクト: ioan-stefanovici/Moirai
            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;
            }