Ejemplo n.º 1
0
        /// <summary>
        /// Creates or opens a <see cref="IAsyncFile"/>. Throws on failure.
        /// </summary>
        /// <exception cref="BuildXL.Native.IO.NativeWin32Exception">Thrown on failure</exception>
        public static IAsyncFile CreateOrOpen(
            string path,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode creationDisposition,
            FileFlagsAndAttributes flagsAndAttributes,
            IIOCompletionManager ioCompletionManager = null)
        {
            IAsyncFile     file;
            OpenFileResult result = TryCreateOrOpen(
                path,
                desiredAccess,
                shareMode,
                creationDisposition,
                flagsAndAttributes | FileFlagsAndAttributes.FileFlagOverlapped,
                out file,
                ioCompletionManager);

            if (file != null)
            {
                Contract.Assert(result.Succeeded);
                return(file);
            }

            Contract.Assert(!result.Succeeded);
            throw result.ThrowForError();
        }
Ejemplo n.º 2
0
        static IntPtr StgCreateStorageEx_Hooked([MarshalAs(UnmanagedType.LPWStr)][In]  string pwcsName, [In] STGM grfMode,
                                                [In] STGFMT stgfmt, [In] FileFlagsAndAttributes grfAttrs, [In] IntPtr pStgOptions, [In] IntPtr pSecurityDescriptor, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid,
                                                [Out][MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 6)] out object ppObjectOpen)
        {
            try
            {
                Main This = (Main)HookRuntimeInfo.Callback;

                lock (This.Queue)
                {
                    This.Interface.OnCreateFile(RemoteHooking.GetCurrentThreadId(), new[] { pwcsName });

                    /*This.Queue.Push("[" + RemoteHooking.GetCurrentProcessId() + ":" +
                     *  RemoteHooking.GetCurrentThreadId() + "]: \"" + InFileName + "\"");
                     * InFileName = InFileName.Replace("C", "D");*/
                }
            }
            catch
            {
            }

            return(StgCreateStorageEx(
                       pwcsName, grfMode, stgfmt, grfAttrs,
                       pStgOptions, pSecurityDescriptor,
                       riid,
                       out ppObjectOpen));
        }
Ejemplo n.º 3
0
 /// <inheritdoc />
 public OpenFileResult TryOpenFileById(
     SafeFileHandle existingHandleOnVolume,
     FileId fileId,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle handle) => throw new NotImplementedException();
