From 53c19600779fb77e42a419c88042d36593691709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=B6glinger-Stelzer?= Date: Mon, 11 May 2020 17:46:57 +0200 Subject: [PATCH] Changed function --- sys/EmulationTargetPDO.cpp | 10 ++++++---- sys/EmulationTargetPDO.hpp | 2 +- sys/Queue.cpp | 10 +++------- sys/busenum.cpp | 11 +++++------ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/sys/EmulationTargetPDO.cpp b/sys/EmulationTargetPDO.cpp index 5d785b7..4b3c1c7 100644 --- a/sys/EmulationTargetPDO.cpp +++ b/sys/EmulationTargetPDO.cpp @@ -456,8 +456,8 @@ EmulationTargetPDO(ULONG Serial, LONG SessionId, USHORT VendorId, USHORT Product KeInitializeEvent(&this->_PdoBootNotificationEvent, NotificationEvent, FALSE); } -ViGEm::Bus::Core::EmulationTargetPDO* ViGEm::Bus::Core::EmulationTargetPDO::GetPdoBySerial( - IN WDFDEVICE ParentDevice, IN ULONG SerialNo) +bool ViGEm::Bus::Core::EmulationTargetPDO::GetPdoBySerial( + IN WDFDEVICE ParentDevice, IN ULONG SerialNo, OUT EmulationTargetPDO** Object) { WDF_CHILD_RETRIEVE_INFO info; @@ -474,9 +474,11 @@ ViGEm::Bus::Core::EmulationTargetPDO* ViGEm::Bus::Core::EmulationTargetPDO::GetP const WDFDEVICE pdoDevice = WdfChildListRetrievePdo(list, &info); if (pdoDevice == nullptr) - return nullptr; + return false; - return EmulationTargetPdoGetContext(pdoDevice)->Target; + *Object = EmulationTargetPdoGetContext(pdoDevice)->Target; + + return true; } NTSTATUS ViGEm::Bus::Core::EmulationTargetPDO::EvtDevicePrepareHardware( diff --git a/sys/EmulationTargetPDO.hpp b/sys/EmulationTargetPDO.hpp index d0396b6..2ceffe9 100644 --- a/sys/EmulationTargetPDO.hpp +++ b/sys/EmulationTargetPDO.hpp @@ -32,7 +32,7 @@ namespace ViGEm::Bus::Core virtual ~EmulationTargetPDO() = default; - static EmulationTargetPDO* GetPdoBySerial(IN WDFDEVICE ParentDevice, IN ULONG SerialNo); + static bool GetPdoBySerial(IN WDFDEVICE ParentDevice, IN ULONG SerialNo, OUT EmulationTargetPDO** Object); virtual NTSTATUS PdoPrepareDevice(PWDFDEVICE_INIT DeviceInit, PUNICODE_STRING DeviceId, diff --git a/sys/Queue.cpp b/sys/Queue.cpp index 3e80dd5..ab8b7f4 100644 --- a/sys/Queue.cpp +++ b/sys/Queue.cpp @@ -164,9 +164,7 @@ VOID Bus_EvtIoDeviceControl( break; } - pdo = EmulationTargetPDO::GetPdoBySerial(Device, xusbSubmit->SerialNo); - - if (pdo == nullptr) + if (!EmulationTargetPDO::GetPdoBySerial(Device, xusbSubmit->SerialNo, &pdo)) status = STATUS_DEVICE_DOES_NOT_EXIST; else status = pdo->SubmitReport(xusbSubmit); @@ -262,10 +260,8 @@ VOID Bus_EvtIoDeviceControl( status = STATUS_INVALID_PARAMETER; break; } - - pdo = EmulationTargetPDO::GetPdoBySerial(Device, ds4Submit->SerialNo); - - if (pdo == nullptr) + + if (!EmulationTargetPDO::GetPdoBySerial(Device, ds4Submit->SerialNo, &pdo)) status = STATUS_DEVICE_DOES_NOT_EXIST; else status = pdo->SubmitReport(ds4Submit); diff --git a/sys/busenum.cpp b/sys/busenum.cpp index dd55cce..16c5cc5 100644 --- a/sys/busenum.cpp +++ b/sys/busenum.cpp @@ -384,13 +384,12 @@ EXTERN_C NTSTATUS Bus_XusbSubmitReport(WDFDEVICE Device, ULONG SerialNo, PXUSB_S EXTERN_C NTSTATUS Bus_QueueNotification(WDFDEVICE Device, ULONG SerialNo, WDFREQUEST Request) { NTSTATUS status; + EmulationTargetPDO* pdo; TraceDbg(TRACE_BUSENUM, "%!FUNC! Entry"); - const auto pdo = EmulationTargetPDO::GetPdoBySerial(Device, SerialNo); - // Validate child - if (pdo == nullptr) + if (!EmulationTargetPDO::GetPdoBySerial(Device, SerialNo, &pdo)) { TraceEvents(TRACE_LEVEL_ERROR, TRACE_BUSENUM, @@ -420,12 +419,12 @@ NTSTATUS Bus_Ds4SubmitReport(WDFDEVICE Device, ULONG SerialNo, PDS4_SUBMIT_REPOR EXTERN_C NTSTATUS Bus_SubmitReport(WDFDEVICE Device, ULONG SerialNo, PVOID Report, BOOLEAN FromInterface) { + EmulationTargetPDO* pdo; + UNREFERENCED_PARAMETER(FromInterface); - const auto pdo = EmulationTargetPDO::GetPdoBySerial(Device, SerialNo); - // Validate child - if (pdo == nullptr) + if (!EmulationTargetPDO::GetPdoBySerial(Device, SerialNo, &pdo)) { TraceEvents(TRACE_LEVEL_ERROR, TRACE_BUSENUM,