コード例 #1
0
        /// <summary>
        /// CreateFile wrapper that attempts to use CreateFile2 if running as Windows Store app.
        /// </summary>
        public static SafeFileHandle CreateFile(
            string path,
            DesiredAccess desiredAccess,
            ShareMode shareMode,
            CreationDisposition creationDisposition,
            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 (Exception exception)
                {
                    // Any error other than EntryPointNotFound we've found CreateFile2, rethrow
                    if (!ErrorHelper.IsEntryPointNotFoundException(exception))
                    {
                        throw;
                    }

                    s_createFileDelegate = Delegates.CreateDelegate <CreateFileDelegate>(
                        "WInterop.FileManagement.Desktop.NativeMethods, " + Delegates.DesktopLibrary,
                        "CreateFileW");
                }
            }

            return(s_createFileDelegate(path, desiredAccess, shareMode, creationDisposition, fileAttributes, fileFlags, securityQosFlags));
        }
コード例 #2
0
 /// <summary>
 /// Pass the file handle to the <see cref="System.IO.FileStream"/> constructor.
 /// The <see cref="System.IO.FileStream"/> will close the handle.
 /// </summary>
 public SafeFileHandle CreateHandle(
     CreationDisposition creationDisposition,
     FileAccess fileAccess,
     FileShare fileShare)
 {
     return(ZlpIOHelper.CreateFileHandle(_path, creationDisposition, fileAccess, fileShare));
 }
コード例 #3
0
        /// <summary>
        /// CreateFile2 wrapper. Only available on Windows 8 and above.
        /// </summary>
        public static SafeFileHandle CreateFile2(
            string path,
            DesiredAccess desiredAccess,
            ShareMode shareMode,
            CreationDisposition creationDisposition,
            FileAttributes fileAttributes     = FileAttributes.NONE,
            FileFlags fileFlags               = FileFlags.NONE,
            SecurityQosFlags securityQosFlags = SecurityQosFlags.NONE)
        {
            CREATEFILE2_EXTENDED_PARAMETERS extended = new CREATEFILE2_EXTENDED_PARAMETERS();

            extended.dwSize             = (uint)Marshal.SizeOf <CREATEFILE2_EXTENDED_PARAMETERS>();
            extended.dwFileAttributes   = fileAttributes;
            extended.dwFileFlags        = fileFlags;
            extended.dwSecurityQosFlags = securityQosFlags;
            unsafe
            {
                extended.lpSecurityAttributes = null;
            }
            extended.hTemplateFile = IntPtr.Zero;

            SafeFileHandle handle = Direct.CreateFile2(
                lpFileName: path,
                dwDesiredAccess: desiredAccess,
                dwShareMode: shareMode,
                dwCreationDisposition: creationDisposition,
                pCreateExParams: ref extended);

            if (handle.IsInvalid)
            {
                throw ErrorHelper.GetIoExceptionForLastError();
            }

            return(handle);
        }
コード例 #4
0
 public WinApiFile(string sFileName,
                   DesiredAccess fDesiredAccess,
                   CreationDisposition fCreationDisposition)
 {
     FileName = sFileName;
     Open(fDesiredAccess, fCreationDisposition);
 }
コード例 #5
0
ファイル: ReportedFileAccess.cs プロジェクト: anniefu/BuildXL
 public ReportedFileAccess(
     ReportedFileOperation operation,
     ReportedProcess process,
     RequestedAccess requestedAccess,
     FileAccessStatus status,
     bool explicitlyReported,
     uint error,
     Usn usn,
     DesiredAccess desiredAccess,
     ShareMode shareMode,
     CreationDisposition creationDisposition,
     FlagsAndAttributes flagsAndAttributes,
     AbsolutePath manifestPath,
     string path,
     string enumeratePatttern)
 {
     Contract.Requires(process != null);
     Operation          = operation;
     Process            = process;
     RequestedAccess    = requestedAccess;
     Status             = status;
     ExplicitlyReported = explicitlyReported;
     Error               = error;
     Usn                 = usn;
     DesiredAccess       = desiredAccess;
     ShareMode           = shareMode;
     CreationDisposition = creationDisposition;
     FlagsAndAttributes  = flagsAndAttributes;
     ManifestPath        = manifestPath;
     Path                = path;
     EnumeratePattern    = enumeratePatttern;
 }
