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

commit e8b048a2828cec10445d4730297a63c45c652578
Author:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
AuthorDate: Sat Aug 19 19:39:56 2023 +0200
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
CommitDate: Tue Aug 29 17:26:55 2023 +0200

    [NTOS:MM] Reformat MmCallDllInitialize and MiCallDllUnloadAndUnloadDll.
---
 ntoskrnl/include/internal/mm.h |  5 ++--
 ntoskrnl/mm/ARM3/sysldr.c      | 60 +++++++++++++++++++++++-------------------
 2 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/ntoskrnl/include/internal/mm.h b/ntoskrnl/include/internal/mm.h
index 5b82d033f37..0d97244a7c9 100644
--- a/ntoskrnl/include/internal/mm.h
+++ b/ntoskrnl/include/internal/mm.h
@@ -1653,9 +1653,8 @@ MmCheckSystemImage(
 NTSTATUS
 NTAPI
 MmCallDllInitialize(
-    IN PLDR_DATA_TABLE_ENTRY LdrEntry,
-    IN PLIST_ENTRY ListHead
-);
+    _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
+    _In_ PLIST_ENTRY ModuleListHead);
 
 VOID
 NTAPI
diff --git a/ntoskrnl/mm/ARM3/sysldr.c b/ntoskrnl/mm/ARM3/sysldr.c
index 22aef1d7110..b17a53b82eb 100644
--- a/ntoskrnl/mm/ARM3/sysldr.c
+++ b/ntoskrnl/mm/ARM3/sysldr.c
@@ -292,24 +292,26 @@ MiLocateExportName(IN PVOID DllBase,
 
 NTSTATUS
 NTAPI
-MmCallDllInitialize(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
-                    IN PLIST_ENTRY ListHead)
+MmCallDllInitialize(
+    _In_ PLDR_DATA_TABLE_ENTRY LdrEntry,
+    _In_ PLIST_ENTRY ModuleListHead)
 {
     UNICODE_STRING ServicesKeyName = RTL_CONSTANT_STRING(
         L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\");
     PMM_DLL_INITIALIZE DllInit;
     UNICODE_STRING RegPath, ImportName;
+    PCWCH Extension;
     NTSTATUS Status;
 
+    PAGED_CODE();
+
     /* Try to see if the image exports a DllInitialize routine */
     DllInit = (PMM_DLL_INITIALIZE)MiLocateExportName(LdrEntry->DllBase,
                                                      "DllInitialize");
-    if (!DllInit) return STATUS_SUCCESS;
+    if (!DllInit)
+        return STATUS_SUCCESS;
 
-    /*
-     * Do a temporary copy of BaseDllName called ImportName
-     * because we'll alter the length of the string.
-     */
+    /* Make a temporary copy of BaseDllName because we will alter its length */
     ImportName.Length = LdrEntry->BaseDllName.Length;
     ImportName.MaximumLength = LdrEntry->BaseDllName.MaximumLength;
     ImportName.Buffer = LdrEntry->BaseDllName.Buffer;
@@ -322,7 +324,8 @@ MmCallDllInitialize(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
                                            TAG_LDR_WSTR);
 
     /* Check if this allocation was unsuccessful */
-    if (!RegPath.Buffer) return STATUS_INSUFFICIENT_RESOURCES;
+    if (!RegPath.Buffer)
+        return STATUS_INSUFFICIENT_RESOURCES;
 
     /* Build and append the service name itself */
     RegPath.Length = ServicesKeyName.Length;
@@ -330,49 +333,52 @@ MmCallDllInitialize(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
                   ServicesKeyName.Buffer,
                   ServicesKeyName.Length);
 
-    /* Check if there is a dot in the filename */
-    if (wcschr(ImportName.Buffer, L'.'))
-    {
-        /* Remove the extension */
-        ImportName.Length = (USHORT)(wcschr(ImportName.Buffer, L'.') -
-            ImportName.Buffer) * sizeof(WCHAR);
-    }
+    /* If the filename has an extension, remove it */
+    Extension = wcschr(ImportName.Buffer, L'.');
+    if (Extension)
+        ImportName.Length = (USHORT)(Extension - ImportName.Buffer) * 
sizeof(WCHAR);
 
-    /* Append service name (the basename without extension) */
+    /* Append the service name (base name without extension) */
     RtlAppendUnicodeStringToString(&RegPath, &ImportName);
 
-    /* Now call the DllInit func */
+    /* Now call DllInitialize */
     DPRINT("Calling DllInit(%wZ)\n", &RegPath);
     Status = DllInit(&RegPath);
 
     /* Clean up */
     ExFreePoolWithTag(RegPath.Buffer, TAG_LDR_WSTR);
 
-    /* Return status value which DllInitialize returned */
+    // TODO: This is for Driver Verifier support.
+    UNREFERENCED_PARAMETER(ModuleListHead);
+
+    /* Return the DllInitialize status value */
     return Status;
 }
 
 BOOLEAN
-NTAPI
-MiCallDllUnloadAndUnloadDll(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
+MiCallDllUnloadAndUnloadDll(
+    _In_ PLDR_DATA_TABLE_ENTRY LdrEntry)
 {
     NTSTATUS Status;
-    PMM_DLL_UNLOAD Func;
+    PMM_DLL_UNLOAD DllUnload;
+
     PAGED_CODE();
 
-    /* Get the unload routine */
-    Func = (PMM_DLL_UNLOAD)MiLocateExportName(LdrEntry->DllBase, "DllUnload");
-    if (!Func) return FALSE;
+    /* Retrieve the DllUnload routine */
+    DllUnload = (PMM_DLL_UNLOAD)MiLocateExportName(LdrEntry->DllBase, 
"DllUnload");
+    if (!DllUnload)
+        return FALSE;
 
     /* Call it and check for success */
-    Status = Func();
-    if (!NT_SUCCESS(Status)) return FALSE;
+    Status = DllUnload();
+    if (!NT_SUCCESS(Status))
+        return FALSE;
 
     /* Lie about the load count so we can unload the image */
     ASSERT(LdrEntry->LoadCount == 0);
     LdrEntry->LoadCount = 1;
 
-    /* Unload it and return true */
+    /* Unload it */
     MmUnloadSystemImage(LdrEntry);
     return TRUE;
 }

Reply via email to