Better handling of custom templates and hooks.
Bug fixes.

diff --git a/include/commdlg.h b/include/commdlg.h
index 3fd1652..90991bd 100644
--- a/include/commdlg.h
+++ b/include/commdlg.h
@@ -36,6 +36,8 @@
 #define OFN_LONGNAMES                0x00200000
 #define OFN_ENABLEINCLUDENOTIFY      0x00400000
 #define OFN_ENABLESIZING             0x00800000
+#define OFN_DONTADDTORECENT          0x02000000
+#define OFN_FORCESHOWHIDDEN          0x10000000
 
 /* WINE internal flags */
 #define OFN_UNICODE		     0x40000000	/*to differ between 32W/A hook*/
diff --git a/include/wine/obj_serviceprovider.h b/include/wine/obj_serviceprovider.h
new file mode 100644
index 0000000..0aef481
--- /dev/null
+++ b/include/wine/obj_serviceprovider.h
@@ -0,0 +1,47 @@
+/*
+ * Defines the COM interfaces and APIs related to IServiceProvider
+ *
+ * Depends on 'obj_base.h'.
+ */
+
+#ifndef __WINE_WINE_OBJ_SERVICEPROVIDER_H
+#define __WINE_WINE_OBJ_SERVICEPROVIDER_H
+
+#include "wine/obj_base.h"
+#include "winbase.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+/*****************************************************************************
+ * Predeclare the interfaces
+ */
+DEFINE_GUID(IID_IServiceProvider, 0x6d5140c1, 0x7436, 0x11ce, 0x80, 0x34, 0x00, 0xaa, 0x00, 0x60, 0x09, 0xfa);
+typedef struct IServiceProvider IServiceProvider, *LPSERVICEPROVIDER;
+
+
+/*****************************************************************************
+ * IServiceProvider interface
+ */
+#define ICOM_INTERFACE IServiceProvider
+#define IServiceProvider_METHODS \
+    ICOM_METHOD3( HRESULT, QueryService, REFGUID, guidService, REFIID, riid, void**, ppv)
+#define IServiceProvider_IMETHODS \
+    IUnknown_IMETHODS \
+    IServiceProvider_METHODS
+ICOM_DEFINE(IServiceProvider,IUnknown)
+#undef ICOM_INTERFACE
+
+/*** IUnknown methods ***/
+#define IServiceProvider_QueryInterface(p,a,b)		ICOM_CALL2(QueryInterface,p,a,b)
+#define IServiceProvider_AddRef(p)			ICOM_CALL (AddRef,p)
+#define IServiceProvider_Release(p)			ICOM_CALL (Release,p)
+/*** IServiceProvider methods ***/
+#define IServiceProvider_QueryService(p,a,b,c)		ICOM_CALL3(QueryService,p,a,b,c)
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */
+
+#endif /* __WINE_WINE_OBJ_SERVICEPROVIDER_H */
diff --git a/include/wine/obj_shellbrowser.h b/include/wine/obj_shellbrowser.h
index 3387e1b..d3f902f 100644
--- a/include/wine/obj_shellbrowser.h
+++ b/include/wine/obj_shellbrowser.h
@@ -15,6 +15,8 @@
 
 #define SID_SShellBrowser IID_IShellBrowser
 
+DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40L, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
+
 /* targets for GetWindow/SendControlMsg */
 #define FCW_STATUS		0x0001
 #define FCW_TOOLBAR		0x0002