[ros-diffs] [janderwald] 35327: * Implement administrative tools shell folder

janderwald at svn.reactos.org janderwald at svn.reactos.org
Thu Aug 14 10:41:59 CEST 2008


Author: janderwald
Date: Thu Aug 14 03:41:59 2008
New Revision: 35327

URL: http://svn.reactos.org/svn/reactos?rev=35327&view=rev
Log:
* Implement administrative tools shell folder

Added:
    trunk/reactos/dll/win32/shell32/shfldr_admintools.c   (with props)
Modified:
    trunk/reactos/dll/win32/shell32/classes.c
    trunk/reactos/dll/win32/shell32/lang/bg-BG.rc
    trunk/reactos/dll/win32/shell32/lang/ca-ES.rc
    trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc
    trunk/reactos/dll/win32/shell32/lang/da-DK.rc
    trunk/reactos/dll/win32/shell32/lang/de-DE.rc
    trunk/reactos/dll/win32/shell32/lang/el-GR.rc
    trunk/reactos/dll/win32/shell32/lang/en-GB.rc
    trunk/reactos/dll/win32/shell32/lang/en-US.rc
    trunk/reactos/dll/win32/shell32/lang/es-ES.rc
    trunk/reactos/dll/win32/shell32/lang/fi-FI.rc
    trunk/reactos/dll/win32/shell32/lang/fr-FR.rc
    trunk/reactos/dll/win32/shell32/lang/hu-HU.rc
    trunk/reactos/dll/win32/shell32/lang/it-IT.rc
    trunk/reactos/dll/win32/shell32/lang/ja-JP.rc
    trunk/reactos/dll/win32/shell32/lang/ko-KR.rc
    trunk/reactos/dll/win32/shell32/lang/nl-NL.rc
    trunk/reactos/dll/win32/shell32/lang/no-NO.rc
    trunk/reactos/dll/win32/shell32/lang/pl-PL.rc
    trunk/reactos/dll/win32/shell32/lang/pt-BR.rc
    trunk/reactos/dll/win32/shell32/lang/pt-PT.rc
    trunk/reactos/dll/win32/shell32/lang/ru-RU.rc
    trunk/reactos/dll/win32/shell32/lang/sk-SK.rc
    trunk/reactos/dll/win32/shell32/lang/sl-SI.rc
    trunk/reactos/dll/win32/shell32/lang/sv-SE.rc
    trunk/reactos/dll/win32/shell32/lang/tr-TR.rc
    trunk/reactos/dll/win32/shell32/lang/uk-UA.rc
    trunk/reactos/dll/win32/shell32/lang/zh-CN.rc
    trunk/reactos/dll/win32/shell32/lang/zh-TW.rc
    trunk/reactos/dll/win32/shell32/pidl.c
    trunk/reactos/dll/win32/shell32/pidl.h
    trunk/reactos/dll/win32/shell32/regsvr.c
    trunk/reactos/dll/win32/shell32/shell32.rbuild
    trunk/reactos/dll/win32/shell32/shell32_main.h
    trunk/reactos/dll/win32/shell32/shellole.c
    trunk/reactos/dll/win32/shell32/shresdef.h

Modified: trunk/reactos/dll/win32/shell32/classes.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/classes.c?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/classes.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/classes.c [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -386,6 +386,11 @@
 	    if(LoadStringW(shell32_hInstance, IDS_CONTROLPANEL, szDest, buflen))
 	      ret = TRUE;
 	  }
+	  else if (IsEqualIID(riid, &CLSID_AdminFolderShortcut))
+	  {
+	    if(LoadStringW(shell32_hInstance, IDS_ADMINISTRATIVETOOLS, szDest, buflen))
+	      ret = TRUE;
+	  }
 
 	}
 	TRACE("-- %s\n", debugstr_w(szDest));

Modified: trunk/reactos/dll/win32/shell32/lang/bg-BG.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/bg-BG.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/bg-BG.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/bg-BG.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -613,6 +613,7 @@
 	IDS_MYCOMPUTER              "Ìîÿò êîìïþòúð"
 	IDS_RECYCLEBIN_FOLDER_NAME  "政֌"
 	IDS_CONTROLPANEL            "Êðèëî çà óïðàâëåíèå"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	// context menus 
 	IDS_VIEW_LARGE              "&Ãîëåìè çíà÷åòà"

Modified: trunk/reactos/dll/win32/shell32/lang/ca-ES.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ca-ES.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ca-ES.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/ca-ES.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -612,6 +612,7 @@
 	IDS_MYCOMPUTER              "Tento poèítaè"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Koš"
 	IDS_CONTROLPANEL            "Ovládací panely"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Vedle sebe"

Modified: trunk/reactos/dll/win32/shell32/lang/da-DK.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/da-DK.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/da-DK.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/da-DK.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/de-DE.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/de-DE.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/de-DE.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/de-DE.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -613,6 +613,7 @@
 	IDS_MYCOMPUTER              "Arbeitsplatz"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Papierkorb"
 	IDS_CONTROLPANEL            "Systemsteuerung"
+	IDS_ADMINISTRATIVETOOLS     "Verwaltung"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Große Symbole"

