Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Security.AccessControl;
- using System.Text;
- using DokanNet;
- namespace XakepFS
- {
- class HelloWorldFSClass : IDokanOperations
- {
- public void Cleanup(string fileName, DokanFileInfo info)
- {
- }
- public void CloseFile(string fileName, DokanFileInfo info)
- {
- }
- public NtStatus CreateFile(string fileName, DokanNet.FileAccess access, FileShare share, FileMode mode, FileOptions options, FileAttributes attributes, DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus DeleteDirectory(string fileName, DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus DeleteFile(string fileName, DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus FindFiles(string fileName, out IList<FileInformation> files, DokanFileInfo info)
- {
- files = new List<FileInformation>();
- FileInformation fi;
- GetFileInformation("\\HelloWorld.txt", out fi, null);
- files.Add(fi);
- return NtStatus.Success;
- }
- public NtStatus FindFilesWithPattern(string fileName, string searchPattern, out IList<FileInformation> files, DokanFileInfo info)
- {
- return FindFiles(null, out files, null);
- }
- public NtStatus FindStreams(string fileName, out IList<FileInformation> streams, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus FlushFileBuffers(string fileName, DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus GetDiskFreeSpace(out long freeBytesAvailable, out long totalNumberOfBytes, out long totalNumberOfFreeBytes, DokanFileInfo info)
- {
- freeBytesAvailable = 0x4000000;
- totalNumberOfBytes = 0x4000000 * 5;
- totalNumberOfFreeBytes = 0x4000000;
- return NtStatus.Success;
- }
- public NtStatus GetFileInformation(string fileName, out FileInformation fileInfo, DokanFileInfo info)
- {
- if (fileName == "\\") //Возвращаем корректную информацию о корневой папке
- {
- fileInfo = new FileInformation
- {
- FileName = "\\",
- LastAccessTime = DateTime.Now,
- Attributes = FileAttributes.Directory
- };
- return NtStatus.Success;
- }
- if (fileName != "\\HelloWorld.txt")
- {
- fileInfo = new FileInformation { };
- return NtStatus.NoSuchFile;
- }
- fileInfo = new FileInformation
- {
- Attributes = FileAttributes.Normal,
- CreationTime = DateTime.Now,
- FileName = "HelloWorld.txt",
- LastAccessTime = DateTime.Now,
- LastWriteTime = DateTime.Now,
- Length = 57 //Длина в байтах строки, которую мы возвращаем через ReadFile
- };
- return NtStatus.Success;
- }
- public NtStatus GetFileSecurity(string fileName, out FileSystemSecurity security, AccessControlSections sections, DokanFileInfo info)
- {
- security = null;
- return NtStatus.Error;
- }
- public NtStatus GetVolumeInformation(out string volumeLabel, out FileSystemFeatures features, out string fileSystemName, out uint maximumComponentLength, DokanFileInfo info)
- {
- volumeLabel = "Hello world!";
- features = FileSystemFeatures.None;
- fileSystemName = "HelloWorldFS";
- maximumComponentLength = 256;
- return NtStatus.Success;
- }
- public NtStatus LockFile(string fileName, long offset, long length, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus Mounted(DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus MoveFile(string oldName, string newName, bool replace, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus ReadFile(string fileName, byte[] buffer, out int bytesRead, long offset, DokanFileInfo info)
- {
- bytesRead = 0;
- var x = Encoding.ASCII.GetBytes("Hello World from HelloWorldFS!\r\nThis is just a test file.");
- if (info.Context == null) // memory mapped read
- {
- using (var stream = new MemoryStream(x))
- {
- stream.Position = offset;
- bytesRead = stream.Read(buffer, 0, buffer.Length);
- }
- }
- return NtStatus.Success;
- }
- public NtStatus SetAllocationSize(string fileName, long length, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus SetEndOfFile(string fileName, long length, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus SetFileAttributes(string fileName, FileAttributes attributes, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus SetFileSecurity(string fileName, FileSystemSecurity security, AccessControlSections sections, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus SetFileTime(string fileName, DateTime? creationTime, DateTime? lastAccessTime, DateTime? lastWriteTime, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus UnlockFile(string fileName, long offset, long length, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- public NtStatus Unmounted(DokanFileInfo info)
- {
- return NtStatus.Success;
- }
- public NtStatus WriteFile(string fileName, byte[] buffer, out int bytesWritten, long offset, DokanFileInfo info)
- {
- throw new NotImplementedException();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement