- return error code when there is a timeout
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / irp.c
index 7f5f604..3a61c56 100644 (file)
@@ -43,6 +43,9 @@ PortClsPnp(
     PPCLASS_DEVICE_EXTENSION DeviceExt;
     PIO_STACK_LOCATION IoStack;
     IResourceList* resource_list = NULL;
+    ULONG Length;
+    WCHAR szMsg[100];
+    PIO_ERROR_LOG_PACKET EventEntry;
 
     DPRINT("PortClsPnp called\n");
 
@@ -97,7 +100,22 @@ PortClsPnp(
             if (!NT_SUCCESS(Status))
             {
                 DPRINT("StartDevice returned a failure code [0x%8x]\n", Status);
-
+                swprintf(szMsg, L"%%1 failed to start with %x", Status);
+                Length = (wcslen(szMsg) + 1) * sizeof(WCHAR) + sizeof(IO_ERROR_LOG_PACKET);
+                if (Length < ERROR_LOG_MAXIMUM_SIZE)
+                {
+                    EventEntry = (PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(DeviceExt->PhysicalDeviceObject, Length);
+                    if (EventEntry)
+                    {
+                        RtlZeroMemory(EventEntry, Length);
+                        EventEntry->MajorFunctionCode = IRP_MJ_PNP;
+                        EventEntry->NumberOfStrings = 1;
+                        EventEntry->StringOffset = sizeof(IO_ERROR_LOG_PACKET);
+                        EventEntry->ErrorCode = Status;
+                        wcscpy((LPWSTR)(EventEntry + 1), szMsg);
+                        IoWriteErrorLogEntry(EventEntry);
+                    }
+                }
                 Irp->IoStatus.Status = Status;
                 IoCompleteRequest(Irp, IO_NO_INCREMENT);
                 return Status;
@@ -133,7 +151,7 @@ PortClsPnp(
             IoCompleteRequest(Irp, IO_NO_INCREMENT);
             return STATUS_NOT_SUPPORTED;
         case IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
-            DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
+            DPRINT("IRP_MN_FILTER_RESOURCE_REQUIREMENTS Status %x Information %p\n", Irp->IoStatus.Status, Irp->IoStatus.Information);
             Status = Irp->IoStatus.Status;
             IoCompleteRequest(Irp, IO_NO_INCREMENT);
             return Status;