Modified: trunk/reactos/dll/win32/shell32/lang/el-GR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/el-GR.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/el-GR.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/el-GR.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "Ï õðïëïãéóôÞò ìïõ"
 	IDS_RECYCLEBIN_FOLDER_NAME  "ÊÜäïò áíáêýêëùóçò"
 	IDS_CONTROLPANEL            "Ðßíáêáò åëÝã÷ïõ"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&ÌåãÜëá åéêïíßäéá"

Modified: trunk/reactos/dll/win32/shell32/lang/en-GB.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/en-GB.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/en-GB.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/en-GB.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Recycle Bin"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/en-US.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/en-US.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/en-US.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/en-US.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -611,6 +611,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/es-ES.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/es-ES.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/es-ES.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/es-ES.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -612,6 +612,7 @@
 	IDS_MYCOMPUTER              "Mi PC"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Papelera de reciclaje"
 	IDS_CONTROLPANEL            "Panel de control"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Iconos &grandes"

Modified: trunk/reactos/dll/win32/shell32/lang/fi-FI.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fi-FI.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/fi-FI.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/fi-FI.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "Oma Tietokone"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Suuret Kuvakkeet"

Modified: trunk/reactos/dll/win32/shell32/lang/fr-FR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fr-FR.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/fr-FR.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/fr-FR.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -614,6 +614,7 @@
 	IDS_MYCOMPUTER              "Poste de travail"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Corbeille"
 	IDS_CONTROLPANEL            "Panneau de configuration"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Grandes icônes"

Modified: trunk/reactos/dll/win32/shell32/lang/hu-HU.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/hu-HU.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/hu-HU.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/hu-HU.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -613,6 +613,7 @@
 	IDS_MYCOMPUTER              "Számítógép"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Nagy képek"

Modified: trunk/reactos/dll/win32/shell32/lang/it-IT.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/it-IT.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/it-IT.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/it-IT.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -611,6 +611,7 @@
 	IDS_MYCOMPUTER              "Risorse del Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Cestino"
 	IDS_CONTROLPANEL            "Pannello di controllo"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Icone Grandi"

