[TCPIP]
[reactos.git] / reactos / drivers / network / tcpip / tcpip / main.c
index 034b9df..57754d6 100644 (file)
@@ -7,8 +7,12 @@
  * REVISIONS:
  *   CSH 01/08-2000 Created
  */
+
 #include "precomp.h"
 
+#include <dispatch.h>
+#include <fileobjs.h>
+
 PDEVICE_OBJECT TCPDeviceObject   = NULL;
 PDEVICE_OBJECT UDPDeviceObject   = NULL;
 PDEVICE_OBJECT IPDeviceObject    = NULL;
@@ -113,6 +117,7 @@ NTSTATUS TiCreateFileObject(
     PVOID ClientContext;
     NTSTATUS Status;
     ULONG Protocol;
+    BOOLEAN Shared;
 
     TI_DbgPrint(DEBUG_IRP, ("Called. DeviceObject is at (0x%X), IRP is at (0x%X).\n", DeviceObject, Irp));
 
@@ -160,9 +165,9 @@ NTSTATUS TiCreateFileObject(
             TI_DbgPrint(MIN_TRACE, ("AddressCount: %d\n", Address->TAAddressCount));
             if( Address->TAAddressCount == 1 )
             {
-                   TI_DbgPrint(MIN_TRACE, ("AddressLength: %\n",
+                   TI_DbgPrint(MIN_TRACE, ("AddressLength: %u\n",
                                            Address->Address[0].AddressLength));
-                   TI_DbgPrint(MIN_TRACE, ("AddressType: %\n",
+                   TI_DbgPrint(MIN_TRACE, ("AddressType: %u\n",
                                            Address->Address[0].AddressType));
             }
 
@@ -196,7 +201,9 @@ NTSTATUS TiCreateFileObject(
             return STATUS_INVALID_PARAMETER;
         }
 
-        Status = FileOpenAddress(&Request, Address, Protocol, NULL);
+        Shared = (IrpSp->Parameters.Create.ShareAccess != 0);
+
+        Status = FileOpenAddress(&Request, Address, Protocol, Shared, NULL);
         if (NT_SUCCESS(Status))
         {
             IrpSp->FileObject->FsContext2 = (PVOID)TDI_TRANSPORT_ADDRESS_FILE;
@@ -312,6 +319,9 @@ NTSTATUS TiCloseFileObject(
             break;
     }
 
+    if (NT_SUCCESS(Status))
+        ExFreePoolWithTag(Context, TRANS_CONTEXT_TAG);
+
     Irp->IoStatus.Status = Status;
 
     return Irp->IoStatus.Status;
@@ -515,6 +525,11 @@ TiDispatch(
       Status = DispTdiDeleteIPAddress(Irp, IrpSp);
       break;
 
+    case IOCTL_QUERY_IP_HW_ADDRESS:
+      TI_DbgPrint(MIN_TRACE, ("QUERY_IP_HW_ADDRESS\n"));
+      Status = DispTdiQueryIpHwAddress(DeviceObject, Irp, IrpSp);
+      break;
+
     default:
       TI_DbgPrint(MIN_TRACE, ("Unknown IOCTL 0x%X\n",
           IrpSp->Parameters.DeviceIoControl.IoControlCode));