- update shell32_ros.diff
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 11 Oct 2007 19:43:22 +0000 (19:43 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 11 Oct 2007 19:43:22 +0000 (19:43 +0000)
svn path=/trunk/; revision=29514

reactos/dll/win32/shell32/shell32_ros.diff

index 475db7a..c43c18d 100644 (file)
-Index: shell32_main.c\r
-===================================================================\r
---- shell32_main.c     (revision 26448)\r
-+++ shell32_main.c     (working copy)\r
-@@ -509,23 +509,59 @@\r
-     /* get the iconlocation */
-     if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION ))
-     {
--        UINT uDummy,uFlags;
-+        if (!(flags & SHGFI_USEFILEATTRIBUTES))
-+        {
-+            UINT uDummy,uFlags;
--        hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1,
--               (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconA,
--               &uDummy, (LPVOID*)&pei);
--        if (SUCCEEDED(hr))
-+            hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1,
-+                   (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconA,
-+                   &uDummy, (LPVOID*)&pei);
-+            if (SUCCEEDED(hr))
-+            {
-+                hr = IExtractIconW_GetIconLocation(pei, uGilFlags,
-+                        szLocation, MAX_PATH, &iIndex, &uFlags);
-+                psfi->iIcon = iIndex;
-+
-+                if (!(uFlags & GIL_NOTFILENAME))
-+                    lstrcpyW (psfi->szDisplayName, szLocation);
-+                else
-+                    ret = FALSE;
-+
-+                IExtractIconA_Release(pei);
-+            }
-+        }
-+        else
-         {
--            hr = IExtractIconW_GetIconLocation(pei, uGilFlags,
--                    szLocation, MAX_PATH, &iIndex, &uFlags);
--            psfi->iIcon = iIndex;
--
--            if (!(uFlags & GIL_NOTFILENAME))
--                lstrcpyW (psfi->szDisplayName, szLocation);
-+            if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-+            {
-+                strcpyW(psfi->szDisplayName, swShell32Name);
-+                psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER, 0);
-+            }
-             else
--                ret = FALSE;
-+            {
-+                WCHAR sTemp [MAX_PATH];
-+                WCHAR * szExt;
-+                DWORD dwNr=0;
-+                static const WCHAR p1W[] = {'%','1',0};
--            IExtractIconA_Release(pei);
-+                lstrcpynW(sTemp, szFullPath, MAX_PATH);
-+
-+                psfi->iIcon = 0;
-+                szExt = (LPWSTR) PathFindExtensionW(sTemp);
-+                if ( szExt &&
-+                     HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) &&
-+                     HCR_GetDefaultIconW(sTemp, sTemp, MAX_PATH, &dwNr))
-+                {
-+                    if (!lstrcmpW(p1W,sTemp))            /* icon is in the file */
-+                        strcpyW(psfi->szDisplayName, szFullPath);
-+                    else
-+                        strcpyW(psfi->szDisplayName, sTemp);
-+
-+                    psfi->iIcon = SIC_GetIconIndex(psfi->szDisplayName, dwNr, 0);
-+                    if (psfi->iIcon == -1)
-+                        psfi->iIcon = 0;
-+                }
-+            }
-         }
-     }
+Index: autocomplete.c\r
+===================================================================\r
+--- autocomplete.c     (revision 29513)\r
++++ autocomplete.c     (working copy)\r
+@@ -38,7 +38,7 @@\r
+ #include <stdarg.h>\r
+ #include <stdlib.h>\r
+ #include <string.h>\r
+-\r
++#include <stdio.h>\r
+ #define COBJMACROS\r
\r
+ #include "wine/debug.h"\r
+Index: changenotify.c\r
+===================================================================\r
+--- changenotify.c     (revision 29513)\r
++++ changenotify.c     (working copy)\r
+@@ -178,7 +178,7 @@\r
\r
+     LeaveCriticalSection(&SHELL32_ChangenotifyCS);\r
\r
+-    DeleteCriticalSection(&SHELL32_ChangenotifyCS);\r
++    // DeleteCriticalSection(&SHELL32_ChangenotifyCS); // static\r
+ }\r
\r
+ /*************************************************************************\r
+Index: control.c\r
+===================================================================\r
+--- control.c  (revision 29513)\r
++++ control.c  (working copy)\r
+@@ -464,6 +464,7 @@\r
+ void WINAPI RunDLL_CallEntry16( DWORD proc, HWND hwnd, HINSTANCE inst,\r
+                                 LPCSTR cmdline, INT cmdshow )\r
+ {\r
++#if !defined(__CYGWIN__) && !defined (__MINGW32__) && !defined(_MSC_VER)\r
+     WORD args[5];\r
+     SEGPTR cmdline_seg;\r
\r
+@@ -478,6 +479,10 @@\r
+     args[0] = cmdshow;\r
+     WOWCallback16Ex( proc, WCB16_PASCAL, sizeof(args), args, NULL );\r
+     UnMapLS( cmdline_seg );\r
++#else\r
++    FIXME( "proc %lx hwnd %p inst %p cmdline %s cmdshow %d\n",\r
++           proc, hwnd, inst, debugstr_a(cmdline), cmdshow );\r
++#endif\r
+ }\r
\r
+ /*************************************************************************\r
+Index: iconcache.c\r
+===================================================================\r
+--- iconcache.c        (revision 29513)\r
++++ iconcache.c        (working copy)\r
+@@ -306,9 +306,23 @@\r
+       HICON   hiconLargeShortcut;\r
+       HICON   hiconSmallShortcut;\r
\r
+-        PrivateExtractIconsW( sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, 0, 1, 0 );\r
+-        PrivateExtractIconsW( sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, 0, 1, 0 );\r
++#if defined(__CYGWIN__) || defined (__MINGW32__) || defined(_MSC_VER)\r
++      static UINT (WINAPI*PrivateExtractIconExW)(LPCWSTR,int,HICON*,HICON*,UINT) = NULL;\r
\r
++      if (!PrivateExtractIconExW) {\r
++          HMODULE hUser32 = GetModuleHandleA("user32");\r
++          PrivateExtractIconExW = (UINT(WINAPI*)(LPCWSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExW");\r
++      }\r
++\r
++        if (PrivateExtractIconExW)\r
++          PrivateExtractIconExW(sSourceFile, dwSourceIndex, &hiconLarge, &hiconSmall, 1);\r
++      else\r
++#endif\r
++      {\r
++          PrivateExtractIconsW(sSourceFile, dwSourceIndex, 32, 32, &hiconLarge, NULL, 1, 0);\r
++          PrivateExtractIconsW(sSourceFile, dwSourceIndex, 16, 16, &hiconSmall, NULL, 1, 0);\r
++      }\r
++\r
+       if ( !hiconLarge ||  !hiconSmall)\r
+       {\r
+         WARN("failure loading icon %i from %s (%p %p)\n", dwSourceIndex, debugstr_w(sSourceFile), hiconLarge, hiconSmall);\r
+@@ -458,7 +472,7 @@\r
+       ShellBigIconList = 0;\r
\r
+       LeaveCriticalSection(&SHELL32_SicCS);\r
+-      DeleteCriticalSection(&SHELL32_SicCS);\r
++      //DeleteCriticalSection(&SHELL32_SicCS); //static\r
+ }\r
\r
+ /*****************************************************************************\r
+@@ -672,6 +686,19 @@\r
+  */\r
+ UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT nIcons)\r
+ {\r
++      /* get entry point of undocumented function PrivateExtractIconExW() in user32 */\r
++#if defined(__CYGWIN__) || defined (__MINGW32__) || defined(_MSC_VER)\r
++      static UINT (WINAPI*PrivateExtractIconExW)(LPCWSTR,int,HICON*,HICON*,UINT) = NULL;\r
++\r
++      if (!PrivateExtractIconExW) {\r
++          HMODULE hUser32 = GetModuleHandleA("user32");\r
++          PrivateExtractIconExW = (UINT(WINAPI*)(LPCWSTR,int,HICON*,HICON*,UINT)) GetProcAddress(hUser32, "PrivateExtractIconExW");\r
++\r
++          if (!PrivateExtractIconExW)\r
++              return 0;\r
++      }\r
++#endif\r
++\r
+       TRACE("%s %i %p %p %i\n", debugstr_w(lpszFile), nIconIndex, phiconLarge, phiconSmall, nIcons);\r
\r
+       return PrivateExtractIconExW(lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons);\r
+Index: regsvr.c\r
+===================================================================\r
+--- regsvr.c   (revision 29513)\r
++++ regsvr.c   (working copy)\r
+@@ -669,6 +669,7 @@\r
+ static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 };\r
\r
+ static struct regsvr_namespace const namespace_extensions_list[] = {\r
++#if 0\r
+     {   \r
+         &CLSID_UnixDosFolder,\r
+         wszDesktop,\r
+@@ -684,6 +685,7 @@\r
+         wszDesktop,\r
+         wszRecycleBin\r
+     },\r
++#endif\r
+     { NULL }\r
+ };\r
\r
+Index: shell32.spec\r
+===================================================================\r
+--- shell32.spec       (revision 29513)\r
++++ shell32.spec       (working copy)\r
+@@ -247,7 +247,7 @@\r
+  654 stdcall @(long long) shell32_654 # ReadCabinetState@8\r
\r
+  660 stdcall -noname FileIconInit(long)\r
+- 680 stdcall -noname IsUserAdmin()\r
++ 680 stdcall IsUserAnAdmin()\r
\r
+  714 stdcall @(ptr) SHELL32_714 # PathIsTemporaryW\r
+  730 stdcall -noname RestartDialogEx(long wstr long long)\r
+@@ -368,7 +368,7 @@\r
+ @ stdcall SHQueryRecycleBinA(str ptr)\r
+ @ stdcall SHQueryRecycleBinW(wstr ptr)\r
+ @ stdcall SHSetLocalizedName(wstr wstr long)\r
+-@ stdcall SHUpdateRecycleBinIcon()\r
++@ stub SHUpdateRecycleBinIcon\r
+ @ stdcall SheChangeDirA(str)\r
+ @ stub SheChangeDirExA\r
+ @ stub SheChangeDirExW\r
+Index: shell32_De.rc\r
+===================================================================\r
+--- shell32_De.rc      (revision 29513)\r
++++ shell32_De.rc      (working copy)\r
+@@ -128,7 +128,7 @@\r
+  ICON "", 1088, 10, 10, 14, 16\r
+  LTEXT "", 100, 30, 10, 137, 10\r
+  LTEXT "", 101, 30, 22, 137, 10\r
+- LTEXT "WINE wurde für Sie gekeltert von:", 98, 8, 55, 137, 10\r
++ LTEXT "ReactOS wurde Ihnen zur Verfügung gestellt von:", 98, 8, 55, 170, 10\r
+ }\r
\r
+ SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95\r
+@@ -137,14 +137,178 @@\r
+ FONT 8, "MS Shell Dlg"\r
+ {\r
+  ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE\r
+- LTEXT "Geben sie den Namen eines Programmes, eines Ordners, eines Dokumentes oder einer Internet-Ressource ein, die geöffnet werden soll", 12289, 36, 11, 182, 18\r
+- LTEXT "Ö&ffnen:", 12305, 7, 39, 24, 10\r
++ LTEXT "Geben Sie den Namen eines Programms, eines Ordners, eines Dokuments oder einer Internetressource an.", 12289, 36, 11, 182, 18\r
++ LTEXT "&Öffnen:", 12305, 7, 39, 24, 10\r
+  CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100\r
+  DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP\r
+  PUSHBUTTON "Abbrechen", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP\r
+  PUSHBUTTON "&Durchsuchen...", 12288, 170, 63, 50, 14, WS_TABSTOP\r
+ }\r
\r
++SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Verknüpfung"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++ ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE\r
++ LTEXT "Zeiltyp:", 14004, 10, 30, 50, 10\r
++ LTEXT "", 14005, 70, 30, 150, 10\r
++ LTEXT "Zielpfad:", 14006, 10, 40, 70, 10\r
++ LTEXT "", 14007, 70, 40, 150, 10\r
++ LTEXT "Ziel:", 14008, 10, 55, 45, 10\r
++ EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT\r
++ LTEXT "&Starten in:",14010, 10, 65, 45, 10\r
++ EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT\r
++ LTEXT "&Tastenkombination:", 14014, 10, 80, 45, 10\r
++ EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT\r
++ LTEXT "Ausführen:", 14016, 10, 90, 45, 10\r
++ EDITTEXT 14017, 70, 90, 150, 10\r
++ LTEXT "K&ommentar:", 14018, 10, 100, 45, 10\r
++ EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT\r
++ PUSHBUTTON "&Ziel finden...", 14020, 10, 115, 60, 14, ES_LEFT\r
++ PUSHBUTTON "I&con wechseln...", 14021, 80, 115, 60, 14, ES_LEFT\r
++ PUSHBUTTON "Er&weitert...", 14022, 150, 115, 60, 14, ES_LEFT\r
++}\r
++\r
++SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
++CAPTION "Erweiterte Einstellungen"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++LTEXT "Wählen Sie die erweiterten Einstellungen für diese Verknüpfung.", -1, 5, 30, 190, 10\r
++  CHECKBOX "Als anderer Benutzer ausführen", 14000, 30, 50, 150, 10\r
++  LTEXT "Diese Einstellung ermöglicht es, diese Verknüpfung unter\neinem anderen oder Ihrem eingenen Bentzerkonto auszuführen\nwährend der Computer und Ihre Daten vor unautorisierten\nProgrammaktivitäten geschützt werden können.", -1, 50, 60, 200, 40\r
++  CHECKBOX "In getrennten Speicherbereich ausführen", 14001, 30, 100, 90, 10, WS_DISABLED\r
++  PUSHBUTTON "OK", IDOK, 25, 120, 40, 15, WS_VISIBLE\r
++  PUSHBUTTON "Abbrechen", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE\r
++}\r
++\r
++SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Allgemein"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++ ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE\r
++ EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY\r
++ LTEXT "Dateityp:", 14004, 10, 30, 50, 10\r
++ LTEXT "Datei", 14005, 70, 30, 150, 10\r
++ LTEXT "Öffnen mit:", 14006, 10, 40, 50, 10\r
++ LTEXT "", 14007, 70, 40, 150, 10\r
++ LTEXT "Pfad:", 14008, 10, 55, 45, 10\r
++ LTEXT "", 14009, 70, 55, 200, 10\r
++ LTEXT "Größe:",14010, 10, 65, 45, 10\r
++ LTEXT "", 14011, 70, 65, 150, 10\r
++ LTEXT "Erstellt:", 14014, 10, 80, 45, 10\r
++ LTEXT "", 14015, 70, 80, 150, 10\r
++ LTEXT "Geändert:", 14016, 10, 90, 45, 10\r
++ LTEXT "", 14017, 70, 90, 150, 10\r
++ LTEXT "Zugegriffen:", 14018, 10, 100, 45, 10\r
++ LTEXT "", 14019, 70, 100, 150, 10\r
++ LTEXT "Attribute:", 14020, 10, 115, 45, 10\r
++ CHECKBOX "&Schreibgeschützt", 14021, 70, 115, 45, 10\r
++ CHECKBOX "&Versteckt", 14022, 130, 115, 50, 10\r
++ CHECKBOX "&Archiv", 14023, 180, 115, 45, 10\r
++}\r
++\r
++SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Version"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  LTEXT "Dateiversion: ", 14000, 10, 10, 45, 10\r
++  LTEXT "", 14001, 70, 10, 150, 10\r
++  LTEXT "Beschreibung: ", 14002, 10, 20, 45, 10\r
++  LTEXT "", 14003, 70, 20, 150, 10\r
++  LTEXT "Copyright: ", 14004, 10, 30, 45, 10\r
++  LTEXT "", 14005, 70, 30, 150, 10\r
++  GROUPBOX "Weitere Versionsinformationen: ", 14006, 10, 45, 220, 90\r
++  LTEXT "Elementname: ", 14007, 20, 55, 50, 10\r
++  LTEXT "Wert: ", 14008, 130, 55, 45, 10\r
++  LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY\r
++  EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY\r
++\r
++}\r
++\r
++DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Allgemein"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP\r
++  LTEXT "Typ:", -1, 15, 55, 40, 10\r
++  LTEXT "", 14002, 110, 55, 100, 10\r
++\r
++\r
++  LTEXT "Dateisystem:", -1, 15, 70, 100, 10\r
++  LTEXT "", 14003, 110, 70, 100, 10\r
++\r
++  CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10\r
++  LTEXT "Belegter Speicher:", -1, 25, 90, 120, 10\r
++  LTEXT "", 14004, 110, 90, 120, 10\r
++  LTEXT "", 14005, 200, 90, 40, 10\r
++\r
++  CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10\r
++  LTEXT "Freier Speicher:", -1, 25, 105, 70, 10\r
++  LTEXT "", 14006, 110, 105, 120, 10\r
++  LTEXT "", 14007, 200, 105, 40, 10\r
++\r
++  LTEXT "Speicherkapazität:", -1, 25, 125, 80, 10\r
++  LTEXT "", 14008, 110, 125, 120, 10\r
++  LTEXT "", 14009, 200, 125, 40, 10\r
++\r
++  CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20\r
++\r
++  LTEXT "Laufwerk %s", 14010, 100, 170, 40, 10\r
++  PUSHBUTTON "Bereinigen", 14011, 180, 175, 50, 15, WS_TABSTOP\r
++  CHECKBOX "Laufwerk komprimieren, um Speicherplatz zu sparen", 14012, 15, 205, 165, 10, WS_DISABLED\r
++  CHECKBOX "Laufwerk für schnelle Dateisuche indizieren", 14012, 15, 220, 165, 10, WS_DISABLED\r
++}\r
++\r
++DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Extras"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  GROUPBOX "Fehlerüberprüfung", -1, 5, 5, 230, 60\r
++  LTEXT "Bei Wahl dieser Option wird das Volume\nauf Fehler überprüft.", -1, 40, 25, 160, 20\r
++  PUSHBUTTON "Jetzt &prüfen", 14000, 130, 45, 90, 15, WS_TABSTOP\r
++  GROUPBOX "Defragmentierung", -1, 5, 65, 230, 60\r
++  LTEXT "Bei Wahl dieser Option werden die Dateien auf\ndem Volume defragmentiert.", -1, 40, 85, 160, 20\r
++  PUSHBUTTON "Jetzt &defragmentieren", 14001, 130, 105, 90, 15, WS_TABSTOP\r
++  GROUPBOX "Sicherung", -1, 5, 130, 230, 60\r
++  LTEXT "Bei Wahl dieser Option werden die auf dem\nVolume gespeicherten Dateien gesichert.", -1, 40, 150, 160, 20\r
++  PUSHBUTTON "Jetzt &sichern", 14002, 130, 170, 90, 15, WS_TABSTOP\r
++}\r
++\r
++DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Hardware"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++}\r
++\r
++RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Ausführen als"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++   LTEXT "Which user account do you want to use to run this program?", -1, 30, 30, 170, 10\r
++   CHECKBOX "Aktueller Benutzer %s", 14000, 5, 45, 150, 10\r
++   LTEXT "Computer vor unauthorisierten Programmaktiviäten schützen", -1, 40, 65, 150, 10, WS_DISABLED\r
++   CHECKBOX "Diese Einstellung kann Computerviren daran hindern, ihrem\nComputer und/oder Ihren persönlichen Daten zu schaden, aber\nes kann auch Programme daran hindern, Ordnungsgemäß zu arbeiten.", 14001, 40, 80, 150, 10, WS_DISABLED\r
++   CHECKBOX "Folgender Benutzer:", 14002, 5, 100, 90, 10\r
++   LTEXT "Benutzername:", -1, 15, 115, 60, 10\r
++   COMBOBOX 14003, 70, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP\r
++\r
++   PUSHBUTTON "...", 14004, 180, 115, 30, 10, WS_TABSTOP\r
++   LTEXT "Passwort:", -1, 15, 140, 60, 10\r
++   EDITTEXT 14005, 70, 140, 100, 10, ES_LEFT | WS_BORDER | WS_GROUP\r
++   PUSHBUTTON "...", 14006, 180, 140, 30, 10, WS_TABSTOP\r
++   PUSHBUTTON "OK", 14007, 70, 170, 60, 15, WS_TABSTOP\r
++   PUSHBUTTON "Abbrechen", 14008, 140, 170, 60, 15, WS_TABSTOP\r
++}\r
++\r
++\r
+ STRINGTABLE DISCARDABLE\r
+ {\r
+         /* columns in the shellview */\r
+@@ -194,10 +358,10 @@\r
+           "the folder?"\r
\r
+         /* message box strings */\r
+-        IDS_RESTART_TITLE       "Neustarten"\r
+-        IDS_RESTART_PROMPT      "Möchten Sie, dass ein simulierter Windows Neustart durchgeführt wird ?"\r
+-        IDS_SHUTDOWN_TITLE      "Anhalten"\r
+-        IDS_SHUTDOWN_PROMPT     "Möchten Sie die aktuelle Wine Sitzung beenden ?"\r
++        IDS_RESTART_TITLE       "Neu starten"\r
++        IDS_RESTART_PROMPT      "Möchten Sie das System neu starten?"\r
++        IDS_SHUTDOWN_TITLE      "Herunterfahren"\r
++        IDS_SHUTDOWN_PROMPT     "Möchten Sie das System herunterfahren?"\r
\r
+         /* shell folder path default values */\r
+       IDS_PROGRAMS            "Startmenü\\Programme"\r
+@@ -227,4 +391,7 @@\r
+       IDS_COMMON_PICTURES     "Dokumente\\Eigene Bilder"\r
+       IDS_COMMON_VIDEO        "Dokumente\\Eigene Videos"\r
+       IDS_CDBURN_AREA         "Lokale Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning"\r
++        IDS_DRIVE_FIXED         "Lokaler Datenträger"\r
++        IDS_DRIVE_CDROM         "CD-Laufwerk"\r
++        IDS_DRIVE_NETWORK       "Netzwerklaufwerk"\r
+ }\r
+Index: shell32_En.rc\r
+===================================================================\r
+--- shell32_En.rc      (revision 29513)\r
++++ shell32_En.rc      (working copy)\r
+@@ -16,7 +16,7 @@\r
+  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\r
+  */\r
\r
+-LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT\r
++LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
\r
+ MENU_001 MENU DISCARDABLE\r
+ BEGIN\r
+@@ -145,7 +145,7 @@\r
+  ICON "", 1088, 10, 10, 14, 16\r
+  LTEXT "", 100, 30, 10, 137, 10\r
+  LTEXT "", 101, 30, 22, 137, 10\r
+- LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10\r
++ LTEXT "ReactOS was brought to you by:", 98, 8, 55, 137, 10\r
+ }\r
\r
+ SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95\r
+@@ -154,7 +154,7 @@\r
+ FONT 8, "MS Shell Dlg"\r
+ {\r
+  ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE\r
+- LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18\r
++ LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18\r
+  LTEXT "&Open:", 12305, 7, 39, 24, 10\r
+  CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100\r
+  DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP\r
+@@ -162,6 +162,172 @@\r
+  PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP\r
+ }\r
\r
++SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Shortcut"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++ ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE\r
++ LTEXT "Target type:", 14004, 10, 30, 50, 10\r
++ LTEXT "", 14005, 70, 30, 150, 10\r
++ LTEXT "Target location:", 14006, 10, 40, 70, 10\r
++ LTEXT "", 14007, 70, 40, 150, 10\r
++ LTEXT "Target:", 14008, 10, 55, 45, 10\r
++ EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT\r
++ LTEXT "&Start in:",14010, 10, 65, 45, 10\r
++ EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT\r
++ LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10\r
++ EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT\r
++ LTEXT "Run:", 14016, 10, 90, 45, 10\r
++ EDITTEXT 14017, 70, 90, 150, 10\r
++ LTEXT "C&omment:", 14018, 10, 100, 45, 10\r
++ EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT\r
++ PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT\r
++ PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT\r
++ PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT\r
++}\r
++\r
++SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 260, 150\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION\r
++CAPTION "Extended Properties"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 190, 10\r
++  CHECKBOX "Run with different credentials", 14000, 30, 50, 150, 10\r
++  LTEXT "This option can allow you to run the this shortcut as another\nuser, or continue as yourself while protecting your computer\nand data from unauthorized program activity.", -1, 50, 60, 200, 40\r
++  CHECKBOX "Run in seperate memory space", 14001, 30, 100, 90, 10, WS_DISABLED\r
++  PUSHBUTTON "OK", IDOK, 25, 120, 40, 15, WS_VISIBLE\r
++  PUSHBUTTON "Abort", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE\r
++}\r
++\r
++SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "General"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++ ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE\r
++ EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY\r
++ LTEXT "Type of file:", 14004, 10, 30, 50, 10\r
++ LTEXT "File", 14005, 70, 30, 150, 10\r
++ LTEXT "Opens with:", 14006, 10, 40, 50, 10\r
++ LTEXT "", 14007, 70, 40, 150, 10\r
++ LTEXT "Location:", 14008, 10, 55, 45, 10\r
++ LTEXT "", 14009, 70, 55, 200, 10\r
++ LTEXT "Size:",14010, 10, 65, 45, 10\r
++ LTEXT "", 14011, 70, 65, 150, 10\r
++ LTEXT "Created:", 14014, 10, 80, 45, 10\r
++ LTEXT "", 14015, 70, 80, 150, 10\r
++ LTEXT "Modified:", 14016, 10, 90, 45, 10\r
++ LTEXT "", 14017, 70, 90, 150, 10\r
++ LTEXT "Accessed:", 14018, 10, 100, 45, 10\r
++ LTEXT "", 14019, 70, 100, 150, 10\r
++ LTEXT "Attributes:", 14020, 10, 115, 45, 10\r
++ CHECKBOX "&Read-only", 14021, 70, 115, 45, 10\r
++ CHECKBOX "&Hidden", 14022, 130, 115, 50, 10\r
++ CHECKBOX "&Archive", 14023, 180, 115, 45, 10\r
++}\r
++\r
++SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Version"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  LTEXT "File version: ", 14000, 10, 10, 45, 10\r
++  LTEXT "", 14001, 70, 10, 150, 10\r
++  LTEXT "Description: ", 14002, 10, 20, 45, 10\r
++  LTEXT "", 14003, 70, 20, 150, 10\r
++  LTEXT "Copyright: ", 14004, 10, 30, 45, 10\r
++  LTEXT "", 14005, 70, 30, 150, 10\r
++  GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90\r
++  LTEXT "Item name: ", 14007, 20, 55, 50, 10\r
++  LTEXT "Value: ", 14008, 130, 55, 45, 10\r
++  LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY\r
++  EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY\r
++\r
++}\r
++\r
++DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "General"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP\r
++  LTEXT "Type:", -1, 15, 55, 40, 10\r
++  LTEXT "", 14002, 110, 55, 100, 10\r
++\r
++\r
++  LTEXT "File system:", -1, 15, 70, 100, 10\r
++  LTEXT "", 14003, 110, 70, 100, 10\r
++\r
++  CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10\r
++  LTEXT "Used space:", -1, 25, 90, 120, 10\r
++  LTEXT "", 14004, 110, 90, 120, 10\r
++  LTEXT "", 14005, 200, 90, 40, 10\r
++\r
++  CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10\r
++  LTEXT "Free space:", -1, 25, 105, 70, 10\r
++  LTEXT "", 14006, 110, 105, 120, 10\r
++  LTEXT "", 14007, 200, 105, 40, 10\r
++\r
++  LTEXT "Capacity:", -1, 25, 125, 80, 10\r
++  LTEXT "", 14008, 110, 125, 120, 10\r
++  LTEXT "", 14009, 200, 125, 40, 10\r
++\r
++  CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20\r
++\r
++  LTEXT "Drive %s", 14010, 100, 170, 40, 10\r
++  PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP\r
++  CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED\r
++  CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED\r
++}\r
++\r
++DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Tools"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++  GROUPBOX "Error-checking", -1, 5, 5, 230, 60\r
++  LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20\r
++  PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP\r
++  GROUPBOX "Defragmentation", -1, 5, 65, 230, 60\r
++  LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20\r
++  PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP\r
++  GROUPBOX "Backup", -1, 5, 130, 230, 60\r
++  LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20\r
++  PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP\r
++}\r
++\r
++\r
++\r
++DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Hardware"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++}\r
++\r
++RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190\r
++STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION\r
++CAPTION "Run As"\r
++FONT 8, "MS Shell Dlg", 0, 0, 0x0\r
++{\r
++   LTEXT "Which user account do you want to use to run this program?", -1, 30, 30, 170, 10\r
++   CHECKBOX "Current User %s", 14000, 5, 45, 150, 10\r
++   LTEXT "Protect my computer and data from unauthorized program activity", -1, 40, 65, 150, 10, WS_DISABLED\r
++   CHECKBOX "This option can prevent computer viruses from harming your\ncomputer or personal data, but selecting it might cause the\nprogram to function improperly.", 14001, 40, 80, 150, 10, WS_DISABLED\r
++   CHECKBOX "The following user:", 14002, 5, 100, 90, 10\r
++   LTEXT "User name:", -1, 15, 115, 60, 10\r
++   COMBOBOX 14003, 70, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP\r
++\r
++   PUSHBUTTON "...", 14004, 180, 115, 30, 10, WS_TABSTOP\r
++   LTEXT "Password:", -1, 15, 140, 60, 10\r
++   EDITTEXT 14005, 70, 140, 100, 10, ES_LEFT | WS_BORDER | WS_GROUP\r
++   PUSHBUTTON "...", 14006, 180, 140, 30, 10, WS_TABSTOP\r
++   PUSHBUTTON "OK", 14007, 70, 170, 60, 15, WS_TABSTOP\r
++   PUSHBUTTON "Cancel", 14008, 140, 170, 60, 15, WS_TABSTOP\r
++}\r
++\r
++\r
+ STRINGTABLE DISCARDABLE\r
+ {\r
+         /* columns in the shellview */\r
+@@ -211,10 +377,10 @@\r
+           "the folder?"\r
\r
+         /* message box strings */\r
+-        IDS_RESTART_TITLE       "Restart"\r
+-        IDS_RESTART_PROMPT      "Do you want to simulate a Windows reboot?"\r
+-        IDS_SHUTDOWN_TITLE      "Shutdown"\r
+-        IDS_SHUTDOWN_PROMPT     "Do you want to shutdown your Wine session?"\r
++      IDS_RESTART_TITLE       "Restart"\r
++      IDS_RESTART_PROMPT      "Do you want to restart the system?"\r
++      IDS_SHUTDOWN_TITLE      "Shutdown"\r
++      IDS_SHUTDOWN_PROMPT     "Do you want to shutdown?"\r
\r
+         /* shell folder path default values */\r
+       IDS_PROGRAMS                "Start Menu\\Programs"\r
+@@ -244,4 +410,7 @@\r
+       IDS_COMMON_PICTURES         "Documents\\My Pictures"\r
+       IDS_COMMON_VIDEO            "Documents\\My Video"\r
+       IDS_CDBURN_AREA             "Local Settings\\Application Data\\Microsoft\\CD Burning"\r
++        IDS_DRIVE_FIXED             "Local Disk"\r
++        IDS_DRIVE_CDROM             "CDROM"\r
++        IDS_DRIVE_NETWORK           "Network Disk"\r
+ }\r
+Index: shell32_main.h\r
+===================================================================\r
+--- shell32_main.h     (revision 29513)\r
++++ shell32_main.h     (working copy)\r
+@@ -239,4 +239,8 @@\r
+ /* Detect Shell Links */\r
+ BOOL SHELL_IsShortcut(LPCITEMIDLIST);\r
\r
++INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);\r
++INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);\r
++HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam);\r
++BOOL SH_ShowDriveProperties(WCHAR * drive);\r
+ #endif\r
+Index: shelllink.c\r
+===================================================================\r
+--- shelllink.c        (revision 29513)\r
++++ shelllink.c        (working copy)\r
+@@ -53,8 +53,9 @@\r
+ #include "shlwapi.h"\r
+ #include "msi.h"\r
+ #include "appmgmt.h"\r
+-\r
++#include "prsht.h"\r
+ #include "initguid.h"\r
++#include "shresdef.h"\r
\r
+ WINE_DEFAULT_DEBUG_CHANNEL(shell);\r
\r
+@@ -86,6 +87,7 @@\r
\r
+ #define SHLINK_LOCAL  0\r
+ #define SHLINK_REMOTE 1\r
++#define MAX_PROPERTY_SHEET_PAGE 32\r
\r
+ typedef struct _LOCATION_INFO\r
+ {\r
+@@ -157,9 +159,11 @@\r
+       LPWSTR        sProduct;\r
+       LPWSTR        sComponent;\r
+       volume_info   volume;\r
+-\r
++    LPWSTR        sLinkPath;\r
++    BOOL          bRunAs;\r
+       BOOL          bDirty;\r
+         INT           iIdOpen;  /* id of the "Open" entry in the context menu */\r
++        INT           iIdProperties; /* id of the "Properties" entry in the context menu */\r
+       IUnknown      *site;\r
+ } IShellLinkImpl;\r
\r
+@@ -304,6 +308,7 @@\r
+     HeapFree(GetProcessHeap(), 0, This->sWorkDir);\r
+     HeapFree(GetProcessHeap(), 0, This->sDescription);\r
+     HeapFree(GetProcessHeap(),0,This->sPath);\r
++    HeapFree(GetProcessHeap(),0,This->sLinkPath);\r
\r
+     if (This->site)\r
+         IUnknown_Release( This->site );\r
+@@ -386,6 +391,8 @@\r
+         r = SHCreateStreamOnFileW(pszFileName, dwMode, &stm);\r
+         if( SUCCEEDED( r ) )\r
+         {\r
++            HeapFree(GetProcessHeap(), 0, This->sLinkPath);\r
++            This->sLinkPath = _wcsdup(pszFileName);\r
+             r = IPersistStream_Load(StreamThis, stm);\r
+             ShellLink_UpdatePath(This->sPathRel, pszFileName, This->sWorkDir, &This->sPath);\r
+             IStream_Release( stm );\r
+@@ -919,6 +926,15 @@\r
+         r = Stream_LoadAdvertiseInfo( stm, &This->sComponent );\r
+         TRACE("Component    -> %s\n",debugstr_w(This->sComponent));\r
+     }\r
++    if( hdr.dwFlags & SLDF_RUNAS_USER )\r
++    {\r
++       This->bRunAs = TRUE;\r
++    }\r
++    else\r
++    {\r
++       This->bRunAs = FALSE;\r
++    }\r
++\r
+     if( FAILED( r ) )\r
+         goto end;\r
\r
+@@ -1089,6 +1105,8 @@\r
+         header.dwFlags |= SLDF_HAS_LOGO3ID;\r
+     if( This->sComponent )\r
+         header.dwFlags |= SLDF_HAS_DARWINID;\r
++    if( This->bRunAs )\r
++        header.dwFlags |= SLDF_RUNAS_USER;\r
\r
+     SystemTimeToFileTime ( &This->time1, &header.Time1 );\r
+     SystemTimeToFileTime ( &This->time2, &header.Time2 );\r
+@@ -1204,6 +1222,7 @@\r
+       sl->bDirty = FALSE;\r
+       sl->iIdOpen = -1;\r
+       sl->site = NULL;\r
++    sl->bRunAs = FALSE;\r
\r
+       TRACE("(%p)->()\n",sl);\r
\r
+@@ -2452,6 +2471,7 @@\r
+ {\r
+     IShellLinkImpl *This = impl_from_IContextMenu(iface);\r
+     static WCHAR szOpen[] = { 'O','p','e','n',0 };\r
++    static WCHAR szProperties[] = { 'P','r','o','p','e','r','t','i','e','s',0 };\r
+     MENUITEMINFOW mii;\r
+     int id = 1;\r
\r
+@@ -2461,10 +2481,10 @@\r
+     if ( !hmenu )\r
+         return E_INVALIDARG;\r
\r
+-    memset( &mii, 0, sizeof mii );\r
+-    mii.cbSize = sizeof mii;\r
++    memset( &mii, 0, sizeof(mii) );\r
++    mii.cbSize = sizeof (mii);\r
+     mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;\r
+-    mii.dwTypeData = szOpen;\r
++    mii.dwTypeData = (LPWSTR)szOpen;\r
+     mii.cch = strlenW( mii.dwTypeData );\r
+     mii.wID = idCmdFirst + id++;\r
+     mii.fState = MFS_DEFAULT | MFS_ENABLED;\r
+@@ -2473,6 +2493,18 @@\r
+         return E_FAIL;\r
+     This->iIdOpen = 0;\r
\r
++    mii.fState = MFS_ENABLED;\r
++    mii.dwTypeData = (LPWSTR)szProperties;\r
++    mii.cch = strlenW( mii.dwTypeData );\r
++    mii.wID = idCmdFirst + id++;\r
++    if (!InsertMenuItemW( hmenu, idCmdLast, TRUE, &mii ))\r
++    {\r
++        TRACE("ShellLink_QueryContextMenu failed to insert item properties");\r
++        return E_FAIL;\r
++    }\r
++    This->iIdProperties = 1;\r
++    id++;\r
++\r
+     return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id );\r
+ }\r
\r
+@@ -2500,7 +2532,223 @@\r
+     return path;\r
+ }\r
\r
++INT_PTR CALLBACK ExtendedShortcutProc(      \r
++    HWND hwndDlg,\r
++    UINT uMsg,\r
++    WPARAM wParam,\r
++    LPARAM lParam\r
++)\r
++{\r
++   HWND hDlgCtrl;\r
++\r
++   switch(uMsg)\r
++   {\r
++   case WM_INITDIALOG:\r
++       if (lParam)\r
++       {\r
++            hDlgCtrl = GetDlgItem(hwndDlg, 14000);\r
++            SendMessage(hDlgCtrl, BM_SETCHECK, BST_CHECKED, 0);\r
++       }\r
++       return TRUE;\r
++   case WM_COMMAND:\r
++        hDlgCtrl = GetDlgItem(hwndDlg, 14000);\r
++              if (LOWORD(wParam) == IDOK)\r
++        {\r
++                 if ( SendMessage(hDlgCtrl, BM_GETCHECK, 0, 0) == BST_CHECKED )\r
++                EndDialog(hwndDlg, 1);\r
++           else\r
++              EndDialog(hwndDlg, 0);\r
++        }\r
++        else if (LOWORD(wParam) == IDCANCEL)\r
++        {\r
++            EndDialog(hwndDlg, -1);\r
++        }\r
++        else if (LOWORD(wParam) == 14000)\r
++        {\r
++           if ( SendMessage(hDlgCtrl, BM_GETCHECK, 0, 0) == BST_CHECKED)\r
++              SendMessage(hDlgCtrl, BM_SETCHECK, BST_UNCHECKED, 0);\r
++           else\r
++              SendMessage(hDlgCtrl, BM_SETCHECK, BST_CHECKED, 0);\r
++\r
++        }\r
++   }\r
++   return FALSE;\r
++}\r
++\r
++/**************************************************************************\r
++ * SH_ShellLinkDlgProc\r
++ *\r
++ * dialog proc of the shortcut property dialog\r
++ */\r
++\r
++INT_PTR \r
++CALLBACK \r
++SH_ShellLinkDlgProc(   \r
++    HWND hwndDlg,\r
++    UINT uMsg,\r
++    WPARAM wParam,\r
++    LPARAM lParam\r
++)\r
++{\r
++    LPPROPSHEETPAGEW ppsp;\r
++    LPPSHNOTIFY lppsn;\r
++    IShellLinkImpl *This;\r
++    HWND hDlgCtrl;\r
++    WCHAR szBuffer[MAX_PATH];\r
++    int IconIndex;\r
++    INT_PTR result;\r
++\r
++    This = (IShellLinkImpl *)GetWindowLongPtr(hwndDlg, DWLP_USER);\r
++\r
++    switch(uMsg)\r
++    {\r
++    case WM_INITDIALOG:\r
++        ppsp = (LPPROPSHEETPAGEW)lParam;\r
++        if (ppsp == NULL)\r
++            break;\r
++     \r
++        TRACE("ShellLink_DlgProc (WM_INITDIALOG hwnd %p lParam %p ppsplParam %x)\n",hwndDlg, lParam, ppsp->lParam);\r
++\r
++        This = (IShellLinkImpl *)ppsp->lParam;\r
++        SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)This);\r
++\r
++              TRACE("sArgs: %S sComponent: %S sDescription: %S sIcoPath: %S sPath: %S sPathRel: %S sProduct: %S sWorkDir: %S\n", This->sArgs, This->sComponent ,This->sDescription,\r
++                      This->sIcoPath, This->sPath, This->sPathRel, This->sProduct, This->sWorkDir);\r
++\r
++        /* target path */\r
++        hDlgCtrl = GetDlgItem( hwndDlg, 14009 );\r
++        if ( hDlgCtrl != NULL )\r
++            SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)This->sPath );\r
++\r
++       /* working dir */\r
++       hDlgCtrl = GetDlgItem( hwndDlg, 14011 );\r
++       if ( hDlgCtrl != NULL )\r
++            SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)This->sWorkDir );\r
++\r
++         /* description */\r
++       hDlgCtrl = GetDlgItem( hwndDlg, 14019 );\r
++       if ( hDlgCtrl != NULL )\r
++            SendMessageW( hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)This->sDescription );\r
++        return TRUE;\r
++    case WM_NOTIFY:\r
++       lppsn = (LPPSHNOTIFY) lParam; \r
++       if ( lppsn->hdr.code == PSN_APPLY )\r
++       {\r
++            /* set working directory */\r
++            hDlgCtrl = GetDlgItem( hwndDlg, 14011 );\r
++            SendMessageW( hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szBuffer );\r
++            IShellLinkW_fnSetWorkingDirectory((IShellLinkW*)&This->lpvtblw, szBuffer);\r
++            /* set link destination */\r
++            hDlgCtrl = GetDlgItem( hwndDlg, 14009 );\r
++            SendMessageW( hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)szBuffer);\r
++            if ( !SHELL_ExistsFileW(szBuffer) )\r
++            {\r
++                MessageBoxW( hwndDlg, L"file not existing", szBuffer, MB_OK );\r
++                SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE );\r
++                return TRUE;\r
++            }\r
++            IShellLinkW_fnSetPath((IShellLinkW*)&This->lpvtblw, szBuffer);\r
++\r
++            TRACE("This %p sLinkPath %S\n", This, This->sLinkPath);\r
++            IPersistFile_fnSave( (IPersistFile*)&This->lpvtblPersistFile, This->sLinkPath, TRUE );\r
++            SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR );\r
++            return TRUE;\r
++       }\r
++       break;\r
++    case WM_COMMAND:\r
++       switch(LOWORD(wParam))\r
++       {\r
++           case 14020:\r
++               /// \r
++               /// FIXME\r
++               /// open target directory\r
++               ///\r
++               return TRUE;\r
++           case 14021:\r
++               if (PickIconDlg(hwndDlg, szBuffer, MAX_PATH, &IconIndex))\r
++               {\r
++                    IShellLinkW_fnSetIconLocation((IShellLinkW*)&This->lpvtblw, szBuffer, IconIndex);\r
++                    ///\r
++                    /// FIXME redraw icon\r
++               }\r
++               return TRUE;\r
++           case 14022:\r
++               result = DialogBoxParamW(shell32_hInstance, MAKEINTRESOURCEW(SHELL_EXTENDED_SHORTCUT_DLG), hwndDlg, ExtendedShortcutProc, (LPARAM)This->bRunAs);\r
++               if (result == 1 || result == 0)\r
++               {\r
++                   if ( This->bRunAs != result )\r
++                   {\r
++                       PropSheet_Changed(GetParent(hwndDlg), hwndDlg);\r
++                   }\r
++\r
++                   This->bRunAs = result;\r
++               }\r
++               return TRUE;\r
++       }\r
++       switch(HIWORD(wParam))\r
++       {\r
++           case EN_CHANGE:\r
++              PropSheet_Changed(GetParent(hwndDlg), hwndDlg);\r
++              break;\r
++       }\r
++       break;\r
++    default:\r
++        break;\r
++   }\r
++   return FALSE;\r
++}\r
++\r
++/**************************************************************************\r
++ * ShellLink_ShortcutDialog [Internal]\r
++ *\r
++ * creates a shortcut property dialog\r
++ */\r
++\r
+ static HRESULT WINAPI\r
++ShellLink_ShowProperties( IShellLinkImpl *This )\r
++{\r
++    PROPSHEETHEADERW pinfo;\r
++    HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE];\r
++    HPROPSHEETPAGE hpage;\r
++    UINT numpages = 0;\r
++\r
++    TRACE("ShellLink_ShortcutDialog entered\n");\r
++\r
++    memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE);\r
++\r
++    hpage = SH_CreatePropertySheetPage("SHELL_FILE_GENERAL_DLG", SH_FileGeneralDlgProc, (LPARAM)This->sLinkPath);\r
++    if ( hpage == NULL )\r
++        return E_FAIL;\r
++    else\r
++        hppages[numpages++] = hpage;\r
++\r
++      hpage = SH_CreatePropertySheetPage("SHELL_GENERAL_SHORTCUT_DLG", SH_ShellLinkDlgProc, (LPARAM)This);\r
++      if ( hpage == NULL )\r
++    {\r
++        ERR("SH_CreatePropertySheetPage failed\n");\r
++        DestroyPropertySheetPage(hppages[0]);\r
++        return E_FAIL;\r
++      }\r
++    hppages[numpages++] = hpage;\r
++\r
++    ///FIXME\r
++    /// load extensions\r
++\r
++    memset(&pinfo, 0x0, sizeof(PROPSHEETHEADERW));\r
++    pinfo.dwSize = sizeof(PROPSHEETHEADERW);\r
++    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE;\r
++    pinfo.nPages = numpages;\r
++      pinfo.u3.phpage = hppages;\r
++    pinfo.pszCaption = This->sDescription;\r
++    pinfo.u2.nStartPage = 1;\r
++\r
++    if ( PropertySheetW(&pinfo) < 0 )\r
++        return E_FAIL;\r
++      else\r
++        return S_OK;\r
++}\r
++\r
++static HRESULT WINAPI\r
+ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )\r
+ {\r
+     IShellLinkImpl *This = impl_from_IContextMenu(iface);\r
+@@ -2516,6 +2764,12 @@\r
+     if ( lpici->cbSize < sizeof (CMINVOKECOMMANDINFO) )\r
+         return E_INVALIDARG;\r
\r
++    if ( lpici->lpVerb == MAKEINTRESOURCEA(This->iIdProperties))\r
++    {\r
++        ShellLink_ShowProperties(This);\r
++        return S_OK;\r
++    }\r
++\r
+     if ( lpici->lpVerb != MAKEINTRESOURCEA(This->iIdOpen) )\r
+     {\r
+         ERR("Unknown id %d != %d\n", (INT)lpici->lpVerb, This->iIdOpen );\r
+Index: shellole.c\r
+===================================================================\r
+--- shellole.c (revision 29513)\r
++++ shellole.c (working copy)\r
+@@ -69,11 +69,13 @@\r
+       {&CLSID_DragDropHelper, &IDropTargetHelper_Constructor},\r
+       {&CLSID_ControlPanel,   &IControlPanel_Constructor},\r
+       {&CLSID_AutoComplete,   &IAutoComplete_Constructor},\r
++#if 0\r
+       {&CLSID_UnixFolder,     &UnixFolder_Constructor},\r
+       {&CLSID_UnixDosFolder,  &UnixDosFolder_Constructor},\r
+       {&CLSID_FolderShortcut, &FolderShortcut_Constructor},\r
+       {&CLSID_MyDocuments,    &MyDocuments_Constructor},\r
+       {&CLSID_RecycleBin,     &RecycleBin_Constructor},\r
++#endif\r
+       {NULL,NULL}\r
+ };\r
\r
+Index: shellord.c\r
+===================================================================\r
+--- shellord.c (revision 29513)\r
++++ shellord.c (working copy)\r
+@@ -1265,9 +1265,70 @@\r
+  * IsUserAdmin                                        [SHELL32.680] NT 4.0\r
+  *\r
+  */\r
+-HRESULT WINAPI IsUserAdmin(void)\r
+-{     FIXME("stub\n");\r
+-      return TRUE;\r
++\r
++BOOL WINAPI IsUserAnAdmin(VOID)\r
++{\r
++    SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY};\r
++    HANDLE hToken;\r
++    DWORD dwSize;\r
++    PTOKEN_GROUPS lpGroups;\r
++    PSID lpSid;\r
++    DWORD i;\r
++    BOOL bResult = FALSE;\r
++\r
++    TRACE("\n");\r
++\r
++    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))\r
++    {\r
++        return FALSE;\r
++    }\r
++\r
++    if (!GetTokenInformation(hToken, TokenGroups, NULL, 0, &dwSize))\r
++    {\r
++        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
++        {\r
++            CloseHandle(hToken);\r
++            return FALSE;\r
++        }\r
++    }\r
++\r
++    lpGroups = HeapAlloc(GetProcessHeap(), 0, dwSize);\r
++    if (lpGroups == NULL)\r
++    {\r
++        CloseHandle(hToken);\r
++        return FALSE;\r
++    }\r
++\r
++    if (!GetTokenInformation(hToken, TokenGroups, lpGroups, dwSize, &dwSize))\r
++    {\r
++        HeapFree(GetProcessHeap(), 0, lpGroups);\r
++        CloseHandle(hToken);\r
++        return FALSE;\r
++    }\r
++\r
++    CloseHandle(hToken);\r
++\r
++    if (!AllocateAndInitializeSid(&Authority, 2, SECURITY_BUILTIN_DOMAIN_RID,\r
++                                  DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0,\r
++                                  &lpSid))\r
++    {\r
++        HeapFree(GetProcessHeap(), 0, lpGroups);\r
++        return FALSE;\r
++    }\r
++\r
++    for (i = 0; i < lpGroups->GroupCount; i++)\r
++    {\r
++        if (EqualSid(lpSid, lpGroups->Groups[i].Sid))\r
++        {\r
++            bResult = TRUE;\r
++            break;\r
++        }\r
++    }\r
++\r
++    FreeSid(lpSid);\r
++    HeapFree(GetProcessHeap(), 0, lpGroups);\r
++\r
++    return bResult;\r
+ }\r
\r
+ /*************************************************************************\r
+@@ -1584,14 +1645,6 @@\r
+ }\r
\r
+ /*************************************************************************\r
+- *      SHCreatePropSheetExtArray     [SHELL32.168]\r
+- */\r
+-HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)\r
+-{\r
+-    return SHCreatePropSheetExtArrayEx(hKey, pszSubKey, max_iface, NULL);\r
+-}\r
+-\r
+-/*************************************************************************\r
+  *      SHCreatePropSheetExtArrayEx   [SHELL32.194]\r
+  */\r
+ HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj)\r
+@@ -1695,6 +1748,15 @@\r
+ }\r
\r
+ /*************************************************************************\r
++ *      SHCreatePropSheetExtArray     [SHELL32.168]\r
++ */\r
++HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)\r
++{\r
++    return SHCreatePropSheetExtArrayEx(hKey, pszSubKey, max_iface, NULL);\r
++}\r
++\r
++\r
++/*************************************************************************\r
+  *      SHReplaceFromPropSheetExtArray        [SHELL32.170]\r
+  */\r
+ UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)\r
+Index: shellpath.c\r
+===================================================================\r
+--- shellpath.c        (revision 29513)\r
++++ shellpath.c        (working copy)\r
+@@ -24,6 +24,7 @@\r
+  *\r
+  */\r
\r
++#define symlink(A, B)\r
+ #include "config.h"\r
+ #include "wine/port.h"\r
\r
+@@ -1977,7 +1978,7 @@\r
+  \r
+     if (szBasePath[cLen-1] != '/') szBasePath[cLen++] = '/';\r
+  \r
+-    if (!WideCharToMultiByte(CP_UNIXCP, 0, wszSubPath, -1, szBasePath + cLen,\r
++    if (!WideCharToMultiByte(CP_ACP, 0, wszSubPath, -1, szBasePath + cLen,\r
+                              FILENAME_MAX - cLen, NULL, NULL))\r
+     {\r
+         return FALSE;\r
+@@ -1988,7 +1989,7 @@\r
+  \r
+     return TRUE;\r
+ }\r
+-\r
++#if 0\r
+ /******************************************************************************\r
+  * _SHCreateSymbolicLinks  [Internal]\r
+  * \r
+@@ -2040,7 +2041,7 @@\r
+             for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {\r
+                 strcpy(szMyStuffTarget, szPersonalTarget);\r
+                 if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))\r
+-                    mkdir(szMyStuffTarget, 0777);\r
++                    mkdir(szMyStuffTarget);\r
+             }\r
+         } \r
+         else\r
+@@ -2061,7 +2062,7 @@\r
+         for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {\r
+             strcpy(szMyStuffTarget, szPersonalTarget);\r
+             if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))\r
+-                mkdir(szMyStuffTarget, 0777);\r
++                mkdir(szMyStuffTarget);\r
+         }\r
+     }\r
\r
+@@ -2108,6 +2109,7 @@\r
+         }\r
+     }\r
+ }\r
++#endif\r
\r
+ /* Register the default values in the registry, as some apps seem to depend\r
+  * on their presence.  The set registered was taken from Windows XP.\r
+@@ -2120,7 +2122,9 @@\r
+      * 'My Video', 'My Music' and 'Desktop' in advance, so that the\r
+      * _SHRegister*ShellFolders() functions will find everything nice and clean\r
+      * and thus will not attempt to create them in the profile directory. */\r
++#if 0\r
+     _SHCreateSymbolicLinks();\r
++#endif\r
+     \r
+     hr = _SHRegisterUserShellFolders(TRUE);\r
+     if (SUCCEEDED(hr))\r
+Index: shfldr_desktop.c\r
+===================================================================\r
+--- shfldr_desktop.c   (revision 29513)\r
++++ shfldr_desktop.c   (working copy)\r
+@@ -165,9 +165,11 @@\r
+     else if (PathGetDriveNumberW (lpszDisplayName) >= 0)\r
+     {\r
+         /* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */\r
++#if 0\r
+         if (UNIXFS_is_rooted_at_desktop()) \r
+             pidlTemp = _ILCreateGuid(PT_GUID, &CLSID_UnixDosFolder);\r
+         else\r
++#endif\r
+             pidlTemp = _ILCreateMyComputer ();\r
+         szNext = lpszDisplayName;\r
+     }\r
+Index: shfldr_mycomp.c\r
+===================================================================\r
+--- shfldr_mycomp.c    (revision 29513)\r
++++ shfldr_mycomp.c    (working copy)\r
+@@ -695,20 +695,8 @@\r
\r
+     if (SUCCEEDED (hr))\r
+     {\r
+-        /* Win9x always returns ANSI strings, NT always returns Unicode strings */\r
+-        if (GetVersion() & 0x80000000)\r
+-        {\r
+-            strRet->uType = STRRET_CSTR;\r
+-            if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->u.cStr, MAX_PATH,\r
+-                    NULL, NULL))\r
+-                strRet->u.cStr[0] = '\0';\r
+-            CoTaskMemFree(pszPath);\r
+-        }\r
+-        else\r
+-        {\r
+-            strRet->uType = STRRET_WSTR;\r
+-            strRet->u.pOleStr = pszPath;\r
+-        }\r
++        strRet->uType = STRRET_WSTR;\r
++        strRet->u.pOleStr = pszPath;\r
+     }\r
+     else\r
+         CoTaskMemFree(pszPath);\r
+Index: shlexec.c\r
+===================================================================\r
+--- shlexec.c  (revision 29513)\r
++++ shlexec.c  (working copy)\r
+@@ -1300,6 +1300,7 @@\r
+     static const WCHAR wFile[] = {'f','i','l','e',0};\r
+     static const WCHAR wHttp[] = {'h','t','t','p',':','/','/',0};\r
+     static const WCHAR wExplorer[] = {'e','x','p','l','o','r','e','r','.','e','x','e',0};\r
++    static const WCHAR wProperties[] = { 'p','r','o','p','e','r','t','i','e','s',0 };\r
+     static const DWORD unsupportedFlags =\r
+         SEE_MASK_INVOKEIDLIST  | SEE_MASK_ICON         | SEE_MASK_HOTKEY |\r
+         SEE_MASK_CONNECTNETDRV | SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI |\r
+@@ -1405,6 +1406,13 @@\r
+         return TRUE;\r
+     }\r
\r
++    if (sei_tmp.lpVerb && !wcscmp(sei_tmp.lpVerb, wProperties))\r
++    {\r
++        SH_ShowPropertiesDialog(sei_tmp.lpFile);\r
++        sei->hInstApp = (HINSTANCE) 33;\r
++        return TRUE;\r
++    }\r
++\r
+     if (sei_tmp.fMask & SEE_MASK_CLASSALL)\r
+     {\r
+       /* launch a document by fileclass like 'WordPad.Document.1' */\r
+Index: shlfileop.c\r
+===================================================================\r
+--- shlfileop.c        (revision 29513)\r
++++ shlfileop.c        (working copy)\r
+@@ -1303,8 +1303,8 @@\r
+         return ERROR_SUCCESS;\r
\r
+     /* Windows also checks only the first item */\r
+-    bTrash = (lpFileOp->fFlags & FOF_ALLOWUNDO)\r
+-        && TRASH_CanTrashFile(flFrom->feFiles[0].szFullPath);\r
++    bTrash = (lpFileOp->fFlags & FOF_ALLOWUNDO);\r
++        //&& TRASH_CanTrashFile(flFrom->feFiles[0].szFullPath);\r
\r
+     if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (!bTrash && lpFileOp->fFlags & FOF_WANTNUKEWARNING))\r
+         if (!confirm_delete_list(lpFileOp->hwnd, lpFileOp->fFlags, bTrash, flFrom))\r
+@@ -1325,8 +1325,10 @@\r
+         if (bTrash)\r
+         {\r
+             BOOL bDelete;\r
++#if 0\r
+             if (TRASH_TrashFile(fileEntry->szFullPath))\r
+                 continue;\r
++#endif\r
\r
+             /* Note: Windows silently deletes the file in such a situation, we show a dialog */\r
+             if (!(lpFileOp->fFlags & FOF_NOCONFIRMATION) || (lpFileOp->fFlags & FOF_WANTNUKEWARNING))\r
+@@ -1696,16 +1698,6 @@\r
+ }\r
\r
+ /***********************************************************************\r
+- *              SHPathPrepareForWriteA (SHELL32.@)\r
+- */\r
+-HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)\r
+-{\r
+-    WCHAR wpath[MAX_PATH];\r
+-    MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, MAX_PATH);\r
+-    return SHPathPrepareForWriteW(hwnd, modless, wpath, flags);\r
+-}\r
+-\r
+-/***********************************************************************\r
+  *              SHPathPrepareForWriteW (SHELL32.@)\r
+  */\r
+ HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)\r
+@@ -1767,3 +1759,13 @@\r
+     else\r
+         return HRESULT_FROM_WIN32(ERROR_DIRECTORY);\r
+ }\r
++\r
++/***********************************************************************\r
++ *              SHPathPrepareForWriteA (SHELL32.@)\r
++ */\r
++HRESULT WINAPI SHPathPrepareForWriteA(HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)\r
++{\r
++    WCHAR wpath[MAX_PATH];\r
++    MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, MAX_PATH);\r
++    return SHPathPrepareForWriteW(hwnd, modless, wpath, flags);\r
++}\r
+Index: shlview.c\r
+===================================================================\r
+--- shlview.c  (revision 29513)\r
++++ shlview.c  (working copy)\r
+@@ -68,6 +68,8 @@\r
\r
+ WINE_DEFAULT_DEBUG_CHANNEL(shell);\r
\r
++#undef SV_CLASS_NAME\r
++\r
+ static const WCHAR SV_CLASS_NAME[] = {'S','H','E','L','L','D','L','L','_','D','e','f','V','i','e','w',0};\r
\r
+ typedef struct\r
+Index: shres.rc\r
+===================================================================\r
+--- shres.rc   (revision 29513)\r
++++ shres.rc   (working copy)\r
+@@ -35,88 +35,8 @@\r
+       VK_F5, FCIDM_SHVIEW_REFRESH, VIRTKEY\r
+ END\r
\r
+-/* @makedep: document.ico */\r
+-IDI_SHELL_DOCUMENT ICON document.ico\r
\r
+-/* @makedep: folder.ico */\r
+-IDI_SHELL_FOLDER ICON folder.ico\r
\r
+-/* @makedep: folder_open.ico */\r
+-IDI_SHELL_FOLDER_OPEN ICON folder_open.ico\r
+-\r
+-/* FIXME: Following three resources are not yet added */\r
+-/* @makedep: folder_open.ico */\r
+-IDI_SHELL_FOLDER_OPEN_SMALL ICON folder_open.ico\r
+-/* @makedep: folder_open.ico */\r
+-IDI_SHELL_FOLDER_OPEN_LARGE ICON folder_open.ico\r
+-/* @makedep: folder_open.ico */\r
+-IDI_SHELL_FOLDER_SMALL_XP ICON folder_open.ico\r
+-\r
+-/* @makedep: floppy.ico */\r
+-IDI_SHELL_FLOPPY ICON floppy.ico\r
+-\r
+-/* @makedep: drive.ico */\r
+-IDI_SHELL_DRIVE ICON drive.ico\r
+-\r
+-/* @makedep: netdrive.ico */\r
+-IDI_SHELL_NETDRIVE ICON netdrive.ico\r
+-\r
+-/* @makedep: netdrive2.ico */\r
+-IDI_SHELL_NETDRIVE2 ICON netdrive2.ico\r
+-\r
+-/* @makedep: cdrom.ico */\r
+-IDI_SHELL_CDROM ICON cdrom.ico\r
+-\r
+-/* @makedep: ramdisk.ico */\r
+-IDI_SHELL_RAMDISK ICON ramdisk.ico\r
+-\r
+-/* @makedep: mycomputer.ico */\r
+-IDI_SHELL_MY_COMPUTER ICON mycomputer.ico\r
+-\r
+-/* @makedep: printer.ico */\r
+-IDI_SHELL_PRINTER ICON printer.ico\r
+-\r
+-/* @makedep: shortcut.ico */\r
+-IDI_SHELL_SHORTCUT ICON shortcut.ico\r
+-\r
+-/* @makedep: desktop.ico */\r
+-IDI_SHELL_DESKTOP ICON desktop.ico\r
+-\r
+-/* @makedep: trash_file.ico */\r
+-IDI_SHELL_FULL_RECYCLE_BIN ICON trash_file.ico\r
+-\r
+-/* @makedep: trash_file.ico */\r
+-IDI_SHELL_TRASH_FILE ICON trash_file.ico\r
+-\r
+-/* @makedep: delete.ico */\r
+-IDI_SHELL_CONFIRM_DELETE ICON delete.ico\r
+-\r
+-/* @makedep: mydocs.ico */\r
+-IDI_SHELL_MY_DOCUMENTS ICON mydocs.ico\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_SEARCHING AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_SEARCH AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_FILEMOVE AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_FILECOPY AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_FINDCOMPUTER AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_FILENUKE AVI searching.avi\r
+-\r
+-/* @makedep: searching.avi */\r
+-IDR_AVI_FILEDELETE AVI searching.avi\r
+-\r
+-/*--------------------- END FIXME ------------------------*/\r
+-\r
+ /*\r
+  * Everything that does not depend on language,\r
+  * like textless bitmaps etc, go into the\r
+@@ -125,7 +45,20 @@\r
+  */\r
+ #include "shell32_xx.rc"\r
\r
++\r
++\r
++\r
+ /*\r
++ * This include a set of Shell32 icons, \r
++ * bitmaps and avi files. Licence's can be\r
++ * found in the corresponding directorys\r
++ */\r
++#include "icon_res.rc"\r
++//#include "bitmap_res.rc"\r
++#include "avi_res.rc"\r
++\r
++\r
++/*\r
+  * Everything specific to any language goes\r
+  * in one of the specific files.\r
+  * Note that you can and may override resources\r
+Index: shresdef.h\r
+===================================================================\r
+--- shresdef.h (revision 29513)\r
++++ shresdef.h (working copy)\r
+@@ -78,6 +78,9 @@\r
+ #define IDS_COMMON_PICTURES         69\r
+ #define IDS_COMMON_VIDEO            70\r
+ #define IDS_CDBURN_AREA             71\r
++#define IDS_DRIVE_FIXED             72\r
++#define IDS_DRIVE_CDROM             73\r
++#define IDS_DRIVE_NETWORK           74\r
\r
+ #define IDS_CREATEFOLDER_DENIED     128\r
+ #define IDS_CREATEFOLDER_CAPTION    129\r
+@@ -109,6 +112,7 @@\r
+ #define IDD_STATUS            0x3743\r
+ #define IDD_TITLE             0x3742\r
+ #define IDD_TREEVIEW          0x3741\r
++#define SHELL_EXTENDED_SHORTCUT_DLG 0x4000\r
\r
+ #define IDI_SHELL_DOCUMENT           1\r
+ #define IDI_SHELL_FOLDER             4\r
+Index: shv_item_cmenu.c\r
+===================================================================\r
+--- shv_item_cmenu.c   (revision 29513)\r
++++ shv_item_cmenu.c   (working copy)\r
+@@ -38,6 +38,9 @@\r
\r
+ WINE_DEFAULT_DEBUG_CHANNEL(shell);\r
\r
++/* ugly hack for cut&paste files */\r
++BOOL fileMoving = FALSE;\r
++\r
+ /**************************************************************************\r
+ *  IContextMenu Implementation\r
+ */\r
+@@ -254,6 +257,9 @@\r
+         if(uFlags & CMF_CANRENAME)\r
+           _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_RENAME, MFT_STRING, "&Rename", ISvItemCm_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED);\r
\r
++        _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);\r
++        _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_PROPERTIES, MFT_STRING, "&Properties", MFS_ENABLED);\r
++\r
+         return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (FCIDM_SHVIEWLAST));\r
+       }\r
+       return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);\r
+@@ -294,7 +300,7 @@\r
\r
+       ZeroMemory(&sei, sizeof(sei));\r
+       sei.cbSize = sizeof(sei);\r
+-      sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;\r
++      sei.fMask = SEE_MASK_INVOKEIDLIST | SEE_MASK_CLASSNAME;\r
+       sei.lpIDList = pidlFQ;\r
+       sei.lpClass = "Folder";\r
+       sei.hwnd = hwnd;\r
+@@ -382,6 +388,54 @@\r
+       }\r
+       return TRUE;\r
+ }\r
++static void DoProperties(\r
++      IContextMenu2 *iface,\r
++      HWND hwnd)\r
++{\r
++      ItemCmImpl *This = (ItemCmImpl *)iface;\r
++      LPITEMIDLIST    pidlFQ = NULL;\r
++      SHELLEXECUTEINFOA       sei;\r
++\r
++    if (_ILIsMyComputer(This->apidl[0]))\r
++    {\r
++        ShellExecuteA(hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl", NULL, NULL, SW_SHOWNORMAL);\r
++        return;\r
++    }\r
++    else if (_ILIsDesktop(This->apidl[0]))\r
++    {\r
++        ShellExecuteA(hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL);\r
++        return;\r
++    }\r
++    else if (_ILIsDrive(This->apidl[0]))\r
++    {\r
++       WCHAR buffer[111];\r
++       ILGetDisplayName(This->apidl[0], buffer);\r
++       SH_ShowDriveProperties(buffer);\r
++       return;\r
++    }\r
++    else\r
++    {\r
++        pidlFQ = ILCombine(This->pidl, This->apidl[0]);\r
++    }\r
++\r
++      ZeroMemory(&sei, sizeof(sei));\r
++      sei.cbSize = sizeof(sei);\r
++      sei.fMask = SEE_MASK_INVOKEIDLIST;\r
++      sei.lpIDList = pidlFQ;\r
++      sei.hwnd = hwnd;\r
++      sei.nShow = SW_SHOWNORMAL;\r
++      sei.lpVerb = "properties";\r
++\r
++    TRACE("DoProperties before ShellExecuteEx\n");\r
++      ShellExecuteExA(&sei);\r
++    TRACE("DoProperties after ShellExecuteEx\n");\r
++\r
++    if (pidlFQ)\r
++    {\r
++         SHFree(pidlFQ);\r
++    }\r
++}\r
++\r
+ /**************************************************************************\r
+ * ISvItemCm_fnInvokeCommand()\r
+ */\r
+@@ -430,6 +484,10 @@\r
+             TRACE("Verb FCIDM_SHVIEW_CUT\n");\r
+             DoCopyOrCut(iface, lpcmi->hwnd, TRUE);\r
+             break;\r
++        case FCIDM_SHVIEW_PROPERTIES:\r
++            TRACE("Verb FCIDM_SHVIEW_PROPERTIES\n");\r
++            DoProperties(iface, lpcmi->hwnd);\r
++            break;\r
+         default:\r
+             FIXME("Unhandled Verb %xl\n",LOWORD(lpcmi->lpVerb));\r
+         }\r