* UPDATE HISTORY:
* 20040708 Created
*/
+
#include "afd.h"
static VOID PrintEvents( ULONG Events ) {
{
KeCancelTimer( &Poll->Timer );
RemoveEntryList( &Poll->ListEntry );
- ExFreePool( Poll );
+ ExFreePoolWithTag(Poll, TAG_AFD_ACTIVE_POLL);
}
Irp->IoStatus.Status = Status;
AFD_DbgPrint(MID_TRACE,("Done\n"));
}
-static VOID SelectTimeout( PKDPC Dpc,
+static KDEFERRED_ROUTINE SelectTimeout;
+static VOID NTAPI SelectTimeout( PKDPC Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2 ) {
KIRQL OldIrql;
PAFD_DEVICE_EXTENSION DeviceExt;
+ UNREFERENCED_PARAMETER(Dpc);
+ UNREFERENCED_PARAMETER(SystemArgument1);
+ UNREFERENCED_PARAMETER(SystemArgument2);
+
AFD_DbgPrint(MID_TRACE,("Called\n"));
Irp = Poll->Irp;
PAFD_HANDLE HandleArray;
UINT i;
- AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %x\n", FileObject));
+ AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %p\n", FileObject));
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
HandleArray = AFD_HANDLES(PollReq);
for( i = 0; i < PollReq->HandleCount; i++ ) {
- AFD_DbgPrint(MAX_TRACE,("Req: %x, This %x\n",
+ AFD_DbgPrint(MAX_TRACE,("Req: %u, This %p\n",
HandleArray[i].Handle, FileObject));
if( (PVOID)HandleArray[i].Handle == FileObject &&
(!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
UINT i, Signalled = 0;
ULONG Exclusive = PollReq->Exclusive;
- AFD_DbgPrint(MID_TRACE,("Called (HandleCount %d Timeout %d)\n",
+ UNREFERENCED_PARAMETER(IrpSp);
+
+ AFD_DbgPrint(MID_TRACE,("Called (HandleCount %u Timeout %d)\n",
PollReq->HandleCount,
(INT)(PollReq->Timeout.QuadPart)));
PollReq->Handles[i].Status =
PollReq->Handles[i].Events & FCB->PollState;
if( PollReq->Handles[i].Status ) {
- AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
+ AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
FCB, FCB->PollState));
Signalled++;
}
PAFD_ACTIVE_POLL Poll = NULL;
- Poll = ExAllocatePool( NonPagedPool, sizeof(AFD_ACTIVE_POLL) );
+ Poll = ExAllocatePoolWithTag(NonPagedPool,
+ sizeof(AFD_ACTIVE_POLL),
+ TAG_AFD_ACTIVE_POLL);
if (Poll){
Poll->Irp = Irp;
KeInitializeTimerEx( &Poll->Timer, NotificationTimer );
- KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc,
- (PKDEFERRED_ROUTINE)SelectTimeout,
- Poll );
+ KeInitializeDpc( (PRKDPC)&Poll->TimeoutDpc, SelectTimeout, Poll );
InsertTailList( &DeviceExt->Polls, &Poll->ListEntry );
(PAFD_EVENT_SELECT_INFO)LockRequest( Irp, IrpSp, FALSE, NULL );
PAFD_FCB FCB = FileObject->FsContext;
+ UNREFERENCED_PARAMETER(DeviceObject);
+
if( !SocketAcquireStateLock( FCB ) ) {
return LostSocket( Irp );
}
return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp,
0 );
}
- AFD_DbgPrint(MID_TRACE,("Called (Event %x Triggers %x)\n",
+ AFD_DbgPrint(MID_TRACE,("Called (Event %p Triggers %u)\n",
EventSelectInfo->EventObject,
EventSelectInfo->Events));
Status = ObReferenceObjectByHandle( (PVOID)EventSelectInfo->
EventObject,
EVENT_ALL_ACCESS,
- ExEventObjectType,
+ *ExEventObjectType,
UserMode,
(PVOID *)&FCB->EventSelect,
NULL );
if((FCB->EventSelect) &&
(FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
{
- AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
+ AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
/* Set the application's event */
KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );
PKEVENT UserEvent;
NTSTATUS Status;
- AFD_DbgPrint(MID_TRACE,("Called (FCB %x)\n", FCB));
+ UNREFERENCED_PARAMETER(DeviceObject);
+
+ AFD_DbgPrint(MID_TRACE,("Called (FCB %p)\n", FCB));
if( !SocketAcquireStateLock( FCB ) ) {
return LostSocket( 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))
+ /* An event may optionally be provided for us to clear */
+ if (EnumReq->Event != NULL)
{
- AFD_DbgPrint(MIN_TRACE,("Unable to reference event %x\n", Status));
- return UnlockAndMaybeComplete(FCB, Status, 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);
+ /* Clear the event */
+ KeClearEvent(UserEvent);
+ ObDereferenceObject(UserEvent);
+ }
/* Copy the poll state, masking out disabled events */
EnumReq->PollEvents = (FCB->PollState & ~FCB->EventSelectDisabled);
PollReq->Handles[i].Status = PollReq->Handles[i].Events & FCB->PollState;
if( PollReq->Handles[i].Status ) {
- AFD_DbgPrint(MID_TRACE,("Signalling %x with %x\n",
+ AFD_DbgPrint(MID_TRACE,("Signalling %p with %x\n",
FCB, FCB->PollState));
Signalled++;
}
KIRQL OldIrql;
PAFD_POLL_INFO PollReq;
- AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %x FileObject %x\n",
+ AFD_DbgPrint(MID_TRACE,("Called: DeviceExt %p FileObject %p\n",
DeviceExt, FileObject));
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
while( ThePollEnt != &DeviceExt->Polls ) {
Poll = CONTAINING_RECORD( ThePollEnt, AFD_ACTIVE_POLL, ListEntry );
PollReq = Poll->Irp->AssociatedIrp.SystemBuffer;
- AFD_DbgPrint(MID_TRACE,("Checking poll %x\n", Poll));
+ AFD_DbgPrint(MID_TRACE,("Checking poll %p\n", Poll));
if( UpdatePollWithFCB( Poll, FileObject ) ) {
ThePollEnt = ThePollEnt->Flink;
if((FCB->EventSelect) &&
(FCB->PollState & (FCB->EventSelectTriggers & ~FCB->EventSelectDisabled)))
{
- AFD_DbgPrint(MID_TRACE,("Setting event %x\n", FCB->EventSelect));
+ AFD_DbgPrint(MID_TRACE,("Setting event %p\n", FCB->EventSelect));
/* Set the application's event */
KeSetEvent( FCB->EventSelect, IO_NETWORK_INCREMENT, FALSE );