From 06cef41f5ece8d981debabc1e79e4db50f65ae49 Mon Sep 17 00:00:00 2001 From: Tim Lodemann Date: Thu, 4 Jul 2024 01:13:41 +0200 Subject: [PATCH] Fix infinite blocking in case of a driver crash --- core/parsec-vdd.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/parsec-vdd.h b/core/parsec-vdd.h index 5168ecf..8d38644 100644 --- a/core/parsec-vdd.h +++ b/core/parsec-vdd.h @@ -279,10 +279,14 @@ static DWORD VddIoControl(HANDLE vdd, VddCtlCode code, const void *data, size_t if (data != NULL && size > 0) memcpy(InBuffer, data, (size < sizeof(InBuffer)) ? size : sizeof(InBuffer)); - Overlapped.hEvent = CreateEventA(NULL, FALSE, FALSE, NULL); + Overlapped.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL); DeviceIoControl(vdd, (DWORD)code, InBuffer, sizeof(InBuffer), &OutBuffer, sizeof(DWORD), NULL, &Overlapped); - GetOverlappedResult(vdd, &Overlapped, &NumberOfBytesTransferred, TRUE); + if (!GetOverlappedResultEx(vdd, &Overlapped, &NumberOfBytesTransferred, 5000, FALSE)) + { + CloseHandle(Overlapped.hEvent); + return 0; + } if (Overlapped.hEvent != NULL) CloseHandle(Overlapped.hEvent);