コード例 #6
0
ファイル: ZlpFileInfo.cs プロジェクト: iraychen/ZetaLongPaths
 /// <summary>
 /// Pass the file handle to the <see cref="System.IO.FileStream"/> constructor. 
 /// The <see cref="System.IO.FileStream"/> will close the handle.
 /// </summary>
 public SafeFileHandle CreateHandle(
     CreationDisposition creationDisposition,
     FileAccess fileAccess,
     FileShare fileShare)
 {
     return ZlpIOHelper.CreateFileHandle(FullName, creationDisposition, fileAccess, fileShare);
 }
コード例 #7
0
        public static ReportedFileAccess Create(
            ReportedFileOperation operation,
            ReportedProcess process,
            RequestedAccess requestedAccess,
            FileAccessStatus status,
            bool explicitlyReported,
            uint error,
            Usn usn,
            DesiredAccess desiredAccess,
            ShareMode shareMode,
            CreationDisposition creationDisposition,
            FlagsAndAttributes flagsAndAttributes,
            FlagsAndAttributes openedFileOrDirectoryAttribute,
            PathTable pathTable,
            string path,
            string enumeratePattern = null)
        {
            Contract.Requires(process != null);
            Contract.Requires(pathTable != null);
            Contract.Requires(path != null);

            AbsolutePath absolutePath;

            if (AbsolutePath.TryGet(pathTable, (StringSegment)path, out absolutePath))
            {
                return(new ReportedFileAccess(
                           operation,
                           process,
                           requestedAccess,
                           status,
                           explicitlyReported,
                           error,
                           usn,
                           desiredAccess,
                           shareMode,
                           creationDisposition,
                           flagsAndAttributes,
                           openedFileOrDirectoryAttribute,
                           absolutePath,
                           null,
                           enumeratePattern));
            }

            return(new ReportedFileAccess(
                       operation,
                       process,
                       requestedAccess,
                       status,
                       explicitlyReported,
                       error,
                       usn,
                       desiredAccess,
                       shareMode,
                       creationDisposition,
                       flagsAndAttributes,
                       openedFileOrDirectoryAttribute,
                       AbsolutePath.Invalid,
                       path,
                       enumeratePattern));
        }
コード例 #8
0
ファイル: Storage.cs プロジェクト: daxiang758/WInterop
        /// <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);
        }
コード例 #9
0
ファイル: ZlpIOHelper.cs プロジェクト: AndyAn/Miiror
        /// <summary>
        /// Pass the file handle to the <see cref="System.IO.FileStream"/> constructor. 
        /// The <see cref="System.IO.FileStream"/> will close the handle.
        /// </summary>
        public static SafeFileHandle CreateFileHandle(
			string filePath,
			CreationDisposition creationDisposition,
			FileAccess fileAccess,
			FileShare fileShare)
        {
            filePath = CheckAddLongPathPrefix(filePath);

            // Create a file with generic write access
            var fileHandle =
                PInvokeHelper.CreateFile(
                    filePath,
                    fileAccess,
                    fileShare,
                    IntPtr.Zero,
                    creationDisposition,
                    0,
                    IntPtr.Zero);

            // Check for errors.
            var lastWin32Error = Marshal.GetLastWin32Error();
            if (fileHandle.IsInvalid)
            {
                throw new Win32Exception(
                    lastWin32Error,
                    string.Format(
                        "Error {0} creating file handle for file path '{1}': {2}",
                        lastWin32Error,
                        filePath,
                        CheckAddDotEnd(new Win32Exception(lastWin32Error).Message)));
            }

            // Pass the file handle to FileStream. FileStream will close the handle.
            return fileHandle;
        }
コード例 #10
0
ファイル: Storage.cs プロジェクト: daxiang758/WInterop
        /// <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));
        }
コード例 #11
0
        /// <summary>
        /// Create a file
        /// </summary>
        /// <param name="fileName">Path file</param>
        /// <param name="creationDisposition">Options to creation</param>
        /// <returns>Pointer to file.</returns>
        public static File CreateFile(string fileName, CreationDisposition creationDisposition)
        {
            Transaction t = new Transaction(true);
            File        f = CreateFile(fileName, creationDisposition, t);

            return(f);
        }
コード例 #12
0
ファイル: FileMethods.cs プロジェクト: maryamariyan/WInterop
        /// <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);
        }
