mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 18:24:24 +00:00
[REACTOS]
Introduce four new debugging macros, ERROR_DBGBREAK, ERROR_FATAL, UNIMPLEMENTED_DBGBREAK, UNIMPLEMENTED_FATAL (and two helpers, __NOTICE and __ERROR_DBGBREAK). They are designed to display on the debug-log a printf-like user-defined message and to break into the debugger. - The *_DBGBREAK macros break only into the debugger and allow to continue (they don't hang). - The *_FATAL macros break into the debugger and then halt the execution. (Based on an idea of Aleksey Bragin, see the ros-dev mailing list about the while(true) --> assert(false); changes). [NTOSKRNL] Use these macros instead of ASSERT(FALSE); introduced in revisions r58110, r58111 and r58112 to replace while(TRUE); halts. Part 1/3 svn path=/trunk/; revision=58132
This commit is contained in:
parent
04c2d31986
commit
34daa9e99c
|
@ -3,14 +3,13 @@
|
|||
* PROJECT: ReactOS kernel
|
||||
* FILE: include/internal/debug.h
|
||||
* PURPOSE: Useful debugging macros
|
||||
* PROGRAMMER: David Welch (welch@mcmail.com)
|
||||
* UPDATE HISTORY:
|
||||
* 28/05/98: Created
|
||||
* PROGRAMMERS: David Welch (welch@mcmail.com)
|
||||
* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: Define NDEBUG before including this header to disable debugging
|
||||
* macros
|
||||
* NOTE: Define NDEBUG before including this header
|
||||
* to disable debugging macros.
|
||||
*/
|
||||
|
||||
#ifndef __INTERNAL_DEBUG
|
||||
|
@ -19,7 +18,7 @@
|
|||
/* Define DbgPrint/DbgPrintEx/RtlAssert unless the NDK is used */
|
||||
#if !defined(_RTLFUNCS_H) && !defined(_NTDDK_)
|
||||
|
||||
/* Make sure we have basic types (some people include us *before* SDK... */
|
||||
/* Make sure we have basic types (some people include us *before* SDK)... */
|
||||
#if !defined(_NTDEF_) && !defined(_NTDEF_H) && !defined(_WINDEF_) && !defined(_WINDEF_H)
|
||||
#error Please include SDK first.
|
||||
#endif
|
||||
|
@ -56,7 +55,7 @@ RtlAssert(
|
|||
|
||||
#ifndef assert
|
||||
#ifndef NASSERT
|
||||
#define assert(x) if (!(x)) {RtlAssert((PVOID)#x,(PVOID)__FILE__,__LINE__, ""); }
|
||||
#define assert(x) if (!(x)) { RtlAssert((PVOID)#x, (PVOID)__FILE__, __LINE__, ""); }
|
||||
#else
|
||||
#define assert(x)
|
||||
#endif
|
||||
|
@ -64,7 +63,7 @@ RtlAssert(
|
|||
|
||||
#ifndef ASSERT
|
||||
#ifndef NASSERT
|
||||
#define ASSERT(x) if (!(x)) {RtlAssert((PVOID)#x,(PVOID)__FILE__,__LINE__, ""); }
|
||||
#define ASSERT(x) if (!(x)) { RtlAssert((PVOID)#x, (PVOID)__FILE__, __LINE__, ""); }
|
||||
#else
|
||||
#define ASSERT(x)
|
||||
#endif
|
||||
|
@ -72,12 +71,15 @@ RtlAssert(
|
|||
|
||||
#ifndef ASSERTMSG
|
||||
#ifndef NASSERT
|
||||
#define ASSERTMSG(x,m) if (!(x)) {RtlAssert((PVOID)#x,__FILE__,__LINE__, m); }
|
||||
#define ASSERTMSG(x,m) if (!(x)) { RtlAssert((PVOID)#x, __FILE__, __LINE__, m); }
|
||||
#else
|
||||
#define ASSERTMSG(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* For internal purposes only */
|
||||
#define __NOTICE(level, fmt, ...) DbgPrint(#level ": %s at %s:%d " fmt, __FUNCTION__, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
/* Print stuff only on Debug Builds*/
|
||||
#define DPFLTR_DEFAULT_ID -1
|
||||
#if DBG
|
||||
|
@ -102,7 +104,7 @@ RtlAssert(
|
|||
|
||||
#endif
|
||||
|
||||
#define UNIMPLEMENTED DbgPrint("WARNING: %s at %s:%d is UNIMPLEMENTED!\n",__FUNCTION__,__FILE__,__LINE__);
|
||||
#define UNIMPLEMENTED __NOTICE(WARNING, "is UNIMPLEMENTED!\n");
|
||||
|
||||
#define ERR_(ch, fmt, ...) DbgPrintEx(DPFLTR_##ch##_ID, DPFLTR_ERROR_LEVEL, "(%s:%d) " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define WARN_(ch, fmt, ...) DbgPrintEx(DPFLTR_##ch##_ID, DPFLTR_WARNING_LEVEL, "(%s:%d) " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
@ -113,6 +115,7 @@ RtlAssert(
|
|||
#define WARN__(ch, fmt, ...) DbgPrintEx(ch, DPFLTR_WARNING_LEVEL, "(%s:%d) " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define TRACE__(ch, fmt, ...) DbgPrintEx(ch, DPFLTR_TRACE_LEVEL, "(%s:%d) " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define INFO__(ch, fmt, ...) DbgPrintEx(ch, DPFLTR_INFO_LEVEL, "(%s:%d) " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#else /* not DBG */
|
||||
|
||||
/* On non-debug builds, we never show these */
|
||||
|
@ -130,8 +133,52 @@ RtlAssert(
|
|||
#define WARN__(ch, ...) do { if(0) { DbgPrint(__VA_ARGS__); } } while(0)
|
||||
#define TRACE__(ch, ...) do { if(0) { DbgPrint(__VA_ARGS__); } } while(0)
|
||||
#define INFO__(ch, ...) do { if(0) { DbgPrint(__VA_ARGS__); } } while(0)
|
||||
|
||||
#endif /* not DBG */
|
||||
|
||||
/*
|
||||
* These macros are designed to display an optional printf-like
|
||||
* user-defined message and to break into the debugger.
|
||||
* After that they allow to continue the program execution.
|
||||
*/
|
||||
/* For internal purposes only */
|
||||
#define __ERROR_DBGBREAK(...) \
|
||||
do { \
|
||||
DbgPrint("" __VA_ARGS__); \
|
||||
DbgBreakPoint(); \
|
||||
} while (0)
|
||||
|
||||
#define ERROR_DBGBREAK(...) \
|
||||
do { \
|
||||
__NOTICE(ERROR, "\n"); \
|
||||
__ERROR_DBGBREAK(__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define UNIMPLEMENTED_DBGBREAK(...) \
|
||||
do { \
|
||||
__NOTICE(ERROR, "is UNIMPLEMENTED!\n"); \
|
||||
__ERROR_DBGBREAK(__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* These macros are designed to display an optional printf-like
|
||||
* user-defined message and to break into the debugger.
|
||||
* After that they halt the execution of the current thread.
|
||||
*/
|
||||
#define ERROR_FATAL(...) \
|
||||
do { \
|
||||
__NOTICE(UNRECOVERABLE ERROR, "\n"); \
|
||||
__ERROR_DBGBREAK(__VA_ARGS__); \
|
||||
while (TRUE); \
|
||||
} while (0)
|
||||
|
||||
#define UNIMPLEMENTED_FATAL(...) \
|
||||
do { \
|
||||
__NOTICE(UNRECOVERABLE ERROR, "is UNIMPLEMENTED!\n"); \
|
||||
__ERROR_DBGBREAK(__VA_ARGS__); \
|
||||
while (TRUE); \
|
||||
} while (0)
|
||||
|
||||
#define ASSERT_IRQL_LESS_OR_EQUAL(x) ASSERT(KeGetCurrentIrql()<=(x))
|
||||
#define ASSERT_IRQL_EQUAL(x) ASSERT(KeGetCurrentIrql()==(x))
|
||||
#define ASSERT_IRQL_LESS(x) ASSERT(KeGetCurrentIrql()<(x))
|
||||
|
|
|
@ -65,8 +65,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
//
|
||||
// Always return success for now
|
||||
//
|
||||
DPRINT1("NEVER TELL ME THE ODDS!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_FATAL("NEVER TELL ME THE ODDS!\n");
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,8 +58,7 @@ MiSyncCachedRanges(VOID)
|
|||
/* Scan every range */
|
||||
for (i = 0; i < MiLargePageRangeIndex; i++)
|
||||
{
|
||||
DPRINT1("No support for large pages\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK("No support for large pages\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,8 +105,7 @@ MiLoadImageSection(IN OUT PVOID *SectionPtr,
|
|||
if (SessionLoad)
|
||||
{
|
||||
/* Fail */
|
||||
DPRINT1("Session loading not yet supported!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK("Session loading not yet supported!\n");
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
@ -1217,8 +1216,7 @@ CheckDllState:
|
|||
{
|
||||
/* We failed, unload the image */
|
||||
MmUnloadSystemImage(DllEntry);
|
||||
DPRINT1("MmCallDllInitialize failed with status 0x%x\n", Status);
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
ERROR_DBGBREAK("MmCallDllInitialize failed with status 0x%x\n", Status);
|
||||
Loaded = FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -1720,8 +1718,7 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
if (!PointerPte)
|
||||
{
|
||||
/* Shouldn't happen */
|
||||
DPRINT1("[Mm0]: Couldn't allocate driver section!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
ERROR_FATAL("[Mm0]: Couldn't allocate driver section!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1774,8 +1771,7 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
/* This shouldn't happen */
|
||||
DPRINT1("Relocations failed!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
ERROR_FATAL("Relocations failed!\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1973,9 +1969,8 @@ MiBuildImportsForBootDrivers(VOID)
|
|||
if (*ImageThunk)
|
||||
{
|
||||
/* Should not be happening */
|
||||
DPRINT1("Broken IAT entry for %p at %p (%lx)\n",
|
||||
LdrEntry, ImageThunk, *ImageThunk);
|
||||
ASSERT(FALSE);
|
||||
ERROR_FATAL("Broken IAT entry for %p at %p (%lx)\n",
|
||||
LdrEntry, ImageThunk, *ImageThunk);
|
||||
}
|
||||
|
||||
/* Reset if we hit this */
|
||||
|
@ -2363,8 +2358,7 @@ MiWriteProtectSystemImage(IN PVOID ImageBase)
|
|||
else
|
||||
{
|
||||
/* Not supported */
|
||||
DPRINT1("Session drivers not supported\n");
|
||||
ASSERT(FALSE);
|
||||
UNIMPLEMENTED_DBGBREAK("Session drivers not supported\n");
|
||||
}
|
||||
|
||||
/* These are the only protection masks we care about */
|
||||
|
@ -2924,8 +2918,7 @@ LoaderScan:
|
|||
else
|
||||
{
|
||||
/* We don't support session loading yet */
|
||||
DPRINT1("Unsupported Session-Load!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK("Unsupported Session-Load!\n");
|
||||
Status = STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
@ -3026,8 +3019,7 @@ LoaderScan:
|
|||
if (Flags)
|
||||
{
|
||||
/* We don't support session loading yet */
|
||||
DPRINT1("Unsupported Session-Load!\n");
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK("Unsupported Session-Load!\n");
|
||||
goto Quickie;
|
||||
}
|
||||
|
||||
|
|
|
@ -124,8 +124,7 @@ NTAPI
|
|||
MiFlushTlb(IN PMMPTE PointerPte,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
|
@ -134,8 +133,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs,
|
|||
IN PEPROCESS Process,
|
||||
IN PULONG DirectoryTableBase)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -164,8 +162,7 @@ MmDisableVirtualMapping(IN PEPROCESS Process,
|
|||
OUT PBOOLEAN WasDirty,
|
||||
OUT PPFN_NUMBER Page)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -173,8 +170,7 @@ NTAPI
|
|||
MmEnableVirtualMapping(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -185,8 +181,7 @@ MmCreateVirtualMappingUnsafe(IN PEPROCESS Process,
|
|||
IN PPFN_NUMBER Pages,
|
||||
IN ULONG PageCount)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -198,8 +193,7 @@ MmCreateVirtualMapping(IN PEPROCESS Process,
|
|||
IN PPFN_NUMBER Pages,
|
||||
IN ULONG PageCount)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -207,8 +201,7 @@ VOID
|
|||
NTAPI
|
||||
MmRawDeleteVirtualMapping(IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -219,8 +212,7 @@ MmDeleteVirtualMapping(IN PEPROCESS Process,
|
|||
OUT PBOOLEAN WasDirty,
|
||||
OUT PPFN_NUMBER Page)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -229,8 +221,7 @@ MmDeletePageFileMapping(IN PEPROCESS Process,
|
|||
IN PVOID Address,
|
||||
IN SWAPENTRY *SwapEntry)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -239,8 +230,7 @@ MmCreatePageFileMapping(IN PEPROCESS Process,
|
|||
IN PVOID Address,
|
||||
IN SWAPENTRY SwapEntry)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
@ -249,8 +239,7 @@ NTAPI
|
|||
MmGetPfnForProcess(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -259,8 +248,7 @@ NTAPI
|
|||
MmIsDirtyPage(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -269,8 +257,7 @@ NTAPI
|
|||
MmSetCleanPage(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -278,8 +265,7 @@ NTAPI
|
|||
MmSetDirtyPage(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
|
@ -287,8 +273,7 @@ NTAPI
|
|||
MmIsPagePresent(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -297,8 +282,7 @@ NTAPI
|
|||
MmIsPageSwapEntry(IN PEPROCESS Process,
|
||||
IN PVOID Address)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -328,7 +312,6 @@ MmInitGlobalKernelPageDirectory(VOID)
|
|||
ULONG i;
|
||||
PULONG CurrentPageDirectory = (PULONG)PDE_BASE;
|
||||
|
||||
|
||||
/* Loop the 2GB of address space which belong to the kernel */
|
||||
for (i = MiGetPdeOffset(MmSystemRangeStart); i < 2048; i++)
|
||||
{
|
||||
|
@ -356,8 +339,7 @@ MmGetPhysicalAddress(IN PVOID Address)
|
|||
PHYSICAL_ADDRESS PhysicalAddress;
|
||||
PhysicalAddress.QuadPart = 0;
|
||||
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
|
||||
return PhysicalAddress;
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ MiUnmapPageTable(IN PMMPTE PointerPde)
|
|||
//
|
||||
// FIXME-USER: Shouldn't get here yet
|
||||
//
|
||||
ASSERT(FALSE);
|
||||
ERROR_FATAL();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -399,8 +399,7 @@ MmDisableVirtualMapping(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -411,8 +410,7 @@ MmEnableVirtualMapping(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -658,8 +656,7 @@ MmDeletePageFileMapping(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
|
@ -671,8 +668,7 @@ MmCreatePageFileMapping(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
@ -703,8 +699,7 @@ MmIsDirtyPage(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -716,8 +711,7 @@ MmSetCleanPage(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -728,8 +722,7 @@ MmSetDirtyPage(IN PEPROCESS Process,
|
|||
//
|
||||
// TODO
|
||||
//
|
||||
UNIMPLEMENTED;
|
||||
ASSERT(FALSE); // while (TRUE);
|
||||
UNIMPLEMENTED_DBGBREAK();
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
|
|
Loading…
Reference in a new issue