https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0b695a6f701296ffa420939b1d3ada5b44f2487f

commit 0b695a6f701296ffa420939b1d3ada5b44f2487f
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Sun May 28 22:44:08 2023 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Sun Jun 4 21:40:08 2023 +0200

    [NTOS:IO] iorsrce.c: Add DBG traces for bus/device enumeration functions.
---
 ntoskrnl/io/iomgr/iorsrce.c | 74 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/ntoskrnl/io/iomgr/iorsrce.c b/ntoskrnl/io/iomgr/iorsrce.c
index d5f40023728..01f2b104a84 100644
--- a/ntoskrnl/io/iomgr/iorsrce.c
+++ b/ntoskrnl/io/iomgr/iorsrce.c
@@ -12,8 +12,19 @@
 /* INCLUDES *****************************************************************/
 
 #include <ntoskrnl.h>
+#define NDEBUG
 #include <debug.h>
 
+#ifndef NDEBUG
+    #define IORSRCTRACE(...)    DbgPrint(__VA_ARGS__)
+#else
+    #if defined(_MSC_VER)
+    #define IORSRCTRACE     __noop
+    #else
+    #define IORSRCTRACE(...)    do { if(0) { DbgPrint(__VA_ARGS__); } } 
while(0)
+    #endif
+#endif
+
 /* GLOBALS *******************************************************************/
 
 static CONFIGURATION_INFORMATION
