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); } }
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)); } }