Ejemplo n.º 4
0
 public static extern SafeFileHandle CreateFile([MarshalAs(UnmanagedType.LPTStr)] string filename,
                                                [MarshalAs(UnmanagedType.U4)] FileAccess access,
                                                [MarshalAs(UnmanagedType.U4)] FileShare share,
                                                IntPtr securityAttributes,
                                                [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
                                                [MarshalAs(UnmanagedType.U4)] FileFlagsAndAttributes flagsAndAttributes,
                                                IntPtr templateFile);
Ejemplo n.º 5
0
        /// <summary>
        /// Returns an <see cref="IAsyncFile"/>. Does not throw on failure.
        /// </summary>
        private static OpenFileResult TryCreateOrOpen(
            string path,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode creationDisposition,
            FileFlagsAndAttributes flagsAndAttributes,
            out IAsyncFile openedFile,
            IIOCompletionManager ioCompletionManager = null)
        {
            SafeFileHandle handle;
            OpenFileResult result = FileUtilities.TryCreateOrOpenFile(
                path,
                desiredAccess,
                shareMode,
                creationDisposition,
                flagsAndAttributes | FileFlagsAndAttributes.FileFlagOverlapped,
                out handle);

            if (handle != null)
            {
                Contract.Assert(result.Succeeded && !handle.IsInvalid);
                openedFile = CreateAsyncFile(handle, desiredAccess, ownsHandle: true, ioCompletionManager: ioCompletionManager, path: path);
            }
            else
            {
                Contract.Assert(!result.Succeeded);
                openedFile = null;
            }

            return(result);
        }
Ejemplo n.º 6
0
        private static OpenFileResult TryOpenDirectory(
            string directoryPath,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode fileMode,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle handle)
        {
            Contract.Requires(!string.IsNullOrEmpty(directoryPath));

            if (flagsAndAttributes.HasFlag(FileFlagsAndAttributes.FileFlagOpenReparsePoint) &&
                IsSymlink(directoryPath))
            {
                return(TryOpenSymlink(directoryPath, desiredAccess, shareMode, fileMode, out handle));
            }

            try
            {
                FileStream fs = new FileStream(directoryPath, fileMode, FileDesiredAccessToFileAccess(desiredAccess), shareMode, DefaultBufferSize, FileFlagsAndAttributesToFileOptions(flagsAndAttributes | FileFlagsAndAttributes.FileFlagBackupSemantics));
                handle = fs.SafeFileHandle;
                return(OpenFileResult.Create(NativeIOConstants.ErrorSuccess, fileMode, handleIsValid: true, openingById: false));
            }
            catch (Exception ex)
            {
                handle = null;
                int nativeErrorCode = (int)NativeErrorCodeForException(ex);
                Logger.Log.StorageTryOpenDirectoryFailure(Events.StaticContext, directoryPath, nativeErrorCode);
                return(OpenFileResult.Create(nativeErrorCode, fileMode, handleIsValid: false, openingById: false));
            }
        }
Ejemplo n.º 7
0
        /// <inheritdoc />
        public OpenFileResult TryCreateOrOpenFile(
            string path,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode creationDisposition,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle handle)
        {
            if (flagsAndAttributes.HasFlag(FileFlagsAndAttributes.FileFlagOpenReparsePoint) &&
                IsSymlink(path))
            {
                return(TryOpenSymlink(path, desiredAccess, shareMode, creationDisposition, out handle));
            }

            try
            {
                FileStream fs = new FileStream(path, creationDisposition, FileDesiredAccessToFileAccess(desiredAccess), shareMode, DefaultBufferSize, FileFlagsAndAttributesToFileOptions(flagsAndAttributes));
                handle = fs.SafeFileHandle;
                return(OpenFileResult.Create(NativeIOConstants.ErrorSuccess, creationDisposition, handleIsValid: true, openingById: false));
            }
            catch (Exception ex)
            {
                handle = null;
                var errorCode = NativeErrorCodeForException(ex);
                Logger.Log.StorageTryOpenOrCreateFileFailure(Events.StaticContext, path, (int)creationDisposition, (int)errorCode);
                return(OpenFileResult.Create((int)errorCode, creationDisposition, handleIsValid: false, openingById: false));
            }
        }
Ejemplo n.º 8
0
        /// <inheritdoc />
        public TResult UsingFileHandleAndFileLength <TResult>(
            string path,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode creationDisposition,
            FileFlagsAndAttributes flagsAndAttributes,
            Func <SafeFileHandle, long, TResult> handleStream)
        {
            SafeFileHandle handle;
            var            openResult = s_fileSystem.TryCreateOrOpenFile(
                path,
                desiredAccess,
                shareMode,
                creationDisposition,
                flagsAndAttributes,
                out handle);

            if (!openResult.Succeeded)
            {
                openResult
                .CreateFailureForError()
                .Annotate($"{nameof(s_fileSystem.TryCreateOrOpenFile)} failed in {nameof(UsingFileHandleAndFileLength)}")
                .Throw();
            }

            using (handle)
            {
                Contract.Assert(handle != null && !handle.IsInvalid);
                var maybeTarget = s_fileSystem.TryGetReparsePointTarget(path);
                var length      = maybeTarget.Succeeded ? maybeTarget.Result.Length : new FileInfo(path).Length;
                return(handleStream(handle, length));
            }
        }
Ejemplo n.º 9
0
 public static extern SafeFileHandle CreateFileW(
     string lpFileName,
     FileDesiredAccess dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     FileMode dwCreationDisposition,
     FileFlagsAndAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
Ejemplo n.º 10
0
 public static extern IntPtr CreateFileW(
     string lpFileName,
     FileAccessMode dwDesiredAccess,
     FileShareMode dwShareMode,
     IntPtr lpSecurityAttributes,                 // always 0
     FileCreationDisposition dwCreationDisposition,
     FileFlagsAndAttributes dwFlagsAndAttributes, // typically just FILE_FLAG_OVERLAPPED
     IntPtr hTemplateFile);
Ejemplo n.º 11
0
 public static extern IntPtr CreateFile(
     string fileName,
     FileAccessRightFlags desiredAccess,
     FileShareModeFlags shareMode,
     IntPtr securityAttributes,
     FileCreationDisposition creationDisposition,
     FileFlagsAndAttributes flagsAndAttributes,
     IntPtr templateFile);
Ejemplo n.º 12
0
 public static extern IntPtr CreateFile(
     string fileName,
     FileAccessRightFlags desiredAccess,
     FileShareModeFlags shareMode,
     IntPtr securityAttributes,
     FileCreationDisposition creationDisposition,
     FileFlagsAndAttributes flagsAndAttributes,
     IntPtr templateFile);
Ejemplo n.º 13
0
 public static extern SafeFileHandle CreateFile(
     string lpFileName,
     FileDesiredAccess dwDesiredAccess,
     FileShareFlags dwShareMode,
     IntPtr lpSecurityAttributes,
     FileCreationDisposition dwCreationDisposition,
     FileFlagsAndAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile
 );
Ejemplo n.º 14
0
 /// <see cref="IFileSystem.TryOpenDirectory(string, FileDesiredAccess, FileShare, FileFlagsAndAttributes, out SafeFileHandle)"/>
 public static OpenFileResult TryOpenDirectory(
     string directoryPath,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle handle)
 {
     return(s_fileSystem.TryOpenDirectory(directoryPath, desiredAccess, shareMode, flagsAndAttributes, out handle));
 }
Ejemplo n.º 15
0
 /// <see cref="IFileSystem.TryReOpenFile(SafeFileHandle, FileDesiredAccess, FileShare, FileFlagsAndAttributes, out SafeFileHandle)"/>
 public static ReOpenFileStatus TryReOpenFile(
     SafeFileHandle existing,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle reopenedHandle)
 {
     return(s_fileSystem.TryReOpenFile(existing, desiredAccess, shareMode, flagsAndAttributes, out reopenedHandle));
 }
Ejemplo n.º 16
0
 /// <see cref="IFileSystem.TryOpenFileById(SafeFileHandle, FileId, FileDesiredAccess, FileShare, FileFlagsAndAttributes, out SafeFileHandle)"/>
 public static OpenFileResult TryOpenFileById(
     SafeFileHandle existingHandleOnVolume,
     FileId fileId,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle handle)
 {
     return(s_fileSystem.TryOpenFileById(existingHandleOnVolume, fileId, desiredAccess, shareMode, flagsAndAttributes, out handle));
 }
Ejemplo n.º 17
0
 /// <see cref="IFileSystem.TryCreateOrOpenFile(string, FileDesiredAccess, FileShare, FileMode, FileFlagsAndAttributes, out SafeFileHandle)"/>
 public static OpenFileResult TryCreateOrOpenFile(
     string path,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileMode creationDisposition,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle handle)
 {
     return(s_fileSystem.TryCreateOrOpenFile(path, desiredAccess, shareMode, creationDisposition, flagsAndAttributes, out handle));
 }
Ejemplo n.º 18
0
        /// <inheritdoc />
        public OpenFileResult TryOpenDirectory(
            string directoryPath,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle handle)
        {
            Contract.Requires(!string.IsNullOrEmpty(directoryPath));

            return(TryOpenDirectory(directoryPath, desiredAccess, shareMode, FileMode.Open, flagsAndAttributes, out handle));
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Creates an instance of <see cref="NamedPipeServerStream"/> and immediately connects a client to it.
        /// </summary>
        /// <param name="serverDirection">Server direction.</param>
        /// <param name="serverOptions">Server options.</param>
        /// <param name="clientOptions">Client options.</param>
        /// <param name="clientHandle">Output client handle.</param>
        /// <returns>An instance of <see cref="NamedPipeServerStream"/>.</returns>
        public static NamedPipeServerStream CreateNamedPipeServerStream(
            PipeDirection serverDirection,
            PipeOptions serverOptions,
            PipeOptions clientOptions,
            out SafeFileHandle clientHandle)
        {
            string pipeName         = @"BuildXL-" + Guid.NewGuid().ToString("N");
            var    pipeServerStream = new NamedPipeServerStream(
                pipeName,
                serverDirection,
                maxNumberOfServerInstances: 1,
                transmissionMode: PipeTransmissionMode.Byte,
                options: serverOptions,
                inBufferSize: PipeBufferSize,
                outBufferSize: PipeBufferSize);

            FileDesiredAccess clientDesiredAccess = FileDesiredAccess.None;

            if ((PipeDirection.In & serverDirection) != 0)
            {
                clientDesiredAccess |= FileDesiredAccess.GenericWrite;
            }

            if ((PipeDirection.Out & serverDirection) != 0)
            {
                clientDesiredAccess |= FileDesiredAccess.GenericRead;
            }

            FileFlagsAndAttributes clientFlags = clientOptions == PipeOptions.Asynchronous
                ? FileFlagsAndAttributes.FileFlagOverlapped
                : 0;

            OpenFileResult openClientHandle = FileUtilities.TryCreateOrOpenFile(
                @"\\.\pipe\" + pipeName,
                clientDesiredAccess,
                FileShare.None,
                FileMode.Open,
                clientFlags | FileFlagsAndAttributes.SecurityAnonymous,
                out clientHandle);

            if (!openClientHandle.Succeeded)
            {
                throw openClientHandle.CreateExceptionForError();
            }

            // Client should be made inheritable.
            SetInheritable(clientHandle);

            pipeServerStream.WaitForConnection();

            return(pipeServerStream);
        }
Ejemplo n.º 20
0
        /// <inheritdoc />
        public OpenFileResult TryOpenDirectory(
            string directoryPath,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle handle)
        {
            Contract.Requires(!string.IsNullOrEmpty(directoryPath));
            Contract.Ensures(Contract.Result <OpenFileResult>().Succeeded == (Contract.ValueAtReturn(out handle) != null));
            Contract.Ensures(!Contract.Result <OpenFileResult>().Succeeded || !Contract.ValueAtReturn(out handle).IsInvalid);

            return(TryOpenDirectory(directoryPath, desiredAccess, shareMode, FileMode.Open, flagsAndAttributes, out handle));
        }
Ejemplo n.º 21
0
        ///////////////////////////////////////////////////////////////////////

#if NATIVE && WINDOWS
        public static bool HasFlags(
            FileFlagsAndAttributes flags,
            FileFlagsAndAttributes hasFlags,
            bool all
            )
        {
            if (all)
            {
                return((flags & hasFlags) == hasFlags);
            }
            else
            {
                return((flags & hasFlags) != FileFlagsAndAttributes.FILE_ATTRIBUTE_NONE);
            }
        }
Ejemplo n.º 22
0
 /// <see cref="IFileUtilities.UsingFileHandleAndFileLength"/>
 public static TResult UsingFileHandleAndFileLength <TResult>(
     string path,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileMode creationDisposition,
     FileFlagsAndAttributes flagsAndAttributes,
     Func <SafeFileHandle, long, TResult> handleStream)
 =>
 s_fileUtilities.UsingFileHandleAndFileLength(
     path,
     desiredAccess,
     shareMode,
     creationDisposition,
     flagsAndAttributes,
     handleStream);
Ejemplo n.º 23
0
 /// <inheritdoc />
 public OpenFileResult TryCreateOrOpenFile(
     string path,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileMode creationDisposition,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle handle)
 {
     return(TryOpen(
                path,
                desiredAccess,
                shareMode,
                creationDisposition,
                flagsAndAttributes.HasFlag(FileFlagsAndAttributes.FileFlagOpenReparsePoint) && IsSymlink(path),
                out handle));
 }
Ejemplo n.º 24
0
        private bool OpenDevice()
        {
            try
            {
                FileShareMode           shareModeExclusive  = FileShareMode.FILE_SHARE_NONE;
                FileShareMode           shareModeNormal     = FileShareMode.FILE_SHARE_READ | FileShareMode.FILE_SHARE_WRITE;
                FileDesiredAccess       desiredAccess       = FileDesiredAccess.GENERIC_READ | FileDesiredAccess.GENERIC_WRITE;
                FileCreationDisposition creationDisposition = FileCreationDisposition.OPEN_EXISTING;
                FileFlagsAndAttributes  flagsAttributes     = FileFlagsAndAttributes.FILE_FLAG_NORMAL | FileFlagsAndAttributes.FILE_FLAG_OVERLAPPED | FileFlagsAndAttributes.FILE_FLAG_NO_BUFFERING;

                //Try to open the device exclusively
                FileHandle = CreateFile(DevicePath, desiredAccess, shareModeExclusive, IntPtr.Zero, creationDisposition, flagsAttributes, IntPtr.Zero);
                Exclusive  = true;

                //Try to open the device normally
                if (FileHandle == null || FileHandle.IsInvalid || FileHandle.IsClosed)
                {
                    //Debug.WriteLine("Failed to open device exclusively, opening normally.");
                    FileHandle = CreateFile(DevicePath, desiredAccess, shareModeNormal, IntPtr.Zero, creationDisposition, flagsAttributes, IntPtr.Zero);
                    Exclusive  = false;
                }

                //Check if the device is opened
                if (FileHandle == null || FileHandle.IsInvalid || FileHandle.IsClosed)
                {
                    //Debug.WriteLine("Failed to open hid device: " + DevicePath);
                    Connected = false;
                    Installed = false;
                    return(false);
                }
                else
                {
                    //Debug.WriteLine("Opened hid device: " + DevicePath + ", exclusively: " + Exclusive);
                    Connected = true;
                    Installed = true;
                    return(true);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Failed to open hid device: " + ex.Message);
                Connected = false;
                Installed = false;
                return(false);
            }
        }
 /// <summary>
 /// Handles intercepted file access.
 /// </summary>
 /// <param name="fileName"></param>
 /// <param name="desiredAccess"></param>
 /// <param name="shareMode"></param>
 /// <param name="securityAttributes"></param>
 /// <param name="creationDisposition"></param>
 /// <param name="flagsAndAttributes"></param>
 /// <param name="templateFile"></param>
 /// <returns></returns>
 public IntPtr CreateFile(string fileName, FileAccessRightFlags desiredAccess, FileShareModeFlags shareMode,
                            IntPtr securityAttributes, FileCreationDisposition creationDisposition,
                            FileFlagsAndAttributes flagsAndAttributes, IntPtr templateFile)
 {
   var request = new FileRequest
   {
     CreationDisposition = creationDisposition,
     Path = fileName,
     ResourceType = ResourceType.File
   };
   using (EngineCore.Engine.GetEngineProcessingSpace())
   {
     var virtualPath = _fileSystem.GetVirtualPath(request);
     return HostFileSystem.NativeMethods.CreateFile(
       virtualPath, desiredAccess, shareMode, securityAttributes,
       creationDisposition, flagsAndAttributes, templateFile);
   }
 }
Ejemplo n.º 26
0
        private OpenFileResult TryOpenDirectory(
            string directoryPath,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileMode fileMode,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle handle)
        {
            Contract.Requires(!string.IsNullOrEmpty(directoryPath));

            return(TryOpen(
                       directoryPath,
                       desiredAccess,
                       shareMode,
                       fileMode,
                       flagsAndAttributes.HasFlag(FileFlagsAndAttributes.FileFlagOpenReparsePoint) && IsSymlink(directoryPath),
                       out handle));
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Tries to open a handle to the given file as identified by a (<paramref name="volumeSerial"/>, <paramref name="fileId"/>) pair.
        /// If the result is <see cref="OpenFileByIdResult.Succeeded"/>, <paramref name="fileHandle"/> has been set to a valid handle.
        /// </summary>
        /// <remarks>
        /// This method is not thread safe (see <see cref="FileAccessor"/> remarks).
        /// </remarks>
        public OpenFileByIdResult TryOpenFileById(
            ulong volumeSerial,
            FileId fileId,
            FileDesiredAccess desiredAccess,
            FileShare shareMode,
            FileFlagsAndAttributes flagsAndAttributes,
            out SafeFileHandle fileHandle)
        {
            Contract.Requires(!Disposed);
            Contract.Ensures((Contract.Result <OpenFileByIdResult>() == OpenFileByIdResult.Succeeded) == (Contract.ValueAtReturn(out fileHandle) != null));
            Contract.Ensures((Contract.Result <OpenFileByIdResult>() != OpenFileByIdResult.Succeeded) || !Contract.ValueAtReturn(out fileHandle).IsInvalid);

            SafeFileHandle volumeRootHandle = TryGetVolumeRoot(volumeSerial);

            if (volumeRootHandle == null)
            {
                fileHandle = null;
                return(OpenFileByIdResult.FailedToOpenVolume);
            }

            OpenFileResult openResult = FileUtilities.TryOpenFileById(
                volumeRootHandle,
                fileId,
                desiredAccess,
                shareMode,
                flagsAndAttributes,
                out fileHandle);

            if (!openResult.Succeeded)
            {
                Contract.Assert(fileHandle == null);

                if (openResult.Status.IsNonexistent())
                {
                    return(OpenFileByIdResult.FailedToFindFile);
                }
                else
                {
                    return(OpenFileByIdResult.FailedToAccessExistentFile);
                }
            }

            return(OpenFileByIdResult.Succeeded);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Handles intercepted file access.
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="desiredAccess"></param>
        /// <param name="shareMode"></param>
        /// <param name="securityAttributes"></param>
        /// <param name="creationDisposition"></param>
        /// <param name="flagsAndAttributes"></param>
        /// <param name="templateFile"></param>
        /// <returns></returns>
        public IntPtr CreateFile(string fileName, FileAccessRightFlags desiredAccess, FileShareModeFlags shareMode,
                                 IntPtr securityAttributes, FileCreationDisposition creationDisposition,
                                 FileFlagsAndAttributes flagsAndAttributes, IntPtr templateFile)
        {
            var request = new FileRequest
            {
                CreationDisposition = creationDisposition,
                Path         = fileName,
                ResourceType = ResourceType.File
            };

            using (EngineCore.Engine.GetEngineProcessingSpace())
            {
                var virtualPath = _fileSystem.GetVirtualPath(request);
                return(HostFileSystem.NativeMethods.CreateFile(
                           virtualPath, desiredAccess, shareMode, securityAttributes,
                           creationDisposition, flagsAndAttributes, templateFile));
            }
        }
Ejemplo n.º 29
0
 /// <summary>Initializes a new instance of the <see cref="TempFile"/> class and retrieves a handle to the file.</summary>
 /// <param name="dwDesiredAccess">The desired access.</param>
 /// <param name="dwShareMode">The share mode.</param>
 /// <param name="dwCreationDisposition">The creation disposition.</param>
 /// <param name="dwFlagsAndAttributes">The flags and attributes.</param>
 public TempFile(Kernel32.FileAccess dwDesiredAccess, FileShare dwShareMode, FileMode dwCreationDisposition = FileMode.OpenOrCreate,
                 FileFlagsAndAttributes dwFlagsAndAttributes = FileFlagsAndAttributes.FILE_ATTRIBUTE_NORMAL) : this(string.Empty) =>
Ejemplo n.º 30
0
 /// <inheritdoc />
 public ReOpenFileStatus TryReOpenFile(
     SafeFileHandle existing,
     FileDesiredAccess desiredAccess,
     FileShare shareMode,
     FileFlagsAndAttributes flagsAndAttributes,
     out SafeFileHandle reopenedHandle) => throw new NotImplementedException();
Ejemplo n.º 31
0
        => 0;     // TODO: Task #1272136 (FileContentTable)

        /// <nodoc />
        private static FileOptions FileFlagsAndAttributesToFileOptions(FileFlagsAndAttributes flagsAndAttributes) =>
        s_fileOptionsFlags.Aggregate(FileOptions.None, (acc, kvp) => flagsAndAttributes.HasFlag(kvp.Key) ? acc | kvp.Value : acc);
Ejemplo n.º 32
0
		public static extern IntPtr CreateFile(string lpFileName, ACCESS_MASK dwDesiredAccess, FILE_SHARE dwShareMode, IntPtr lpSecurityAttributes, FileMode dwCreationDisposition, FileFlagsAndAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);
Ejemplo n.º 33
0
		public static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, FILE_SHARE dwShareMode, [In] ref SECURITY_ATTRIBUTES lpSecurityAttributes, FileMode dwCreationDisposition, FileFlagsAndAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);
Ejemplo n.º 34
0
 public static extern HRESULT StgOpenStorageEx([MarshalAs(UnmanagedType.LPWStr)] string pwcsName, STGM grfMode, STGFMT stgfmt,
                                               FileFlagsAndAttributes grfAttrs, ref STGOPTIONS pStgOptions, IntPtr reserved2, [MarshalAs(UnmanagedType.LPStruct)] Guid riid,
                                               [MarshalAs(UnmanagedType.IUnknown, IidParameterIndex = 6)] out object ppObjectOpen);
Ejemplo n.º 35
0
 public TempFile(Kernel32.FileAccess dwDesiredAccess, FileShare dwShareMode, FileMode dwCreationDisposition = FileMode.OpenOrCreate, FileFlagsAndAttributes dwFlagsAndAttributes = FileFlagsAndAttributes.FILE_ATTRIBUTE_NORMAL) : this()
 {
     hFile = CreateFile(FullName, dwDesiredAccess, dwShareMode, null, dwCreationDisposition, dwFlagsAndAttributes, IntPtr.Zero);
 }