@@ -150,6 +161,14 @@ IopQueryDeviceDescription(
     UNICODE_STRING TempString;
     WCHAR TempBuffer[14];
 
+    IORSRCTRACE("\nIopQueryDeviceDescription(Query: 0x%p)\n"
+                "    RootKey: '%wZ'\n"
+                "    RootKeyHandle: 0x%p\n"
+                "    Bus: %lu\n",
+                Query,
+                &RootKey, RootKeyHandle,
+                Bus);
+
     /* Temporary string */
     TempString.MaximumLength = sizeof(TempBuffer);
     TempString.Length = 0;
@@ -164,9 +183,12 @@ IopQueryDeviceDescription(
     {
         ControllerNumber = *Query->ControllerNumber;
         MaximumControllerNumber = ControllerNumber + 1;
+        IORSRCTRACE("    Getting controller #%lu\n", ControllerNumber);
     }
     else
     {
+        IORSRCTRACE("    Enumerating controllers in '%wZ'...\n", 
&ControllerRootRegName);
+
         /* Find out how many controllers there are */
         InitializeObjectAttributes(&ObjectAttributes,
                                    &ControllerRootRegName,
@@ -234,6 +256,8 @@ IopQueryDeviceDescription(
         if (!NT_SUCCESS(Status))
             break;
 
+        IORSRCTRACE("    Retrieving controller '%wZ'\n", 
&ControllerRootRegName);
+
         /* Open the registry key */
         InitializeObjectAttributes(&ObjectAttributes,
                                    &ControllerRootRegName,
@@ -289,6 +313,9 @@ IopQueryDeviceDescription(
         /* We now have bus *AND* controller information, is it enough? */
         if (!Query->PeripheralType || !(*Query->PeripheralType))
         {
+            IORSRCTRACE("    --> Bus #%lu Controller #%lu Callout: '%wZ'\n",
+                        Bus, ControllerNumber, &ControllerRootRegName);
+
             Status = Query->CalloutRoutine(Query->Context,
                                            &ControllerRootRegName,
                                            *Query->BusType,
@@ -316,9 +343,12 @@ IopQueryDeviceDescription(
         {
             PeripheralNumber = *Query->PeripheralNumber;
             MaximumPeripheralNumber = PeripheralNumber + 1;
+            IORSRCTRACE("    Getting peripheral #%lu\n", PeripheralNumber);
         }
         else
         {
+            IORSRCTRACE("    Enumerating peripherals in '%wZ'...\n", 
&ControllerRootRegName);
+
             /* Find out how many peripherals there are */
             InitializeObjectAttributes(&ObjectAttributes,
                                        &ControllerRootRegName,
@@ -385,6 +415,8 @@ IopQueryDeviceDescription(
             if (!NT_SUCCESS(Status))
                 break;
 
+            IORSRCTRACE("    Retrieving peripheral '%wZ'\n", 
&ControllerRootRegName);
+
             /* Open the registry key */
             InitializeObjectAttributes(&ObjectAttributes,
                                        &ControllerRootRegName,
@@ -435,6 +467,9 @@ IopQueryDeviceDescription(
                 /* We now have everything the caller could possibly want */
                 if (NT_SUCCESS(Status))
                 {
+                    IORSRCTRACE("    --> Bus #%lu Controller #%lu Peripheral 
#%lu Callout: '%wZ'\n",
+                                Bus, ControllerNumber, PeripheralNumber, 
&ControllerRootRegName);
+
                     Status = Query->CalloutRoutine(Query->Context,
                                                    &ControllerRootRegName,
                                                    *Query->BusType,
@@ -531,6 +566,16 @@ IopQueryBusDescription(
     PKEY_VALUE_FULL_INFORMATION BusInformation[IoQueryDeviceMaxData] =
         {NULL, NULL, NULL};
 
+    IORSRCTRACE("\nIopQueryBusDescription(Query: 0x%p)\n"
+                "    RootKey: '%wZ'\n"
+                "    RootKeyHandle: 0x%p\n"
+                "    KeyIsRoot: %s\n"
+                "    Bus: 0x%p (%lu)\n",
+                Query,
+                &RootKey, RootKeyHandle,
+                KeyIsRoot ? "TRUE" : "FALSE",
+                Bus, Bus ? *Bus : -1);
+
     /* Retrieve the necessary buffer space */
     Status = ZwQueryKey(RootKeyHandle,
                         KeyFullInformation,
@@ -587,6 +632,8 @@ IopQueryBusDescription(
         if (!NT_SUCCESS(Status))
             break;
 
+        IORSRCTRACE("    Seen: '%.*ws'\n", 
BasicInformation->NameLength/sizeof(WCHAR), BasicInformation->Name);
+
         /* What bus are we going to go down? (only check if this is a root 
key) */
         if (KeyIsRoot)
         {
@@ -622,6 +669,8 @@ IopQueryBusDescription(
         RtlAppendUnicodeToString(&SubRootRegName, L"\\");
         RtlAppendUnicodeStringToString(&SubRootRegName, &BusString);
 
+        IORSRCTRACE("    SubRootRegName: '%wZ'\n", &SubRootRegName);
+
         if (!KeyIsRoot)
         {
             /* Parsing a sub-bus key */
@@ -631,6 +680,8 @@ IopQueryBusDescription(
                 /* Identifier string first */
                 RtlInitUnicodeString(&SubBusString, 
IoDeviceInfoNames[SubBusLoop]);
 
+                IORSRCTRACE("    Getting bus value: '%wZ'\n", &SubBusString);
+
                 /* Retrieve the necessary buffer space */
                 ZwQueryValueKey(SubRootKeyHandle,
                                 &SubBusString,
@@ -670,6 +721,8 @@ IopQueryBusDescription(
                     {
                         if (Query->ControllerType == NULL)
                         {
+                            IORSRCTRACE("    --> Bus #%lu Callout: '%wZ'\n", 
*Bus, &SubRootRegName);
+
                             /* We don't want controller information: call the 
callback */
                             Status = Query->CalloutRoutine(Query->Context,
                                                            &SubRootRegName,
@@ -685,6 +738,8 @@ IopQueryBusDescription(
                         }
                         else
                         {
+                            IORSRCTRACE("    --> Getting device on Bus #%lu : 
'%wZ'\n", *Bus, &SubRootRegName);
+
                             /* We want controller information: get it */
                             Status = IopQueryDeviceDescription(Query,
                                                                SubRootRegName,
@@ -1143,6 +1198,25 @@ IoQueryDeviceDescription(
     HANDLE RootRegHandle;
     IO_QUERY Query;
 
+    IORSRCTRACE("\nIoQueryDeviceDescription()\n"
+                "    BusType:          0x%p (%lu)\n"
+                "    BusNumber:        0x%p (%lu)\n"
+                "    ControllerType:   0x%p (%lu)\n"
+                "    ControllerNumber: 0x%p (%lu)\n"
+                "    PeripheralType:   0x%p (%lu)\n"
+                "    PeripheralNumber: 0x%p (%lu)\n"
+                "    CalloutRoutine:   0x%p\n"
+                "    Context:          0x%p\n"
+                "--> Query: 0x%p\n",
+                BusType, BusType ? *BusType : -1,
+                BusNumber, BusNumber ? *BusNumber : -1,
+                ControllerType, ControllerType ? *ControllerType : -1,
+                ControllerNumber, ControllerNumber ? *ControllerNumber : -1,
+                PeripheralType, PeripheralType ? *PeripheralType : -1,
+                PeripheralNumber, PeripheralNumber ? *PeripheralNumber : -1,
+                CalloutRoutine, Context,
+                &Query);
+
     /* Set up the string */
     RootRegKey.Length = 0;
     RootRegKey.MaximumLength = 2048;

Reply via email to