コード例 #13
0
ファイル: ReportedFileAccess.cs プロジェクト: anniefu/BuildXL
        public static ReportedFileAccess Create(
            ReportedFileOperation operation,
            ReportedProcess process,
            RequestedAccess requestedAccess,
            FileAccessStatus status,
            bool explicitlyReported,
            uint error,
            Usn usn,
            DesiredAccess desiredAccess,
            ShareMode shareMode,
            CreationDisposition creationDisposition,
            FlagsAndAttributes flagsAndAttributes,
            AbsolutePath path,
            string enumeratePattern = null)
        {
            Contract.Requires(process != null);

            return(new ReportedFileAccess(
                       operation,
                       process,
                       requestedAccess,
                       status,
                       explicitlyReported,
                       error,
                       usn,
                       desiredAccess,
                       shareMode,
                       creationDisposition,
                       flagsAndAttributes,
                       path,
                       null,
                       enumeratePattern));
        }
コード例 #14
0
 internal static extern IntPtr CreateFile(
     string lpFileName,
     FileAccess dwDesiredAccess,
     FileShares dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #15
0
 public static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPTStr)] string filename,
     [MarshalAs(UnmanagedType.U4)] FileAccess access,
     [MarshalAs(UnmanagedType.U4)] FileShare share,
     IntPtr securityAttributes, // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero
     [MarshalAs(UnmanagedType.U4)] CreationDisposition creationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
     IntPtr templateFile);
コード例 #16
0
 public HIDFile(string sFileName,
                DesiredAccess fDesiredAccess,
                ShareMode fShareMode,
                CreationDisposition fCreationDisposition)
 {
     FileName = sFileName;
     Open(fDesiredAccess, fShareMode, fCreationDisposition, 0);
 }
コード例 #17
0
ファイル: Imports.cs プロジェクト: daxiang758/WInterop
 public unsafe static extern SafeFileHandle CreateFileW(
     string lpFileName,
     DesiredAccess dwDesiredAccess,
     ShareModes dwShareMode,
     SECURITY_ATTRIBUTES *lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     uint dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #18
0
 public extern static System.IntPtr CreateFileW(
     [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpFileName,
     DesiredAccess dwDesiredAccess,
     ShareMode dwShareMode,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FlagsAndAttributes dwFlagsAndAttributes,
     System.IntPtr hTemplateFile);
 public static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(
     string lpFileName,
     FileAccess dwDesiredAccess,
     int dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     Win32FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #20
0
 internal static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPTStr)] string lpFileName,
     FileAccess dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #21
0
 public static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(
     string lpFileName,
     FileAccess dwDesiredAccess,
     int dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     Win32FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #22
0
 public static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPTStr)] string lpFileName,
     [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
     [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
     IntPtr lpSecurityAttributes,  // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero
     [MarshalAs(UnmanagedType.U4)] CreationDisposition dwCreationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileFlagsAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #23
0
 public WinApiFile(string sFileName,
                   DesiredAccess fDesiredAccess,
                   ShareMode fShareMode,
                   CreationDisposition fCreationDisposition)
 {
     FileName = sFileName;
     Open(fDesiredAccess, fShareMode, fCreationDisposition, FlagsAndAttributes.FILE_FLAG_OVERLAPPED);
 }
コード例 #24
0
 public static extern SafeFileHandle CreateFileW(
     [MarshalAs(UnmanagedType.LPWStr)] string lpFileName,
     [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess,
     [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     [MarshalAs(UnmanagedType.U4)] CreationDisposition dwCreationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileFlagsAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #25
0
 public static extern IntPtr CreateFile(string fileName
                                        , [MarshalAs(UnmanagedType.U4)]              FileAccess fileAccess
                                        , [MarshalAs(UnmanagedType.U4)]               FileShare fileShare
                                        , IntPtr securityAttributes
                                        , [MarshalAs(UnmanagedType.U4)]     CreationDisposition creationDisposition
                                        , FileAttributes flags
                                        , IntPtr template
                                        );
コード例 #26
0
ファイル: Win32.cs プロジェクト: tzf-key/RMZSol
 public static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPWStr)] string fileName,
     [MarshalAs(UnmanagedType.U4)] FileAccess desiredAccess,
     [MarshalAs(UnmanagedType.U4)] FileShare shareMode,
     IntPtr securityAttributes,
     [MarshalAs(UnmanagedType.U4)] CreationDisposition creationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
     IntPtr templateFile);
コード例 #27
0
 public AnnotationRecordOperator(string matFilePath, DesiredAccess desiredAccess,
                                 CreationDisposition creationDisposition)
 {
     _nativeObject = createAnnotationOperator(matFilePath, desiredAccess, creationDisposition);
     if (_nativeObject == IntPtr.Zero)
     {
         throw new ArgumentException();
     }
 }
コード例 #28
0
 public static extern IntPtr CreateFile(
     string lpFileName,                         // ファイル名
     DesiredAccess dwDesiredAccess,             // アクセスモード
     ShareMode dwShareMode,                     // 共有モード
     int lpSecurityAttributes,                  // セキュリティ記述子
     CreationDisposition dwCreationDisposition, // 作成方法
     FlagsAndAttributes dwFlagsAndAttributes,   // ファイル属性
     IntPtr hTemplateFile                       // テンプレートファイルのハンドル
     );
コード例 #29
0
 private static extern IntPtr CreateFileW(
     string lpFileName,
     GenericAccessRights dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileFlagAttribute dwFlagsAndAttributes,
     IntPtr hTemplateFile
     );
コード例 #30
0
 private static extern IntPtr CreateFile(
     string lpFileName,                         // File Name
     DesiredAccess dwDesiredAccess,             // Access Mode
     ShareMode dwShareMode,                     // Shared Mode
     int lpSecurityAttributes,                  // Security Descripter
     CreationDisposition dwCreationDisposition, // Creation
     FlagsAndAttributes dwFlagsAndAttributes,   // Attribute
     IntPtr hTemplateFile                       // Handle
     );
コード例 #31
0
ファイル: Win32USN.cs プロジェクト: yuhisa/duplicati
 public static extern SafeFileHandle CreateFile(
     string lpFileName,
     FileAccess dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr SecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile
     );
コード例 #32
0
 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)));
 }
