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

commit a82ff90b218d2f4101e8666a5533cca90298b9fd
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Thu Jun 10 21:16:27 2021 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Wed Jun 16 22:14:01 2021 +0200

    [NTOS:IO] Minor code style changes...
    
    - Fix/add comments;
    - Reduce indentation level;
    - Direct copy for registry integer values;
    - Use for-loops for linked lists;
    - Use ULONG when the API uses it (sizes for Ob, or REG_DWORD data in 
registry).
---
 ntoskrnl/io/iomgr/driver.c | 134 ++++++++++++++++++++++-----------------------
 1 file changed, 66 insertions(+), 68 deletions(-)

diff --git a/ntoskrnl/io/iomgr/driver.c b/ntoskrnl/io/iomgr/driver.c
index 2b6899ce884..4fd092662d4 100644
--- a/ntoskrnl/io/iomgr/driver.c
+++ b/ntoskrnl/io/iomgr/driver.c
@@ -133,19 +133,19 @@ IopGetDriverNames(
 
     PAGED_CODE();
 
-    // 1. Check the "ObjectName" field in the driver's registry key (it has 
the priority)
+    /* 1. Check the "ObjectName" field in the driver's registry key (it has 
priority) */
     status = IopGetRegistryValue(ServiceHandle, L"ObjectName", &kvInfo);
     if (NT_SUCCESS(status))
     {
-        // we're got the ObjectName. Use it to create the DRIVER_OBJECT
+        /* We've got the ObjectName, use it as the driver name */
         if (kvInfo->Type != REG_SZ || kvInfo->DataLength == 0)
         {
             ExFreePool(kvInfo);
             return STATUS_ILL_FORMED_SERVICE_ENTRY;
         }
 
-        driverName.Length = kvInfo->DataLength - sizeof(WCHAR),
-        driverName.MaximumLength = kvInfo->DataLength,
+        driverName.Length = kvInfo->DataLength - sizeof(WCHAR);
+        driverName.MaximumLength = kvInfo->DataLength;
         driverName.Buffer = ExAllocatePoolWithTag(NonPagedPool, 
driverName.MaximumLength, TAG_IO);
         if (!driverName.Buffer)
         {
@@ -159,41 +159,45 @@ IopGetDriverNames(
         ExFreePool(kvInfo);
     }
 
-    // check if we need to get ServiceName as well
+    /* Check whether we need to get ServiceName as well, either to construct
+     * the driver name (because we could not use "ObjectName"), or because
+     * it is requested by the caller. */
     PKEY_BASIC_INFORMATION basicInfo;
     if (!NT_SUCCESS(status) || ServiceName != NULL)
     {
+        /* Retrieve the necessary buffer size */
         ULONG infoLength;
         status = ZwQueryKey(ServiceHandle, KeyBasicInformation, NULL, 0, 
&infoLength);
-        if (status == STATUS_BUFFER_TOO_SMALL)
+        if (status != STATUS_BUFFER_TOO_SMALL)
         {
-            basicInfo = ExAllocatePoolWithTag(PagedPool, infoLength, TAG_IO);
-            if (!basicInfo)
-            {
-                return STATUS_INSUFFICIENT_RESOURCES;
-            }
-
-            status = ZwQueryKey(ServiceHandle, KeyBasicInformation, basicInfo, 
infoLength, &infoLength);
-            if (!NT_SUCCESS(status))
-            {
-                ExFreePoolWithTag(basicInfo, TAG_IO);
-                return status;
-            }
+            return NT_SUCCESS(status) ? STATUS_UNSUCCESSFUL : status;
+        }
 
-            serviceName.Length = basicInfo->NameLength;
-            serviceName.MaximumLength = basicInfo->NameLength;
-            serviceName.Buffer = basicInfo->Name;
+        /* Allocate the buffer and retrieve the data */
+        basicInfo = ExAllocatePoolWithTag(PagedPool, infoLength, TAG_IO);
+        if (!basicInfo)
+        {
+            return STATUS_INSUFFICIENT_RESOURCES;
         }
-        else
+
+        status = ZwQueryKey(ServiceHandle, KeyBasicInformation, basicInfo, 
infoLength, &infoLength);
+        if (!NT_SUCCESS(status))
         {
-            return NT_SUCCESS(status) ? STATUS_UNSUCCESSFUL : status;
+            ExFreePoolWithTag(basicInfo, TAG_IO);
+            return status;
         }
+
+        serviceName.Length = basicInfo->NameLength;
+        serviceName.MaximumLength = basicInfo->NameLength;
+        serviceName.Buffer = basicInfo->Name;
     }
 
-    // 2. there is no "ObjectName" - construct it ourselves. Depending on a 
driver type,
-    // it will be either "\Driver\<ServiceName>" or "\FileSystem\<ServiceName>"
+    /* 2. There is no "ObjectName" - construct it ourselves. Depending on the 
driver type,
+     * it will be either "\Driver\<ServiceName>" or 
"\FileSystem\<ServiceName>" */
     if (driverName.Buffer == NULL)
     {
+        /* Retrieve the driver type */
+        ULONG driverType;
         status = IopGetRegistryValue(ServiceHandle, L"Type", &kvInfo);
         if (!NT_SUCCESS(status))
         {
@@ -206,16 +210,19 @@ IopGetDriverNames(
             ExFreePoolWithTag(basicInfo, TAG_IO); // container for serviceName
             return STATUS_ILL_FORMED_SERVICE_ENTRY;
         }
-
-        UINT32 driverType;
-        RtlMoveMemory(&driverType, (PVOID)((ULONG_PTR)kvInfo + 
kvInfo->DataOffset), sizeof(UINT32));
+        driverType = *(PULONG)((ULONG_PTR)kvInfo + kvInfo->DataOffset);
         ExFreePool(kvInfo);
 
-        driverName.Length = 0;
+        /* Compute the necessary driver name string size */
         if (driverType == SERVICE_RECOGNIZER_DRIVER || driverType == 
SERVICE_FILE_SYSTEM_DRIVER)
-            driverName.MaximumLength = sizeof(FILESYSTEM_ROOT_NAME) + 
serviceName.Length;
+            driverName.MaximumLength = sizeof(FILESYSTEM_ROOT_NAME);
         else
-            driverName.MaximumLength = sizeof(DRIVER_ROOT_NAME) + 
serviceName.Length;
+            driverName.MaximumLength = sizeof(DRIVER_ROOT_NAME);
+
+        driverName.MaximumLength += serviceName.Length;
+        driverName.Length = 0;
+
+        /* Allocate and build it */
         driverName.Buffer = ExAllocatePoolWithTag(NonPagedPool, 
driverName.MaximumLength, TAG_IO);
         if (!driverName.Buffer)
         {
@@ -231,8 +238,9 @@ IopGetDriverNames(
         RtlAppendUnicodeStringToString(&driverName, &serviceName);
     }
 
-    if (ServiceName)
+    if (ServiceName != NULL)
     {
+        /* Allocate a copy for the caller */
         PWCHAR buf = ExAllocatePoolWithTag(PagedPool, serviceName.Length, 
TAG_IO);
         if (!buf)
         {
@@ -425,7 +433,7 @@ IopInitializeDriverModule(
 
     DPRINT("Driver name: '%wZ'\n", &DriverName);
 
-    // obtain the registry path for the DriverInit routine
+    /* Obtain the registry path for the DriverInit routine */
     PKEY_NAME_INFORMATION nameInfo;
     ULONG infoLength;
     Status = ZwQueryKey(ServiceHandle, KeyNameInformation, NULL, 0, 
&infoLength);
@@ -468,8 +476,8 @@ IopInitializeDriverModule(
         return Status;
     }
 
-    // create the driver object
-    UINT32 ObjectSize = sizeof(DRIVER_OBJECT) + 
sizeof(EXTENDED_DRIVER_EXTENSION);
+    /* Create the driver object */
+    ULONG ObjectSize = sizeof(DRIVER_OBJECT) + 
sizeof(EXTENDED_DRIVER_EXTENSION);
     OBJECT_ATTRIBUTES objAttrs;
     PDRIVER_OBJECT driverObject;
     InitializeObjectAttributes(&objAttrs,
@@ -551,7 +559,7 @@ IopInitializeDriverModule(
     /* Set up the service key name buffer */
     UNICODE_STRING serviceKeyName;
     serviceKeyName.Length = 0;
-    // put a NULL character at the end for Windows compatibility
+    // NULL-terminate for Windows compatibility
     serviceKeyName.MaximumLength = ServiceName.MaximumLength + 
sizeof(UNICODE_NULL);
     serviceKeyName.Buffer = ExAllocatePoolWithTag(NonPagedPool,
                                                   serviceKeyName.MaximumLength,
@@ -574,7 +582,7 @@ IopInitializeDriverModule(
     /* Make a copy of the driver name to store in the driver object */
     UNICODE_STRING driverNamePaged;
     driverNamePaged.Length = 0;
-    // put a NULL character at the end for Windows compatibility
+    // NULL-terminate for Windows compatibility
     driverNamePaged.MaximumLength = DriverName.MaximumLength + 
sizeof(UNICODE_NULL);
     driverNamePaged.Buffer = ExAllocatePoolWithTag(PagedPool,
                                                    
driverNamePaged.MaximumLength,
@@ -836,8 +844,9 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
     }
 
     /* Lookup the new Ldr entry in PsLoadedModuleList */
-    NextEntry = PsLoadedModuleList.Flink;
-    while (NextEntry != &PsLoadedModuleList)
+    for (NextEntry = PsLoadedModuleList.Flink;
+         NextEntry != &PsLoadedModuleList;
+         NextEntry = NextEntry->Flink)
     {
         LdrEntry = CONTAINING_RECORD(NextEntry,
                                      LDR_DATA_TABLE_ENTRY,
@@ -846,8 +855,6 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
         {
             break;
         }
-
-        NextEntry = NextEntry->Flink;
     }
     ASSERT(NextEntry != &PsLoadedModuleList);
 
@@ -873,7 +880,7 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
 
     // Legacy drivers may add devices inside DriverEntry.
     // We're lazy and always assume that they are doing so
-    BOOLEAN deviceAdded = (_Bool)(DriverObject->Flags & DRVO_LEGACY_DRIVER);
+    BOOLEAN deviceAdded = !!(DriverObject->Flags & DRVO_LEGACY_DRIVER);
 
     HANDLE enumServiceHandle;
     UNICODE_STRING enumName = RTL_CONSTANT_STRING(L"Enum");
@@ -883,7 +890,7 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
 
     if (NT_SUCCESS(Status))
     {
-        UINT32 instanceCount = 0;
+        ULONG instanceCount = 0;
         PKEY_VALUE_FULL_INFORMATION kvInfo;
         Status = IopGetRegistryValue(enumServiceHandle, L"Count", &kvInfo);
         if (!NT_SUCCESS(Status))
@@ -895,15 +902,12 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
             ExFreePool(kvInfo);
             goto Cleanup;
         }
-
-        RtlMoveMemory(&instanceCount,
-                      (PVOID)((ULONG_PTR)kvInfo + kvInfo->DataOffset),
-                      sizeof(UINT32));
+        instanceCount = *(PULONG)((ULONG_PTR)kvInfo + kvInfo->DataOffset);
         ExFreePool(kvInfo);
 
         DPRINT("Processing %u instances for %wZ module\n", instanceCount, 
ModuleName);
 
-        for (UINT32 i = 0; i < instanceCount; i++)
+        for (ULONG i = 0; i < instanceCount; i++)
         {
             WCHAR num[11];
             UNICODE_STRING instancePath;
@@ -920,8 +924,8 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY 
BootLdrEntry)
                 continue;
             }
 
-            instancePath.Length = kvInfo->DataLength - sizeof(WCHAR),
-            instancePath.MaximumLength = kvInfo->DataLength,
+            instancePath.Length = kvInfo->DataLength - sizeof(WCHAR);
+            instancePath.MaximumLength = kvInfo->DataLength;
             instancePath.Buffer = ExAllocatePoolWithTag(NonPagedPool,
                                                         
instancePath.MaximumLength,
                                                         TAG_IO);
@@ -1000,8 +1004,9 @@ IopInitializeBootDrivers(VOID)
 
     /* Loop the boot modules */
     ListHead = &KeLoaderBlock->LoadOrderListHead;
-    NextEntry = ListHead->Flink;
-    while (ListHead != NextEntry)
+    for (NextEntry = ListHead->Flink;
+         NextEntry != ListHead;
+         NextEntry = NextEntry->Flink)
     {
         /* Get the entry */
         LdrEntry = CONTAINING_RECORD(NextEntry,
@@ -1014,15 +1019,13 @@ IopInitializeBootDrivers(VOID)
             /* Call its entrypoint */
             MmCallDllInitialize(LdrEntry, NULL);
         }
-
-        /* Go to the next driver */
-        NextEntry = NextEntry->Flink;
     }
 
     /* Loop the boot drivers */
     ListHead = &KeLoaderBlock->BootDriverListHead;
-    NextEntry = ListHead->Flink;
-    while (ListHead != NextEntry)
+    for (NextEntry = ListHead->Flink;
+         NextEntry != ListHead;
+         NextEntry = NextEntry->Flink)
     {
         /* Get the entry */
         BootEntry = CONTAINING_RECORD(NextEntry,
@@ -1091,17 +1094,15 @@ IopInitializeBootDrivers(VOID)
                 InsertHeadList(NextEntry2, &DriverInfo->Link);
             }
         }
-
-        /* Go to the next driver */
-        NextEntry = NextEntry->Flink;
     }
 
     /* Loop each group index */
     for (i = 0; i < IopGroupIndex; i++)
     {
         /* Loop each group table */
-        NextEntry = IopGroupTable[i].Flink;
-        while (NextEntry != &IopGroupTable[i])
+        for (NextEntry = IopGroupTable[i].Flink;
+             NextEntry != &IopGroupTable[i];
+             NextEntry = NextEntry->Flink)
         {
             /* Get the entry */
             DriverInfo = CONTAINING_RECORD(NextEntry,
@@ -1120,9 +1121,6 @@ IopInitializeBootDrivers(VOID)
                                     NULL,
                                     NULL);
             }
-
-            /* Next entry */
-            NextEntry = NextEntry->Flink;
         }
     }
 
@@ -1650,7 +1648,7 @@ try_again:
 
     /* Finally, call its init function */
     DPRINT("Calling driver entrypoint at %p\n", InitializationFunction);
-    Status = (*InitializationFunction)(DriverObject, NULL);
+    Status = InitializationFunction(DriverObject, NULL);
     if (!NT_SUCCESS(Status))
     {
         /* If it didn't work, then kill the object */
@@ -1890,8 +1888,8 @@ IopLoadDriver(
             return STATUS_ILL_FORMED_SERVICE_ENTRY;
         }
 
-        ImagePath.Length = kvInfo->DataLength - sizeof(UNICODE_NULL),
-        ImagePath.MaximumLength = kvInfo->DataLength,
+        ImagePath.Length = kvInfo->DataLength - sizeof(UNICODE_NULL);
+        ImagePath.MaximumLength = kvInfo->DataLength;
         ImagePath.Buffer = ExAllocatePoolWithTag(PagedPool, 
ImagePath.MaximumLength, TAG_RTLREGISTRY);
         if (!ImagePath.Buffer)
         {

Reply via email to