diff --git a/Makefile.in b/Makefile.in
index afec44b7976d033d5834dfb175f0813f643f1f76..36d950dddd71ff72b6e8ff44ced82f7a414ef6bf 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -326,6 +326,7 @@ ALL_MAKEFILES = \
 	dlls/olepro32/Makefile \
 	dlls/olesvr32/Makefile \
 	dlls/opengl32/Makefile \
+	dlls/pdh/Makefile \
 	dlls/powrprof/Makefile \
 	dlls/psapi/Makefile \
 	dlls/psapi/tests/Makefile \
@@ -677,6 +678,7 @@ dlls/oledlg/Makefile: dlls/oledlg/Makefile.in dlls/Makedll.rules
 dlls/olepro32/Makefile: dlls/olepro32/Makefile.in dlls/Makedll.rules
 dlls/olesvr32/Makefile: dlls/olesvr32/Makefile.in dlls/Makedll.rules
 dlls/opengl32/Makefile: dlls/opengl32/Makefile.in dlls/Makedll.rules
+dlls/pdh/Makefile: dlls/pdh/Makefile.in dlls/Makedll.rules
 dlls/powrprof/Makefile: dlls/powrprof/Makefile.in dlls/Makedll.rules
 dlls/psapi/Makefile: dlls/psapi/Makefile.in dlls/Makedll.rules
 dlls/psapi/tests/Makefile: dlls/psapi/tests/Makefile.in dlls/Maketest.rules
diff --git a/configure b/configure
index 9c5f8f05bb9a218dd209adcd7a808e452c4b1bce..6e3da5530112aebbb092d4c97d0d98e9bcd4160a 100755
--- a/configure
+++ b/configure
@@ -20721,6 +20721,8 @@ ac_config_files="$ac_config_files dlls/olesvr32/Makefile"
 
 ac_config_files="$ac_config_files dlls/opengl32/Makefile"
 
+ac_config_files="$ac_config_files dlls/pdh/Makefile"
+
 ac_config_files="$ac_config_files dlls/powrprof/Makefile"
 
 ac_config_files="$ac_config_files dlls/psapi/Makefile"
@@ -21791,6 +21793,7 @@ do
     "dlls/olepro32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/olepro32/Makefile" ;;
     "dlls/olesvr32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/olesvr32/Makefile" ;;
     "dlls/opengl32/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/opengl32/Makefile" ;;
+    "dlls/pdh/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/pdh/Makefile" ;;
     "dlls/powrprof/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/powrprof/Makefile" ;;
     "dlls/psapi/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/psapi/Makefile" ;;
     "dlls/psapi/tests/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/psapi/tests/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index e06b2bc4b22d8a610c36ca790df147d964647ccc..9cbbaf03c676c1437c0e41ac32760264b45f795e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1656,6 +1656,7 @@ AC_CONFIG_FILES([dlls/oledlg/Makefile])
 AC_CONFIG_FILES([dlls/olepro32/Makefile])
 AC_CONFIG_FILES([dlls/olesvr32/Makefile])
 AC_CONFIG_FILES([dlls/opengl32/Makefile])
+AC_CONFIG_FILES([dlls/pdh/Makefile])
 AC_CONFIG_FILES([dlls/powrprof/Makefile])
 AC_CONFIG_FILES([dlls/psapi/Makefile])
 AC_CONFIG_FILES([dlls/psapi/tests/Makefile])
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 67a2976bdd308c80b06123f30cb011a233741837..c1b7058af998ee90c0a64dbee1ef0f9e4f21f9cd 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -141,6 +141,7 @@ BASEDIRS = \
 	oledlg \
 	olepro32 \
 	olesvr32 \
+	pdh \
 	powrprof \
 	psapi \
 	pstorec \
