public override Int32 GetFileInfo( Object FileNode, Object FileDesc0, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 SetBasicInfo( Object FileNode, Object FileDesc0, UInt32 FileAttributes, UInt64 CreationTime, UInt64 LastAccessTime, UInt64 LastWriteTime, UInt64 ChangeTime, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; FileDesc.SetBasicInfo(FileAttributes, CreationTime, LastAccessTime, LastWriteTime); return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 Flush( Object FileNode, Object FileDesc0, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; if (null == FileDesc) { /* we do not flush the whole volume, so just return SUCCESS */ FileInfo = default(FileInfo); return(STATUS_SUCCESS); } FileDesc.Stream.Flush(true); return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 Open( String FileName, UInt32 CreateOptions, UInt32 GrantedAccess, out Object FileNode, out Object FileDesc0, out FileInfo FileInfo, out String NormalizedName) { FileDesc FileDesc = null; try { FileName = ConcatPath(FileName); if (!Directory.Exists(FileName)) { FileDesc = new FileDesc( new FileStream( FileName, FileMode.Open, (FileSystemRights)GrantedAccess, FileShare.Read | FileShare.Write | FileShare.Delete, 4096, 0)); } else { FileDesc = new FileDesc( new DirectoryInfo(FileName)); } FileNode = default(Object); FileDesc0 = FileDesc; NormalizedName = default(String); return(FileDesc.GetFileInfo(out FileInfo)); } catch { if (null != FileDesc && null != FileDesc.Stream) { FileDesc.Stream.Dispose(); } throw; } }
public override Int32 SetFileSize( Object FileNode, Object FileDesc0, UInt64 NewSize, Boolean SetAllocationSize, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; if (!SetAllocationSize || (UInt64)FileDesc.Stream.Length > NewSize) { /* * "FileInfo.FileSize > NewSize" explanation: * Ptfs does not support allocation size. However if the new AllocationSize * is less than the current FileSize we must truncate the file. */ FileDesc.Stream.SetLength((Int64)NewSize); } return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 Overwrite( Object FileNode, Object FileDesc0, UInt32 FileAttributes, Boolean ReplaceFileAttributes, UInt64 AllocationSize, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; if (ReplaceFileAttributes) { FileDesc.SetFileAttributes(FileAttributes); } else if (0 != FileAttributes) { FileDesc.SetFileAttributes(FileDesc.GetFileAttributes() | FileAttributes); } FileDesc.Stream.SetLength(0); return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 Write( Object FileNode, Object FileDesc0, IntPtr Buffer, UInt64 Offset, UInt32 Length, Boolean WriteToEndOfFile, Boolean ConstrainedIo, out UInt32 PBytesTransferred, out FileInfo FileInfo) { FileDesc FileDesc = (FileDesc)FileDesc0; if (ConstrainedIo) { if (Offset >= (UInt64)FileDesc.Stream.Length) { PBytesTransferred = default(UInt32); FileInfo = default(FileInfo); return(STATUS_SUCCESS); } if (Offset + Length > (UInt64)FileDesc.Stream.Length) { Length = (UInt32)((UInt64)FileDesc.Stream.Length - Offset); } } Byte[] Bytes = new byte[Length]; Marshal.Copy(Buffer, Bytes, 0, Bytes.Length); if (!WriteToEndOfFile) { FileDesc.Stream.Seek((Int64)Offset, SeekOrigin.Begin); } FileDesc.Stream.Write(Bytes, 0, Bytes.Length); PBytesTransferred = (UInt32)Bytes.Length; return(FileDesc.GetFileInfo(out FileInfo)); }
public override Int32 Create( String FileName, UInt32 CreateOptions, UInt32 GrantedAccess, UInt32 FileAttributes, Byte[] SecurityDescriptor, UInt64 AllocationSize, out Object FileNode, out Object FileDesc0, out FileInfo FileInfo, out String NormalizedName) { FileDesc FileDesc = null; try { FileName = ConcatPath(FileName); if (0 == (CreateOptions & FILE_DIRECTORY_FILE)) { FileSecurity Security = null; if (null != SecurityDescriptor) { Security = new FileSecurity(); Security.SetSecurityDescriptorBinaryForm(SecurityDescriptor); } FileDesc = new FileDesc( new FileStream( FileName, FileMode.CreateNew, (FileSystemRights)GrantedAccess | FileSystemRights.WriteAttributes, FileShare.Read | FileShare.Write | FileShare.Delete, 4096, 0, Security)); FileDesc.SetFileAttributes(FileAttributes | (UInt32)System.IO.FileAttributes.Archive); } else { if (Directory.Exists(FileName)) { ThrowIoExceptionWithNtStatus(STATUS_OBJECT_NAME_COLLISION); } DirectorySecurity Security = null; if (null != SecurityDescriptor) { Security = new DirectorySecurity(); Security.SetSecurityDescriptorBinaryForm(SecurityDescriptor); } FileDesc = new FileDesc( Directory.CreateDirectory(FileName, Security)); FileDesc.SetFileAttributes(FileAttributes); } FileNode = default(Object); FileDesc0 = FileDesc; NormalizedName = default(String); return(FileDesc.GetFileInfo(out FileInfo)); } catch { if (null != FileDesc && null != FileDesc.Stream) { FileDesc.Stream.Dispose(); } throw; } }