diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp
index 70910f8ed8a5bc998049cacfbb7892f65937a9c0..054aab91a71b20ebb4edca559ba65ae4975eea23 100644
--- a/tests/manual/trk/adapter.cpp
+++ b/tests/manual/trk/adapter.cpp
@@ -41,6 +41,25 @@
 
 #if USE_NATIVE
 #include <windows.h>
+
+// Non-blocking replacement for win-api ReadFile function
+BOOL WINAPI TryReadFile(HANDLE          hFile,
+                        LPVOID          lpBuffer,
+                        DWORD           nNumberOfBytesToRead,
+                        LPDWORD         lpNumberOfBytesRead,
+                        LPOVERLAPPED    lpOverlapped)
+{
+    COMSTAT comStat;
+    if(!ClearCommError(hFile, NULL, &comStat)){
+        qDebug() << "ClearCommError() failed";
+        return FALSE;
+    }
+    return ReadFile(hFile,
+                    lpBuffer,
+                    qMin(comStat.cbInQue, nNumberOfBytesToRead),
+                    lpNumberOfBytesRead,
+                    lpOverlapped);
+}
 #endif
 
 #ifdef Q_OS_UNIX
@@ -873,11 +892,11 @@ void Adapter::tryTrkRead()
     //        << stringFromArray(m_trkReadQueue);
 
 #if USE_NATIVE
-    const DWORD BUFFERSIZE = 1;
+    const DWORD BUFFERSIZE = 1024;
     char buffer[BUFFERSIZE];
     DWORD charsRead;
 
-    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
+    while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
         m_trkReadQueue.append(buffer, charsRead);
         if (isValidTrkResult(m_trkReadQueue))
             break;
diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp
index 230ce91bf66a8e07b0ca5cca44772b0e5be4bb4e..dc3cbded0db943511337fc5383bedee08c0fa5cc 100644
--- a/tests/manual/trk/launcher.cpp
+++ b/tests/manual/trk/launcher.cpp
@@ -41,6 +41,25 @@
 
 #if USE_NATIVE
 #include <windows.h>
+
+// Non-blocking replacement for win-api ReadFile function
+BOOL WINAPI TryReadFile(HANDLE          hFile,
+                        LPVOID          lpBuffer,
+                        DWORD           nNumberOfBytesToRead,
+                        LPDWORD         lpNumberOfBytesRead,
+                        LPOVERLAPPED    lpOverlapped)
+{
+    COMSTAT comStat;
+    if(!ClearCommError(hFile, NULL, &comStat)){
+        qDebug() << "ClearCommError() failed";
+        return FALSE;
+    }
+    return ReadFile(hFile,
+                    lpBuffer,
+                    qMin(comStat.cbInQue, nNumberOfBytesToRead),
+                    lpNumberOfBytesRead,
+                    lpOverlapped);
+}
 #endif
 
 #ifdef Q_OS_UNIX
@@ -342,11 +361,11 @@ void Adapter::trkWrite(const TrkMessage &msg)
 void Adapter::tryTrkRead()
 {
 #if USE_NATIVE
-    const DWORD BUFFERSIZE = 1;
+    const DWORD BUFFERSIZE = 1024;
     char buffer[BUFFERSIZE];
     DWORD charsRead;
 
-    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
+    while (TryReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
         m_trkReadQueue.append(buffer, charsRead);
         if (isValidTrkResult(m_trkReadQueue))
             break;