[AFD] Introduce and use pool tags. Thanks go to Arty for assisting me with this....
[reactos.git] / drivers / network / afd / afd / tdi.c
index f99186a..75085bc 100644 (file)
@@ -7,11 +7,11 @@
  * REVISIONS:
  *   CSH 01/09-2000 Created
  */
+
 #include <afd.h>
-#include <pseh/pseh2.h>
-#include "debug.h"
-#include "tdiconn.h"
-#include "tdi_proto.h"
+
+#include <tdikrnl.h>
+#include <tdiinfo.h>
 
 #if DBG
 #if 0
@@ -64,7 +64,7 @@ static NTSTATUS TdiCall(
 
     AFD_DbgPrint(MID_TRACE, ("Called\n"));
 
-    AFD_DbgPrint(MID_TRACE, ("Irp->UserEvent = %x\n", Irp->UserEvent));
+    AFD_DbgPrint(MID_TRACE, ("Irp->UserEvent = %p\n", Irp->UserEvent));
 
     Status = IoCallDriver(DeviceObject, Irp);
     AFD_DbgPrint(MID_TRACE, ("IoCallDriver: %08x\n", Status));
@@ -109,7 +109,7 @@ static NTSTATUS TdiOpenDevice(
     NTSTATUS Status;
     ULONG ShareAccess;
 
-    AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ, %d)\n", DeviceName, ShareType));
+    AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ, %u)\n", DeviceName, ShareType));
 
     /* Determine the share access */
     if (ShareType != AFD_SHARE_REUSE)
