[ros-dev] [ros-diffs] [ros-arm-bringup] 41658: - Move all the functions from drvlck.c and verifier.c to ARM3's drvmgmt.c: - "Managing driver managing" (by David Welch) is no more... the routines have been properly renamed and cleaned up. - Also moved Driver Verifier helper routines in here, and fixed a couple of bugs: - Do not allow hooking of the kernel or HAL image (tested on Windows Server 2003) - Cleanup some useless variable redefinitions and code complexity. - Documented what some of the Mm Lock/Unlock Pageable Section/Driver functions should do, for later if needed. - Made aliasses so the typo "Pagable" functions redirect to the correct "Pageable" functions. - No functional change -- the Verifier functions were unused, and the drvlock.c functions were unimplemented (and still are). - Also move one more *Pageable* function from wset.c to ARM3's drvmgmt.c -- it seemed to have been a lost orphan (Also unimplemented).
Timo Kreuzer
timo.kreuzer at web.de
Sun Jun 28 15:24:06 CEST 2009
this commit
- removed Alex Ionescu's name from his code (verifier.c)
- reformatted his code simply to reformat it
- changed license from GPL to BSD
Recommend this user gets banned for breaking licence / IP policies /
coding rules. :-P
Regards,
Timo
ros-arm-bringup at svn.reactos.org wrote:
> Author: ros-arm-bringup
> Date: Sun Jun 28 11:32:52 2009
> New Revision: 41658
>
> URL: http://svn.reactos.org/svn/reactos?rev=41658&view=rev
> Log:
> - Move all the functions from drvlck.c and verifier.c to ARM3's drvmgmt.c:
> - "Managing driver managing" (by David Welch) is no more... the routines have been properly renamed and cleaned up.
> - Also moved Driver Verifier helper routines in here, and fixed a couple of bugs:
> - Do not allow hooking of the kernel or HAL image (tested on Windows Server 2003)
> - Cleanup some useless variable redefinitions and code complexity.
> - Documented what some of the Mm Lock/Unlock Pageable Section/Driver functions should do, for later if needed.
> - Made aliasses so the typo "Pagable" functions redirect to the correct "Pageable" functions.
> - No functional change -- the Verifier functions were unused, and the drvlock.c functions were unimplemented (and still are).
> - Also move one more *Pageable* function from wset.c to ARM3's drvmgmt.c -- it seemed to have been a lost orphan (Also unimplemented).
>
>
> Added:
> trunk/reactos/ntoskrnl/mm/ARM3/drvmgmt.c
> - copied, changed from r41647, trunk/reactos/ntoskrnl/mm/drvlck.c
> Removed:
> trunk/reactos/ntoskrnl/mm/drvlck.c
> trunk/reactos/ntoskrnl/mm/verifier.c
> Modified:
> trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
> trunk/reactos/ntoskrnl/mm/wset.c
> trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild
> trunk/reactos/ntoskrnl/ntoskrnl.pspec
>
> Copied: trunk/reactos/ntoskrnl/mm/ARM3/drvmgmt.c (from r41647, trunk/reactos/ntoskrnl/mm/drvlck.c)
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/drvmgmt.c?p2=trunk/reactos/ntoskrnl/mm/ARM3/drvmgmt.c&p1=trunk/reactos/ntoskrnl/mm/drvlck.c&r1=41647&r2=41658&rev=41658&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/mm/drvlck.c [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/mm/ARM3/drvmgmt.c [iso-8859-1] Sun Jun 28 11:32:52 2009
> @@ -1,102 +1,324 @@
> /*
> - * COPYRIGHT: See COPYING in the top level directory
> - * PROJECT: ReactOS kernel
> - * FILE: ntoskrnl/mm/drvlck.c
> - * PURPOSE: Managing driver managing
> - *
> - * PROGRAMMERS: David Welch (welch at mcmail.com)
> - */
> -
> -/* INCLUDES *****************************************************************/
> + * PROJECT: ReactOS Kernel
> + * LICENSE: BSD - See COPYING.ARM in the top level directory
> + * FILE: ntoskrnl/mm/ARM3/drvmgmt.c
> + * PURPOSE: ARM Memory Manager Driver Management
> + * PROGRAMMERS: ReactOS Portable Systems Group
> + */
> +
> +/* INCLUDES *******************************************************************/
>
> #include <ntoskrnl.h>
> +#define NDEBUG
> #include <debug.h>
>
> -/* FUNCTIONS *****************************************************************/
> -
> -#undef MmLockPagableDataSection
> -
> -#if 0
> +#line 15 "ARM�³::DRVMGMT"
> +#define MODULE_INVOLVED_IN_ARM3
> +#include "../ARM3/miarm.h"
> +
> +/* GLOBALS *******************************************************************/
> +
> +MM_DRIVER_VERIFIER_DATA MmVerifierData;
> +LIST_ENTRY MiVerifierDriverAddedThunkListHead;
> +KMUTANT MmSystemLoadLock;
> +ULONG MiActiveVerifierThunks;
> +extern LIST_ENTRY PsLoadedModuleList;
> +
> +/* PRIVATE FUNCTIONS *********************************************************/
> +
> +PLDR_DATA_TABLE_ENTRY
> +NTAPI
> +MiLookupDataTableEntry(IN PVOID Address)
> +{
> + PLDR_DATA_TABLE_ENTRY LdrEntry, FoundEntry = NULL;
> + PLIST_ENTRY NextEntry;
> + PAGED_CODE();
> +
> + //
> + // Loop entries
> + //
> + NextEntry = PsLoadedModuleList.Flink;
> + do
> + {
> + //
> + // Get the loader entry
> + //
> + LdrEntry = CONTAINING_RECORD(NextEntry,
> + LDR_DATA_TABLE_ENTRY,
> + InLoadOrderLinks);
> +
> + //
> + // Check if the address matches
> + //
> + if ((Address >= LdrEntry->DllBase) &&
> + (Address < (PVOID)((ULONG_PTR)LdrEntry->DllBase +
> + LdrEntry->SizeOfImage)))
> + {
> + //
> + // Found a match
> + //
> + FoundEntry = LdrEntry;
> + break;
> + }
> +
> + //
> + // Move on
> + //
> + NextEntry = NextEntry->Flink;
> + } while(NextEntry != &PsLoadedModuleList);
> +
> + //
> + // Return the entry
> + //
> + return FoundEntry;
> +}
> +
> +/* PUBLIC FUNCTIONS ***********************************************************/
> +
> +/*
> + * @unimplemented
> + */
> VOID
> -MmUnlockPagableImageSection(IN PVOID ImageSectionHandle)
> -/*
> - * FUNCTION: Releases a section of driver code or driver data, previously
> - * locked into system space with MmLockPagableCodeSection,
> - * MmLockPagableDataSection or MmLockPagableSectionByHandle
> - * ARGUMENTS:
> - * ImageSectionHandle = Handle returned by MmLockPagableCodeSection or
> - * MmLockPagableDataSection
> - */
> -{
> - // MmUnlockMemoryArea((MEMORY_AREA *)ImageSectionHandle);
> - UNIMPLEMENTED;
> -}
> -#endif
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmLockPagableSectionByHandle(IN PVOID ImageSectionHandle)
> -{
> - UNIMPLEMENTED;
> -}
> -
> -
> -#if 0
> +NTAPI
> +MmUnlockPageableImageSection(IN PVOID ImageSectionHandle)
> +{
> + UNIMPLEMENTED;
> +}
> +
> +/*
> + * @unimplemented
> + */
> +VOID
> +NTAPI
> +MmLockPageableSectionByHandle(IN PVOID ImageSectionHandle)
> +{
> + UNIMPLEMENTED;
> +}
> +
> +/*
> + * @unimplemented
> + */
> PVOID
> -MmLockPagableCodeSection(IN PVOID AddressWithinSection)
> -{
> - PVOID Handle;
> - Handle = MmLocateMemoryAreaByAddress(NULL,AddressWithinSection);
> - MmLockPagableSectionByHandle(Handle);
> - return(Handle);
> -}
> -#endif
> -
> +NTAPI
> +MmLockPageableDataSection(IN PVOID AddressWithinSection)
> +{
> + //
> + // We should just find the section and call MmLockPageableSectionByHandle
> + //
> + UNIMPLEMENTED;
> + return AddressWithinSection;
> +}
> +
> +/*
> + * @unimplemented
> + */
> +PVOID
> +NTAPI
> +MmPageEntireDriver(IN PVOID AddressWithinSection)
> +{
> + //
> + // We should find the driver loader entry and return its base address
> + //
> + UNIMPLEMENTED;
> + return NULL;
> +}
> +
> +/*
> + * @unimplemented
> + */
> +VOID
> +NTAPI
> +MmResetDriverPaging(IN PVOID AddressWithinSection)
> +{
> + UNIMPLEMENTED;
> +}
> +
> +/*
> + * @unimplemented
> + */
> +ULONG
> +NTAPI
> +MmTrimAllSystemPageableMemory(IN ULONG PurgeTransitionList)
> +{
> + UNIMPLEMENTED;
> + return 0;
> +}
>
> /*
> * @implemented
> */
> -PVOID NTAPI
> -MmLockPagableDataSection(IN PVOID AddressWithinSection)
> -{
> - PVOID Handle;
> - Handle = MmLocateMemoryAreaByAddress(MmGetKernelAddressSpace(),
> - AddressWithinSection);
> - MmLockPagableSectionByHandle(Handle);
> - return(Handle);
> -}
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmUnlockPagableImageSection(IN PVOID ImageSectionHandle)
> -{
> - UNIMPLEMENTED;
> -}
> -
> -/*
> - * @unimplemented
> - */
> -PVOID NTAPI
> -MmPageEntireDriver(IN PVOID AddressWithinSection)
> -{
> - UNIMPLEMENTED;
> - return NULL;
> -}
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmResetDriverPaging(IN PVOID AddressWithinSection)
> -{
> - UNIMPLEMENTED;
> +NTSTATUS
> +NTAPI
> +MmAddVerifierThunks(IN PVOID ThunkBuffer,
> + IN ULONG ThunkBufferSize)
> +{
> + PDRIVER_VERIFIER_THUNK_PAIRS ThunkTable;
> + ULONG ThunkCount;
> + PDRIVER_SPECIFIED_VERIFIER_THUNKS DriverThunks;
> + PLDR_DATA_TABLE_ENTRY LdrEntry;
> + PVOID ModuleBase, ModuleEnd;
> + ULONG i;
> + NTSTATUS Status = STATUS_SUCCESS;
> + PAGED_CODE();
> +
> + //
> + // Make sure the driver verifier is initialized
> + //
> + if (!MiVerifierDriverAddedThunkListHead.Flink) return STATUS_NOT_SUPPORTED;
> +
> + //
> + // Get the thunk pairs and count them
> + //
> + ThunkCount = ThunkBufferSize / sizeof(DRIVER_VERIFIER_THUNK_PAIRS);
> + if (!ThunkCount) return STATUS_INVALID_PARAMETER_1;
> +
> + //
> + // Now allocate our own thunk table
> + //
> + DriverThunks = ExAllocatePoolWithTag(PagedPool,
> + sizeof(*DriverThunks) +
> + ThunkCount *
> + sizeof(DRIVER_VERIFIER_THUNK_PAIRS),
> + 'tVmM');
> + if (!DriverThunks) return STATUS_INSUFFICIENT_RESOURCES;
> +
> + //
> + // Now copy the driver-fed part
> + //
> + ThunkTable = (PDRIVER_VERIFIER_THUNK_PAIRS)(DriverThunks + 1);
> + RtlCopyMemory(ThunkTable,
> + ThunkBuffer,
> + ThunkCount * sizeof(DRIVER_VERIFIER_THUNK_PAIRS));
> +
> + //
> + // Acquire the system load lock
> + //
> + KeEnterCriticalRegion();
> + KeWaitForSingleObject(&MmSystemLoadLock,
> + WrVirtualMemory,
> + KernelMode,
> + FALSE,
> + NULL);
> +
> + //
> + // Get the loader entry
> + //
> + LdrEntry = MiLookupDataTableEntry(ThunkTable->PristineRoutine);
> + if (!LdrEntry)
> + {
> + //
> + // Fail
> + //
> + Status = STATUS_INVALID_PARAMETER_2;
> + goto Cleanup;
> + }
> +
> + //
> + // Get driver base and end
> + //
> + ModuleBase = LdrEntry->DllBase;
> + ModuleEnd = (PVOID)((ULONG_PTR)LdrEntry->DllBase + LdrEntry->SizeOfImage);
> +
> + //
> + // Don't allow hooking the kernel or HAL
> + //
> + if (ModuleBase < (PVOID)(KSEG0_BASE + MmBootImageSize))
> + {
> + //
> + // Fail
> + //
> + Status = STATUS_INVALID_PARAMETER_2;
> + goto Cleanup;
> + }
> +
> + //
> + // Loop all the thunks
> + //
> + for (i = 0; i < ThunkCount; i++)
> + {
> + //
> + // Make sure it's in the driver
> + //
> + if (((ULONG_PTR)ThunkTable->PristineRoutine < (ULONG_PTR)ModuleBase) ||
> + ((ULONG_PTR)ThunkTable->PristineRoutine >= (ULONG_PTR)ModuleEnd))
> + {
> + //
> + // Nope, fail
> + //
> + Status = STATUS_INVALID_PARAMETER_2;
> + goto Cleanup;
> + }
> + }
> +
> + //
> + // Otherwise, add this entry
> + //
> + DriverThunks->DataTableEntry = LdrEntry;
> + DriverThunks->NumberOfThunks = ThunkCount;
> + MiActiveVerifierThunks++;
> + InsertTailList(&MiVerifierDriverAddedThunkListHead,
> + &DriverThunks->ListEntry);
> + DriverThunks = NULL;
> +
> +Cleanup:
> + //
> + // Release the lock
> + //
> + KeReleaseMutant(&MmSystemLoadLock, 1, FALSE, FALSE);
> + KeLeaveCriticalRegion();
> +
> + //
> + // Free the table if we failed and return status
> + //
> + if (DriverThunks) ExFreePool(DriverThunks);
> + return Status;
> +}
> +
> +/*
> + * @implemented
> + */
> +LOGICAL
> +NTAPI
> +MmIsDriverVerifying(IN PDRIVER_OBJECT DriverObject)
> +{
> + PLDR_DATA_TABLE_ENTRY LdrEntry;
> +
> + //
> + // Get the loader entry
> + //
> + LdrEntry = (PLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection;
> + if (!LdrEntry) return FALSE;
> +
> + //
> + // Check if we're verifying or not
> + //
> + return (LdrEntry->Flags & LDRP_IMAGE_VERIFYING) ? TRUE: FALSE;
> +}
> +
> +/*
> + * @implemented
> + */
> +NTSTATUS
> +NTAPI
> +MmIsVerifierEnabled(OUT PULONG VerifierFlags)
> +{
> + //
> + // Check if we've actually added anything to the list
> + //
> + if (MiVerifierDriverAddedThunkListHead.Flink)
> + {
> + //
> + // We have, read the verifier level
> + //
> + *VerifierFlags = MmVerifierData.Level;
> + return STATUS_SUCCESS;
> + }
> +
> + //
> + // Otherwise, we're disabled
> + //
> + *VerifierFlags = 0;
> + return STATUS_NOT_SUPPORTED;
> }
>
> /* EOF */
>
> Modified: trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/miarm.h?rev=41658&r1=41657&r2=41658&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] Sun Jun 28 11:32:52 2009
> @@ -52,6 +52,7 @@
> extern PMMPTE MiFirstReservedZeroingPte;
> extern MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType];
> extern PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock;
> +extern ULONG MmBootImageSize;
>
> VOID
> NTAPI
>
> Removed: trunk/reactos/ntoskrnl/mm/drvlck.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/drvlck.c?rev=41657&view=auto
> ==============================================================================
> --- trunk/reactos/ntoskrnl/mm/drvlck.c [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/mm/drvlck.c (removed)
> @@ -1,102 +1,0 @@
> -/*
> - * COPYRIGHT: See COPYING in the top level directory
> - * PROJECT: ReactOS kernel
> - * FILE: ntoskrnl/mm/drvlck.c
> - * PURPOSE: Managing driver managing
> - *
> - * PROGRAMMERS: David Welch (welch at mcmail.com)
> - */
> -
> -/* INCLUDES *****************************************************************/
> -
> -#include <ntoskrnl.h>
> -#include <debug.h>
> -
> -/* FUNCTIONS *****************************************************************/
> -
> -#undef MmLockPagableDataSection
> -
> -#if 0
> -VOID
> -MmUnlockPagableImageSection(IN PVOID ImageSectionHandle)
> -/*
> - * FUNCTION: Releases a section of driver code or driver data, previously
> - * locked into system space with MmLockPagableCodeSection,
> - * MmLockPagableDataSection or MmLockPagableSectionByHandle
> - * ARGUMENTS:
> - * ImageSectionHandle = Handle returned by MmLockPagableCodeSection or
> - * MmLockPagableDataSection
> - */
> -{
> - // MmUnlockMemoryArea((MEMORY_AREA *)ImageSectionHandle);
> - UNIMPLEMENTED;
> -}
> -#endif
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmLockPagableSectionByHandle(IN PVOID ImageSectionHandle)
> -{
> - UNIMPLEMENTED;
> -}
> -
> -
> -#if 0
> -PVOID
> -MmLockPagableCodeSection(IN PVOID AddressWithinSection)
> -{
> - PVOID Handle;
> - Handle = MmLocateMemoryAreaByAddress(NULL,AddressWithinSection);
> - MmLockPagableSectionByHandle(Handle);
> - return(Handle);
> -}
> -#endif
> -
> -
> -/*
> - * @implemented
> - */
> -PVOID NTAPI
> -MmLockPagableDataSection(IN PVOID AddressWithinSection)
> -{
> - PVOID Handle;
> - Handle = MmLocateMemoryAreaByAddress(MmGetKernelAddressSpace(),
> - AddressWithinSection);
> - MmLockPagableSectionByHandle(Handle);
> - return(Handle);
> -}
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmUnlockPagableImageSection(IN PVOID ImageSectionHandle)
> -{
> - UNIMPLEMENTED;
> -}
> -
> -/*
> - * @unimplemented
> - */
> -PVOID NTAPI
> -MmPageEntireDriver(IN PVOID AddressWithinSection)
> -{
> - UNIMPLEMENTED;
> - return NULL;
> -}
> -
> -
> -/*
> - * @unimplemented
> - */
> -VOID NTAPI
> -MmResetDriverPaging(IN PVOID AddressWithinSection)
> -{
> - UNIMPLEMENTED;
> -}
> -
> -/* EOF */
>
> Removed: trunk/reactos/ntoskrnl/mm/verifier.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/verifier.c?rev=41657&view=auto
> ==============================================================================
> --- trunk/reactos/ntoskrnl/mm/verifier.c [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/mm/verifier.c (removed)
> @@ -1,190 +1,0 @@
> -/*
> -* PROJECT: ReactOS Kernel
> -* LICENSE: GPL - See COPYING in the top level directory
> -* FILE: ntoskrnl/mm/verifier.c
> -* PURPOSE: Mm Driver Verifier Routines
> -* PROGRAMMERS: Alex Ionescu (alex.ionescu at reactos.org)
> -*/
> -
> -/* INCLUDES ******************************************************************/
> -
> -#include <ntoskrnl.h>
> -#define NDEBUG
> -#include <debug.h>
> -
> -/* GLOBALS *******************************************************************/
> -
> -MM_DRIVER_VERIFIER_DATA MmVerifierData;
> -LIST_ENTRY MiVerifierDriverAddedThunkListHead;
> -KMUTANT MmSystemLoadLock;
> -ULONG MiActiveVerifierThunks;
> -
> -extern LIST_ENTRY PsLoadedModuleList;
> -
> -/* PRIVATE FUNCTIONS *********************************************************/
> -
> -PLDR_DATA_TABLE_ENTRY
> -NTAPI
> -MiLookupDataTableEntry(IN PVOID Address)
> -{
> - PLDR_DATA_TABLE_ENTRY LdrEntry, FoundEntry = NULL;
> - PLIST_ENTRY NextEntry;
> - PAGED_CODE();
> -
> - /* Loop entries */
> - NextEntry = PsLoadedModuleList.Flink;
> - do
> - {
> - /* Get the loader entry */
> - LdrEntry = CONTAINING_RECORD(NextEntry,
> - LDR_DATA_TABLE_ENTRY,
> - InLoadOrderLinks);
> -
> - /* Check if the address matches */
> - if ((Address >= LdrEntry->DllBase) &&
> - (Address < (PVOID)((ULONG_PTR)LdrEntry->DllBase + LdrEntry->SizeOfImage)))
> - {
> - /* Found a match */
> - FoundEntry = LdrEntry;
> - break;
> - }
> -
> - /* Move on */
> - NextEntry = NextEntry->Flink;
> - } while(NextEntry != &PsLoadedModuleList);
> -
> - /* Return the entry */
> - return FoundEntry;
> -}
> -
> -/* PUBLIC FUNCTIONS **********************************************************/
> -
> -/*
> - * @implemented
> - */
> -NTSTATUS
> -NTAPI
> -MmAddVerifierThunks(IN PVOID ThunkBuffer,
> - IN ULONG ThunkBufferSize)
> -{
> - PDRIVER_VERIFIER_THUNK_PAIRS ThunkPairs, DriverThunkTable;
> - ULONG ThunkCount;
> - PDRIVER_SPECIFIED_VERIFIER_THUNKS ThunkTable;
> - PLDR_DATA_TABLE_ENTRY LdrEntry;
> - PVOID ModuleBase, ModuleEnd;
> - ULONG i;
> - NTSTATUS Status = STATUS_SUCCESS;
> - PAGED_CODE();
> -
> - /* Make sure the driver verifier is initialized */
> - if (!MiVerifierDriverAddedThunkListHead.Flink) return STATUS_NOT_SUPPORTED;
> -
> - /* Get the thunk pairs and count them */
> - ThunkPairs = (PDRIVER_VERIFIER_THUNK_PAIRS)ThunkBuffer;
> - ThunkCount = ThunkBufferSize / sizeof(DRIVER_VERIFIER_THUNK_PAIRS);
> - if (!ThunkCount) return STATUS_INVALID_PARAMETER_1;
> -
> - /* Now allocate our own thunk table */
> - ThunkTable = ExAllocatePoolWithTag(PagedPool,
> - sizeof(DRIVER_SPECIFIED_VERIFIER_THUNKS) +
> - ThunkCount *
> - sizeof(DRIVER_VERIFIER_THUNK_PAIRS),
> - TAG('M', 'm', 'V', 't'));
> - if (!ThunkTable) return STATUS_INSUFFICIENT_RESOURCES;
> -
> - /* Now copy the driver-fed part */
> - DriverThunkTable = (PDRIVER_VERIFIER_THUNK_PAIRS)(ThunkTable + 1);
> - RtlCopyMemory(DriverThunkTable,
> - ThunkPairs,
> - ThunkCount * sizeof(DRIVER_VERIFIER_THUNK_PAIRS));
> -
> - /* Acquire the system load lock */
> - KeEnterCriticalRegion();
> - KeWaitForSingleObject(&MmSystemLoadLock,
> - WrVirtualMemory,
> - KernelMode,
> - FALSE,
> - NULL);
> -
> - /* Get the loader entry */
> - LdrEntry = MiLookupDataTableEntry(DriverThunkTable->PristineRoutine);
> - if (!LdrEntry)
> - {
> - /* Fail */
> - Status = STATUS_INVALID_PARAMETER_2;
> - goto Cleanup;
> - }
> -
> - /* Get driver base and end */
> - ModuleBase = LdrEntry->DllBase;
> - ModuleEnd = (PVOID)((ULONG_PTR)LdrEntry->DllBase + LdrEntry->SizeOfImage);
> -
> - /* Loop all the thunks */
> - for (i = 0; i < ThunkCount; i++)
> - {
> - /* Make sure it's in the driver */
> - if (((ULONG_PTR)DriverThunkTable->PristineRoutine < (ULONG_PTR)ModuleBase) ||
> - ((ULONG_PTR)DriverThunkTable->PristineRoutine >= (ULONG_PTR)ModuleEnd))
> - {
> - /* Nope, fail */
> - Status = STATUS_INVALID_PARAMETER_2;
> - goto Cleanup;
> - }
> - }
> -
> - /* Otherwise, add this entry */
> - ThunkTable->DataTableEntry = LdrEntry;
> - ThunkTable->NumberOfThunks = ThunkCount;
> - MiActiveVerifierThunks++;
> - InsertTailList(&MiVerifierDriverAddedThunkListHead,
> - &ThunkTable->ListEntry);
> - ThunkTable = NULL;
> -
> -Cleanup:
> - /* Release the lock */
> - KeReleaseMutant(&MmSystemLoadLock, 1, FALSE, FALSE);
> - KeLeaveCriticalRegion();
> -
> - /* Free the table if we failed and return status */
> - if (ThunkTable) ExFreePool(ThunkTable);
> - return Status;
> -}
> -
> -/*
> - * @implemented
> - */
> -LOGICAL
> -NTAPI
> -MmIsDriverVerifying(IN PDRIVER_OBJECT DriverObject)
> -{
> - PLDR_DATA_TABLE_ENTRY LdrEntry;
> -
> - /* Get the loader entry */
> - LdrEntry = (PLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection;
> - if (!LdrEntry) return FALSE;
> -
> - /* Check if we're verifying or not */
> - return (LdrEntry->Flags & LDRP_IMAGE_VERIFYING) ? TRUE: FALSE;
> -}
> -
> -/*
> - * @implemented
> - */
> -NTSTATUS
> -NTAPI
> -MmIsVerifierEnabled(OUT PULONG VerifierFlags)
> -{
> - /* Check if we've actually added anything to the list */
> - if (MiVerifierDriverAddedThunkListHead.Flink)
> - {
> - /* We have, read the verifier level */
> - *VerifierFlags = MmVerifierData.Level;
> - return STATUS_SUCCESS;
> - }
> -
> - /* Otherwise, we're disabled */
> - *VerifierFlags = 0;
> - return STATUS_NOT_SUPPORTED;
> -}
> -
> -/* EOF */
>
> Modified: trunk/reactos/ntoskrnl/mm/wset.c
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/wset.c?rev=41658&r1=41657&r2=41658&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/mm/wset.c [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/mm/wset.c [iso-8859-1] Sun Jun 28 11:32:52 2009
> @@ -46,16 +46,3 @@
> }
> return(STATUS_SUCCESS);
> }
> -
> -/*
> - * @unimplemented
> - */
> -ULONG
> -NTAPI
> -MmTrimAllSystemPagableMemory (
> - IN ULONG PurgeTransitionList
> - )
> -{
> - UNIMPLEMENTED;
> - return 0;
> -}
>
> Modified: trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild?rev=41658&r1=41657&r2=41658&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/ntoskrnl-generic.rbuild [iso-8859-1] Sun Jun 28 11:32:52 2009
> @@ -361,6 +361,7 @@
> </if>
> <directory name="ARM3">
> <file>contmem.c</file>
> + <file>drvmgmt.c</file>
> <file>dynamic.c</file>
> <file>hypermap.c</file>
> <file>init.c</file>
> @@ -372,7 +373,6 @@
> <file>anonmem.c</file>
> <file>balance.c</file>
> <file>dbgpool.c</file>
> - <file>drvlck.c</file>
> <file>freelist.c</file>
> <file>kmap.c</file>
> <file>marea.c</file>
> @@ -392,7 +392,6 @@
> <file>rmap.c</file>
> <file>section.c</file>
> <file>sysldr.c</file>
> - <file>verifier.c</file>
> <file>virtual.c</file>
> <file>wset.c</file>
> <if property="_ELF_" value="1">
>
> Modified: trunk/reactos/ntoskrnl/ntoskrnl.pspec
> URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.pspec?rev=41658&r1=41657&r2=41658&view=diff
> ==============================================================================
> --- trunk/reactos/ntoskrnl/ntoskrnl.pspec [iso-8859-1] (original)
> +++ trunk/reactos/ntoskrnl/ntoskrnl.pspec [iso-8859-1] Sun Jun 28 11:32:52 2009
> @@ -771,9 +771,9 @@
> @ stdcall MmIsRecursiveIoFault()
> @ stdcall MmIsThisAnNtAsSystem()
> @ stdcall MmIsVerifierEnabled(ptr)
> -@ stdcall MmLockPagableDataSection(ptr)
> -@ stdcall MmLockPagableImageSection(ptr) MmLockPagableDataSection
> -@ stdcall MmLockPagableSectionByHandle(ptr)
> +@ stdcall MmLockPagableDataSection(ptr) MmLockPageableDataSection
> +@ stdcall MmLockPagableImageSection(ptr) MmLockPageableDataSection
> +@ stdcall MmLockPagableSectionByHandle(ptr) MmLockPageableSectionByHandle
> @ stdcall MmMapIoSpace(long long long long)
> @ stdcall MmMapLockedPages(ptr long)
> @ stdcall MmMapLockedPagesSpecifyCache(ptr long long ptr long long)
> @@ -801,8 +801,8 @@
> @ stdcall MmSetBankedSection(long long long long long long)
> @ stdcall MmSizeOfMdl(ptr long)
> @ extern MmSystemRangeStart
> -@ stdcall MmTrimAllSystemPagableMemory(long)
> -@ stdcall MmUnlockPagableImageSection(ptr)
> +@ stdcall MmTrimAllSystemPagableMemory(long) MmTrimAllSystemPageableMemory
> +@ stdcall MmUnlockPagableImageSection(ptr) MmUnlockPageableImageSection
> @ stdcall MmUnlockPages(ptr)
> @ stdcall MmUnmapIoSpace(ptr long)
> @ stdcall MmUnmapLockedPages(ptr ptr)
>
>
>
More information about the Ros-dev
mailing list