コード例 #33
0
ファイル: MailSlotBase.cs プロジェクト: pengyancai/cs-util
 private static extern SafeFileHandle CreateFile(
     string lpFileName, // ファイル名 
     DesiredAccess dwDesiredAccess, // アクセスモード 
     ShareMode dwShareMode, // 共有モード 
     int lpSecurityAttributes, // セキュリティ記述子 
     CreationDisposition dwCreationDisposition, // 作成方法 
     FlagsAndAttributes dwFlagsAndAttributes, // ファイル属性 
     IntPtr hTemplateFile // テンプレートファイルのハンドル 
     );
コード例 #34
0
ファイル: Win32Platform.cs プロジェクト: scottwis/tiny
 public static extern IntPtr CreateFile(
     [MarshalAs(UnmanagedType.LPWStr)] String lpFileName,
     FileAccess dwDesiredAccess,
     ShareMode dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     CreateFileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile
     );
コード例 #35
0
ファイル: Win32Platform.cs プロジェクト: dbremner/tiny
 public static extern IntPtr CreateFile(
     [MarshalAs(UnmanagedType.LPWStr)] String lpFileName,
     FileAccess dwDesiredAccess,
     ShareMode dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     CreateFileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile
     );
コード例 #36
0
ファイル: FileWriter.cs プロジェクト: snitsars/Trainings
 internal static extern IntPtr CreateFile(string lpFileName, DesiredAccess dwDesiredAccess, ShareMode dwShareMode, IntPtr lpSecurityAttributes, CreationDisposition dwCreationDisposition, FlagsAndAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);
コード例 #37
0
ファイル: Kernel32.cs プロジェクト: hmemcpy/pinvoke
 public static extern unsafe SafeObjectHandle CreateFile(
     string filename,
     FileAccess access,
     FileShare share,
     [Friendly(FriendlyFlags.In | FriendlyFlags.Optional)] SECURITY_ATTRIBUTES* securityAttributes,
     CreationDisposition creationDisposition,
     CreateFileFlags flagsAndAttributes,
     SafeObjectHandle templateFile);
コード例 #38
0
        /// <summary>
        /// Pass the file handle to the <see cref="System.IO.FileStream"/> constructor. 
        /// The <see cref="System.IO.FileStream"/> will close the handle.
        /// </summary>
        public static SafeFileHandle CreateFileHandle(
            string filePath,
            CreationDisposition creationDisposition,
            FileAccess fileAccess,
            FileShare fileShare)
        {
            filePath = CheckAddLongPathPrefix(filePath);

            // Create a file with generic write access
            var fileHandle =
                PInvokeHelper.CreateFile(
                    filePath,
                    fileAccess,
                    fileShare,
                    IntPtr.Zero,
                    creationDisposition,
                    // Fix by Richard, 2015-04-14.
                    // See https://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx#DIRECTORIES,
                    // See http://stackoverflow.com/q/4998814/107625
                    FileAttributes.BackupSemantics,
                    IntPtr.Zero);

            // Check for errors.
            var lastWin32Error = Marshal.GetLastWin32Error();
            if (fileHandle.IsInvalid)
            {
                throw new Win32Exception(
                    lastWin32Error,
                    string.Format(
                        Resources.ErrorCreatingFileHandle,
                        lastWin32Error,
                        filePath,
                        CheckAddDotEnd(new Win32Exception(lastWin32Error).Message)));
            }

            // Pass the file handle to FileStream. FileStream will close the handle.
            return fileHandle;
        }
