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>