public NtStatus CreateFile(string fileName, FileAccess access, FileShare share, FileMode mode, FileOptions options, FileAttributes attributes, IDokanFileInfo info) { var r = Storage.Create(fileName, !info.IsDirectory, FileAccessConverter.Get(access), share, mode, options, attributes, out var node); info.Context = node; if (node != null) { info.IsDirectory = !node.IsFile(); } return(r.GetNtStatus()); }
public int Create(string pFileName, uint pCreateOptions, uint GrantedAccess, uint pFileAttributes, byte[] SecurityDescriptor, ulong AllocationSize, out object FileNode, out object FileDesc0, out FileInfo pFileInfo, out string NormalizedName) { try { var r = Storage.Create( pFileName, (pCreateOptions & FileSystemBase.FILE_DIRECTORY_FILE) == 0, System.IO.FileAccess.ReadWrite, System.IO.FileShare.Read | System.IO.FileShare.Write | System.IO.FileShare.Delete, System.IO.FileMode.CreateNew, System.IO.FileOptions.None, (System.IO.FileAttributes)pFileAttributes, out var Node ); if (r.Status == ResultStatus.Success) { FileDesc0 = Node; var e = Node; FileNode = e; e.GetStruct(out pFileInfo); NormalizedName = e.Name; } else { FileDesc0 = default; FileNode = default; NormalizedName = default; pFileInfo = default; } return(HandleResult(r).GetNtStatus()); } catch (Win32Exception ex) { throw WindowsExceptionGenerator.GetIOException(ex); } catch (NTException ex) { throw WindowsExceptionGenerator.GetIOException(ex); } }