From 2a9a4034d944b4bf99455152c2843bdd0e31b933 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 27 Aug 2012 06:19:19 +0000 Subject: [PATCH] [AFD] - Fix a bug causing the event passed to WSAEnumNetworkEvents to remain set after the call svn path=/trunk/; revision=57176 --- reactos/drivers/network/afd/afd/select.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index 71d914beed3..e525de3a499 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -324,6 +324,8 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp, PAFD_ENUM_NETWORK_EVENTS_INFO EnumReq = (PAFD_ENUM_NETWORK_EVENTS_INFO)LockRequest( Irp, IrpSp, TRUE ); PAFD_FCB FCB = FileObject->FsContext; + PKEVENT UserEvent; + NTSTATUS Status; AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB)); @@ -335,6 +337,23 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp, return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0 ); } + Status = ObReferenceObjectByHandle(EnumReq->Event, + EVENT_ALL_ACCESS, + ExEventObjectType, + UserMode, + (PVOID *)&UserEvent, + NULL); + if (!NT_SUCCESS(Status)) + { + AFD_DbgPrint(MIN_TRACE,("Unable to reference event %x\n", Status)); + return UnlockAndMaybeComplete(FCB, Status, Irp, 0); + } + + /* Clear the event */ + KeClearEvent(UserEvent); + ObDereferenceObject(UserEvent); + + /* Copy the poll state */ EnumReq->PollEvents = FCB->PollState; RtlCopyMemory( EnumReq->EventStatus, FCB->PollStatus,