@@ -144,7 +144,7 @@ static NTSTATUS TdiOpenDevice(
     if (NT_SUCCESS(Status)) {
         Status = ObReferenceObjectByHandle(*Handle,                       /* Handle to open file */
                                            GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,  /* Access mode */
-                                           IoFileObjectType,              /* Object type */
+                                           *IoFileObjectType,              /* Object type */
                                            KernelMode,                    /* Access mode */
                                            (PVOID*)Object,                /* Pointer to object */
                                            NULL);                         /* Handle information */
@@ -152,7 +152,7 @@ static NTSTATUS TdiOpenDevice(
             AFD_DbgPrint(MIN_TRACE, ("ObReferenceObjectByHandle() failed with status (0x%X).\n", Status));
             ZwClose(*Handle);
         } else {
-            AFD_DbgPrint(MAX_TRACE, ("Got handle (0x%X)  Object (0x%X)\n",
+            AFD_DbgPrint(MAX_TRACE, ("Got handle (%p)  Object (%p)\n",
                                      *Handle, *Object));
         }
     } else {
@@ -189,14 +189,16 @@ NTSTATUS TdiOpenAddressFile(
     ULONG EaLength;
     PTRANSPORT_ADDRESS Address;
 
-    AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ)  Name (0x%X)\n",
+    AFD_DbgPrint(MAX_TRACE, ("Called. DeviceName (%wZ)  Name (%p)\n",
                              DeviceName, Name));
 
     /* EaName must be 0-terminated, even though TDI_TRANSPORT_ADDRESS_LENGTH does *not* include the 0 */
     EaLength = sizeof(FILE_FULL_EA_INFORMATION) +
         TDI_TRANSPORT_ADDRESS_LENGTH +
         TaLengthOfTransportAddress( Name ) + 1;
-    EaInfo = (PFILE_FULL_EA_INFORMATION)ExAllocatePool(NonPagedPool, EaLength);
+    EaInfo = (PFILE_FULL_EA_INFORMATION)ExAllocatePoolWithTag(NonPagedPool,
+                                                              EaLength,
+                                                              TAG_AFD_EA_INFO);
     if (!EaInfo)
         return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -217,7 +219,7 @@ NTSTATUS TdiOpenAddressFile(
                            ShareType,
                            AddressHandle,
                            AddressObject);
-    ExFreePool(EaInfo);
+    ExFreePoolWithTag(EaInfo, TAG_AFD_EA_INFO);
     return Status;
 }
 
@@ -229,13 +231,16 @@ NTSTATUS TdiQueryMaxDatagramLength(
     PTDI_MAX_DATAGRAM_INFO Buffer;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    Buffer = ExAllocatePool(NonPagedPool, sizeof(TDI_MAX_DATAGRAM_INFO));
+    Buffer = ExAllocatePoolWithTag(NonPagedPool,
+                                   sizeof(TDI_MAX_DATAGRAM_INFO),
+                                   TAG_AFD_DATA_BUFFER);
+
     if (!Buffer) return STATUS_NO_MEMORY;
 
     Mdl = IoAllocateMdl(Buffer, sizeof(TDI_MAX_DATAGRAM_INFO), FALSE, FALSE, NULL);
     if (!Mdl)
     {
-        ExFreePool(Buffer);
+        ExFreePoolWithTag(Buffer, TAG_AFD_DATA_BUFFER);
         return STATUS_NO_MEMORY;
     }
 
@@ -253,7 +258,7 @@ NTSTATUS TdiQueryMaxDatagramLength(
     {
         AFD_DbgPrint(MIN_TRACE,("Failed to lock pages\n"));
         IoFreeMdl(Mdl);
-        ExFreePool(Buffer);
+        ExFreePoolWithTag(Buffer, TAG_AFD_DATA_BUFFER);
         return Status;
     }
 
@@ -262,13 +267,13 @@ NTSTATUS TdiQueryMaxDatagramLength(
                                  Mdl);
     if (!NT_SUCCESS(Status))
     {
-        ExFreePool(Buffer);
+        ExFreePoolWithTag(Buffer, TAG_AFD_DATA_BUFFER);
         return Status;
     }
 
     *MaxDatagramLength = Buffer->MaxDatagramSize;
 
-    ExFreePool(Buffer);
+    ExFreePoolWithTag(Buffer, TAG_AFD_DATA_BUFFER);
 
     return STATUS_SUCCESS;
 }
@@ -299,7 +304,9 @@ NTSTATUS TdiOpenConnectionEndpointFile(
         TDI_CONNECTION_CONTEXT_LENGTH +
         sizeof(PVOID) + 1;
 
-    EaInfo = (PFILE_FULL_EA_INFORMATION)ExAllocatePool(NonPagedPool, EaLength);
+    EaInfo = (PFILE_FULL_EA_INFORMATION)ExAllocatePoolWithTag(NonPagedPool,
+                                                              EaLength,
+                                                              TAG_AFD_EA_INFO);
     if (!EaInfo)
         return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -319,7 +326,7 @@ NTSTATUS TdiOpenConnectionEndpointFile(
                            AFD_SHARE_UNIQUE,
                            ConnectionHandle,
                            ConnectionObject);
-    ExFreePool(EaInfo);
+    ExFreePoolWithTag(EaInfo, TAG_AFD_EA_INFO);
     return Status;
 }
 
@@ -329,7 +336,6 @@ NTSTATUS TdiConnect(
     PFILE_OBJECT ConnectionObject,
     PTDI_CONNECTION_INFORMATION ConnectionCallInfo,
     PTDI_CONNECTION_INFORMATION ConnectionReturnInfo,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext)
 /*
@@ -362,7 +368,7 @@ NTSTATUS TdiConnect(
                                             DeviceObject,            /* Device object */
                                             ConnectionObject,        /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
     if (!*Irp) {
         return STATUS_INSUFFICIENT_RESOURCES;
     }
@@ -376,7 +382,7 @@ NTSTATUS TdiConnect(
                     ConnectionCallInfo,     /* Request connection information */
                     ConnectionReturnInfo);  /* Return connection information */
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
 
     return STATUS_PENDING;
 }
@@ -399,7 +405,7 @@ NTSTATUS TdiAssociateAddressFile(
     KEVENT Event;
     PIRP Irp;
 
-    AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (0x%X)  ConnectionObject (0x%X)\n",
+    AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (%p)  ConnectionObject (%p)\n",
                              AddressHandle, ConnectionObject));
 
     if (!ConnectionObject) {
@@ -448,7 +454,7 @@ NTSTATUS TdiDisassociateAddressFile(
     KEVENT Event;
     PIRP Irp;
 
-    AFD_DbgPrint(MAX_TRACE, ("Called. ConnectionObject (0x%X)\n", ConnectionObject));
+    AFD_DbgPrint(MAX_TRACE, ("Called. ConnectionObject (%p)\n", ConnectionObject));
 
     if (!ConnectionObject) {
         AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n"));
@@ -485,7 +491,6 @@ NTSTATUS TdiListen(
     PFILE_OBJECT ConnectionObject,
     PTDI_CONNECTION_INFORMATION *RequestConnectionInfo,
     PTDI_CONNECTION_INFORMATION *ReturnConnectionInfo,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE  CompletionRoutine,
     PVOID CompletionContext)
 /*
@@ -519,7 +524,7 @@ NTSTATUS TdiListen(
                                             DeviceObject,            /* Device object */
                                             ConnectionObject,        /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
     if (*Irp == NULL)
         return STATUS_INSUFFICIENT_RESOURCES;
 
@@ -532,7 +537,7 @@ NTSTATUS TdiListen(
                    *RequestConnectionInfo, /* Request connection information */
                    *ReturnConnectionInfo);  /* Return connection information */
 
-    TdiCall(*Irp, DeviceObject, NULL /* Don't wait for completion */, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL /* Don't wait for completion */, NULL);
 
     return STATUS_PENDING;
 }
@@ -770,7 +775,7 @@ NTSTATUS TdiQueryAddress(
     TDIEntityID *Entities;
     ULONG EntityCount;
     ULONG EntityType;
-    IPSNMP_INFO SnmpInfo;
+    IPSNMPInfo SnmpInfo;
     PIPADDR_ENTRY IpAddress;
     ULONG BufferSize;
     NTSTATUS Status = STATUS_SUCCESS;
@@ -778,7 +783,9 @@ NTSTATUS TdiQueryAddress(
     AFD_DbgPrint(MAX_TRACE, ("Called\n"));
 
     BufferSize = sizeof(TDIEntityID) * 20;
-    Entities   = (TDIEntityID*)ExAllocatePool(NonPagedPool, BufferSize);
+    Entities = (TDIEntityID*)ExAllocatePoolWithTag(NonPagedPool,
+                                                   BufferSize,
+                                                   TAG_AFD_TRANSPORT_ADDRESS);
     if (!Entities) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
         return STATUS_INSUFFICIENT_RESOURCES;
@@ -796,14 +803,14 @@ NTSTATUS TdiQueryAddress(
                                    &BufferSize);        /* Output buffer size */
     if (!NT_SUCCESS(Status)) {
         AFD_DbgPrint(MIN_TRACE, ("Unable to get list of supported entities (Status = 0x%X).\n", Status));
-        ExFreePool(Entities);
+        ExFreePoolWithTag(Entities, TAG_AFD_TRANSPORT_ADDRESS);
         return Status;
     }
 
     /* Locate an IP entity */
     EntityCount = BufferSize / sizeof(TDIEntityID);
 
-    AFD_DbgPrint(MAX_TRACE, ("EntityCount = %d\n", EntityCount));
+    AFD_DbgPrint(MAX_TRACE, ("EntityCount = %u\n", EntityCount));
 
     for (i = 0; i < EntityCount; i++) {
         if (Entities[i].tei_entity == CL_NL_ENTITY) {
@@ -834,16 +841,18 @@ NTSTATUS TdiQueryAddress(
                                            IP_MIB_STATS_ID,             /* Entity id */
                                            &SnmpInfo,                   /* Output buffer */
                                            &BufferSize);                /* Output buffer size */
-            if (!NT_SUCCESS(Status) || (SnmpInfo.NumAddr == 0)) {
+            if (!NT_SUCCESS(Status) || (SnmpInfo.ipsi_numaddr == 0)) {
                 AFD_DbgPrint(MIN_TRACE, ("Unable to get SNMP information or no IP addresses available (Status = 0x%X).\n", Status));
                 break;
             }
 
             /* Query device for all IP addresses */
 
-            if (SnmpInfo.NumAddr != 0) {
-                BufferSize = SnmpInfo.NumAddr * sizeof(IPADDR_ENTRY);
-                IpAddress = (PIPADDR_ENTRY)ExAllocatePool(NonPagedPool, BufferSize);
+            if (SnmpInfo.ipsi_numaddr != 0) {
+                BufferSize = SnmpInfo.ipsi_numaddr * sizeof(IPADDR_ENTRY);
+                IpAddress = (PIPADDR_ENTRY)ExAllocatePoolWithTag(NonPagedPool,
+                                                                 BufferSize,
+                                                                 TAG_AFD_SNMP_ADDRESS_INFO);
                 if (!IpAddress) {
                     AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
                     break;
@@ -859,11 +868,11 @@ NTSTATUS TdiQueryAddress(
                                                &BufferSize);                /* Output buffer size */
                 if (!NT_SUCCESS(Status)) {
                     AFD_DbgPrint(MIN_TRACE, ("Unable to get IP address (Status = 0x%X).\n", Status));
-                    ExFreePool(IpAddress);
+                    ExFreePoolWithTag(IpAddress, TAG_AFD_SNMP_ADDRESS_INFO);
                     break;
                 }
 
-                if (SnmpInfo.NumAddr != 1) {
+                if (SnmpInfo.ipsi_numaddr != 1) {
                     /* Skip loopback address */
                     *Address = DN2H(IpAddress[1].Addr);
                 } else {
@@ -871,7 +880,7 @@ NTSTATUS TdiQueryAddress(
                     *Address = DN2H(IpAddress->Addr);
                 }
 
-                ExFreePool(IpAddress);
+                ExFreePoolWithTag(IpAddress, TAG_AFD_SNMP_ADDRESS_INFO);
             } else {
                 Status = STATUS_UNSUCCESSFUL;
                 break;
@@ -879,7 +888,7 @@ NTSTATUS TdiQueryAddress(
         }
     }
 
-    ExFreePool(Entities);
+    ExFreePoolWithTag(Entities, TAG_AFD_TRANSPORT_ADDRESS);
 
     AFD_DbgPrint(MAX_TRACE, ("Leaving\n"));
 
@@ -892,7 +901,6 @@ NTSTATUS TdiSend(
     USHORT Flags,
     PCHAR Buffer,
     UINT BufferLength,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext)
 {
@@ -916,14 +924,14 @@ NTSTATUS TdiSend(
                                             DeviceObject,            /* Device object */
                                             TransportObject,         /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
 
     if (!*Irp) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
+    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
 
     Mdl = IoAllocateMdl(Buffer,         /* Virtual address */
                         BufferLength,   /* Length of buffer */
@@ -938,7 +946,7 @@ NTSTATUS TdiSend(
     }
 
     _SEH2_TRY {
-        MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
+        MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoReadAccess);
     } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
         AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
         IoFreeMdl(Mdl);
@@ -947,7 +955,7 @@ NTSTATUS TdiSend(
         _SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
     } _SEH2_END;
 
-    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
+    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
 
     TdiBuildSend(*Irp,                   /* I/O Request Packet */
                  DeviceObject,           /* Device object */
@@ -958,7 +966,7 @@ NTSTATUS TdiSend(
                  Flags,                  /* Flags */
                  BufferLength);          /* Length of data */
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
     /* Does not block...  The MDL is deleted in the receive completion
        routine. */
 
@@ -971,7 +979,6 @@ NTSTATUS TdiReceive(
     USHORT Flags,
     PCHAR Buffer,
     UINT BufferLength,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext)
 {
@@ -995,14 +1002,14 @@ NTSTATUS TdiReceive(
                                             DeviceObject,            /* Device object */
                                             TransportObject,         /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
 
     if (!*Irp) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
+    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
 
     Mdl = IoAllocateMdl(Buffer,         /* Virtual address */
                         BufferLength,   /* Length of buffer */
@@ -1028,7 +1035,7 @@ NTSTATUS TdiReceive(
         _SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
     } _SEH2_END;
 
-    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
+    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
 
     TdiBuildReceive(*Irp,                   /* I/O Request Packet */
                     DeviceObject,           /* Device object */
@@ -1040,7 +1047,7 @@ NTSTATUS TdiReceive(
                     BufferLength);          /* Length of data */
 
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
     /* Does not block...  The MDL is deleted in the receive completion
        routine. */
 
@@ -1055,7 +1062,6 @@ NTSTATUS TdiReceiveDatagram(
     PCHAR Buffer,
     UINT BufferLength,
     PTDI_CONNECTION_INFORMATION Addr,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext)
 /*
@@ -1090,14 +1096,14 @@ NTSTATUS TdiReceiveDatagram(
                                             DeviceObject,            /* Device object */
                                             TransportObject,         /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
 
     if (!*Irp) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
+    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
 
     Mdl = IoAllocateMdl(Buffer,         /* Virtual address */
                         BufferLength,   /* Length of buffer */
@@ -1121,7 +1127,7 @@ NTSTATUS TdiReceiveDatagram(
         _SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
     } _SEH2_END;
 
-    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
+    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
 
     TdiBuildReceiveDatagram(*Irp,                   /* I/O Request Packet */
                             DeviceObject,           /* Device object */
@@ -1134,7 +1140,7 @@ NTSTATUS TdiReceiveDatagram(
                             Addr,
                             Flags);                 /* Length of data */
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
     /* Does not block...  The MDL is deleted in the receive completion
        routine. */
 
@@ -1148,7 +1154,6 @@ NTSTATUS TdiSendDatagram(
     PCHAR Buffer,
     UINT BufferLength,
     PTDI_CONNECTION_INFORMATION Addr,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext)
 /*
@@ -1173,7 +1178,7 @@ NTSTATUS TdiSendDatagram(
         return STATUS_INVALID_PARAMETER;
     }
 
-    AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject));
+    AFD_DbgPrint(MID_TRACE,("Called(TransportObject %p)\n", TransportObject));
 
     DeviceObject = IoGetRelatedDeviceObject(TransportObject);
     if (!DeviceObject) {
@@ -1181,18 +1186,24 @@ NTSTATUS TdiSendDatagram(
         return STATUS_INVALID_PARAMETER;
     }
 
+    if (BufferLength == 0)
+    {
+        AFD_DbgPrint(MID_TRACE, ("Succeeding send with length 0.\n"));
+        return STATUS_SUCCESS;
+    }
+
     *Irp = TdiBuildInternalDeviceControlIrp(TDI_SEND_DATAGRAM,       /* Sub function */
                                             DeviceObject,            /* Device object */
                                             TransportObject,         /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
 
     if (!*Irp) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %x:%d\n", Buffer,BufferLength));
+    AFD_DbgPrint(MID_TRACE, ("Allocating irp for %p:%u\n", Buffer,BufferLength));
 
     Mdl = IoAllocateMdl(Buffer,         /* Virtual address */
                         BufferLength,   /* Length of buffer */
@@ -1208,7 +1219,7 @@ NTSTATUS TdiSendDatagram(
     }
 
     _SEH2_TRY {
-        MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoModifyAccess);
+        MmProbeAndLockPages(Mdl, (*Irp)->RequestorMode, IoReadAccess);
     } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
         AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n"));
         IoFreeMdl(Mdl);
@@ -1217,7 +1228,7 @@ NTSTATUS TdiSendDatagram(
         _SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
     } _SEH2_END;
 
-    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl));
+    AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %p\n", Mdl));
 
     TdiBuildSendDatagram(*Irp,                   /* I/O Request Packet */
                          DeviceObject,           /* Device object */
@@ -1228,7 +1239,7 @@ NTSTATUS TdiSendDatagram(
                          BufferLength,           /* Bytes to send */
                          Addr);                  /* Address */
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
     /* Does not block...  The MDL is deleted in the send completion
        routine. */
 
@@ -1240,7 +1251,6 @@ NTSTATUS TdiDisconnect(
     PFILE_OBJECT TransportObject,
     PLARGE_INTEGER Time,
     USHORT Flags,
-    PIO_STATUS_BLOCK Iosb,
     PIO_COMPLETION_ROUTINE CompletionRoutine,
     PVOID CompletionContext,
     PTDI_CONNECTION_INFORMATION RequestConnectionInfo,
@@ -1252,7 +1262,7 @@ NTSTATUS TdiDisconnect(
         return STATUS_INVALID_PARAMETER;
     }
 
-    AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject));
+    AFD_DbgPrint(MID_TRACE,("Called(TransportObject %p)\n", TransportObject));
 
     DeviceObject = IoGetRelatedDeviceObject(TransportObject);
     if (!DeviceObject) {
@@ -1264,7 +1274,7 @@ NTSTATUS TdiDisconnect(
                                             DeviceObject,            /* Device object */
                                             TransportObject,         /* File object */
                                             NULL,                    /* Event */
-                                            Iosb);                   /* Status */
+                                            NULL);                   /* Status */
 
     if (!*Irp) {
         AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
@@ -1281,7 +1291,7 @@ NTSTATUS TdiDisconnect(
                        RequestConnectionInfo,  /* Indication of who to disconnect */
                        ReturnConnectionInfo);  /* Indication of who disconnected */
 
-    TdiCall(*Irp, DeviceObject, NULL, Iosb);
+    TdiCall(*Irp, DeviceObject, NULL, NULL);
 
     return STATUS_PENDING;
 }