Modified: trunk/reactos/dll/win32/shell32/lang/ja-JP.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ja-JP.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ja-JP.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/ja-JP.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "ƒ}ƒC ƒRƒ“ƒsƒ
[ƒ^"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "‘å‚«‚¢ƒAƒCƒRƒ“(&G)"

Modified: trunk/reactos/dll/win32/shell32/lang/ko-KR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ko-KR.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ko-KR.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/ko-KR.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/nl-NL.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/nl-NL.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/nl-NL.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/nl-NL.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/no-NO.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/no-NO.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/no-NO.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/no-NO.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -589,6 +589,7 @@
 	IDS_MYCOMPUTER              "Min datamaskin"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Papirkurv"
 	IDS_CONTROLPANEL            "Kontrollpanel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Store ikoner"

Modified: trunk/reactos/dll/win32/shell32/lang/pl-PL.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pl-PL.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pl-PL.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/pl-PL.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -616,6 +616,7 @@
 	IDS_MYCOMPUTER              "Mój komputer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Kosz"
 	IDS_CONTROLPANEL            "Panel Sterowania"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Du¿e Ikony"

Modified: trunk/reactos/dll/win32/shell32/lang/pt-BR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-BR.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pt-BR.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/pt-BR.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -612,6 +612,7 @@
 	IDS_MYCOMPUTER              "Meu computador"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Ícones &grandes"

Modified: trunk/reactos/dll/win32/shell32/lang/pt-PT.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-PT.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pt-PT.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/pt-PT.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -612,6 +612,7 @@
 	IDS_MYCOMPUTER              "O Meu Computador"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Ícones &grandes"

Modified: trunk/reactos/dll/win32/shell32/lang/ru-RU.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ru-RU.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ru-RU.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/ru-RU.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -609,6 +609,7 @@
 	IDS_MYCOMPUTER              "Ìîé êîìïüþòåð"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Êîðçèíà"
 	IDS_CONTROLPANEL            "Ïàíåëü óïðàâëåíèÿ"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Áîëüøèå çíà÷êè"

Modified: trunk/reactos/dll/win32/shell32/lang/sk-SK.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sk-SK.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sk-SK.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/sk-SK.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -616,6 +616,7 @@
 	IDS_MYCOMPUTER              "Tento poèítaè"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Kôš"
 	IDS_CONTROLPANEL            "Ovládací panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Ve¾ké ikony"

Modified: trunk/reactos/dll/win32/shell32/lang/sl-SI.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sl-SI.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sl-SI.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/sl-SI.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/sv-SE.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sv-SE.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sv-SE.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/sv-SE.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/lang/tr-TR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/tr-TR.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/tr-TR.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/tr-TR.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -610,6 +610,7 @@
 	IDS_MYCOMPUTER              "Bilgisayarým"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Çöp"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Bü&yük Simgeler"

Modified: trunk/reactos/dll/win32/shell32/lang/uk-UA.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/uk-UA.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/uk-UA.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/uk-UA.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -611,6 +611,7 @@
 	IDS_MYCOMPUTER              "̳é Êîìï'þòåð"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Êîøèê"
 	IDS_CONTROLPANEL            "Ïàíåëü êåðóâàííÿ"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "&Âåëèê³ çíà÷êè"

Modified: trunk/reactos/dll/win32/shell32/lang/zh-CN.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-CN.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/zh-CN.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/zh-CN.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -599,6 +599,7 @@
 	IDS_MYCOMPUTER              "ÎҵĵçÄÔ"
 	IDS_RECYCLEBIN_FOLDER_NAME  "»ØÊÕÕ¾"
 	IDS_CONTROLPANEL            "¿ØÖÆÃæ°å"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "´óͼ±ê(&G)"

Modified: trunk/reactos/dll/win32/shell32/lang/zh-TW.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-TW.rc?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/zh-TW.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/lang/zh-TW.rc [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -611,6 +611,7 @@
 	IDS_MYCOMPUTER              "My Computer"
 	IDS_RECYCLEBIN_FOLDER_NAME  "Trash"
 	IDS_CONTROLPANEL            "Control Panel"
+	IDS_ADMINISTRATIVETOOLS     "Administrative Tools"
 
 	/* context menus */
 	IDS_VIEW_LARGE              "Lar&ge Icons"

Modified: trunk/reactos/dll/win32/shell32/pidl.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/pidl.c?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/pidl.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/pidl.c [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -1402,6 +1402,12 @@
     return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
 }
 
+LPITEMIDLIST _ILCreateAdminTools(void)
+{
+    TRACE("()\n");
+    return _ILCreateGuid(PT_GUID, &CLSID_AdminFolderShortcut);
+}
+
 LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
 {
     LPITEMIDLIST pidlOut;
@@ -1655,6 +1661,18 @@
     if (iid)
         return IsEqualIID(iid, &CLSID_RecycleBin);
     return FALSE;
+}
+
+BOOL _ILIsAdminTools(LPCITEMIDLIST pidl)
+{
+    REFIID iid = _ILGetGUIDPointer(pidl);
+
+    TRACE("(%p)\n",pidl);
+
+    if (iid)
+        return IsEqualIID(iid, &CLSID_AdminFolderShortcut);
+    else
+        return FALSE;
 }
 
 BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl)

Modified: trunk/reactos/dll/win32/shell32/pidl.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/pidl.h?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/pidl.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/pidl.h [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -236,6 +236,7 @@
 BOOL    _ILIsMyDocuments       (LPCITEMIDLIST pidl);
 BOOL    _ILIsControlPanel       (LPCITEMIDLIST pidl);
 BOOL    _ILIsBitBucket      (LPCITEMIDLIST pidl);
+BOOL	_ILIsAdminTools (LPCITEMIDLIST pidl);
 BOOL    _ILIsNetHood      (LPCITEMIDLIST pidl);
 BOOL	_ILIsDrive		(LPCITEMIDLIST pidl);
 BOOL	_ILIsFolder		(LPCITEMIDLIST pidl);
@@ -285,6 +286,7 @@
 LPITEMIDLIST	_ILCreatePrinters	(void);
 LPITEMIDLIST	_ILCreateNetwork	(void);
 LPITEMIDLIST	_ILCreateNetHood	(void);
+LPITEMIDLIST	_ILCreateAdminTools	(void);
 LPITEMIDLIST	_ILCreateFont		(void);
 LPITEMIDLIST	_ILCreateBitBucket	(void);
 LPITEMIDLIST	_ILCreateDrive		(LPCWSTR);

Modified: trunk/reactos/dll/win32/shell32/regsvr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/regsvr.c?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/regsvr.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/regsvr.c [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -646,6 +646,19 @@
        NULL,
        IDI_SHELL_FONTS_FOLDER
     },
+    {  &CLSID_AdminFolderShortcut,
+       "Administrative Tools",
+       IDS_ADMINISTRATIVETOOLS,
+       NULL,
+       "shell32.dll", 
+       "Apartment",
+       SHELLFOLDER_ATTRIBUTES,
+       SFGAO_FOLDER,
+       0,
+       NULL,
+       NULL,
+       IDI_SHELL_ADMINTOOLS //FIXME
+    },
     {   &CLSID_Shortcut,
 	"Shortcut",
 	0,
@@ -758,7 +771,7 @@
 static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0};
 static const WCHAR wszPrinters[] = { 'P','r','i','n','t','e','r','s',0 };
 static const WCHAR wszFonts[] = { 'F','o','n','t','s',0 };
-
+static const WCHAR wszAdminTools[] = { 'A','d','m','i','n','T','o','o','l','s',0 };
 const GUID CLSID_FolderOptions = { 0x6DFD7C5C, 0x2451, 0x11d3, {0xa2,0x99,0x00,0xC0,0x4F,0x8e,0xf6,0xaf} };
 
 static struct regsvr_namespace const namespace_extensions_list[] = {
@@ -803,6 +816,11 @@
         &CLSID_Printers,
         wszControlPanel,
         wszPrinters
+    },
+    {
+        &CLSID_AdminFolderShortcut,
+        wszControlPanel,
+        wszAdminTools
     },
     { NULL }
 };

Modified: trunk/reactos/dll/win32/shell32/shell32.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32.rbuild?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shell32.rbuild [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -57,6 +57,7 @@
 	<file>shfldr_mycomp.c</file>
 	<file>shfldr_mydocuments.c</file>
 	<file>shfldr_printers.c</file>
+	<file>shfldr_admintools.c</file>
 	<file>shlexec.c</file>
 	<file>shlfileop.c</file>
 	<file>shlfolder.c</file>

Modified: trunk/reactos/dll/win32/shell32/shell32_main.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32_main.h?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32_main.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shell32_main.h [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -96,6 +96,7 @@
 HRESULT WINAPI ISF_MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI ISF_NetworkPlaces_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
+HRESULT WINAPI ISF_AdminTools_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
 HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV);
 HRESULT WINAPI IControlPanel_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);

Modified: trunk/reactos/dll/win32/shell32/shellole.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shellole.c?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shellole.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shellole.c [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -78,6 +78,7 @@
 	{&CLSID_NetworkPlaces,  &ISF_NetworkPlaces_Constructor},
 	{&CLSID_FontsFolderShortcut, &ISF_Fonts_Constructor},
 	{&CLSID_Printers,       &ISF_Printers_Constructor},
+	{&CLSID_AdminFolderShortcut, &ISF_AdminTools_Constructor},
 	{&CLSID_RecycleBin,     &RecycleBin_Constructor},
 	{&CLSID_OpenWith,       &SHEOW_Constructor},
 	{&dummy1,               &INewItem_Constructor},

Added: trunk/reactos/dll/win32/shell32/shfldr_admintools.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shfldr_admintools.c?rev=35327&view=auto
==============================================================================
--- trunk/reactos/dll/win32/shell32/shfldr_admintools.c (added)
+++ trunk/reactos/dll/win32/shell32/shfldr_admintools.c [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -1,0 +1,780 @@
+/*
+ *    Virtual Admin Tools Folder
+ *
+ *    Copyright 2008                Johannes Anderwald
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include "config.h"
+#include "wine/port.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#define COBJMACROS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include "winerror.h"
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "winspool.h"
+
+#include "ole2.h"
+#include "shlguid.h"
+
+#include "enumidlist.h"
+#include "pidl.h"
+#include "undocshell.h"
+#include "shell32_main.h"
+#include "shresdef.h"
+#include "shlwapi.h"
+#include "shellfolder.h"
+#include "wine/debug.h"
+#include "debughlp.h"
+#include "shfldr.h"
+#include "shresdef.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL (shell);
+
+/* List shortcuts of
+ * CSIDL_COMMON_ADMINTOOLS
+ * Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+
+ */
+
+/***********************************************************************
+ *     AdminTools folder implementation
+ */
+
+typedef struct {
+    IShellFolder2Vtbl *lpVtbl;
+    IPersistFolder2Vtbl *lpVtblPersistFolder2;
+
+    LONG ref;
+
+    CLSID *pclsid;
+
+    LPITEMIDLIST pidlRoot;  /* absolute pidl */
+    LPWSTR szTarget;
+
+    int dwAttributes;        /* attributes returned by GetAttributesOf FIXME: use it */
+} IGenericSFImpl;
+
+static const shvheader AdminToolsSFHeader[] = {
+    {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},
+    {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
+    {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
+    {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12}
+};
+
+#define COLUMN_NAME                0
+#define COLUMN_SIZE                1
+#define COLUMN_TYPE                2
+#define COLUMN_DATE                3
+
+#define AdminToolsHELLVIEWCOLUMNS (4)
+
+
+#define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2)))
+#define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset);
+
+#define _IUnknown_(This)    (IShellFolder*)&(This->lpVtbl)
+#define _IShellFolder_(This)    (IShellFolder*)&(This->lpVtbl)
+
+#define _IPersist_(This)    (IPersist*)&(This->lpVtblPersistFolder2)
+#define _IPersistFolder_(This)    (IPersistFolder*)&(This->lpVtblPersistFolder2)
+#define _IPersistFolder2_(This)    (IPersistFolder2*)&(This->lpVtblPersistFolder2)
+
+/**************************************************************************
+ *    ISF_AdminTools_fnQueryInterface
+ *
+ * NOTE does not support IPersist/IPersistFolder
+ */
+static HRESULT WINAPI ISF_AdminTools_fnQueryInterface(
+                IShellFolder2 * iface, REFIID riid, LPVOID * ppvObj)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj);
+
+    *ppvObj = NULL;
+
+    if (IsEqualIID (riid, &IID_IUnknown) ||
+        IsEqualIID (riid, &IID_IShellFolder) ||
+        IsEqualIID (riid, &IID_IShellFolder2))
+    {
+        *ppvObj = This;
+    }
+
+    else if (IsEqualIID (riid, &IID_IPersist) ||
+             IsEqualIID (riid, &IID_IPersistFolder) ||
+             IsEqualIID (riid, &IID_IPersistFolder2))
+    {
+        *ppvObj = _IPersistFolder2_ (This);
+    }
+
+    if (*ppvObj)
+    {
+        IUnknown_AddRef ((IUnknown *) (*ppvObj));
+        TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj);
+        return S_OK;
+    }
+    TRACE ("-- Interface: E_NOINTERFACE\n");
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ISF_AdminTools_fnAddRef (IShellFolder2 * iface)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    ULONG refCount = InterlockedIncrement(&This->ref);
+
+    TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
+
+    return refCount;
+}
+
+static ULONG WINAPI ISF_AdminTools_fnRelease (IShellFolder2 * iface)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    ULONG refCount = InterlockedDecrement(&This->ref);
+
+    TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
+
+    if (!refCount)
+    {
+        TRACE ("-- destroying IShellFolder(%p)\n", This);
+        if (This->pidlRoot)
+            SHFree (This->pidlRoot);
+        LocalFree ((HLOCAL) This);
+        return 0;
+    }
+    return refCount;
+}
+
+/**************************************************************************
+ *    ISF_AdminTools_fnParseDisplayName
+ *
+ */
+static HRESULT WINAPI ISF_AdminTools_fnParseDisplayName (IShellFolder2 * iface,
+                HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
+                DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n",
+           This, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName),
+           pchEaten, ppidl, pdwAttributes);
+
+    *ppidl = 0;
+    if (pchEaten)
+        *pchEaten = 0;
+
+    return E_NOTIMPL;
+}
+
+/**************************************************************************
+ *  CreateAdminToolsEnumList()
+ */
+static BOOL CreateAdminToolsEnumList(IEnumIDList *list, IGenericSFImpl *This, DWORD dwFlags)
+{
+    TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags);
+   /* enumerate the elements in %windir%\desktop */
+    return CreateFolderEnumList(list, This->szTarget, dwFlags);
+}
+
+/**************************************************************************
+ *        ISF_AdminTools_fnEnumObjects
+ */
+static HRESULT WINAPI ISF_AdminTools_fnEnumObjects (IShellFolder2 * iface,
+                HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n",
+           This, hwndOwner, dwFlags, ppEnumIDList);
+
+    if(!ppEnumIDList) return E_OUTOFMEMORY;
+    *ppEnumIDList = IEnumIDList_Constructor();
+    if (*ppEnumIDList)
+        CreateAdminToolsEnumList(*ppEnumIDList, This, dwFlags);
+
+    TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
+
+    return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY;
+}
+
+/**************************************************************************
+ *        ISF_AdminTools_fnBindToObject
+ */
+static HRESULT WINAPI ISF_AdminTools_fnBindToObject (IShellFolder2 * iface,
+                LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This,
+            pidl, pbcReserved, shdebugstr_guid (riid), ppvOut);
+
+    return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut);
+}
+
+/**************************************************************************
+ *    ISF_AdminTools_fnBindToStorage
+ */
+static HRESULT WINAPI ISF_AdminTools_fnBindToStorage (IShellFolder2 * iface,
+                LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n",
+           This, pidl, pbcReserved, shdebugstr_guid (riid), ppvOut);
+
+    *ppvOut = NULL;
+    return E_NOTIMPL;
+}
+
+/**************************************************************************
+ *     ISF_AdminTools_fnCompareIDs
+ */
+static HRESULT WINAPI ISF_AdminTools_fnCompareIDs (IShellFolder2 * iface,
+                        LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    int nReturn;
+
+    TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2);
+    nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2);
+    TRACE ("-- %i\n", nReturn);
+    return nReturn;
+}
+
+/**************************************************************************
+ *    ISF_AdminTools_fnCreateViewObject
+ */
+static HRESULT WINAPI ISF_AdminTools_fnCreateViewObject (IShellFolder2 * iface,
+                              HWND hwndOwner, REFIID riid, LPVOID * ppvOut)
+{
+
+    LPSHELLVIEW pShellView;
+    HRESULT hr = E_INVALIDARG;
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This,
+            hwndOwner, shdebugstr_guid (riid), ppvOut);
+
+    if (!ppvOut)
+        return hr;
+
+    *ppvOut = NULL;
+
+    if (IsEqualIID (riid, &IID_IDropTarget))
+    {
+        WARN ("IDropTarget not implemented\n");
+        hr = E_NOTIMPL;
+    }
+    else if (IsEqualIID (riid, &IID_IShellView))
+    {
+        pShellView = IShellView_Constructor ((IShellFolder *) iface);
+        if (pShellView)
+        {
+            hr = IShellView_QueryInterface (pShellView, riid, ppvOut);
+            IShellView_Release (pShellView);
+        }
+    }
+    TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut);
+    return hr;
+}
+
+/**************************************************************************
+ *  ISF_AdminTools_fnGetAttributesOf
+ */
+static HRESULT WINAPI ISF_AdminTools_fnGetAttributesOf (IShellFolder2 * iface,
+                UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    HRESULT hr = S_OK;
+    static const DWORD dwAdminToolsAttributes =
+        SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR |
+        SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM;
+
+    TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
+           This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
+
+    if (!rgfInOut)
+        return E_INVALIDARG;
+    if (cidl && !apidl)
+        return E_INVALIDARG;
+
+    if (*rgfInOut == 0)
+        *rgfInOut = ~0;
+
+    if(cidl == 0) {
+        *rgfInOut &= dwAdminToolsAttributes;
+    } else {
+        while (cidl > 0 && *apidl) {
+            pdump (*apidl);
+            if (_ILIsAdminTools(*apidl)) {
+                *rgfInOut &= dwAdminToolsAttributes;
+            } else {
+                SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut);
+            }
+            apidl++;
+            cidl--;
+        }
+    }
+    /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
+    *rgfInOut &= ~SFGAO_VALIDATE;
+
+    TRACE ("-- result=0x%08x\n", *rgfInOut);
+
+    return hr;
+}
+
+/**************************************************************************
+ *    ISF_AdminTools_fnGetUIObjectOf
+ *
+ * PARAMETERS
+ *  HWND           hwndOwner, //[in ] Parent window for any output
+ *  UINT           cidl,      //[in ] array size
+ *  LPCITEMIDLIST* apidl,     //[in ] simple pidl array
+ *  REFIID         riid,      //[in ] Requested Interface
+ *  UINT*          prgfInOut, //[   ] reserved
+ *  LPVOID*        ppvObject) //[out] Resulting Interface
+ *
+ */
+static HRESULT WINAPI ISF_AdminTools_fnGetUIObjectOf (IShellFolder2 * iface,
+                HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl,
+                REFIID riid, UINT * prgfInOut, LPVOID * ppvOut)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    LPITEMIDLIST pidl;
+    IUnknown *pObj = NULL;
+    HRESULT hr = E_INVALIDARG;
+
+    TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n",
+       This, hwndOwner, cidl, apidl, shdebugstr_guid (riid), prgfInOut, ppvOut);
+
+    if (!ppvOut)
+        return hr;
+
+    *ppvOut = NULL;
+
+    if (IsEqualIID (riid, &IID_IContextMenu))
+    {
+        hr = CDefFolderMenu_Create2(This->pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)iface, NULL, 0, NULL, (IContextMenu**)&pObj);
+    }
+    else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1))
+    {
+        pObj = (LPUNKNOWN) IDataObject_Constructor( hwndOwner,
+                                                  This->pidlRoot, apidl, cidl);
+        hr = S_OK;
+    }
+    else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1))
+    {
+        pidl = ILCombine (This->pidlRoot, apidl[0]);
+        pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl);
+        SHFree (pidl);
+        hr = S_OK;
+    }
+    else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1))
+    {
+        pidl = ILCombine (This->pidlRoot, apidl[0]);
+        pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl);
+        SHFree (pidl);
+        hr = S_OK;
+    }
+    else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1))
+    {
+        hr = IShellFolder_QueryInterface (iface,
+                                          &IID_IDropTarget, (LPVOID *) & pObj);
+    }
+    else if ((IsEqualIID(riid,&IID_IShellLinkW) ||
+              IsEqualIID(riid,&IID_IShellLinkA)) && (cidl == 1))
+    {
+        pidl = ILCombine (This->pidlRoot, apidl[0]);
+        hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj);
+        SHFree (pidl);
+    }
+    else
+        hr = E_NOINTERFACE;
+
+    if (SUCCEEDED(hr) && !pObj)
+        hr = E_OUTOFMEMORY;
+
+    *ppvOut = pObj;
+    TRACE ("(%p)->hr=0x%08x\n", This, hr);
+    return hr;
+}
+
+/**************************************************************************
+ *    ISF_AdminTools_fnGetDisplayNameOf
+ *
+ */
+static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface,
+                LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    HRESULT hr = S_OK;
+    LPWSTR pszPath;
+
+    TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
+    pdump (pidl);
+
+    if (!strRet)
+        return E_INVALIDARG;
+
+    pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
+    if (!pszPath)
+        return E_OUTOFMEMORY;
+
+    ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR));
+
+    if (_ILIsAdminTools (pidl))
+    {
+        if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
+            (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
+            strcpyW(pszPath, This->szTarget);
+        else
+            HCR_GetClassNameW(&CLSID_AdminFolderShortcut, pszPath, MAX_PATH);
+    }
+    else if (_ILIsPidlSimple(pidl))
+    {
+        _ILSimpleGetTextW(pidl, pszPath, MAX_PATH);
+    }
+    else if (_ILIsSpecialFolder(pidl)) 
+    {
+        BOOL bSimplePidl = _ILIsPidlSimple(pidl);
+
+        if (bSimplePidl) 
+        {
+            _ILSimpleGetTextW(pidl, pszPath, MAX_PATH);
+        } 
+        else 
+        {
+            FIXME("special pidl\n");
+        }
+
+        if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) 
+        {
+            int len = 0;
+
+            strcpyW(pszPath, This->szTarget);
+            PathAddBackslashW(pszPath);
+            len = lstrlenW(pszPath);
+
+            if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, pszPath + len, MAX_PATH + 1 - len)))
+            {
+                CoTaskMemFree(pszPath);
+                return E_OUTOFMEMORY;
+            }
+
+        } 
+    }
+
+    if (SUCCEEDED(hr))
+    {
+        strRet->uType = STRRET_WSTR;
+        strRet->u.pOleStr = pszPath;
+    }
+    else
+        CoTaskMemFree(pszPath);
+
+    TRACE ("-- (%p)->(%s,0x%08x)\n", This, debugstr_w(strRet->u.pOleStr), hr);
+    return hr;
+}
+
+/**************************************************************************
+ *  ISF_AdminTools_fnSetNameOf
+ *  Changes the name of a file object or subfolder, possibly changing its item
+ *  identifier in the process.
+ *
+ * PARAMETERS
+ *  HWND          hwndOwner,  //[in ] Owner window for output
+ *  LPCITEMIDLIST pidl,       //[in ] simple pidl of item to change
+ *  LPCOLESTR     lpszName,   //[in ] the items new display name
+ *  DWORD         dwFlags,    //[in ] SHGNO formatting flags
+ *  LPITEMIDLIST* ppidlOut)   //[out] simple pidl returned
+ */
+static HRESULT WINAPI ISF_AdminTools_fnSetNameOf (IShellFolder2 * iface,
+                HWND hwndOwner, LPCITEMIDLIST pidl,    /* simple pidl */
+                LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl,
+           debugstr_w (lpName), dwFlags, pPidlOut);
+
+    return E_FAIL;
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnGetDefaultSearchGUID(IShellFolder2 *iface,
+                GUID * pguid)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+
+    FIXME ("(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnEnumSearches (IShellFolder2 *iface,
+                IEnumExtraSearch ** ppenum)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    FIXME ("(%p)\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumn (IShellFolder2 * iface,
+                DWORD dwRes, ULONG * pSort, ULONG * pDisplay)
+{
+    if (pSort)
+        *pSort = 0;
+    if (pDisplay)
+        *pDisplay = 0;
+
+    return S_OK;
+}
+static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumnState (
+                IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags)
+{
+    if (!pcsFlags || iColumn >= AdminToolsHELLVIEWCOLUMNS)
+        return E_INVALIDARG;
+    *pcsFlags = AdminToolsSFHeader[iColumn].pcsFlags;
+    return S_OK;
+
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnGetDetailsEx (IShellFolder2 * iface,
+                LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    FIXME ("(%p): stub\n", This);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnGetDetailsOf (IShellFolder2 * iface,
+                LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    WCHAR buffer[MAX_PATH] = {0};
+    HRESULT hr = E_FAIL;
+
+    TRACE("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd);
+
+    if (iColumn >= AdminToolsHELLVIEWCOLUMNS)
+        return E_FAIL;
+
+    psd->fmt = AdminToolsSFHeader[iColumn].fmt;
+    psd->cxChar = AdminToolsSFHeader[iColumn].cxChar;
+    if (pidl == NULL)
+    {
+        psd->str.uType = STRRET_WSTR;
+        if (LoadStringW(shell32_hInstance, AdminToolsSFHeader[iColumn].colnameid, buffer, MAX_PATH))
+            hr = SHStrDupW(buffer, &psd->str.u.pOleStr);
+
+        return hr;
+    }
+
+    psd->str.uType = STRRET_CSTR;
+    switch (iColumn)
+    {
+    case COLUMN_NAME:
+        psd->str.uType = STRRET_WSTR;
+        hr = IShellFolder_GetDisplayNameOf(iface, pidl,
+                   SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
+        break;
+    case COLUMN_SIZE:
+        _ILGetFileSize (pidl, psd->str.u.cStr, MAX_PATH);
+        break;
+    case COLUMN_TYPE:
+        _ILGetFileType (pidl, psd->str.u.cStr, MAX_PATH);
+        break;
+    case COLUMN_DATE:
+        _ILGetFileDate (pidl, psd->str.u.cStr, MAX_PATH);
+        break;
+    }
+
+    return hr;
+}
+
+static HRESULT WINAPI ISF_AdminTools_fnMapColumnToSCID (
+                IShellFolder2 * iface, UINT column, SHCOLUMNID * pscid)
+{
+    IGenericSFImpl *This = (IGenericSFImpl *)iface;
+    FIXME ("(%p): stub\n", This);
+    return E_NOTIMPL;
+}
+
+static IShellFolder2Vtbl vt_ShellFolder2 =
+{
+    ISF_AdminTools_fnQueryInterface,
+    ISF_AdminTools_fnAddRef,
+    ISF_AdminTools_fnRelease,
+    ISF_AdminTools_fnParseDisplayName,
+    ISF_AdminTools_fnEnumObjects,
+    ISF_AdminTools_fnBindToObject,
+    ISF_AdminTools_fnBindToStorage,
+    ISF_AdminTools_fnCompareIDs,
+    ISF_AdminTools_fnCreateViewObject,
+    ISF_AdminTools_fnGetAttributesOf,
+    ISF_AdminTools_fnGetUIObjectOf,
+    ISF_AdminTools_fnGetDisplayNameOf,
+    ISF_AdminTools_fnSetNameOf,
+    /* ShellFolder2 */
+    ISF_AdminTools_fnGetDefaultSearchGUID,
+    ISF_AdminTools_fnEnumSearches,
+    ISF_AdminTools_fnGetDefaultColumn,
+    ISF_AdminTools_fnGetDefaultColumnState,
+    ISF_AdminTools_fnGetDetailsEx,
+    ISF_AdminTools_fnGetDetailsOf,
+    ISF_AdminTools_fnMapColumnToSCID
+};
+
+/************************************************************************
+ *    IPF_AdminTools_QueryInterface
+ */
+static HRESULT WINAPI IPF_AdminTools_QueryInterface (
+               IPersistFolder2 * iface, REFIID iid, LPVOID * ppvObj)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+
+    TRACE ("(%p)\n", This);
+
+    return IUnknown_QueryInterface (_IUnknown_ (This), iid, ppvObj);
+}
+
+/************************************************************************
+ *    IPF_AdminTools_AddRef
+ */
+static ULONG WINAPI IPF_AdminTools_AddRef (IPersistFolder2 * iface)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+
+    TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+
+    return IUnknown_AddRef (_IUnknown_ (This));
+}
+
+/************************************************************************
+ *    IPF_AdminTools_Release
+ */
+static ULONG WINAPI IPF_AdminTools_Release (IPersistFolder2 * iface)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+
+    TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+
+    return IUnknown_Release (_IUnknown_ (This));
+}
+
+/************************************************************************
+ *    IPF_AdminTools_GetClassID
+ */
+static HRESULT WINAPI IPF_AdminTools_GetClassID (
+               IPersistFolder2 * iface, CLSID * lpClassId)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+
+    TRACE ("(%p)\n", This);
+
+    memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID));
+
+    return S_OK;
+}
+
+/************************************************************************
+ *    IPF_AdminTools_Initialize
+ *
+ */
+static HRESULT WINAPI IPF_AdminTools_Initialize (
+               IPersistFolder2 * iface, LPCITEMIDLIST pidl)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+    FIXME ("(%p)->(%p): stub\n", This, pidl);
+    return E_NOTIMPL;
+}
+
+/**************************************************************************
+ *    IPF_AdminTools_fnGetCurFolder
+ */
+static HRESULT WINAPI IPF_AdminTools_GetCurFolder (
+               IPersistFolder2 * iface, LPITEMIDLIST * pidl)
+{
+    _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface);
+
+    TRACE ("(%p)->(%p)\n", This, pidl);
+
+    *pidl = ILClone (This->pidlRoot);
+    return S_OK;
+}
+
+static IPersistFolder2Vtbl vt_PersistFolder2 =
+{
+    IPF_AdminTools_QueryInterface,
+    IPF_AdminTools_AddRef,
+    IPF_AdminTools_Release,
+    IPF_AdminTools_GetClassID,
+    IPF_AdminTools_Initialize,
+    IPF_AdminTools_GetCurFolder
+};
+
+/**************************************************************************
+ *    ISF_AdminTools_Constructor
+ */
+HRESULT WINAPI ISF_AdminTools_Constructor (
+                IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
+{
+    IGenericSFImpl *sf;
+    HRESULT hr;
+
+    TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid));
+
+    if (pUnkOuter)
+        return CLASS_E_NOAGGREGATION;
+
+    sf = HeapAlloc( GetProcessHeap(), 0, sizeof(*sf) );
+    if (!sf)
+        return E_OUTOFMEMORY;
+
+    sf->szTarget = HeapAlloc( GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) );
+    if (!sf->szTarget)
+    {
+        HeapFree(GetProcessHeap(), 0, sf);
+        return E_OUTOFMEMORY;
+    }
+    if (!SHGetSpecialFolderPathW(NULL, sf->szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE))
+    {
+        HeapFree(GetProcessHeap(), 0, sf->szTarget);
+        HeapFree(GetProcessHeap(), 0, sf);
+    }
+
+    sf->ref = 1;
+    sf->lpVtbl = &vt_ShellFolder2;
+    sf->lpVtblPersistFolder2 = &vt_PersistFolder2;
+    sf->pidlRoot = _ILCreateAdminTools();    /* my qualified pidl */
+
+    hr = IUnknown_QueryInterface( _IUnknown_(sf), riid, ppv );
+    IUnknown_Release( _IUnknown_(sf) );
+
+    TRACE ("--(%p)\n", *ppv);
+    return hr;
+}

Propchange: trunk/reactos/dll/win32/shell32/shfldr_admintools.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/shell32/shresdef.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shresdef.h?rev=35327&r1=35326&r2=35327&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shresdef.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shresdef.h [iso-8859-1] Thu Aug 14 03:41:59 2008
@@ -161,6 +161,7 @@
 #define IDS_CUT                     323
 #define IDS_RESTORE                 324
 #define IDS_DEFAULT_CLUSTER_SIZE    325
+#define IDS_ADMINISTRATIVETOOLS     326
 
 /* Note: this string is referenced from the registry */
 #define IDS_RECYCLEBIN_FOLDER_NAME   8964
@@ -236,6 +237,7 @@
 #define IDI_SHELL_CONFIRM_DELETE   161
 #define IDI_SHELL_MY_DOCUMENTS     235
 #define IDI_SHELL_CONTROL_PANEL1   330
+#define IDI_SHELL_ADMINTOOLS       328
 /*
 AVI resources, windows shell32 has 14 of them: 150-152 and 160-170
 FIXME: Need to add them, but for now just let them use the same: searching.avi



More information about the Ros-diffs mailing list