Added declarations for newly documented SHChangeNotify API and fixed
some prototypes.

diff --git a/include/shlobj.h b/include/shlobj.h
index 8901dd2..cdc98da 100644
--- a/include/shlobj.h
+++ b/include/shlobj.h
@@ -495,9 +495,15 @@
 #define SSF_NOCONFIRMRECYCLE		0x8000
 #define SSF_HIDEICONS			0x4000
 
-/**********************************************************************
- * SHChangeNotify
- */
+/****************************************************************************
+* SHChangeNotify API
+*/
+typedef struct _SHChangeNotifyEntry
+{
+    LPCITEMIDLIST pidl;
+    BOOL   fRecursive;
+} SHChangeNotifyEntry;
+
 #define SHCNE_RENAMEITEM	0x00000001
 #define SHCNE_CREATE		0x00000002
 #define SHCNE_DELETE		0x00000004
@@ -525,7 +531,9 @@
 #define SHCNE_ALLEVENTS		0x7FFFFFFF
 #define SHCNE_INTERRUPT		0x80000000
 
-#define SHCNEE_ORDERCHANGED	0x00000002
+#define SHCNEE_ORDERCHANGED	0x0002L
+#define SHCNEE_MSI_CHANGE	0x0004L
+#define SHCNEE_MSI_UNINSTALL	0x0005L
 
 #define SHCNF_IDLIST		0x0000
 #define SHCNF_PATHA		0x0001
@@ -537,8 +545,55 @@
 #define SHCNF_FLUSH		0x1000
 #define SHCNF_FLUSHNOWAIT	0x2000
 
+#define SHCNF_PATH              WINELIB_NAME_AW(SHCNF_PATH)
+#define SHCNF_PRINTER           WINELIB_NAME_AW(SHCNF_PRINTER)
+
 void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
 
+/*
+ * IShellChangeNotify
+ */
+typedef struct IShellChangeNotify IShellChangeNotify, *LPSHELLCHANGENOTIFY;
+
+#define INTERFACE IShellChangeNotify
+#define IShellChangeNotify_METHODS \
+    IUnknown_METHODS \
+    STDMETHOD(OnChange)(THIS_ LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) PURE;
+
+ICOM_DEFINE(IShellChangeNotify, IUnknown)
+#undef INTERFACE
+
+#ifdef COBJMACROS
+/*** IUnknown methods ***/
+#define IShellChangeNotify_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)
+#define IShellChangeNotify_AddRef(p)                  (p)->lpVtbl->AddRef(p)
+#define IShellChangeNotify_Release(p)                 (p)->lpVtbl->Release(p)
+/*** IShellChangeNotify methods ***/
+#define IShellChangeNotify_OnChange(p,a,b,c)         (p)->lpVtbl->OnChange(p,a,b,c)
+#endif
+
+typedef struct _SHChangeDWORDAsIDList {
+    USHORT   cb;
+    DWORD    dwItem1;
+    DWORD    dwItem2;
+    USHORT   cbZero;
+} SHChangeDWORDAsIDList, *LPSHChangeDWORDAsIDList;
+
+typedef struct _SHChangeProductKeyAsIDList {
+    USHORT cb;
+    WCHAR wszProductKey[39];
+    USHORT cbZero;
+} SHChangeProductKeyAsIDList, *LPSHChangeProductKeyAsIDList;
+
+ULONG WINAPI SHChangeNotifyRegister(HWND hwnd, int fSources, LONG fEvents, UINT wMsg,
+                                    int cEntries, SHChangeNotifyEntry *pshcne);
+BOOL WINAPI SHChangeNotifyDeregister(ULONG ulID);
+HANDLE WINAPI SHChangeNotification_Lock(HANDLE hChangeNotification, DWORD dwProcessId,
+                                        LPITEMIDLIST **pppidl, LONG *plEvent);
+BOOL WINAPI SHChangeNotification_Unlock(HANDLE hLock);
+
+HRESULT WINAPI SHGetRealIDL(IShellFolder *psf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST * ppidlReal);
+
 /****************************************************************************
 * SHCreateDirectory API
 */