public Win32Returncode CreateFile(FuserFileHandler hFile, FuserFileAccess access, FileShare share, FileMode mode, FileOptions options, FileAttributes attribut)
        {
            string funcname = "CreateFile";
            string param    = "";

            try {
                param = access + ";" + share + ";" + mode + ";" + options + " Attribute: " + attribut;
                Win32Returncode r = sourceSystem.CreateFile(hFile, access, share, mode, options, attribut);

                LogEvent(funcname, r, param, hFile);
                return(r);
            } catch (Exception e) {
                LogEvent(funcname, Win32Returncode.DEFAULT_UNKNOWN_ERROR, param, hFile);
                LogException(funcname, e);
                return(Win32Returncode.DEFAULT_UNKNOWN_ERROR);
            }
        }
Exemple #2
0
        public int CreateFile(IntPtr rawFilname, uint rawAccessMode, uint rawShare, uint rawCreationDisposition, uint rawFlagsAndAttributes, ref FuserDefinition.FUSER_FILE_INFO rawHFile)
        {
            try {
                FuserFileHandler hFile = this.hManager.RegisterFileHandler(GetFilename(rawFilname), ref rawHFile);


                FuserFileAccess access = FuserFileAccess.None;
                FileAttributes  newFileAttr;

                try {
                    newFileAttr = (FileAttributes)rawFlagsAndAttributes;
                } catch {
                    newFileAttr = 0;
                }

                FileShare   share   = FileShare.None;
                FileMode    mode    = FileMode.Open;
                FileOptions options = FileOptions.None;


                if ((rawAccessMode & FuserDefinition.FILE_READ_DATA) != 0 && (rawAccessMode & FuserDefinition.FILE_WRITE_DATA) != 0)
                {
                    access = FuserFileAccess.ReadWrite;
                }
                else if ((rawAccessMode & FuserDefinition.FILE_WRITE_DATA) != 0)
                {
                    access = FuserFileAccess.Write;
                }
                else if ((rawAccessMode & FuserDefinition.FILE_READ_DATA) != 0)
                {
                    access = FuserFileAccess.Read;
                }


                if ((rawShare & FuserDefinition.FILE_SHARE_READ) != 0)
                {
                    share = FileShare.Read;
                }

                if ((rawShare & FuserDefinition.FILE_SHARE_WRITE) != 0)
                {
                    share |= FileShare.Write;
                }

                if ((rawShare & FuserDefinition.FILE_SHARE_DELETE) != 0)
                {
                    share |= FileShare.Delete;
                }

                switch (rawCreationDisposition)
                {
                case FuserDefinition.CREATE_NEW:
                    mode = FileMode.CreateNew;
                    break;

                case FuserDefinition.CREATE_ALWAYS:
                    mode = FileMode.Create;
                    break;

                case FuserDefinition.OPEN_EXISTING:
                    mode = FileMode.Open;
                    break;

                case FuserDefinition.OPEN_ALWAYS:
                    mode = FileMode.OpenOrCreate;
                    break;

                case FuserDefinition.TRUNCATE_EXISTING:
                    mode = FileMode.Truncate;
                    break;
                }

                Win32Returncode ret = this.fsDevice.CreateFile(hFile, access, share, mode, options, newFileAttr);

                if (hFile.IsDirectory)
                {
                    rawHFile.IsDirectory = 1;
                    // TODO: directory problem
                    //rawFlagsAndAttributes |= 0x02000000;
                }

                if (ret != Win32Returncode.SUCCESS)
                {
                    this.hManager.RemoveFileHandler(ref rawHFile);
                }

                return(ConvReturnCodeToInt(ret));
            } catch (Exception e) {
                this.hManager.RemoveFileHandler(ref rawHFile);
                this.fsDevice.LogErrorMessage("CreateFile", e.Message);
                return(ConvReturnCodeToInt(Win32Returncode.ERROR_FILE_NOT_FOUND));
            }
        }
        /// <summary>
        /// Sets the specified accesses and shares to the file. If false is returned, the lock cannot be set.
        /// </summary>
        /// <param name="fileHandle"></param>
        /// <param name="item"></param>
        /// <param name="access"></param>
        /// <param name="share"></param>
        /// <returns></returns>
        public static bool FilelockSet(FileHandler fileHandle, IFuserFilesystemItem item, FuserFileAccess access, FileShare share)
        {
            FileLockItem lItem = null;

            try {
                lItem = new FileLockItem((item is IFuserFilesystemDirectory), (access == FuserFileAccess.Read || access == FuserFileAccess.ReadWrite), (access == FuserFileAccess.Write || access == FuserFileAccess.ReadWrite), share);
            } catch {
                return(false);
            }
            return(FilelockSet(fileHandle, item, lItem));
        }
 public Win32Returncode CreateFile(FuserFileHandler hFile, FuserFileAccess access, FileShare share, FileMode mode, FileOptions options, FileAttributes attribut)
 {
     lock (this) {
         return(this.sourceSystem.CreateFile(hFile, access, share, mode, options, attribut));
     }
 }