Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / mscorlib / system / security / util / config.cs
1 // ==++==
2 // 
3 //   Copyright (c) Microsoft Corporation.  All rights reserved.
4 // 
5 // ==--==
6 // <OWNER>[....]</OWNER>
7 // 
8
9 //
10 // Config.cs
11 //
12
13 namespace System.Security.Util {
14     using System;
15     using System.Security.Util;
16     using System.Security.Policy;
17     using System.Security.Permissions;
18     using System.Collections;
19     using System.IO;
20     using System.Reflection;
21     using System.Globalization;
22     using System.Text;
23 #if FEATURE_SERIALIZATION
24     using System.Runtime.Serialization.Formatters.Binary;
25 #endif // FEATURE_SERIALIZATION
26     using System.Threading;
27     using System.Runtime.CompilerServices;
28     using System.Runtime.InteropServices;
29     using System.Runtime.Versioning;
30
31     // Duplicated in vm\COMSecurityConfig.h
32 [Serializable]
33 [Flags]
34     internal enum QuickCacheEntryType
35     {
36         FullTrustZoneMyComputer = 0x1000000,
37         FullTrustZoneIntranet = 0x2000000,
38         FullTrustZoneInternet = 0x4000000,
39         FullTrustZoneTrusted = 0x8000000,
40         FullTrustZoneUntrusted = 0x10000000,
41         FullTrustAll = 0x20000000,
42     }
43
44     internal static class Config {
45         private static volatile string m_machineConfig;
46         private static volatile string m_userConfig;
47
48         [System.Security.SecurityCritical]  // auto-generated
49         [ResourceExposure(ResourceScope.None)]
50         [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)]
51         private static void GetFileLocales()
52         {
53             if (m_machineConfig == null)
54             {
55                 string machineConfig = null;
56                 GetMachineDirectory(JitHelpers.GetStringHandleOnStack(ref machineConfig));
57                 m_machineConfig = machineConfig;
58             }
59             if (m_userConfig == null)
60             {
61                 string userConfig = null;
62                 GetUserDirectory(JitHelpers.GetStringHandleOnStack(ref userConfig));
63                 m_userConfig = userConfig;
64         }
65         }
66
67         internal static string MachineDirectory
68         {
69             [System.Security.SecurityCritical]  // auto-generated
70             [ResourceExposure(ResourceScope.Machine)]
71             get
72             {
73                 GetFileLocales();
74                 return m_machineConfig;
75             }
76         }
77
78         internal static string UserDirectory
79         {
80             [System.Security.SecurityCritical]  // auto-generated
81             [ResourceExposure(ResourceScope.Machine)]
82             get
83             {
84                 GetFileLocales();
85                 return m_userConfig;
86             }
87         }
88
89 #if FEATURE_CAS_POLICY
90         [System.Security.SecurityCritical]  // auto-generated
91         [ResourceExposure(ResourceScope.Machine)]
92         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
93         internal static extern int SaveDataByte(string path, [In] byte[] data, int length);
94
95         [System.Security.SecurityCritical]  // auto-generated
96         [ResourceExposure(ResourceScope.None)]
97         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
98         internal static extern bool RecoverData(ConfigId id);
99
100         [System.Security.SecurityCritical]  // auto-generated
101         [ResourceExposure(ResourceScope.None)]
102         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
103         internal static extern void SetQuickCache(ConfigId id, QuickCacheEntryType quickCacheFlags);
104
105         [System.Security.SecurityCritical]  // auto-generated
106         [ResourceExposure(ResourceScope.None)]
107         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
108         private static extern bool GetCacheEntry(ConfigId id, int numKey, [In] byte[] key, int keyLength, ObjectHandleOnStack retData);
109
110         [System.Security.SecurityCritical]  // auto-generated
111         internal static bool GetCacheEntry(ConfigId id, int numKey, byte[] key, out byte[] data)
112         {
113             byte[] retData = null;
114             bool ret = GetCacheEntry(id, numKey, key, key.Length, JitHelpers.GetObjectHandleOnStack(ref retData));
115
116             data = retData;
117             return ret;
118         }
119
120         [System.Security.SecurityCritical]  // auto-generated
121         [ResourceExposure(ResourceScope.None)]
122         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
123         private static extern void AddCacheEntry(ConfigId id, int numKey, [In] byte[] key, int keyLength, byte[] data, int dataLength);
124
125         [System.Security.SecurityCritical]  // auto-generated
126         internal static void AddCacheEntry(ConfigId id, int numKey, byte[] key, byte[] data)
127         {
128             AddCacheEntry(id, numKey, key, key.Length, data, data.Length);
129         }
130
131         [System.Security.SecurityCritical]  // auto-generated
132         [ResourceExposure(ResourceScope.None)]
133         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
134         internal static extern void ResetCacheData(ConfigId id);
135 #endif
136
137         [System.Security.SecurityCritical]  // auto-generated
138         [ResourceExposure(ResourceScope.Machine)]
139         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
140         private static extern void GetMachineDirectory(StringHandleOnStack retDirectory);
141
142         [System.Security.SecurityCritical]  // auto-generated
143         [ResourceExposure(ResourceScope.Machine)]
144         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
145         private static extern void GetUserDirectory(StringHandleOnStack retDirectory);
146
147         [System.Security.SecurityCritical]  // auto-generated
148         [ResourceExposure(ResourceScope.None)]
149         [DllImport(JitHelpers.QCall, CharSet = CharSet.Unicode), SuppressUnmanagedCodeSecurity]
150         internal static extern bool WriteToEventLog(string message);
151     }
152 }