[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / bind.c
index c3e2c14..1962d22 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id$
+/*
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
  * FILE:             drivers/net/afd/afd/bind.c
@@ -13,7 +13,7 @@
 NTSTATUS WarmSocketForBind( PAFD_FCB FCB, ULONG ShareType ) {
     NTSTATUS Status;
 
-    AFD_DbgPrint(MID_TRACE,("Called (AF %d)\n",
+    AFD_DbgPrint(MID_TRACE,("Called (AF %u)\n",
                             FCB->LocalAddress->Address[0].AddressType));
 
     if( !FCB->TdiDeviceName.Length || !FCB->TdiDeviceName.Buffer ) {
@@ -43,7 +43,10 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB, ULONG ShareType ) {
 
         if (NT_SUCCESS(Status) && !FCB->Recv.Window)
         {
-            FCB->Recv.Window = ExAllocatePool(PagedPool, FCB->Recv.Size);
+            FCB->Recv.Window = ExAllocatePoolWithTag(PagedPool,
+                                                     FCB->Recv.Size,
+                                                     TAG_AFD_DATA_BUFFER);
+
             if (!FCB->Recv.Window)
                 Status = STATUS_NO_MEMORY;
         }
@@ -56,7 +59,6 @@ NTSTATUS WarmSocketForBind( PAFD_FCB FCB, ULONG ShareType ) {
                                         FCB->Recv.Window,
                                         FCB->Recv.Size,
                                         FCB->AddressFrom,
-                                        &FCB->ReceiveIrp.Iosb,
                                         PacketSocketRecvComplete,
                                         FCB);
 
@@ -77,6 +79,9 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     PFILE_OBJECT FileObject = IrpSp->FileObject;
     PAFD_FCB FCB = FileObject->FsContext;
     PAFD_BIND_DATA BindReq;
+    HANDLE UserHandle = NULL;
+
+    UNREFERENCED_PARAMETER(DeviceObject);
 
     AFD_DbgPrint(MID_TRACE,("Called\n"));
 
@@ -85,7 +90,11 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
         return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY,
                                        Irp, 0 );
 
-    if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress );
+    if (FCB->LocalAddress)
+    {
+        ExFreePoolWithTag(FCB->LocalAddress, TAG_AFD_TRANSPORT_ADDRESS);
+    }
+
     FCB->LocalAddress = TaCopyTransportAddress( &BindReq->Address );
 
     if( FCB->LocalAddress )
@@ -97,10 +106,19 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
     AFD_DbgPrint(MID_TRACE,("FCB->Flags %x\n", FCB->Flags));
 
     if (NT_SUCCESS(Status))
-        FCB->State = SOCKET_STATE_BOUND;
+    {
+        Status = ObOpenObjectByPointer(FCB->AddressFile.Object,
+                                       0,
+                                       NULL,
+                                       MAXIMUM_ALLOWED,
+                                       *IoFileObjectType,
+                                       Irp->RequestorMode,
+                                       &UserHandle);
+        if (NT_SUCCESS(Status))
+            FCB->State = SOCKET_STATE_BOUND;
+    }
 
     /* MSAFD relies on us returning the address file handle in the IOSB */
     return UnlockAndMaybeComplete( FCB, Status, Irp,
-                                   (ULONG_PTR)FCB->AddressFile.Handle );
+                                   (ULONG_PTR)UserHandle);
 }
-