ReparsePointAware Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Коллекция служебных функций файлов и каталогов, которые гарантируют, что файлы и папки, с которыми выполняется взаимодействие, не имеют точек повторного анализа Windows по их путям и что пути в коде соответствуют фактическим путям на диске.
Внедрение точек повторного преобразования — это известный или распространенный вектор эксплойтов безопасности. Дополнительные общие сведения о них см. здесь: https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points
Цель этого набора функций — получить дескриптор файла Windows, убедиться, что он находится в ожидаемом пути, а затем выполнить все операции с файлами с помощью одного и того же дескриптора. Проверка файла и выполнение дополнительных операций с использованием пути к файлу не является безопасным шаблоном, так как злоумышленник может воспользоваться гонкой между проверка файла и операцией с файлом на основе пути к файлу. Этот класс атак называется Время проверки и время использования (TOCTOU). Чтобы избежать этого, этот класс будет содержать дескриптор файла и выполнять все операции с дескриптором, как только он будет признан в правильном расположении. Так как все операции основаны на дескрипторове файла, мы знаем, что мы изменяем файл, который мы проверили на правильность.
public static class ReparsePointAware
type ReparsePointAware = class
Public Class ReparsePointAware
- Наследование
-
ReparsePointAware
Методы
CreateDirectory(String) |
Создает все каталоги и подкаталоги по указанному пути. Если канонический путь каталога содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException. |
CreateText(String) |
Создается или открывается файл для записи текста в кодировке UTF-8. При открытии существующего файла он усекается. Если канонический путь файла содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException и ничего не записывается. |
DeleteFile(String) |
Удаляет указанный файл. Если канонический путь к файлу содержит точки повторного анализа Windows, исключение UnauthorizedAccessException возникает и ничего не удаляется. |
GetFinalPath(SafeFileHandle) |
Получите полный канонический путь к заданному объекту SafeFileHandle с каждой точкой повторного выражения. |
HasReparsePoints(SafeFileHandle, String) |
Проверяет, имеет ли объект файловой системы, представленный SafeFileHandle, канонический путь, соответствующий заданному элементу expectedPath. |
MoveFile(String, String) |
Перемещает заданный файл в новое местоположение и разрешает переименование файла. Если канонический путь к файлу содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException. |
OpenFile(String, FileMode, FileAccess, FileShare) |
Открывает System.IO.FileStream по указанному пути с указанным режимом с доступом на чтение, запись или чтение и запись и заданным параметром общего доступа. Если канонический путь к файлу содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException. OpenFile сначала закрепит каталог перед выполнением любых операций с файлами. Если закрепить каталог не удается или каталог является ReparsePoint, будет выдано исключение UnauthorizedAccessException. |
OpenRead(String) |
Открывает для чтения существующий файл. Если канонический путь к файлу содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException. |
OpenWrite(String) |
Открывает существующий файл или создает новый файл для записи. Если канонический путь к файлу содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException. |
PinAndRequireNoReparsePoints(String, Boolean) |
Открывает SafeFileHandle для существующего файла или каталога и подтверждает, что полученный канонический путь соответствует указанному пути. Полученный файл SafeFileHandle имеет значение IDisposable и может использоваться в инструкциях using, чтобы гарантировать, что последующие операции с файлами записываются в пути без точек повторного анализа. |
PinHandle(String, Boolean) |
Принимает дескриптор существующего файла или каталога, чтобы убедиться, что он не может переместиться. |
RequireNoReparsePoints(String, Boolean) |
Вызывает исключение UnauthorizedAccessException, если канонический путь отличается от ожидаемого Пути. |
RequireSamePath(SafeFileHandle, String) |
Вызывает исключение UnauthorizedAccessException, если канонический путь указанного SafeFileHandle отличается от ожидаемого Пути. |
SetFileAttributeNormal(String) |
Проверяет, можно ли удалить файл, установив параметр FileAttribute = Normal. Если не удается задать атрибут, пользователь не имеет прав доступа |
WriteAllText(String, String) |
Создает новый файл, записывает в него указанную строку и затем закрывает файл. Если целевой файл уже существует, он будет переопределен. Если канонический путь файла содержит точки повторного анализа Windows, возникает исключение UnauthorizedAccessException и ничего не записывается. |