Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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
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
- TypeSystem.cs
- DecodeHelper.cs
- TypeToTreeConverter.cs
- SourceFileBuildProvider.cs
- ProtectedProviderSettings.cs
- LinkedResource.cs
- XmlSchemaAnyAttribute.cs
- SqlMethodAttribute.cs
- Double.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- DispatcherObject.cs
- XamlToRtfWriter.cs
- DbParameterCollection.cs
- ToolZone.cs
- GeneratedContractType.cs
- PathTooLongException.cs
- SplineKeyFrames.cs
- HttpCapabilitiesSectionHandler.cs
- XPathPatternParser.cs
- AddressingVersion.cs
- Ops.cs
- LineUtil.cs
- ProfileInfo.cs
- DbException.cs
- HwndSourceParameters.cs
- OutOfMemoryException.cs
- SemanticResolver.cs
- ProcessingInstructionAction.cs
- ExpressionEditorAttribute.cs
- DropTarget.cs
- CodeSubDirectoriesCollection.cs
- RegexTree.cs
- NoPersistProperty.cs
- Brush.cs
- EntityFunctions.cs
- ProbeMatches11.cs
- EventItfInfo.cs
- SelectionWordBreaker.cs
- ReturnEventArgs.cs
- HttpRequest.cs
- ToolTip.cs
- SqlSelectStatement.cs
- ContextStack.cs
- CallContext.cs
- TdsParserSessionPool.cs
- ApplicationDirectory.cs
- MatrixCamera.cs
- BamlCollectionHolder.cs
- DataKey.cs
- ToolStripContainer.cs
- RotateTransform3D.cs
- RelationHandler.cs
- DataSourceXmlClassAttribute.cs
- WmfPlaceableFileHeader.cs
- ColumnTypeConverter.cs
- Collection.cs
- MergeFilterQuery.cs
- MetadataPropertyAttribute.cs
- Parsers.cs
- EventMappingSettingsCollection.cs
- ListMarkerLine.cs
- DashStyles.cs
- SystemIPv6InterfaceProperties.cs
- EntityTypeEmitter.cs
- ClientBuildManager.cs
- CustomActivityDesigner.cs
- _AuthenticationState.cs
- EntityModelSchemaGenerator.cs
- DragDrop.cs
- FixedSOMTable.cs
- DataGridViewCell.cs
- ContentType.cs
- XmlSchemaException.cs
- DetailsViewModeEventArgs.cs
- ValidationService.cs
- GenericIdentity.cs
- DesignerCategoryAttribute.cs
- SymLanguageVendor.cs
- CompleteWizardStep.cs
- Pool.cs
- PathNode.cs
- LicenseProviderAttribute.cs
- TextSelectionProcessor.cs
- PropertyInformationCollection.cs
- ListMarkerLine.cs
- SimpleWorkerRequest.cs
- IdentityManager.cs
- DataBoundControlParameterTarget.cs
- ControlTemplate.cs
- UseLicense.cs
- SharedConnectionInfo.cs
- mda.cs
- JsonServiceDocumentSerializer.cs
- BaseDataBoundControl.cs
- DefaultPropertyAttribute.cs
- XPathMultyIterator.cs
- TextRange.cs
- Zone.cs
- TypedRowHandler.cs
- InstanceStore.cs