| /* |
| * 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((LPWSTR)inpRegKey, strRegistryPolicyW) && |
| lstrcmpiW((LPWSTR)inpRegKey, strPolicyW)) |
| /* doesn't match, fail */ |
| return 0; |
| } |
| else |
| { |
| if (lstrcmpiA((LPSTR)inpRegKey, strRegistryPolicyA) && |
| lstrcmpiA((LPSTR)inpRegKey, strPolicyA)) |
| /* doesn't match, fail */ |
| return 0; |
| } |
| } |
| |
| return TRUE; |
| } |