diff --git a/dlls/pdh/Makefile.in b/dlls/pdh/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..38155aab2b5523f76547d8466ff1e4866a9a27ca
--- /dev/null
+++ b/dlls/pdh/Makefile.in
@@ -0,0 +1,13 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = pdh.dll
+IMPORTS   = kernel32
+
+C_SRCS = \
+	pdh_main.c
+
+@MAKE_DLL_RULES@
+
+@DEPENDENCIES@  # everything below this line is overwritten by make depend
diff --git a/dlls/pdh/pdh.spec b/dlls/pdh/pdh.spec
new file mode 100644
index 0000000000000000000000000000000000000000..3bea9492c7501a08fa14059cf27340a36242f280
--- /dev/null
+++ b/dlls/pdh/pdh.spec
@@ -0,0 +1,158 @@
+1 stub PdhPlaGetLogFileNameA
+@ stub PdhAdd009CounterA
+@ stub PdhAdd009CounterW
+@ stub PdhAddCounterA
+@ stub PdhAddCounterW
+@ stub PdhBindInputDataSourceA
+@ stub PdhBindInputDataSourceW
+@ stub PdhBrowseCountersA
+@ stub PdhBrowseCountersHA
+@ stub PdhBrowseCountersHW
+@ stub PdhBrowseCountersW
+@ stub PdhCalculateCounterFromRawValue
+@ stub PdhCloseLog
+@ stub PdhCloseQuery
+@ stub PdhCollectQueryData
+@ stub PdhCollectQueryDataEx
+@ stub PdhComputeCounterStatistics
+@ stub PdhConnectMachineA
+@ stub PdhConnectMachineW
+@ stub PdhCreateSQLTablesA
+@ stub PdhCreateSQLTablesW
+@ stub PdhEnumLogSetNamesA
+@ stub PdhEnumLogSetNamesW
+@ stub PdhEnumMachinesA
+@ stub PdhEnumMachinesHA
+@ stub PdhEnumMachinesHW
+@ stub PdhEnumMachinesW
+@ stub PdhEnumObjectItemsA
+@ stub PdhEnumObjectItemsHA
+@ stub PdhEnumObjectItemsHW
+@ stub PdhEnumObjectItemsW
+@ stub PdhEnumObjectsA
+@ stub PdhEnumObjectsHA
+@ stub PdhEnumObjectsHW
+@ stub PdhEnumObjectsW
+@ stub PdhExpandCounterPathA
+@ stub PdhExpandCounterPathW
+@ stub PdhExpandWildCardPathA
+@ stub PdhExpandWildCardPathHA
+@ stub PdhExpandWildCardPathHW
+@ stub PdhExpandWildCardPathW
+@ stub PdhFormatFromRawValue
+@ stub PdhGetCounterInfoA
+@ stub PdhGetCounterInfoW
+@ stub PdhGetCounterTimeBase
+@ stub PdhGetDataSourceTimeRangeA
+@ stub PdhGetDataSourceTimeRangeH
+@ stub PdhGetDataSourceTimeRangeW
+@ stub PdhGetDefaultPerfCounterA
+@ stub PdhGetDefaultPerfCounterHA
+@ stub PdhGetDefaultPerfCounterHW
+@ stub PdhGetDefaultPerfCounterW
+@ stub PdhGetDefaultPerfObjectA
+@ stub PdhGetDefaultPerfObjectHA
+@ stub PdhGetDefaultPerfObjectHW
+@ stub PdhGetDefaultPerfObjectW
+@ stub PdhGetDllVersion
+@ stub PdhGetFormattedCounterArrayA
+@ stub PdhGetFormattedCounterArrayW
+@ stub PdhGetFormattedCounterValue
+@ stub PdhGetLogFileSize
+@ stub PdhGetLogFileTypeA
+@ stub PdhGetLogFileTypeW
+@ stub PdhGetLogSetGUID
+@ stub PdhGetRawCounterArrayA
+@ stub PdhGetRawCounterArrayW
+@ stub PdhGetRawCounterValue
+@ stub PdhIsRealTimeQuery
+@ stub PdhListLogFileHeaderA
+@ stub PdhListLogFileHeaderW
+@ stub PdhLogServiceCommandA
+@ stub PdhLogServiceCommandW
+@ stub PdhLogServiceControlA
+@ stub PdhLogServiceControlW
+@ stub PdhLookupPerfIndexByNameA
+@ stub PdhLookupPerfIndexByNameW
+@ stub PdhLookupPerfNameByIndexA
+@ stub PdhLookupPerfNameByIndexW
+@ stub PdhMakeCounterPathA
+@ stub PdhMakeCounterPathW
+@ stub PdhOpenLogA
+@ stub PdhOpenLogW
+@ stub PdhOpenQuery
+@ stub PdhOpenQueryA
+@ stub PdhOpenQueryH
+@ stub PdhOpenQueryW
+@ stub PdhParseCounterPathA
+@ stub PdhParseCounterPathW
+@ stub PdhParseInstanceNameA
+@ stub PdhParseInstanceNameW
+@ stub PdhPlaAddItemA
+@ stub PdhPlaAddItemW
+@ stub PdhPlaCreateA
+@ stub PdhPlaCreateW
+@ stub PdhPlaDeleteA
+@ stub PdhPlaDeleteW
+@ stub PdhPlaEnumCollectionsA
+@ stub PdhPlaEnumCollectionsW
+@ stub PdhPlaGetInfoA
+@ stub PdhPlaGetInfoW
+@ stub PdhPlaGetLogFileNameW
+@ stub PdhPlaGetScheduleA
+@ stub PdhPlaGetScheduleW
+@ stub PdhPlaRemoveAllItemsA
+@ stub PdhPlaRemoveAllItemsW
+@ stub PdhPlaScheduleA
+@ stub PdhPlaScheduleW
+@ stub PdhPlaSetInfoA
+@ stub PdhPlaSetInfoW
+@ stub PdhPlaSetItemListA
+@ stub PdhPlaSetItemListW
+@ stub PdhPlaSetRunAsA
+@ stub PdhPlaSetRunAsW
+@ stub PdhPlaStartA
+@ stub PdhPlaStartW
+@ stub PdhPlaStopA
+@ stub PdhPlaStopW
+@ stub PdhPlaValidateInfoA
+@ stub PdhPlaValidateInfoW
+@ stub PdhReadRawLogRecord
+@ stub PdhRelogA
+@ stub PdhRelogW
+@ stub PdhRemoveCounter
+@ stub PdhSelectDataSourceA
+@ stub PdhSelectDataSourceW
+@ stub PdhSetCounterScaleFactor
+@ stub PdhSetDefaultRealTimeDataSource
+@ stub PdhSetLogSetRunID
+@ stub PdhSetQueryTimeRange
+@ stub PdhTranslate009CounterA
+@ stub PdhTranslate009CounterW
+@ stub PdhTranslateLocaleCounterA
+@ stub PdhTranslateLocaleCounterW
+@ stub PdhUpdateLogA
+@ stub PdhUpdateLogFileCatalog
+@ stub PdhUpdateLogW
+@ stub PdhValidatePathA
+@ stub PdhValidatePathW
+@ stub PdhVbAddCounter
+@ stub PdhVbCreateCounterPathList
+@ stub PdhVbGetCounterPathElements
+@ stub PdhVbGetCounterPathFromList
+@ stub PdhVbGetDoubleCounterValue
+@ stub PdhVbGetLogFileSize
+@ stub PdhVbGetOneCounterPath
+@ stub PdhVbIsGoodStatus
+@ stub PdhVbOpenLog
+@ stub PdhVbOpenQuery
+@ stub PdhVbUpdateLog
+@ stub PdhVerifySQLDBA
+@ stub PdhVerifySQLDBW
+@ stub PdhiPla2003SP1Installed
+@ stub PdhiPlaFormatBlanksA
+@ stub PdhiPlaFormatBlanksW
+@ stub PdhiPlaGetVersion
+@ stub PdhiPlaRunAs
+@ stub PdhiPlaSetRunAs
+@ stub PlaTimeInfoToMilliSeconds
diff --git a/dlls/pdh/pdh_main.c b/dlls/pdh/pdh_main.c
new file mode 100644
index 0000000000000000000000000000000000000000..cbc19916a438070df33febd13b7b8f2f166c67ad
--- /dev/null
+++ b/dlls/pdh/pdh_main.c
@@ -0,0 +1,41 @@
+/*
+ * Performance Data Helper (pdh.dll)
+ *
+ * Copyright 2007 Andrey Turkin
+ *
+ * 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 <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(pdh);
+
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+    TRACE("(0x%p, %d, %p)\n",hinstDLL,fdwReason,lpvReserved);
+
+    if (fdwReason == DLL_WINE_PREATTACH) return FALSE;    /* prefer native version */
+
+    if (fdwReason == DLL_PROCESS_ATTACH)
+    {
+        DisableThreadLibraryCalls( hinstDLL );
+    }
+
+    return TRUE;
+}