/// <summary> /// CreateFile wrapper that attempts to use CreateFile2 if running as Windows Store app. /// </summary> public static SafeFileHandle CreateFile( StringSpan path, CreationDisposition creationDisposition, DesiredAccess desiredAccess = DesiredAccess.GenericReadWrite, ShareModes shareMode = ShareModes.ReadWrite, FileAttributes fileAttributes = FileAttributes.None, FileFlags fileFlags = FileFlags.None, SecurityQosFlags securityQosFlags = SecurityQosFlags.None) { // Prefer CreateFile2, falling back to CreateFileEx if we can if (s_createFileDelegate == null) { s_createFileDelegate = CreateFile2; try { return(s_createFileDelegate(path, desiredAccess, shareMode, creationDisposition, fileAttributes, fileFlags, securityQosFlags)); } catch (EntryPointNotFoundException) { s_createFileDelegate = Delegates.CreateDelegate <CreateFileDelegate>( "WInterop.Storage.Desktop.NativeMethods, " + Delegates.DesktopLibrary, "CreateFileW"); } } return(s_createFileDelegate(path, desiredAccess, shareMode, creationDisposition, fileAttributes, fileFlags, securityQosFlags)); }
/// <summary> /// CreateFile2 wrapper. Only available on Windows 8 and above. /// </summary> public static unsafe SafeFileHandle CreateFile2( StringSpan path, DesiredAccess desiredAccess, ShareModes shareMode, CreationDisposition creationDisposition, FileAttributes fileAttributes = FileAttributes.None, FileFlags fileFlags = FileFlags.None, SecurityQosFlags securityQosFlags = SecurityQosFlags.None) { CREATEFILE2_EXTENDED_PARAMETERS extended = new CREATEFILE2_EXTENDED_PARAMETERS() { dwSize = (uint)sizeof(CREATEFILE2_EXTENDED_PARAMETERS), dwFileAttributes = fileAttributes, dwFileFlags = fileFlags, dwSecurityQosFlags = securityQosFlags }; SafeFileHandle handle = Imports.CreateFile2( lpFileName: ref MemoryMarshal.GetReference(path.GetSpanWithoutTerminator()), dwDesiredAccess: desiredAccess, dwShareMode: shareMode, dwCreationDisposition: creationDisposition, pCreateExParams: ref extended); if (handle.IsInvalid) { throw Error.GetExceptionForLastError(path.ToString()); } return(handle); }
/// <summary> /// CreateFile2 wrapper. Only available on Windows 8 and above. /// </summary> public static unsafe SafeFileHandle CreateFile2( string path, DesiredAccess desiredAccess, ShareModes shareMode, CreationDisposition creationDisposition, FileAttributes fileAttributes = FileAttributes.None, FileFlags fileFlags = FileFlags.None, SecurityQosFlags securityQosFlags = SecurityQosFlags.None) { CREATEFILE2_EXTENDED_PARAMETERS extended = new CREATEFILE2_EXTENDED_PARAMETERS() { dwSize = (uint)sizeof(CREATEFILE2_EXTENDED_PARAMETERS), dwFileAttributes = fileAttributes, dwFileFlags = fileFlags, dwSecurityQosFlags = securityQosFlags }; SafeFileHandle handle = Imports.CreateFile2( lpFileName: path, dwDesiredAccess: desiredAccess, dwShareMode: shareMode, dwCreationDisposition: creationDisposition, pCreateExParams: ref extended); if (handle.IsInvalid) { throw Errors.GetIoExceptionForLastError(path); } return(handle); }
internal static extern SafeFileHandle CreateFile( string lpFileName, DesiredAccesses dwDesiredAccess, ShareModes dwShareMode, ref SECURITY_ATTRIBUTES lpSecurityAttributes, int dwCreationDisposition, FileFlags dwFlagsAndAttributes, int hTemplateFile);
public unsafe static extern SafeFileHandle CreateFileW( string lpFileName, DesiredAccess dwDesiredAccess, ShareModes dwShareMode, SECURITY_ATTRIBUTES *lpSecurityAttributes, CreationDisposition dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
public static LzHandle LzCreateFile( string path, DesiredAccess access = DesiredAccess.GenericRead, ShareModes share = ShareModes.ReadWrite, CreationDisposition creation = CreationDisposition.OpenExisting) { return(new LzCreateHandle(ValidateLzResult( Imports.LZCreateFileW(path, access, share, creation, EmptySafeHandle.Instance), path))); }
/// <summary> /// NtCreateFile wrapper. /// </summary> public unsafe static SafeFileHandle CreateFileDirect( string path, CreateDisposition createDisposition, DesiredAccess desiredAccess = DesiredAccess.GenericReadWrite | DesiredAccess.Synchronize, ShareModes shareAccess = ShareModes.ReadWrite, FileAttributes fileAttributes = FileAttributes.None, CreateOptions createOptions = CreateOptions.SynchronousIoNonalert, ObjectAttributes objectAttributes = ObjectAttributes.CaseInsensitive) { return(CreateFileRelative(path, null, createDisposition, desiredAccess, shareAccess, fileAttributes, createOptions, objectAttributes)); }
public unsafe static extern NTStatus NtCreateFile( out IntPtr FileHandle, DesiredAccess DesiredAccess, ref OBJECT_ATTRIBUTES ObjectAttributes, out IO_STATUS_BLOCK IoStatusBlock, long *AllocationSize, FileAttributes FileAttributes, ShareModes ShareAccess, CreateDisposition CreateDisposition, CreateOptions CreateOptions, void *EaBuffer, uint EaLength);
public unsafe static SafeFileHandle CreateFileRelative( ReadOnlySpan <char> path, SafeFileHandle rootDirectory, CreateDisposition createDisposition, DesiredAccess desiredAccess = DesiredAccess.GenericReadWrite | DesiredAccess.Synchronize, ShareModes shareAccess = ShareModes.ReadWrite, FileAttributes fileAttributes = FileAttributes.None, CreateOptions createOptions = CreateOptions.SynchronousIoNonalert, ObjectAttributes objectAttributes = ObjectAttributes.CaseInsensitive) { using (var handle = new UnwrapHandle(rootDirectory)) { return(new SafeFileHandle( CreateFileRelative(path, handle, createDisposition, desiredAccess, shareAccess, fileAttributes, createOptions, objectAttributes), true)); } }
/// <summary> /// Get a stream for the specified file. /// </summary> public static System.IO.Stream CreateFileStream( StringSpan path, DesiredAccess desiredAccess, ShareModes shareMode, CreationDisposition creationDisposition, FileAttributes fileAttributes = FileAttributes.None, FileFlags fileFlags = FileFlags.None, SecurityQosFlags securityQosFlags = SecurityQosFlags.None) { var fileHandle = CreateFile(path, creationDisposition, desiredAccess, shareMode, fileAttributes, fileFlags, securityQosFlags); // FileStream will own the lifetime of the handle return(new System.IO.FileStream( handle: fileHandle, access: Conversion.DesiredAccessToFileAccess(desiredAccess), bufferSize: 4096, isAsync: (fileFlags & FileFlags.Overlapped) != 0)); }
/// <summary> /// CreateFile wrapper. Desktop only. Prefer File.CreateFile() as it will handle all supported platforms. /// </summary> /// <remarks>Not available in Windows Store applications.</remarks> public unsafe static SafeFileHandle CreateFileW( string path, DesiredAccess desiredAccess, ShareModes shareMode, CreationDisposition creationDisposition, FileAttributes fileAttributes = FileAttributes.None, FileFlags fileFlags = FileFlags.None, SecurityQosFlags securityQosFlags = SecurityQosFlags.None) { uint flags = (uint)fileAttributes | (uint)fileFlags | (uint)securityQosFlags; SafeFileHandle handle = Imports.CreateFileW(path, desiredAccess, shareMode, lpSecurityAttributes: null, creationDisposition, flags, hTemplateFile: IntPtr.Zero); if (handle.IsInvalid) { throw Error.GetExceptionForLastError(path); } return(handle); }
public unsafe static IntPtr CreateFileRelative( ReadOnlySpan <char> path, IntPtr rootDirectory, CreateDisposition createDisposition, DesiredAccess desiredAccess = DesiredAccess.GenericReadWrite | DesiredAccess.Synchronize, ShareModes shareAccess = ShareModes.ReadWrite, FileAttributes fileAttributes = FileAttributes.None, CreateOptions createOptions = CreateOptions.SynchronousIoNonalert, ObjectAttributes objectAttributes = ObjectAttributes.CaseInsensitive) { fixed(char *c = &path.DangerousGetPinnableReference()) { UNICODE_STRING name = new UNICODE_STRING(c, path.Length); OBJECT_ATTRIBUTES attributes = new OBJECT_ATTRIBUTES( &name, objectAttributes, rootDirectory, null, null); NTSTATUS status = Imports.NtCreateFile( out IntPtr handle, desiredAccess, ref attributes, out IO_STATUS_BLOCK statusBlock, AllocationSize: null, FileAttributes: fileAttributes, ShareAccess: shareAccess, CreateDisposition: createDisposition, CreateOptions: createOptions, EaBuffer: null, EaLength: 0); if (status != NTSTATUS.STATUS_SUCCESS) { throw ErrorMethods.GetIoExceptionForNTStatus(status, path.ToString()); } return(handle); } }
public static LzHandle LzCreateFile( string path, out string uncompressedName, DesiredAccess access = DesiredAccess.GenericRead, ShareModes share = ShareModes.ReadWrite, CreationDisposition creation = CreationDisposition.OpenExisting) { string name = null; LzHandle handle = null; BufferHelper.BufferInvoke((StringBuffer buffer) => { buffer.EnsureCharCapacity(Paths.MaxPath); int result = ValidateLzResult(Imports.LZCreateFileW(path, access, share, creation, buffer), path); buffer.SetLengthToFirstNull(); name = buffer.ToString(); handle = new LzCreateHandle(result); }); uncompressedName = name; return(handle); }
public unsafe static IntPtr CreateFileRelative( ReadOnlySpan <char> path, IntPtr rootDirectory, CreateDisposition createDisposition, DesiredAccess desiredAccess = DesiredAccess.GenericReadWrite | DesiredAccess.Synchronize, ShareModes shareAccess = ShareModes.ReadWrite, FileAttributes fileAttributes = FileAttributes.None, CreateOptions createOptions = CreateOptions.SynchronousIoNonalert, ObjectAttributes objectAttributes = ObjectAttributes.CaseInsensitive) { fixed(char *c = &MemoryMarshal.GetReference(path)) { var name = new SafeString.Unsafe.UNICODE_STRING(c, path.Length); var attributes = new Handles.Unsafe.OBJECT_ATTRIBUTES( &name, objectAttributes, rootDirectory, null, null); Imports.NtCreateFile( out IntPtr handle, desiredAccess, ref attributes, out IO_STATUS_BLOCK statusBlock, AllocationSize: null, FileAttributes: fileAttributes, ShareAccess: shareAccess, CreateDisposition: createDisposition, CreateOptions: createOptions, EaBuffer: null, EaLength: 0) .ThrowIfFailed(path.ToString()); return(handle); } }
public static extern IntPtr ReOpenFile( SafeFileHandle hOriginalFile, DesiredAccess dwDesiredAccess, ShareModes dwShareMode, uint dwFlags);
public static extern SafeFileHandle CreateFile(string lpFileName, DesiredAccesses dwDesiredAccess, ShareModes dwShareMode, IntPtr lpSecurityAttributes, CreationDispositions dwCreationDisposition, FlagsAndAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);
public static extern int LZCreateFileW( string lpFileName, DesiredAccess dwAccess, ShareModes dwShareMode, CreationDisposition dwCreate, SafeHandle lpCompressedName);
public static extern SafeFileHandle CreateFile2( ref char lpFileName, DesiredAccess dwDesiredAccess, ShareModes dwShareMode, CreationDisposition dwCreationDisposition, ref CREATEFILE2_EXTENDED_PARAMETERS pCreateExParams);
public SafeFileHandle OpenDevice(string devicePath, DesiredAccesses deviceAccesses, ShareModes shareModes, FileFlags flags) { if (devicePath == null) { throw new ArgumentNullException($"{nameof(devicePath)} is null"); } var security = new SECURITY_ATTRIBUTES(true); SafeFileHandle result = NativeMethods.CreateFile(devicePath, deviceAccesses, shareModes, ref security, NativeMethods.OPEN_EXISTING, flags, 0); if (result.IsInvalid) { Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); } return(result); }
public SafeFileHandle OpenDevice(string devicePath, DesiredAccesses deviceAccesses, ShareModes shareModes, FileFlags flags) { if (IsThrow) { throw new Exception("TestException"); } var returnValue = IsFailureHandle ? IntPtr.Zero : new IntPtr(1); IsOpenDevice = true; return(new SafeFileHandle(returnValue, true)); }