Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / IO / IsolatedStorage / IsolatedStorage.cs / 1 / IsolatedStorage.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
/*============================================================
*
* Class: IsolatedStorage
*
*
* Purpose: Provides access to Persisted Application / Assembly data
*
* Date: Feb 15, 2000
*
===========================================================*/
namespace System.IO.IsolatedStorage {
using System;
using System.IO;
using System.Text;
using System.Threading;
using System.Reflection;
using System.Collections;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.Security.Cryptography;
using System.Runtime.Serialization;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.InteropServices;
using Microsoft.Win32;
[Flags, Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum IsolatedStorageScope
{
// Dependency in native : COMIsolatedStorage.h
None = 0x00,
User = 0x01,
Domain = 0x02,
Assembly = 0x04,
Roaming = 0x08,
Machine = 0x10,
Application = 0x20
}
// not serializable
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class IsolatedStorage : MarshalByRefObject
{
// Helper constants
internal const IsolatedStorageScope c_Assembly =
(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly);
internal const IsolatedStorageScope c_Domain =
(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly |
IsolatedStorageScope.Domain);
internal const IsolatedStorageScope c_AssemblyRoaming =
(IsolatedStorageScope.Roaming |
IsolatedStorageScope.User |
IsolatedStorageScope.Assembly);
internal const IsolatedStorageScope c_DomainRoaming =
(IsolatedStorageScope.Roaming |
IsolatedStorageScope.User |
IsolatedStorageScope.Assembly |
IsolatedStorageScope.Domain);
internal const IsolatedStorageScope c_MachineAssembly =
(IsolatedStorageScope.Machine |
IsolatedStorageScope.Assembly);
internal const IsolatedStorageScope c_MachineDomain =
(IsolatedStorageScope.Machine |
IsolatedStorageScope.Assembly |
IsolatedStorageScope.Domain);
internal const IsolatedStorageScope c_AppUser =
(IsolatedStorageScope.Application |
IsolatedStorageScope.User);
internal const IsolatedStorageScope c_AppMachine =
(IsolatedStorageScope.Application |
IsolatedStorageScope.Machine);
internal const IsolatedStorageScope c_AppUserRoaming =
(IsolatedStorageScope.Roaming |
IsolatedStorageScope.Application |
IsolatedStorageScope.User);
#if !FEATURE_PAL
private const String s_Publisher = "Publisher";
#endif // !FEATURE_PAL
private const String s_StrongName = "StrongName";
private const String s_Site = "Site";
private const String s_Url = "Url";
private const String s_Zone = "Zone";
private static Char[] s_Base32Char = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', '0', '1', '2', '3', '4', '5'};
private ulong m_Quota;
private bool m_ValidQuota;
private Object m_DomainIdentity;
private Object m_AssemIdentity;
private Object m_AppIdentity;
private String m_DomainName;
private String m_AssemName;
private String m_AppName;
private IsolatedStorageScope m_Scope;
private static IsolatedStorageFilePermission s_PermDomain;
private static IsolatedStorageFilePermission s_PermMachineDomain;
private static IsolatedStorageFilePermission s_PermDomainRoaming;
private static IsolatedStorageFilePermission s_PermAssem;
private static IsolatedStorageFilePermission s_PermMachineAssem;
private static IsolatedStorageFilePermission s_PermAssemRoaming;
private static IsolatedStorageFilePermission s_PermAppUser;
private static IsolatedStorageFilePermission s_PermAppMachine;
private static IsolatedStorageFilePermission s_PermAppUserRoaming;
private static SecurityPermission s_PermControlEvidence;
private static PermissionSet s_PermReflection;
private static PermissionSet s_PermUnrestricted;
private static PermissionSet s_PermExecution;
#if _DEBUG
private static bool s_fDebug = false;
private static int s_iDebug = 0;
#endif
// This one should be a macro, expecting JIT to inline this.
internal static bool IsRoaming(IsolatedStorageScope scope)
{
return ((scope & IsolatedStorageScope.Roaming) != 0);
}
internal bool IsRoaming()
{
return ((m_Scope & IsolatedStorageScope.Roaming) != 0);
}
// This one should be a macro, expecting JIT to inline this.
internal static bool IsDomain(IsolatedStorageScope scope)
{
return ((scope & IsolatedStorageScope.Domain) != 0);
}
internal bool IsDomain()
{
return ((m_Scope & IsolatedStorageScope.Domain) != 0);
}
#if false
// Not currently used
// This one should be a macro, expecting JIT to inline this.
internal static bool IsUser(IsolatedStorageScope scope)
{
return ((scope & IsolatedStorageScope.User) != 0);
}
#endif
// This one should be a macro, expecting JIT to inline this.
internal static bool IsMachine(IsolatedStorageScope scope)
{
return ((scope & IsolatedStorageScope.Machine) != 0);
}
internal bool IsAssembly()
{
return ((m_Scope & IsolatedStorageScope.Assembly) != 0);
}
// This one should be a macro, expecting JIT to inline this.
internal static bool IsApp(IsolatedStorageScope scope)
{
return ((scope & IsolatedStorageScope.Application) != 0);
}
internal bool IsApp()
{
return ((m_Scope & IsolatedStorageScope.Application) != 0);
}
private String GetNameFromID(String typeID, String instanceID)
{
StringBuilder sb = new StringBuilder();
sb.Append(typeID);
sb.Append(SeparatorInternal);
sb.Append(instanceID);
return sb.ToString();
}
private static String GetPredefinedTypeName(Object o)
{
#if !FEATURE_PAL
if (o is Publisher)
return s_Publisher;
else if (o is StrongName)
return s_StrongName;
#else
if (o is StrongName)
return s_StrongName;
#endif // !FEATURE_PAL
else if (o is Url)
return s_Url;
else if (o is Site)
return s_Site;
else if (o is Zone)
return s_Zone;
return null;
}
#if !FEATURE_PAL
internal static String GetHash(Stream s)
{
SHA1Managed sha1 = new SHA1Managed();
byte[] b = sha1.ComputeHash(s);
return ToBase32StringSuitableForDirName(b);
}
#else
internal static String GetHash(Stream s)
{
const int MAX_BUFFER_SIZE = 1024;
byte[] buffer = new byte[MAX_BUFFER_SIZE];
// 160 bits SHA1 output as defined in the Secure Hash Standard
const int MESSAGE_DIGEST_LENGTH = 20;
int digestLength = 0;
byte[] digest = new byte[MESSAGE_DIGEST_LENGTH];
IntPtr hProv = (IntPtr) 0;
IntPtr hHash = (IntPtr) 0;
if( Win32Native.CryptAcquireContext(out hProv, null, null, 0, 0) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
if( Win32Native.CryptCreateHash(hProv, Win32Native.CALG_SHA1,(IntPtr) 0, 0, out hHash) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
int bytesRead;
do {
bytesRead = s.Read(buffer,0,MAX_BUFFER_SIZE);
if (bytesRead > 0) {
if(Win32Native.CryptHashData(hHash, buffer, bytesRead, 0) == false)
{
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
}
}
} while (bytesRead > 0);
// perform a sanity check to make sure the digest size equals MESSAGE_DIGEST_LENGTH
int fourBytes = 4;
if( Win32Native.CryptGetHashParam(hHash, Win32Native.HP_HASHSIZE, out digestLength, ref fourBytes, 0) == false
|| (digestLength != MESSAGE_DIGEST_LENGTH)
)
{
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
}
if( Win32Native.CryptGetHashParam(hHash, Win32Native.HP_HASHVAL, digest, ref digestLength, 0) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
if( Win32Native.CryptDestroyHash(hHash) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
if( Win32Native.CryptReleaseContext(hProv, 0) == false )
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
return ToBase32StringSuitableForDirName(digest);
}
#endif // !FEATURE_PAL
internal static String ToBase32StringSuitableForDirName(byte[] buff)
{
// This routine is optimised to be used with buffs of length 20
BCLDebug.Assert(((buff.Length % 5) == 0), "Unexpected hash length");
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 10)
{
Console.Write("Stream : ");
for (int j = 0; j> 5) |
((b3 & 0x60) >> 2))]);
sb.Append(s_Base32Char[(
((b1 & 0xE0) >> 5) |
((b4 & 0x60) >> 2))]);
// Consume 3 MSB bits of b2, 1 MSB bit of b3, b4
b2 >>= 5;
BCLDebug.Assert(((b2 & 0xF8) == 0), "Unexpected set bits");
if ((b3 & 0x80) != 0)
b2 |= 0x08;
if ((b4 & 0x80) != 0)
b2 |= 0x10;
sb.Append(s_Base32Char[b2]);
} while (i < l);
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 10)
Console.WriteLine("Hash : " + sb.ToString());
}
#endif
return sb.ToString();
}
#if false
// This is not used.
private static String ToBase64StringSuitableForDirName(byte[] buff)
{
String s = Convert.ToBase64String(buff);
StringBuilder sb = new StringBuilder();
// Remove certain chars not suited for file names
for (int i=0; i m_Quota)
m_Quota = 0;
else
m_Quota -= denied;
}
}
}
m_ValidQuota = true;
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 1) {
if (psAllowed != null)
Console.WriteLine("Allowed PS : " + psAllowed);
if (psDenied != null)
Console.WriteLine("Denied PS : " + psDenied);
}
}
#endif
}
#if _DEBUG
private static void DebugLog(Object o, MemoryStream ms)
{
if (s_fDebug)
{
if (s_iDebug >= 1)
Console.WriteLine(o.ToString());
if (s_iDebug >= 10)
{
byte[] p = ms.GetBuffer();
for (int _i=0; _i 0) {
if(Win32Native.CryptHashData(hHash, buffer, bytesRead, 0) == false)
{
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
}
}
} while (bytesRead > 0);
// perform a sanity check to make sure the digest size equals MESSAGE_DIGEST_LENGTH
int fourBytes = 4;
if( Win32Native.CryptGetHashParam(hHash, Win32Native.HP_HASHSIZE, out digestLength, ref fourBytes, 0) == false
|| (digestLength != MESSAGE_DIGEST_LENGTH)
)
{
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
}
if( Win32Native.CryptGetHashParam(hHash, Win32Native.HP_HASHVAL, digest, ref digestLength, 0) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
if( Win32Native.CryptDestroyHash(hHash) == false)
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
if( Win32Native.CryptReleaseContext(hProv, 0) == false )
throw new IsolatedStorageException(Environment.GetResourceString("IsolatedStorage_Exception"));
return ToBase32StringSuitableForDirName(digest);
}
#endif // !FEATURE_PAL
internal static String ToBase32StringSuitableForDirName(byte[] buff)
{
// This routine is optimised to be used with buffs of length 20
BCLDebug.Assert(((buff.Length % 5) == 0), "Unexpected hash length");
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 10)
{
Console.Write("Stream : ");
for (int j = 0; j> 5) |
((b3 & 0x60) >> 2))]);
sb.Append(s_Base32Char[(
((b1 & 0xE0) >> 5) |
((b4 & 0x60) >> 2))]);
// Consume 3 MSB bits of b2, 1 MSB bit of b3, b4
b2 >>= 5;
BCLDebug.Assert(((b2 & 0xF8) == 0), "Unexpected set bits");
if ((b3 & 0x80) != 0)
b2 |= 0x08;
if ((b4 & 0x80) != 0)
b2 |= 0x10;
sb.Append(s_Base32Char[b2]);
} while (i < l);
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 10)
Console.WriteLine("Hash : " + sb.ToString());
}
#endif
return sb.ToString();
}
#if false
// This is not used.
private static String ToBase64StringSuitableForDirName(byte[] buff)
{
String s = Convert.ToBase64String(buff);
StringBuilder sb = new StringBuilder();
// Remove certain chars not suited for file names
for (int i=0; i m_Quota)
m_Quota = 0;
else
m_Quota -= denied;
}
}
}
m_ValidQuota = true;
#if _DEBUG
if (s_fDebug)
{
if (s_iDebug >= 1) {
if (psAllowed != null)
Console.WriteLine("Allowed PS : " + psAllowed);
if (psDenied != null)
Console.WriteLine("Denied PS : " + psDenied);
}
}
#endif
}
#if _DEBUG
private static void DebugLog(Object o, MemoryStream ms)
{
if (s_fDebug)
{
if (s_iDebug >= 1)
Console.WriteLine(o.ToString());
if (s_iDebug >= 10)
{
byte[] p = ms.GetBuffer();
for (int _i=0; _i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HierarchicalDataBoundControlAdapter.cs
- ActivationArguments.cs
- CanonicalXml.cs
- DependencyPropertyValueSerializer.cs
- ServiceEndpointElementCollection.cs
- ServiceModelSecurityTokenRequirement.cs
- ExtenderProvidedPropertyAttribute.cs
- PointCollectionConverter.cs
- TextEndOfParagraph.cs
- DesignerSerializationVisibilityAttribute.cs
- DataMemberFieldEditor.cs
- Hex.cs
- XmlDataSource.cs
- AxisAngleRotation3D.cs
- BufferedReadStream.cs
- PropertyTab.cs
- Model3DGroup.cs
- XmlIlGenerator.cs
- DockPatternIdentifiers.cs
- ReaderWriterLockSlim.cs
- ConsumerConnectionPointCollection.cs
- MouseOverProperty.cs
- _CookieModule.cs
- OdbcErrorCollection.cs
- StructuredType.cs
- RequestCachingSection.cs
- QualifiedCellIdBoolean.cs
- BaseTemplateParser.cs
- PrinterSettings.cs
- UserControl.cs
- CookielessHelper.cs
- SafeMILHandle.cs
- WebPartConnectionsConnectVerb.cs
- ScriptRegistrationManager.cs
- HostedHttpContext.cs
- securestring.cs
- ObjectDataProvider.cs
- PropertyChangedEventManager.cs
- XmlSchemaComplexContent.cs
- MissingMethodException.cs
- CoTaskMemHandle.cs
- ChildTable.cs
- ToolStripItem.cs
- XsltException.cs
- Decimal.cs
- Scanner.cs
- OperationDescriptionCollection.cs
- RuntimeEnvironment.cs
- SQLByteStorage.cs
- Stream.cs
- StrongNameKeyPair.cs
- PageAsyncTaskManager.cs
- InternalConfigConfigurationFactory.cs
- MetafileHeaderWmf.cs
- FileDialogCustomPlacesCollection.cs
- DbExpressionVisitor.cs
- StorageComplexTypeMapping.cs
- SystemWebSectionGroup.cs
- SqlFileStream.cs
- DrawListViewSubItemEventArgs.cs
- SrgsElement.cs
- InlineCollection.cs
- Ipv6Element.cs
- GenericEnumConverter.cs
- StateItem.cs
- GeneratedView.cs
- TimeSpan.cs
- CustomAttributeFormatException.cs
- WindowsStartMenu.cs
- IndexedString.cs
- ConstantSlot.cs
- BitmapEffect.cs
- LocatorPart.cs
- OletxTransactionManager.cs
- InfoCardKeyedHashAlgorithm.cs
- SqlBinder.cs
- Input.cs
- QilGeneratorEnv.cs
- DispatchRuntime.cs
- DependencyPropertyValueSerializer.cs
- CodeTypeMember.cs
- MonitoringDescriptionAttribute.cs
- DynamicScriptObject.cs
- WebBrowserHelper.cs
- ShaderRenderModeValidation.cs
- TargetConverter.cs
- IndicShape.cs
- SettingsPropertyValue.cs
- AsymmetricSignatureDeformatter.cs
- XmlSequenceWriter.cs
- ProfileBuildProvider.cs
- Delegate.cs
- TextReader.cs
- DownloadProgressEventArgs.cs
- XmlReflectionImporter.cs
- WebMethodAttribute.cs
- ColumnResizeUndoUnit.cs
- DefinitionBase.cs
- MobileTemplatedControlDesigner.cs
- XmlMapping.cs