Разблокировать файл из .net 4 С#

Есть ли возможность разблокировать файл, загружаемый из Интернета из программы С#. Серфинг в Интернете Я узнал, что информация написана в альтернативном потоке файла (NTFS), который содержит текущую информацию о зоне (значение 3 из Интернета и интерпретируется как заблокированное).

Есть ли управляемая возможность либо очистить, либо изменить информацию о зоне (разблокировать) файла или есть ли управляемая функция копирования, которая копирует файлы без информации о зоне? Если нет, как я могу это сделать с PInvoke, но без включения внешней сборки (мне не разрешено делать это в текущем проекте).

Ответ 1

Он хранится в потоке :Zone.Identifier (more < c:\theapp.exe:Zone.Identifier), вам нужно использовать собственные процедуры ввода-вывода для управления ими, вот управляемая обертка.

Ответ 2

На основе вашего ввода я сделал следующий код:

public class FileUnblocker {
    [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool DeleteFile(string name);

    public bool Unblock(string fileName) {
        return DeleteFile(fileName + ":Zone.Identifier");
    }
}

Спасибо Стюарту Данкельду, Alex K (+1) и Свену, чтобы показать мне направление.

UPDATE Я отправил код здесь для обратной связи, если он будет работать надежно в производственной среде. Если кто-то захочет его использовать, проверьте там.