mirror of
https://github.com/ReneLergner/WPinternals.git
synced 2026-06-16 20:30:12 +10:00
262 lines
6.5 KiB
C#
262 lines
6.5 KiB
C#
//
|
|
// Copyright (c) 2008-2011, Kenneth Bell
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the "Software"),
|
|
// to deal in the Software without restriction, including without limitation
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
// and/or sell copies of the Software, and to permit persons to whom the
|
|
// Software is furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
// DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
namespace DiscUtils.Ntfs
|
|
{
|
|
using System.IO;
|
|
|
|
internal delegate File GetFileByIndexFn(long index);
|
|
|
|
internal delegate File GetFileByRefFn(FileRecordReference reference);
|
|
|
|
internal delegate Directory GetDirectoryByIndexFn(long index);
|
|
|
|
internal delegate Directory GetDirectoryByRefFn(FileRecordReference reference);
|
|
|
|
internal delegate File AllocateFileFn(FileRecordFlags flags);
|
|
|
|
internal delegate void ForgetFileFn(File file);
|
|
|
|
internal interface INtfsContext
|
|
{
|
|
Stream RawStream
|
|
{
|
|
get;
|
|
}
|
|
|
|
AttributeDefinitions AttributeDefinitions
|
|
{
|
|
get;
|
|
}
|
|
|
|
UpperCase UpperCase
|
|
{
|
|
get;
|
|
}
|
|
|
|
BiosParameterBlock BiosParameterBlock
|
|
{
|
|
get;
|
|
}
|
|
|
|
MasterFileTable Mft
|
|
{
|
|
get;
|
|
}
|
|
|
|
ClusterBitmap ClusterBitmap
|
|
{
|
|
get;
|
|
}
|
|
|
|
SecurityDescriptors SecurityDescriptors
|
|
{
|
|
get;
|
|
}
|
|
|
|
ObjectIds ObjectIds
|
|
{
|
|
get;
|
|
}
|
|
|
|
ReparsePoints ReparsePoints
|
|
{
|
|
get;
|
|
}
|
|
|
|
Quotas Quotas
|
|
{
|
|
get;
|
|
}
|
|
|
|
NtfsOptions Options
|
|
{
|
|
get;
|
|
}
|
|
|
|
GetFileByIndexFn GetFileByIndex
|
|
{
|
|
get;
|
|
}
|
|
|
|
GetFileByRefFn GetFileByRef
|
|
{
|
|
get;
|
|
}
|
|
|
|
GetDirectoryByIndexFn GetDirectoryByIndex
|
|
{
|
|
get;
|
|
}
|
|
|
|
GetDirectoryByRefFn GetDirectoryByRef
|
|
{
|
|
get;
|
|
}
|
|
|
|
AllocateFileFn AllocateFile
|
|
{
|
|
get;
|
|
}
|
|
|
|
ForgetFileFn ForgetFile
|
|
{
|
|
get;
|
|
}
|
|
|
|
bool ReadOnly
|
|
{
|
|
get;
|
|
}
|
|
}
|
|
|
|
internal sealed class NtfsContext : INtfsContext
|
|
{
|
|
private Stream _rawStream;
|
|
private AttributeDefinitions _attrDefs;
|
|
private UpperCase _upperCase;
|
|
private BiosParameterBlock _bpb;
|
|
private MasterFileTable _mft;
|
|
private ClusterBitmap _bitmap;
|
|
private SecurityDescriptors _securityDescriptors;
|
|
private ObjectIds _objectIds;
|
|
private ReparsePoints _reparsePoints;
|
|
private Quotas _quotas;
|
|
private NtfsOptions _options;
|
|
private GetFileByIndexFn _getFileByIndexFn;
|
|
private GetFileByRefFn _getFileByRefFn;
|
|
private GetDirectoryByIndexFn _getDirByIndexFn;
|
|
private GetDirectoryByRefFn _getDirByRefFn;
|
|
private AllocateFileFn _allocateFileFn;
|
|
private ForgetFileFn _forgetFileFn;
|
|
private bool _readOnly;
|
|
|
|
public Stream RawStream
|
|
{
|
|
get { return _rawStream; }
|
|
set { _rawStream = value; }
|
|
}
|
|
|
|
public AttributeDefinitions AttributeDefinitions
|
|
{
|
|
get { return _attrDefs; }
|
|
set { _attrDefs = value; }
|
|
}
|
|
|
|
public UpperCase UpperCase
|
|
{
|
|
get { return _upperCase; }
|
|
set { _upperCase = value; }
|
|
}
|
|
|
|
public BiosParameterBlock BiosParameterBlock
|
|
{
|
|
get { return _bpb; }
|
|
set { _bpb = value; }
|
|
}
|
|
|
|
public MasterFileTable Mft
|
|
{
|
|
get { return _mft; }
|
|
set { _mft = value; }
|
|
}
|
|
|
|
public ClusterBitmap ClusterBitmap
|
|
{
|
|
get { return _bitmap; }
|
|
set { _bitmap = value; }
|
|
}
|
|
|
|
public SecurityDescriptors SecurityDescriptors
|
|
{
|
|
get { return _securityDescriptors; }
|
|
set { _securityDescriptors = value; }
|
|
}
|
|
|
|
public ObjectIds ObjectIds
|
|
{
|
|
get { return _objectIds; }
|
|
set { _objectIds = value; }
|
|
}
|
|
|
|
public ReparsePoints ReparsePoints
|
|
{
|
|
get { return _reparsePoints; }
|
|
set { _reparsePoints = value; }
|
|
}
|
|
|
|
public Quotas Quotas
|
|
{
|
|
get { return _quotas; }
|
|
set { _quotas = value; }
|
|
}
|
|
|
|
public NtfsOptions Options
|
|
{
|
|
get { return _options; }
|
|
set { _options = value; }
|
|
}
|
|
|
|
public GetFileByIndexFn GetFileByIndex
|
|
{
|
|
get { return _getFileByIndexFn; }
|
|
set { _getFileByIndexFn = value; }
|
|
}
|
|
|
|
public GetFileByRefFn GetFileByRef
|
|
{
|
|
get { return _getFileByRefFn; }
|
|
set { _getFileByRefFn = value; }
|
|
}
|
|
|
|
public GetDirectoryByIndexFn GetDirectoryByIndex
|
|
{
|
|
get { return _getDirByIndexFn; }
|
|
set { _getDirByIndexFn = value; }
|
|
}
|
|
|
|
public GetDirectoryByRefFn GetDirectoryByRef
|
|
{
|
|
get { return _getDirByRefFn; }
|
|
set { _getDirByRefFn = value; }
|
|
}
|
|
|
|
public AllocateFileFn AllocateFile
|
|
{
|
|
get { return _allocateFileFn; }
|
|
set { _allocateFileFn = value; }
|
|
}
|
|
|
|
public ForgetFileFn ForgetFile
|
|
{
|
|
get { return _forgetFileFn; }
|
|
set { _forgetFileFn = value; }
|
|
}
|
|
|
|
public bool ReadOnly
|
|
{
|
|
get { return _readOnly; }
|
|
set { _readOnly = value; }
|
|
}
|
|
}
|
|
}
|