5

私の問題は、ほとんどの人が抱えている問題とは正反対です。C# でローカルにファイルを生成していますが、それらをブロック済みとしてマークしたいと考えています。そのため、ユーザーが Word や Excel などのアプリケーションでそれらを開くと、それらは「保護モード」で開かれます。

これが「NTFS代替データストリーム」に設定されていることを読みました。C#でこれを模倣する方法を知っている人はいますか?

ここに画像の説明を入力

4

2 に答える 2

5

代替データ ストリームを直接書き込む代わりに、 PersistZoneIdentifierオブジェクトを使用することもできます。

詳細はこちら: http://blogs.msdn.com/b/oldnewthing/archive/2013/11/04/10463035.aspx およびこちら: https://github.com/citizenmatt/UnblockZoneIdentifier

using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

namespace ConsoleApplication3
{
    public enum URLZONE : uint
    {
        URLZONE_LOCAL_MACHINE = 0,
        URLZONE_INTRANET = 1,
        URLZONE_TRUSTED = 2,
        URLZONE_INTERNET = 3,
        URLZONE_UNTRUSTED = 4,
    }

    [ComImport]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("cd45f185-1b21-48e2-967b-ead743a8914e")]
    public interface IZoneIdentifier
    {
        URLZONE GetId();
        void SetId(URLZONE zone);
        void Remove();
    }

    class Program
    {
        static void Main(string[] args)
        {
            object persistZoneId = Activator.CreateInstance(Type.GetTypeFromCLSID(Guid.Parse("0968e258-16c7-4dba-aa86-462dd61e31a3")));
            IZoneIdentifier zoneIdentifier = (IZoneIdentifier)persistZoneId;
            IPersistFile persisteFile = (IPersistFile)persistZoneId;
            zoneIdentifier.SetId(URLZONE.URLZONE_UNTRUSTED);
            persisteFile.Save(@"c:\temp\test.txt", false);
        }
    }
}
于 2013-11-04T21:55:02.207 に答える