Author: sir_richard
Date: Sat Feb 25 20:40:06 2012
New Revision: 55865
URL: http://svn.reactos.org/svn/reactos?rev=55865&view=rev
Log:
[NTOS]: Implementation of the "Generic DPC" functionality from Windows NT 5.2, which is a forced-synchronization all-CPU DPC callback mechanism. Implemented, and exported all APIs requireted, and added to NDK. NOTE: This implementation only works for Single Processor systems (NT_UP) since this is all that ReactOS currently works on.
This is needed for poolmon/querying pool tags.
Modified:
trunk/reactos/include/ndk/kefuncs.h
trunk/reactos/ntoskrnl/include/internal/ke.h
trunk/reactos/ntoskrnl/ke/dpc.c
trunk/reactos/ntoskrnl/ntoskrnl.spec
Modified: trunk/reactos/include/ndk/kefuncs.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/kefuncs.h?rev=…
==============================================================================
--- trunk/reactos/include/ndk/kefuncs.h [iso-8859-1] (original)
+++ trunk/reactos/include/ndk/kefuncs.h [iso-8859-1] Sat Feb 25 20:40:06 2012
@@ -209,6 +209,28 @@
);
//
+// Generic DPC Routines
+//
+VOID
+NTAPI
+KeGenericCallDpc(
+ IN PKDEFERRED_ROUTINE Routine,
+ IN PVOID Context
+);
+
+VOID
+NTAPI
+KeSignalCallDpcDone(
+ IN PVOID SystemArgument1
+);
+
+BOOLEAN
+NTAPI
+KeSignalCallDpcSynchronize(
+ IN PVOID SystemArgument2
+);
+
+//
// ARC Configuration Functions. Only enabled if you have ARC Support
//
#ifdef _ARC_
Modified: trunk/reactos/ntoskrnl/include/internal/ke.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/…
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/ke.h [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/include/internal/ke.h [iso-8859-1] Sat Feb 25 20:40:06 2012
@@ -35,6 +35,12 @@
PKINTERRUPT_ROUTINE ChainedDispatch;
PKINTERRUPT_ROUTINE *FlatDispatch;
} DISPATCH_INFO, *PDISPATCH_INFO;
+
+typedef struct _DEFERRED_REVERSE_BARRIER
+{
+ ULONG Barrier;
+ ULONG TotalProcessors;
+} DEFERRED_REVERSE_BARRIER, *PDEFERRED_REVERSE_BARRIER;
typedef struct _KI_SAMPLE_MAP
{
Modified: trunk/reactos/ntoskrnl/ke/dpc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/dpc.c?rev=5586…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/dpc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/dpc.c [iso-8859-1] Sat Feb 25 20:40:06 2012
@@ -958,4 +958,60 @@
Dpc->Number = Number + MAXIMUM_PROCESSORS;
}
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeGenericCallDpc(IN PKDEFERRED_ROUTINE Routine,
+ IN PVOID Context)
+{
+ ULONG Barrier = KeNumberProcessors;
+ KIRQL OldIrql;
+ DEFERRED_REVERSE_BARRIER ReverseBarrier;
+ ASSERT(KeGetCurrentIrql () < DISPATCH_LEVEL);
+
+ //
+ // The barrier is the number of processors, each processor will decrement it
+ // by one, so when all processors have run the DPC, the barrier reaches zero
+ //
+ ReverseBarrier.Barrier = Barrier;
+ ReverseBarrier.TotalProcessors = Barrier;
+
+ //
+ // But we don't need the barrier on UP, since we can simply call the routine
+ // directly while at DISPATCH_LEVEL and not worry about anything else
+ //
+ KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
+ Routine(&KeGetCurrentPrcb()->CallDpc, Context, &Barrier, &ReverseBarrier);
+ KeLowerIrql(OldIrql);
+}
+
+/*
+ * @implemented
+ */
+VOID
+NTAPI
+KeSignalCallDpcDone(IN PVOID SystemArgument1)
+{
+ //
+ // Decrement the barrier, which is actually the processor count
+ //
+ InterlockedDecrement((PLONG)SystemArgument1);
+}
+
+/*
+ * @implemented
+ */
+BOOLEAN
+NTAPI
+KeSignalCallDpcSynchronize(IN PVOID SystemArgument2)
+{
+ //
+ // There is nothing to do on UP systems -- the processor calling this wins
+ //
+ UNREFERENCED_PARAMETER(SystemArgument2);
+ return TRUE;
+}
+
/* EOF */
Modified: trunk/reactos/ntoskrnl/ntoskrnl.spec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.spec?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.spec [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.spec [iso-8859-1] Sat Feb 25 20:40:06 2012
@@ -583,7 +583,7 @@
@ stdcall KeFindConfigurationNextEntry(ptr long long ptr ptr)
@ stdcall KeFlushEntireTb(long long)
@ stdcall KeFlushQueuedDpcs()
-;KeGenericCallDpc
+@ stdcall KeGenericCallDpc(ptr ptr)
@ stdcall KeGetCurrentThread()
@ stdcall KeGetPreviousMode()
@ stdcall KeGetRecommendedSharedDataAlignment()
@@ -696,8 +696,8 @@
@ stdcall KeSetTimeIncrement(long long)
@ stdcall KeSetTimer(ptr long long ptr)
@ stdcall KeSetTimerEx(ptr long long long ptr)
-;KeSignalCallDpcDone
-;KeSignalCallDpcSynchronize
+@ stdcall KeSignalCallDpcDone(ptr)
+@ stdcall KeSignalCallDpcSynchronize(ptr)
@ stdcall KeStackAttachProcess(ptr ptr)
@ stdcall KeSynchronizeExecution(ptr ptr ptr)
@ stdcall KeTerminateThread(long)
Author: akhaldi
Date: Sat Feb 25 18:52:16 2012
New Revision: 55859
URL: http://svn.reactos.org/svn/reactos?rev=55859&view=rev
Log:
[SHELL32]
* Prefix the local version.h and version.rc with shell32_.
* Include the rgs resource files in a portable way.
Added:
trunk/reactos/dll/win32/shell32/shell32_version.h
- copied unchanged from r55853, trunk/reactos/dll/win32/shell32/version.h
trunk/reactos/dll/win32/shell32/shell32_version.rc
- copied unchanged from r55853, trunk/reactos/dll/win32/shell32/version.rc
Removed:
trunk/reactos/dll/win32/shell32/version.h
trunk/reactos/dll/win32/shell32/version.rc
Modified:
trunk/reactos/dll/win32/shell32/rgs_res.rc
trunk/reactos/dll/win32/shell32/shell32_main.cpp
Modified: trunk/reactos/dll/win32/shell32/rgs_res.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/rgs_res.…
==============================================================================
--- trunk/reactos/dll/win32/shell32/rgs_res.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/rgs_res.rc [iso-8859-1] Sat Feb 25 18:52:16 2012
@@ -2,24 +2,24 @@
//
// REGISTRY
//
-IDR_ADMINFOLDERSHORTCUT REGISTRY "res\\rgs\\adminfoldershortcut.rgs"
-IDR_AUTOCOMPLETE REGISTRY "res\\rgs\\autocomplete.rgs"
-IDR_CONTROLPANEL REGISTRY "res\\rgs\\controlpanel.rgs"
-IDR_DRAGDROPHELPER REGISTRY "res\\rgs\\dragdrophelper.rgs"
-IDR_FOLDEROPTIONS REGISTRY "res\\rgs\\folderoptions.rgs"
-IDR_FOLDERSHORTCUT REGISTRY "res\\rgs\\foldershortcut.rgs"
-IDR_FONTSFOLDERSHORTCUT REGISTRY "res\\rgs\\fontsfoldershortcut.rgs"
-IDR_MENUBANDSITE REGISTRY "res\\rgs\\menubandsite.rgs"
-IDR_MYCOMPUTER REGISTRY "res\\rgs\\mycomputer.rgs"
-IDR_MYDOCUMENTS REGISTRY "res\\rgs\\mydocuments.rgs"
-IDR_NETWORKPLACES REGISTRY "res\\rgs\\networkplaces.rgs"
-IDR_NEWMENU REGISTRY "res\\rgs\\newmenu.rgs"
-IDR_PRINTERS REGISTRY "res\\rgs\\printers.rgs"
-IDR_RECYCLEBIN REGISTRY "res\\rgs\\recyclebin.rgs"
-IDR_SHELLDESKTOP REGISTRY "res\\rgs\\shelldesktop.rgs"
-IDR_SHELLFSFOLDER REGISTRY "res\\rgs\\shellfsfolder.rgs"
-IDR_SHELLLINK REGISTRY "res\\rgs\\shelllink.rgs"
-IDR_STARTMENU REGISTRY "res\\rgs\\startmenu.rgs"
-IDR_OPENWITHMENU REGISTRY "res\\rgs\\openwithmenu.rgs"
-IDR_FILEDEFEXT REGISTRY "res\\rgs\\shellfiledefext.rgs"
-IDR_DRVDEFEXT REGISTRY "res\\rgs\\shelldrvdefext.rgs"
+IDR_ADMINFOLDERSHORTCUT REGISTRY "res/rgs/adminfoldershortcut.rgs"
+IDR_AUTOCOMPLETE REGISTRY "res/rgs/autocomplete.rgs"
+IDR_CONTROLPANEL REGISTRY "res/rgs/controlpanel.rgs"
+IDR_DRAGDROPHELPER REGISTRY "res/rgs/dragdrophelper.rgs"
+IDR_FOLDEROPTIONS REGISTRY "res/rgs/folderoptions.rgs"
+IDR_FOLDERSHORTCUT REGISTRY "res/rgs/foldershortcut.rgs"
+IDR_FONTSFOLDERSHORTCUT REGISTRY "res/rgs/fontsfoldershortcut.rgs"
+IDR_MENUBANDSITE REGISTRY "res/rgs/menubandsite.rgs"
+IDR_MYCOMPUTER REGISTRY "res/rgs/mycomputer.rgs"
+IDR_MYDOCUMENTS REGISTRY "res/rgs/mydocuments.rgs"
+IDR_NETWORKPLACES REGISTRY "res/rgs/networkplaces.rgs"
+IDR_NEWMENU REGISTRY "res/rgs/newmenu.rgs"
+IDR_PRINTERS REGISTRY "res/rgs/printers.rgs"
+IDR_RECYCLEBIN REGISTRY "res/rgs/recyclebin.rgs"
+IDR_SHELLDESKTOP REGISTRY "res/rgs/shelldesktop.rgs"
+IDR_SHELLFSFOLDER REGISTRY "res/rgs/shellfsfolder.rgs"
+IDR_SHELLLINK REGISTRY "res/rgs/shelllink.rgs"
+IDR_STARTMENU REGISTRY "res/rgs/startmenu.rgs"
+IDR_OPENWITHMENU REGISTRY "res/rgs/openwithmenu.rgs"
+IDR_FILEDEFEXT REGISTRY "res/rgs/shellfiledefext.rgs"
+IDR_DRVDEFEXT REGISTRY "res/rgs/shelldrvdefext.rgs"
Modified: trunk/reactos/dll/win32/shell32/shell32_main.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32_…
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32_main.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shell32_main.cpp [iso-8859-1] Sat Feb 25 18:52:16 2012
@@ -20,7 +20,7 @@
*/
#include <precomp.h>
-#include "version.h"
+#include "shell32_version.h"
#include <reactos/version.h>
WINE_DEFAULT_DEBUG_CHANNEL(shell);
Removed: trunk/reactos/dll/win32/shell32/version.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/version.…
==============================================================================
--- trunk/reactos/dll/win32/shell32/version.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/version.h (removed)
@@ -1,28 +1,0 @@
-/*
- * Shared Resource/DllGetVersion version information
- *
- * Copyright (C) 2004 Robert Shearman
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#define WINE_FILEVERSION_MAJOR 5
-#define WINE_FILEVERSION_MINOR 0
-#define WINE_FILEVERSION_BUILD 3900
-#define WINE_FILEVERSION_PLATFORMID 6975
-
-/* FIXME: when libs/wpp gets fixed to support concatenation we can remove
- * this and define it in version.rc */
-#define WINE_FILEVERSION_STR "5.0.3900.6975"
Removed: trunk/reactos/dll/win32/shell32/version.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/version.…
==============================================================================
--- trunk/reactos/dll/win32/shell32/version.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/version.rc (removed)
@@ -1,27 +1,0 @@
-/*
- * version information for shell32.dll
- *
- * Copyright (C) 2003 John K. Hohm
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "version.h"
-
-#define WINE_OLESELFREGISTER
-#define WINE_FILEVERSION WINE_FILEVERSION_MAJOR,WINE_FILEVERSION_MINOR,WINE_FILEVERSION_BUILD,WINE_FILEVERSION_PLATFORMID
-#define WINE_FILENAME_STR "shell32.dll"
-
-#include <wine/wine_common_ver.rc>
Author: sir_richard
Date: Sat Feb 25 18:51:21 2012
New Revision: 55858
URL: http://svn.reactos.org/svn/reactos?rev=55858&view=rev
Log:
[NTOS]: Compute the size of, and allocate, the Pool Tracker Table and the Big Page Tracker Table, which are the core data structures that make pool tagging functionality work.
Modified:
trunk/reactos/ntoskrnl/mm/ARM3/expool.c
trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
Modified: trunk/reactos/ntoskrnl/mm/ARM3/expool.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/expool.c?…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/expool.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/expool.c [iso-8859-1] Sat Feb 25 18:51:21 2012
@@ -24,8 +24,11 @@
POOL_DESCRIPTOR NonPagedPoolDescriptor;
PPOOL_DESCRIPTOR ExpPagedPoolDescriptor[16 + 1];
PPOOL_DESCRIPTOR PoolVector[2];
-PVOID PoolTrackTable;
PKGUARDED_MUTEX ExpPagedPoolMutex;
+SIZE_T PoolTrackTableSize, PoolTrackTableMask;
+SIZE_T PoolBigPageTableSize, PoolBigPageTableHash;
+PPOOL_TRACKER_TABLE PoolTrackTable, PoolBigPageTable;
+KSPIN_LOCK ExpTaggedPoolLock;
/* Pool block/header/list access macros */
#define POOL_ENTRY(x) (PPOOL_HEADER)((ULONG_PTR)(x) - sizeof(POOL_HEADER))
@@ -329,6 +332,11 @@
ExpInitializePoolListHead(NextEntry);
NextEntry++;
}
+
+ //
+ // Note that ReactOS does not support Session Pool Yet
+ //
+ ASSERT(PoolType != PagedPoolSession);
}
VOID
@@ -338,12 +346,178 @@
IN ULONG Threshold)
{
PPOOL_DESCRIPTOR Descriptor;
+ SIZE_T TableSize;
+ ULONG i;
//
// Check what kind of pool this is
//
if (PoolType == NonPagedPool)
{
+ //
+ // Compute the track table size and convert it from a power of two to an
+ // actual byte size
+ //
+ // NOTE: On checked builds, we'll assert if the registry table size was
+ // invalid, while on retail builds we'll just break out of the loop at
+ // that point.
+ //
+ TableSize = min(PoolTrackTableSize, MmSizeOfNonPagedPoolInBytes >> 8);
+ for (i = 0; i < 32; i++)
+ {
+ if (TableSize & 1)
+ {
+ ASSERT((TableSize & ~1) == 0);
+ if (!(TableSize & ~1)) break;
+ }
+ TableSize >>= 1;
+ }
+
+ //
+ // If we hit bit 32, than no size was defined in the registry, so
+ // we'll use the default size of 2048 entries.
+ //
+ // Otherwise, use the size from the registry, as long as it's not
+ // smaller than 64 entries.
+ //
+ if (i == 32)
+ {
+ PoolTrackTableSize = 2048;
+ }
+ else
+ {
+ PoolTrackTableSize = max(1 << i, 64);
+ }
+
+ //
+ // Loop trying with the biggest specified size first, and cut it down
+ // by a power of two each iteration in case not enough memory exist
+ //
+ while (TRUE)
+ {
+ //
+ // Do not allow overflow
+ //
+ if ((PoolTrackTableSize + 1) > (MAXULONG_PTR / sizeof(POOL_TRACKER_TABLE)))
+ {
+ PoolTrackTableSize >>= 1;
+ continue;
+ }
+
+ //
+ // Allocate the tracker table and exit the loop if this worked
+ //
+ PoolTrackTable = MiAllocatePoolPages(NonPagedPool,
+ (PoolTrackTableSize + 1) *
+ sizeof(POOL_TRACKER_TABLE));
+ if (PoolTrackTable) break;
+
+ //
+ // Otherwise, as long as we're not down to the last bit, keep
+ // iterating
+ //
+ if (PoolTrackTableSize == 1)
+ {
+ KeBugCheckEx(MUST_SUCCEED_POOL_EMPTY,
+ TableSize,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF);
+ }
+ PoolTrackTableSize >>= 1;
+ }
+
+ //
+ // Finally, add one entry, compute the hash, and zero the table
+ //
+ PoolTrackTableSize++;
+ PoolTrackTableMask = PoolTrackTableSize - 2;
+
+ RtlZeroMemory(PoolTrackTable,
+ PoolTrackTableSize * sizeof(POOL_TRACKER_TABLE));
+
+ //
+ // We now do the exact same thing with the tracker table for big pages
+ //
+ TableSize = min(PoolBigPageTableSize, MmSizeOfNonPagedPoolInBytes >> 8);
+ for (i = 0; i < 32; i++)
+ {
+ if (TableSize & 1)
+ {
+ ASSERT((TableSize & ~1) == 0);
+ if (!(TableSize & ~1)) break;
+ }
+ TableSize >>= 1;
+ }
+
+ //
+ // For big pages, the default tracker table is 4096 entries, while the
+ // minimum is still 64
+ //
+ if (i == 32)
+ {
+ PoolBigPageTableSize = 4096;
+ }
+ else
+ {
+ PoolBigPageTableSize = max(1 << i, 64);
+ }
+
+ //
+ // Again, run the exact same loop we ran earlier, but this time for the
+ // big pool tracker instead
+ //
+ while (TRUE)
+ {
+ if ((PoolBigPageTableSize + 1) > (MAXULONG_PTR / sizeof(POOL_TRACKER_BIG_PAGES)))
+ {
+ PoolBigPageTableSize >>= 1;
+ continue;
+ }
+
+ PoolBigPageTable = MiAllocatePoolPages(NonPagedPool,
+ PoolBigPageTableSize *
+ sizeof(POOL_TRACKER_BIG_PAGES));
+ if (PoolBigPageTable) break;
+
+ if (PoolBigPageTableSize == 1)
+ {
+ KeBugCheckEx(MUST_SUCCEED_POOL_EMPTY,
+ TableSize,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF,
+ 0xFFFFFFFF);
+ }
+
+ PoolBigPageTableSize >>= 1;
+ }
+
+ //
+ // An extra entry is not needed for for the big pool tracker, so just
+ // compute the hash and zero it
+ //
+ PoolBigPageTableHash = PoolBigPageTableSize - 1;
+ RtlZeroMemory(PoolBigPageTable,
+ PoolBigPageTableSize * sizeof(POOL_TRACKER_BIG_PAGES));
+
+ //
+ // During development, print this out so we can see what's happening
+ //
+ DPRINT1("EXPOOL: Pool Tracker Table at: 0x%p with 0x%lx bytes\n",
+ PoolTrackTable, PoolTrackTableSize * sizeof(POOL_TRACKER_TABLE));
+ DPRINT1("EXPOOL: Big Pool Tracker Table at: 0x%p with 0x%lx bytes\n",
+ PoolBigPageTable, PoolBigPageTableSize * sizeof(POOL_TRACKER_BIG_PAGES));
+
+ //
+ // No support for NUMA systems at this time
+ //
+ ASSERT(KeNumberNodes == 1);
+
+ //
+ // Initialize the tag spinlock
+ //
+ KeInitializeSpinLock(&ExpTaggedPoolLock);
+
//
// Initialize the nonpaged pool descriptor
//
@@ -356,6 +530,11 @@
}
else
{
+ //
+ // No support for NUMA systems at this time
+ //
+ ASSERT(KeNumberNodes == 1);
+
//
// Allocate the pool descriptor
//
Modified: trunk/reactos/ntoskrnl/mm/ARM3/miarm.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/miarm.h?r…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/miarm.h [iso-8859-1] Sat Feb 25 18:51:21 2012
@@ -345,10 +345,29 @@
C_ASSERT(sizeof(POOL_HEADER) == POOL_BLOCK_SIZE);
C_ASSERT(POOL_BLOCK_SIZE == sizeof(LIST_ENTRY));
+typedef struct _POOL_TRACKER_TABLE
+{
+ ULONG Key;
+ ULONG NonPagedAllocs;
+ ULONG NonPagedFrees;
+ SIZE_T NonPagedBytes;
+ ULONG PagedAllocs;
+ ULONG PagedFrees;
+ SIZE_T PagedBytes;
+} POOL_TRACKER_TABLE, *PPOOL_TRACKER_TABLE;
+
+typedef struct _POOL_TRACKER_BIG_PAGES
+{
+ PVOID Va;
+ ULONG Key;
+ ULONG NumberOfPages;
+ PVOID QuotaObject;
+} POOL_TRACKER_BIG_PAGES, *PPOOL_TRACKER_BIG_PAGES;
+
extern ULONG ExpNumberOfPagedPools;
extern POOL_DESCRIPTOR NonPagedPoolDescriptor;
extern PPOOL_DESCRIPTOR ExpPagedPoolDescriptor[16 + 1];
-extern PVOID PoolTrackTable;
+extern PPOOL_TRACKER_TABLE PoolTrackTable;
//
// END FIXFIX