Author: pschweitzer
Date: Thu Jun 8 06:44:48 2017
New Revision: 74955
URL:
http://svn.reactos.org/svn/reactos?rev=74955&view=rev
Log:
[KMTESTS:MM]
Make MmMapLockedPagesSpecifyCache a bit more robust. Based on Thomas' suggestions
Modified:
trunk/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_drv.c
Modified: trunk/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_drv.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/kmtests/ntos_mm/MmMapLock…
==============================================================================
--- trunk/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_drv.c [iso-8859-1]
(original)
+++ trunk/rostests/kmtests/ntos_mm/MmMapLockedPagesSpecifyCache_drv.c [iso-8859-1] Thu Jun
8 06:44:48 2017
@@ -110,6 +110,9 @@
ok_eq_size(InLength, sizeof(QUERY_BUFFER));
ok_eq_size(*OutLength, sizeof(QUERY_BUFFER));
ok_eq_pointer(CurrentMdl, NULL);
+
+ TestCleanEverything();
+
ok(ExGetPreviousMode() == UserMode, "Not comming from umode!\n");
if (!skip(Buffer && InLength >= sizeof(QUERY_BUFFER) &&
*OutLength >= sizeof(QUERY_BUFFER), "Cannot read/write from/to buffer!\n"))
{
@@ -120,59 +123,66 @@
QueryBuffer = Buffer;
CacheType = (QueryBuffer->Cached ? MmCached : MmNonCached);
Length = QueryBuffer->Length;
+ CurrentUser = NULL;
ok(Length > 0, "Null size!\n");
- CurrentBuffer = ExAllocatePoolWithTag(NonPagedPool, Length,
'MLPC');
- ok(CurrentBuffer != NULL, "ExAllocatePool failed!\n");
- CurrentUser = NULL;
- if (!skip(CurrentBuffer != NULL, "ExAllocatePool failed!\n"))
+ if (!skip(Length > 0, "Null size!\n"))
{
- CurrentMdl = IoAllocateMdl(CurrentBuffer, Length, FALSE, FALSE,
NULL);
- ok(CurrentMdl != NULL, "IoAllocateMdl failed!\n");
- if (CurrentMdl)
+ CurrentBuffer = ExAllocatePoolWithTag(NonPagedPool, Length,
'MLPC');
+ ok(CurrentBuffer != NULL, "ExAllocatePool failed!\n");
+ if (!skip(CurrentBuffer != NULL, "ExAllocatePool
failed!\n"))
{
- KIRQL Irql;
-
- SehStatus = STATUS_SUCCESS;
- _SEH2_TRY
+ CurrentMdl = IoAllocateMdl(CurrentBuffer, Length, FALSE, FALSE,
NULL);
+ ok(CurrentMdl != NULL, "IoAllocateMdl failed!\n");
+ if (!skip(CurrentMdl != NULL, "IoAllocateMdl
failed!\n"))
{
- MmProbeAndLockPages(CurrentMdl, KernelMode, IoWriteAccess);
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- SehStatus = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
- ok_eq_hex(SehStatus, STATUS_SUCCESS);
-
- Irql = KeGetCurrentIrql();
- ok(Irql <= APC_LEVEL, "IRQL > APC_LEVEL: %d\n",
Irql);
-
- SehStatus = STATUS_SUCCESS;
- _SEH2_TRY
- {
- CurrentUser = MmMapLockedPagesSpecifyCache(CurrentMdl,
UserMode, CacheType, NULL, FALSE, NormalPagePriority);
- }
- _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
- {
- SehStatus = _SEH2_GetExceptionCode();
- }
- _SEH2_END;
-
- if (QueryBuffer->Cached)
- {
+ KIRQL Irql;
+
+ SehStatus = STATUS_SUCCESS;
+ _SEH2_TRY
+ {
+ MmProbeAndLockPages(CurrentMdl, KernelMode,
IoWriteAccess);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ SehStatus = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END;
ok_eq_hex(SehStatus, STATUS_SUCCESS);
- ok(CurrentUser != NULL, "MmMapLockedPagesSpecifyCache
failed!\n");
+
+ Irql = KeGetCurrentIrql();
+ ok(Irql <= APC_LEVEL, "IRQL > APC_LEVEL:
%d\n", Irql);
+
+ SehStatus = STATUS_SUCCESS;
+ _SEH2_TRY
+ {
+ CurrentUser = MmMapLockedPagesSpecifyCache(CurrentMdl,
UserMode, CacheType, NULL, FALSE, NormalPagePriority);
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ SehStatus = _SEH2_GetExceptionCode();
+ }
+ _SEH2_END;
+
+ if (QueryBuffer->Cached)
+ {
+ ok_eq_hex(SehStatus, STATUS_SUCCESS);
+ ok(CurrentUser != NULL,
"MmMapLockedPagesSpecifyCache failed!\n");
+ }
+ else
+ {
+ ok_eq_hex(SehStatus, STATUS_INVALID_ADDRESS);
+ ok_eq_pointer(CurrentUser, NULL);
+ }
}
else
{
- ok_eq_hex(SehStatus, STATUS_INVALID_ADDRESS);
- ok_eq_pointer(CurrentUser, NULL);
+ ExFreePoolWithTag(CurrentBuffer, 'MLPC');
}
}
}
+
QueryBuffer->Buffer = CurrentUser;
-
*OutLength = sizeof(QUERY_BUFFER);
}