[TCPIP]
[reactos.git] / reactos / drivers / network / tcpip / tcpip / main.c
index b49b6fe..39f8c08 100644 (file)
@@ -50,7 +50,6 @@ VOID TiWriteErrorLog(
  *     DumpData         = Pointer to dump data for the log entry
  */
 {
-#if 0
     PIO_ERROR_LOG_PACKET LogEntry;
     UCHAR EntrySize;
     ULONG StringSize;
@@ -65,35 +64,37 @@ VOID TiWriteErrorLog(
         EntrySize += (UCHAR)StringSize;
     }
 
-    LogEntry = (PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(
-               DriverContext, EntrySize);
-
-    if (LogEntry) {
-        LogEntry->MajorFunctionCode = -1;
-        LogEntry->RetryCount        = -1;
-        LogEntry->DumpDataSize      = (USHORT)(DumpDataCount * sizeof(ULONG));
-        LogEntry->NumberOfStrings   = (String == NULL) ? 1 : 2;
-        LogEntry->StringOffset      = sizeof(IO_ERROR_LOG_PACKET) + (DumpDataCount-1) * sizeof(ULONG);
-        LogEntry->EventCategory     = 0;
-        LogEntry->ErrorCode         = ErrorCode;
-        LogEntry->UniqueErrorValue  = UniqueErrorValue;
-        LogEntry->FinalStatus       = FinalStatus;
-        LogEntry->SequenceNumber    = -1;
-        LogEntry->IoControlCode     = 0;
-
-        if (DumpDataCount)
-            RtlCopyMemory(LogEntry->DumpData, DumpData, DumpDataCount * sizeof(ULONG));
-
-        pString = ((PUCHAR)LogEntry) + LogEntry->StringOffset;
-        RtlCopyMemory(pString, DriverName, sizeof(DriverName));
-        pString += sizeof(DriverName);
-
-        if (String)
-            RtlCopyMemory(pString, String, StringSize);
-
-        IoWriteErrorLogEntry(LogEntry);
-    }
-#endif
+    /* Fail if the required error log entry is too large */
+    if (EntrySize > ERROR_LOG_MAXIMUM_SIZE)
+        return;
+
+    LogEntry = (PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(DriverContext, EntrySize);
+    if (!LogEntry)
+        return;
+
+    LogEntry->MajorFunctionCode = -1;
+    LogEntry->RetryCount        = -1;
+    LogEntry->DumpDataSize      = (USHORT)(DumpDataCount * sizeof(ULONG));
+    LogEntry->NumberOfStrings   = (String == NULL) ? 1 : 2;
+    LogEntry->StringOffset      = sizeof(IO_ERROR_LOG_PACKET) + (DumpDataCount * sizeof(ULONG));
+    LogEntry->EventCategory     = 0;
+    LogEntry->ErrorCode         = ErrorCode;
+    LogEntry->UniqueErrorValue  = UniqueErrorValue;
+    LogEntry->FinalStatus       = FinalStatus;
+    LogEntry->SequenceNumber    = -1;
+    LogEntry->IoControlCode     = 0;
+
+    if (DumpDataCount)
+        RtlCopyMemory(LogEntry->DumpData, DumpData, DumpDataCount * sizeof(ULONG));
+
+    pString = ((PUCHAR)LogEntry) + LogEntry->StringOffset;
+    RtlCopyMemory(pString, DriverName, sizeof(DriverName));
+    pString += sizeof(DriverName);
+
+    if (String)
+        RtlCopyMemory(pString, String, StringSize);
+
+    IoWriteErrorLogEntry(LogEntry);
 }
 
 /*
@@ -319,6 +320,9 @@ NTSTATUS TiCloseFileObject(
             break;
     }
 
+    if (NT_SUCCESS(Status))
+        ExFreePoolWithTag(Context, TRANS_CONTEXT_TAG);
+
     Irp->IoStatus.Status = Status;
 
     return Irp->IoStatus.Status;
@@ -522,6 +526,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));