コード例 #39
0
 internal static extern SafeFileHandle CreateFile(
     [MarshalAs(UnmanagedType.LPTStr)] string lpFileName,
     FileAccess dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile);
コード例 #40
0
 /* ---------------------------------------------------------
  * Open and Close
  * ------------------------------------------------------ */
 // [PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
 private static void Open(string sFileName,
     DesiredAccess fDesiredAccess,
     ShareMode fShareMode,
     CreationDisposition fCreationDisposition,
     FlagsAndAttributes fFlagsAndAttributes)
 {
     //System.Security.Principal.WindowsIdentity.Impersonate( x=new System.Security.Principal.WindowsIdentity(
     if (sFileName.Length == 0)
         throw new ArgumentNullException("FileName");
     _hFile = CreateFile(sFileName, fDesiredAccess, fShareMode,
      IntPtr.Zero, fCreationDisposition, fFlagsAndAttributes,
      IntPtr.Zero);
     if (_hFile.IsInvalid)
     {
         _hFile = null;
         ThrowLastWin32Err();
     }
     //_fDisposed = false;
 }
コード例 #41
0
ファイル: File.cs プロジェクト: strnguv/marketplaceconfig
        public static FileStream Open(string lpFilename,
            FileAccess dwDesiredAccess,
            FileShare dwShareMode,
            CreationDisposition dwCreationDisposition)
        {
            var file = new File();
            file.FileAccess = dwDesiredAccess;
            var dwFlagsAndAttributes = FileAttributesEnum.Normal;

            int err = 0;

            for (int i = 0;
                (i < 100) && (IntPtr.Zero == file.Handle) && (0 == err);
                i++)
            {
                err = FileSystem.OpenFile(lpFilename,
                                    dwDesiredAccess,
                                    dwShareMode,
                                    dwCreationDisposition,
                                    dwFlagsAndAttributes,
                                    out file.m_hFile);
            }

            if (HtcRoot.HtcRootAccess.ERROR_LEAST_PRIVILEGED_CHAMBER == err)
            {
                throw new HtcRoot.RootException("CreateFile failed for " + lpFilename + " due to Least Privileged Chamber!");
            }
            if (IntPtr.Zero == file.Handle)
            {
                throw new InteropException("CreateFile returned NULL for " + lpFilename + "! GetLastError: " + err + "\n");
            }
            if (FileSystem.INVALID_HANDLE_VALUE == file.Handle)
            {
                throw new InteropException("CreateFile failed for " + lpFilename + "! GetLastError: " + err + "\n");
            }

            file.m_length = FileSystem.GetFileSize(file.Handle);

            return new FileStream(file);
        }
コード例 #42
0
ファイル: Kernel32.cs プロジェクト: Eucaly/pinvoke
 public static extern SafeObjectHandle CreateFile(
     string filename,
     FileAccess access,
     FileShare share,
     SECURITY_ATTRIBUTES securityAttributes,
     CreationDisposition creationDisposition,
     CreateFileFlags flagsAndAttributes,
     SafeObjectHandle templateFile);
コード例 #43
0
ファイル: DllImport.cs プロジェクト: noahfalk/corefx
 internal static extern Win32Handle CreateFile(String lpFileName,
    FileAccess dwDesiredAccess, FileShare dwShareMode,
    IntPtr securityAttrs, CreationDisposition dwCreationDisposition,
    FileAttributes dwFlagsAndAttributes, IntPtr hTemplateFile);
コード例 #44
0
 private static extern SafeFileHandle CreateFile(
     string lpFileName,
     FileAccess dwDesiredAccess,
     FileShare dwShareMode,
     IntPtr lpSecurityAttributes,
     CreationDisposition dwCreationDisposition,
     FileAttributes dwFlagsAndAttributes,
     IntPtr hTemplateFile
     );
コード例 #45
0
 public static int OpenFile(string lpFilename, FileAccess dwDesiredAccess, FileShare dwShareMode, CreationDisposition dwCreationDisposition, FileAttributesEnum dwFlagsAndAttributes, out IntPtr hFile)
 {
     int ret = m_fileSystemIo.OpenFile(lpFilename, (int)dwDesiredAccess, (int)dwShareMode, (int)dwCreationDisposition, (int)dwFlagsAndAttributes, out hFile);
     return ret;
 }