private static extern SafeFileHandle CreateFile( string lpFileName, FileAccessDword dwDesiredAccess, FileShareDword dwShareMode, IntPtr lpSecurityAttributes, CreationDispositionDword dwCreationDisposition, FileAttributesDword dwFlagsAndAttributes, IntPtr hTemplateFile);
private static SafeFileHandle OpenDirHandle(string dirPath, FileAccessDword accessMode) { var reparsePointHandle = CreateFile(dirPath, accessMode, FileShareDword.Read | FileShareDword.Write | FileShareDword.Delete, IntPtr.Zero, CreationDispositionDword.OpenExisting, FileAttributesDword.BackupSemantics | FileAttributesDword.OpenReparsePoint, IntPtr.Zero); var err = Marshal.GetLastWin32Error(); if (err == WIN32_ERROR_FILE_NOT_FOUND) { throw new DirectoryNotFoundException($"Cannot find the directory '{dirPath}'"); } if (err != 0) { var winex = GetLastWin32Error($"Cannot open directory at path '{dirPath}'"); throw winex.InnerException is IOException ioex ? ioex : winex; } return(reparsePointHandle); }