Esempio n. 1
0
        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);
            }
        }