| /* | 
 |  * shpolicy.c - Data for shell/system policies. | 
 |  * | 
 |  * Copyright 1999 Ian Schmidt <ischmidt@cfl.rr.com> | 
 |  * | 
 |  * 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 | 
 |  * | 
 |  * NOTES: | 
 |  * | 
 |  * Some of these policies can be tweaked via the System Policy | 
 |  * Editor which came with the Win95 Migration Guide, although | 
 |  * there doesn't appear to be an updated Win98 version that | 
 |  * would handle the many new policies introduced since then. | 
 |  * You could easily write one with the information in | 
 |  * this file... | 
 |  * | 
 |  * Up to date as of SHELL32 v5.00 (W2K) | 
 |  */ | 
 |  | 
 | #include <stdarg.h> | 
 | #include <stdlib.h> | 
 | #include <string.h> | 
 |  | 
 | #include "windef.h" | 
 | #include "winbase.h" | 
 | #include "winerror.h" | 
 | #include "winreg.h" | 
 |  | 
 | #include "shell32_main.h" | 
 | #include "shlobj.h" | 
 |  | 
 | #include "wine/debug.h" | 
 |  | 
 | WINE_DEFAULT_DEBUG_CHANNEL(shell); | 
 |  | 
 | #define SHELL_NO_POLICY 0xffffffff | 
 |  | 
 | typedef struct tagPOLICYDAT | 
 | { | 
 |   DWORD policy;          /* policy value passed to SHRestricted */ | 
 |   LPCSTR appstr;         /* application str such as "Explorer" */ | 
 |   LPCSTR keystr;         /* name of the actual registry key / policy */ | 
 |   DWORD cache;           /* cached value or 0xffffffff for invalid */ | 
 | } POLICYDATA, *LPPOLICYDATA; | 
 |  | 
 | /* registry strings */ | 
 | static const CHAR strRegistryPolicyA[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Policies"; | 
 | static const WCHAR strRegistryPolicyW[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o', | 
 |                                            's','o','f','t','\\','W','i','n','d','o','w','s','\\', | 
 |                                            'C','u','r','r','e','n','t','V','e','r','s','i','o','n', | 
 |                                            '\\','P','o','l','i','c','i','e','s',0}; | 
 | static const CHAR strPolicyA[] = "Policy"; | 
 | static const WCHAR strPolicyW[] = {'P','o','l','i','c','y',0}; | 
 |  | 
 | /* application strings */ | 
 |  | 
 | static const char strExplorer[] = {"Explorer"}; | 
 | static const char strActiveDesk[] = {"ActiveDesktop"}; | 
 | static const char strWinOldApp[] = {"WinOldApp"}; | 
 | static const char strAddRemoveProgs[] = {"AddRemoveProgs"}; | 
 |  | 
 | /* key strings */ | 
 |  | 
 | static const char strNoFileURL[] = {"NoFileUrl"}; | 
 | static const char strNoFolderOptions[] = {"NoFolderOptions"}; | 
 | static const char strNoChangeStartMenu[] = {"NoChangeStartMenu"}; | 
 | static const char strNoWindowsUpdate[] = {"NoWindowsUpdate"}; | 
 | static const char strNoSetActiveDesktop[] = {"NoSetActiveDesktop"}; | 
 | static const char strNoForgetSoftwareUpdate[] = {"NoForgetSoftwareUpdate"}; | 
 | static const char strNoMSAppLogo[] = {"NoMSAppLogo5ChannelNotify"}; | 
 | static const char strForceCopyACLW[] = {"ForceCopyACLWithFile"}; | 
 | static const char strNoResolveTrk[] = {"NoResolveTrack"}; | 
 | static const char strNoResolveSearch[] = {"NoResolveSearch"}; | 
 | static const char strNoEditComponent[] = {"NoEditingComponents"}; | 
 | static const char strNoMovingBand[] = {"NoMovingBands"}; | 
 | static const char strNoCloseDragDrop[] = {"NoCloseDragDropBands"}; | 
 | static const char strNoCloseComponent[] = {"NoClosingComponents"}; | 
 | static const char strNoDelComponent[] = {"NoDeletingComponents"}; | 
 | static const char strNoAddComponent[] = {"NoAddingComponents"}; | 
 | static const char strNoComponent[] = {"NoComponents"}; | 
 | static const char strNoChangeWallpaper[] = {"NoChangingWallpaper"}; | 
 | static const char strNoHTMLWallpaper[] = {"NoHTMLWallpaper"}; | 
 | static const char strNoCustomWebView[] = {"NoCustomizeWebView"}; | 
 | static const char strClassicShell[] = {"ClassicShell"}; | 
 | static const char strClearRecentDocs[] = {"ClearRecentDocsOnExit"}; | 
 | static const char strNoFavoritesMenu[] = {"NoFavoritesMenu"}; | 
 | static const char strNoActiveDesktopChanges[] = {"NoActiveDesktopChanges"}; | 
 | static const char strNoActiveDesktop[] = {"NoActiveDesktop"}; | 
 | static const char strNoRecentDocMenu[] = {"NoRecentDocsMenu"}; | 
 | static const char strNoRecentDocHistory[] = {"NoRecentDocsHistory"}; | 
 | static const char strNoInetIcon[] = {"NoInternetIcon"}; | 
 | static const char strNoSettingsWizard[] = {"NoSettingsWizards"}; | 
 | static const char strNoLogoff[] = {"NoLogoff"}; | 
 | static const char strNoNetConDis[] = {"NoNetConnectDisconnect"}; | 
 | static const char strNoViewContextMenu[] = {"NoViewContextMenu"}; | 
 | static const char strNoTrayContextMenu[] = {"NoTrayContextMenu"}; | 
 | static const char strNoWebMenu[] = {"NoWebMenu"}; | 
 | static const char strLnkResolveIgnoreLnkInfo[] = {"LinkResolveIgnoreLinkInfo"}; | 
 | static const char strNoCommonGroups[] = {"NoCommonGroups"}; | 
 | static const char strEnforceShlExtSecurity[] = {"EnforceShellExtensionSecurity"}; | 
 | static const char strNoRealMode[] = {"NoRealMode"}; | 
 | static const char strMyDocsOnNet[] = {"MyDocsOnNet"}; | 
 | static const char strNoStartMenuSubfolder[] = {"NoStartMenuSubFolders"}; | 
 | static const char strNoAddPrinters[] = {"NoAddPrinter"}; | 
 | static const char strNoDeletePrinters[] = {"NoDeletePrinter"}; | 
 | static const char strNoPrintTab[] = {"NoPrinterTabs"}; | 
 | static const char strRestrictRun[] = {"RestrictRun"}; | 
 | static const char strNoStartBanner[] = {"NoStartBanner"}; | 
 | static const char strNoNetworkNeighborhood[] = {"NoNetHood"}; | 
 | static const char strNoDriveTypeAtRun[] = {"NoDriveTypeAutoRun"}; | 
 | static const char strNoDrivesAutoRun[] = {"NoDriveAutoRun"}; | 
 | static const char strSeparateProcess[] = {"SeparateProcess"}; | 
 | static const char strNoDrives[] = {"NoDrives"}; | 
 | static const char strNoFind[] = {"NoFind"}; | 
 | static const char strNoDesktop[] = {"NoDesktop"}; | 
 | static const char strNoSetTaskBar[] = {"NoSetTaskbar"}; | 
 | static const char strNoSetFld[] = {"NoSetFolders"}; | 
 | static const char strNoFileMenu[] = {"NoFileMenu"}; | 
 | static const char strNoSaveSetting[] = {"NoSaveSettings"}; | 
 | static const char strNoClose[] = {"NoClose"}; | 
 | static const char strNoRun[] = {"NoRun"}; | 
 |  | 
 | /* policy data array */ | 
 | POLICYDATA sh32_policy_table[] = | 
 | { | 
 |   { | 
 |     REST_NORUN, | 
 |     strExplorer, | 
 |     strNoRun, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCLOSE, | 
 |     strExplorer, | 
 |     strNoClose, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSAVESET, | 
 |     strExplorer, | 
 |     strNoSaveSetting, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFILEMENU, | 
 |     strExplorer, | 
 |     strNoFileMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSETFOLDERS, | 
 |     strExplorer, | 
 |     strNoSetFld, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSETTASKBAR, | 
 |     strExplorer, | 
 |     strNoSetTaskBar, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODESKTOP, | 
 |     strExplorer, | 
 |     strNoDesktop, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFIND, | 
 |     strExplorer, | 
 |     strNoFind, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODRIVES, | 
 |     strExplorer, | 
 |     strNoDrives, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODRIVEAUTORUN, | 
 |     strExplorer, | 
 |     strNoDrivesAutoRun, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODRIVETYPEAUTORUN, | 
 |     strExplorer, | 
 |     strNoDriveTypeAtRun, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NONETHOOD, | 
 |     strExplorer, | 
 |     strNoNetworkNeighborhood, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_STARTBANNER, | 
 |     strExplorer, | 
 |     strNoStartBanner, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_RESTRICTRUN, | 
 |     strExplorer, | 
 |     strRestrictRun, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOPRINTERTABS, | 
 |     strExplorer, | 
 |     strNoPrintTab, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOPRINTERDELETE, | 
 |     strExplorer, | 
 |     strNoDeletePrinters, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOPRINTERADD, | 
 |     strExplorer, | 
 |     strNoAddPrinters, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSTARTMENUSUBFOLDERS, | 
 |     strExplorer, | 
 |     strNoStartMenuSubfolder, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_MYDOCSONNET, | 
 |     strExplorer, | 
 |     strMyDocsOnNet, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOEXITTODOS, | 
 |     strWinOldApp, | 
 |     strNoRealMode, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ENFORCESHELLEXTSECURITY, | 
 |     strExplorer, | 
 |     strEnforceShlExtSecurity, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_LINKRESOLVEIGNORELINKINFO, | 
 |     strExplorer, | 
 |     strLnkResolveIgnoreLnkInfo, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCOMMONGROUPS, | 
 |     strExplorer, | 
 |     strNoCommonGroups, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_SEPARATEDESKTOPPROCESS, | 
 |     strExplorer, | 
 |     strSeparateProcess, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOWEB, | 
 |     strExplorer, | 
 |     strNoWebMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOTRAYCONTEXTMENU, | 
 |     strExplorer, | 
 |     strNoTrayContextMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOVIEWCONTEXTMENU, | 
 |     strExplorer, | 
 |     strNoViewContextMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NONETCONNECTDISCONNECT, | 
 |     strExplorer, | 
 |     strNoNetConDis, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_STARTMENULOGOFF, | 
 |     strExplorer, | 
 |     strNoLogoff, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSETTINGSASSIST, | 
 |     strExplorer, | 
 |     strNoSettingsWizard, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOINTERNETICON, | 
 |     strExplorer, | 
 |     strNoInetIcon, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORECENTDOCSHISTORY, | 
 |     strExplorer, | 
 |     strNoRecentDocHistory, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORECENTDOCSMENU, | 
 |     strExplorer, | 
 |     strNoRecentDocMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOACTIVEDESKTOP, | 
 |     strExplorer, | 
 |     strNoActiveDesktop, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOACTIVEDESKTOPCHANGES, | 
 |     strExplorer, | 
 |     strNoActiveDesktopChanges, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFAVORITESMENU, | 
 |     strExplorer, | 
 |     strNoFavoritesMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_CLEARRECENTDOCSONEXIT, | 
 |     strExplorer, | 
 |     strClearRecentDocs, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_CLASSICSHELL, | 
 |     strExplorer, | 
 |     strClassicShell, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCUSTOMIZEWEBVIEW, | 
 |     strExplorer, | 
 |     strNoCustomWebView, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOHTMLWALLPAPER, | 
 |     strActiveDesk, | 
 |     strNoHTMLWallpaper, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCHANGINGWALLPAPER, | 
 |     strActiveDesk, | 
 |     strNoChangeWallpaper, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODESKCOMP, | 
 |     strActiveDesk, | 
 |     strNoComponent, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOADDDESKCOMP, | 
 |     strActiveDesk, | 
 |     strNoAddComponent, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NODELDESKCOMP, | 
 |     strActiveDesk, | 
 |     strNoDelComponent, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCLOSEDESKCOMP, | 
 |     strActiveDesk, | 
 |     strNoCloseComponent, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCLOSE_DRAGDROPBAND, | 
 |     strActiveDesk, | 
 |     strNoCloseDragDrop, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOMOVINGBAND, | 
 |     strActiveDesk, | 
 |     strNoMovingBand, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOEDITDESKCOMP, | 
 |     strActiveDesk, | 
 |     strNoEditComponent, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORESOLVESEARCH, | 
 |     strExplorer, | 
 |     strNoResolveSearch, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORESOLVETRACK, | 
 |     strExplorer, | 
 |     strNoResolveTrk, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_FORCECOPYACLWITHFILE, | 
 |     strExplorer, | 
 |     strForceCopyACLW, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOLOGO3CHANNELNOTIFY, | 
 |     strExplorer, | 
 |     strNoMSAppLogo, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFORGETSOFTWAREUPDATE, | 
 |     strExplorer, | 
 |     strNoForgetSoftwareUpdate, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSETACTIVEDESKTOP, | 
 |     strExplorer, | 
 |     strNoSetActiveDesktop, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOUPDATEWINDOWS, | 
 |     strExplorer, | 
 |     strNoWindowsUpdate, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCHANGESTARMENU, | 
 |     strExplorer, | 
 |     strNoChangeStartMenu, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFOLDEROPTIONS, | 
 |     strExplorer, | 
 |     strNoFolderOptions, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_HASFINDCOMPUTERS, | 
 |     strExplorer, | 
 |     "FindComputers", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_INTELLIMENUS, | 
 |     strExplorer, | 
 |     "IntelliMenus", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_RUNDLGMEMCHECKBOX, | 
 |     strExplorer, | 
 |     "MemCheckBoxInRunDlg", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ARP_ShowPostSetup, | 
 |     strAddRemoveProgs, | 
 |     "ShowPostSetup", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCSC, | 
 |     strExplorer, | 
 |     "NoSyncAll", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCONTROLPANEL, | 
 |     strExplorer, | 
 |     "NoControlPanel", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ENUMWORKGROUP, | 
 |     strExplorer, | 
 |     "EnumWorkgroup", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ARP_NOARP, | 
 |     strAddRemoveProgs, | 
 |     "NoAddRemovePrograms", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ARP_NOREMOVEPAGE, | 
 |     strAddRemoveProgs, | 
 |     "NoRemovePage", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ARP_NOADDPAGE, | 
 |     strAddRemoveProgs, | 
 |     "NoAddPage", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ARP_NOWINSETUPPAGE, | 
 |     strAddRemoveProgs, | 
 |     "NoWindowsSetupPage", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_GREYMSIADS, | 
 |     strExplorer, | 
 |     "", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCHANGEMAPPEDDRIVELABEL, | 
 |     strExplorer, | 
 |     "NoChangeMappedDriveLabel", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCHANGEMAPPEDDRIVECOMMENT, | 
 |     strExplorer, | 
 |     "NoChangeMappedDriveComment", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_MaxRecentDocs, | 
 |     strExplorer, | 
 |     "MaxRecentDocs", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NONETWORKCONNECTIONS, | 
 |     strExplorer, | 
 |     "NoNetworkConnections", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_FORCESTARTMENULOGOFF, | 
 |     strExplorer, | 
 |     "ForceStartMenuLogoff", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOWEBVIEW, | 
 |     strExplorer, | 
 |      "NoWebView", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCUSTOMIZETHISFOLDER, | 
 |     strExplorer, | 
 |     "NoCustomizeThisFolder", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOENCRYPTION, | 
 |     strExplorer, | 
 |     "NoEncryption", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_ALLOWFRENCHENCRYPTION, | 
 |     strExplorer, | 
 |     "AllowFrenchEncryption", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_DONTSHOWSUPERHIDDEN, | 
 |     strExplorer, | 
 |     "DontShowSuperHidden", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSHELLSEARCHBUTTON, | 
 |     strExplorer, | 
 |     "NoShellSearchButton", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOHARDWARETAB, | 
 |     strExplorer, | 
 |     "NoHardwareTab", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORUNASINSTALLPROMPT, | 
 |     strExplorer, | 
 |     "NoRunasInstallPrompt", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_PROMPTRUNASINSTALLNETPATH, | 
 |     strExplorer, | 
 |     "PromptRunasInstallNetPath", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOMANAGEMYCOMPUTERVERB, | 
 |     strExplorer, | 
 |     "NoManageMyComputerVerb", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NORECENTDOCSNETHOOD, | 
 |     strExplorer, | 
 |     "NoRecentDocsNetHood", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_DISALLOWRUN, | 
 |     strExplorer, | 
 |     "DisallowRun", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOWELCOMESCREEN, | 
 |     strExplorer, | 
 |     "NoWelcomeScreen", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_RESTRICTCPL, | 
 |     strExplorer, | 
 |     "RestrictCpl", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_DISALLOWCPL, | 
 |     strExplorer, | 
 |     "DisallowCpl", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSMBALLOONTIP, | 
 |     strExplorer, | 
 |     "NoSMBalloonTip", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSMHELP, | 
 |     strExplorer, | 
 |     "NoSMHelp", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOWINKEYS, | 
 |     strExplorer, | 
 |     "NoWinKeys", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOENCRYPTONMOVE, | 
 |     strExplorer, | 
 |     "NoEncryptOnMove", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOLOCALMACHINERUN, | 
 |     strExplorer, | 
 |     "DisableLocalMachineRun", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCURRENTUSERRUN, | 
 |     strExplorer, | 
 |     "DisableCurrentUserRun", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOLOCALMACHINERUNONCE, | 
 |     strExplorer, | 
 |     "DisableLocalMachineRunOnce", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCURRENTUSERRUNONCE, | 
 |     strExplorer, | 
 |     "DisableCurrentUserRunOnce", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_FORCEACTIVEDESKTOPON, | 
 |     strExplorer, | 
 |     "ForceActiveDesktopOn", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOCOMPUTERSNEARME, | 
 |     strExplorer, | 
 |     "NoComputersNearMe", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOVIEWONDRIVE, | 
 |     strExplorer, | 
 |     "NoViewOnDrive", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NONETCRAWL, | 
 |     strExplorer, | 
 |     "NoNetCrawl", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSHAREDDOCUMENTS, | 
 |     strExplorer, | 
 |     "NoSharedDocs", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSMMYDOCS, | 
 |     strExplorer, | 
 |     "NoSMMyDocs", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 | /* 0x4000050 - 0x4000060 */ | 
 |   { | 
 |     REST_NONLEGACYSHELLMODE, | 
 |     strExplorer, | 
 |     "NoneLegacyShellMode", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_STARTRUNNOHOMEPATH, | 
 |     strExplorer, | 
 |     "StartRunNoHOMEPATH", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 | /* 0x4000061 - 0x4000086 */ | 
 |   { | 
 |     REST_NODISCONNECT, | 
 |     strExplorer, | 
 |     "NoDisconnect", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOSECURITY, | 
 |     strExplorer, | 
 |     "NoNTSecurity", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     REST_NOFILEASSOCIATE, | 
 |     strExplorer, | 
 |     "NoFileAssociate", | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     0x50000024, | 
 |     strExplorer, | 
 |     strNoFileURL, | 
 |     SHELL_NO_POLICY | 
 |   }, | 
 |   { | 
 |     0, | 
 |     0, | 
 |     0, | 
 |     SHELL_NO_POLICY | 
 | 	} | 
 | }; | 
 |  | 
 | /************************************************************************* | 
 |  * SHRestricted				 [SHELL32.100] | 
 |  * | 
 |  * Get the value associated with a policy Id. | 
 |  * | 
 |  * PARAMS | 
 |  *     pol [I] Policy Id | 
 |  * | 
 |  * RETURNS | 
 |  *     The queried value for the policy. | 
 |  * | 
 |  * NOTES | 
 |  *     Exported by ordinal. | 
 |  *     This function caches the retrieved values to prevent unnecessary registry access, | 
 |  *     if SHInitRestricted() was previously called. | 
 |  * | 
 |  * REFERENCES | 
 |  *     a: MS System Policy Editor. | 
 |  *     b: 98Lite 2.0 (which uses many of these policy keys) http://www.98lite.net/ | 
 |  *     c: 'The Windows 95 Registry', by John Woram, 1996 MIS: Press | 
 |  */ | 
 | DWORD WINAPI SHRestricted (RESTRICTIONS policy) | 
 | { | 
 | 	char regstr[256]; | 
 | 	HKEY    xhkey; | 
 | 	DWORD   retval, datsize = 4; | 
 | 	LPPOLICYDATA p; | 
 |  | 
 | 	TRACE("(%08x)\n", policy); | 
 |  | 
 | 	/* scan to see if we know this policy ID */ | 
 | 	for (p = sh32_policy_table; p->policy; p++) | 
 | 	{ | 
 | 	  if (policy == p->policy) | 
 | 	  { | 
 | 	    break; | 
 | 	  } | 
 | 	} | 
 |  | 
 | 	if (p->policy == 0) | 
 | 	{ | 
 | 	    /* we don't know this policy, return 0 */ | 
 | 	    TRACE("unknown policy: (%08x)\n", policy); | 
 | 		return 0; | 
 | 	} | 
 |  | 
 | 	/* we have a known policy */ | 
 |  | 
 | 	/* first check if this policy has been cached, return it if so */ | 
 | 	if (p->cache != SHELL_NO_POLICY) | 
 | 	{ | 
 | 	    return p->cache; | 
 | 	} | 
 |  | 
 | 	lstrcpyA(regstr, strRegistryPolicyA); | 
 | 	lstrcatA(regstr, p->appstr); | 
 |  | 
 | 	/* return 0 and don't set the cache if any registry errors occur */ | 
 | 	retval = 0; | 
 | 	if (RegOpenKeyA(HKEY_CURRENT_USER, regstr, &xhkey) == ERROR_SUCCESS) | 
 | 	{ | 
 | 	  if (RegQueryValueExA(xhkey, p->keystr, NULL, NULL, (LPBYTE)&retval, &datsize) == ERROR_SUCCESS) | 
 | 	  { | 
 | 	    p->cache = retval; | 
 | 	  } | 
 | 	  RegCloseKey(xhkey); | 
 | 	} | 
 | 	return retval; | 
 | } | 
 |  | 
 | /************************************************************************* | 
 |  * SHInitRestricted          [SHELL32.244] | 
 |  * | 
 |  * Initialise the policy cache to speed up calls to SHRestricted(). | 
 |  * | 
 |  * PARAMS | 
 |  *  unused    [I] Reserved. | 
 |  *  inpRegKey [I] Registry key to scan. | 
 |  * | 
 |  * RETURNS | 
 |  *  Success: -1. The policy cache is initialised. | 
 |  *  Failure: 0, if inpRegKey is any value other than NULL, "Policy", or | 
 |  *           "Software\Microsoft\Windows\CurrentVersion\Policies". | 
 |  * | 
 |  * NOTES | 
 |  *  Exported by ordinal. Introduced in Win98. | 
 |  */ | 
 | BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey) | 
 | { | 
 | 	TRACE("(%p, %p)\n", unused, inpRegKey); | 
 |  | 
 | 	/* first check - if input is non-NULL and points to the secret | 
 | 	   key string, then pass. Otherwise return 0. | 
 | 	 */ | 
 | 	if (inpRegKey != NULL) | 
 | 	{ | 
 | 	  if (SHELL_OsIsUnicode()) | 
 | 	  { | 
 | 	    if (lstrcmpiW((LPCWSTR)inpRegKey, strRegistryPolicyW) && | 
 | 	        lstrcmpiW((LPCWSTR)inpRegKey, strPolicyW)) | 
 | 	      /* doesn't match, fail */ | 
 | 	      return 0; | 
 | 	  } | 
 | 	  else | 
 | 	  { | 
 | 	    if (lstrcmpiA((LPCSTR)inpRegKey, strRegistryPolicyA) && | 
 | 	        lstrcmpiA((LPCSTR)inpRegKey, strPolicyA)) | 
 | 	      /* doesn't match, fail */ | 
 | 	      return 0; | 
 | 	  } | 
 | 	} | 
 |  | 
 | 	return TRUE; | 
 | } |