2

Windows でコード (c#) を使用していくつかのレジストリ キーからいくつかの値を読み取ろうとしたところ、値を読み取ることができなかった理由は、管理者ユーザーにアクセス許可がないためであることがわかりました。

そのため、問題を引き起こしているレジストリ キーに手動で移動したところ、アクセス許可タブは次のように表示されました。

ここに画像の説明を入力

それで、ユーザー「システム」としてプロセスを実行するにはどうすればよいか考えさせられましたか?それは奇妙に聞こえますが、どうやらシステムユーザーの権利があるようです? 管理者として実行する方法は知っていますが、システムとして実行することも可能かもしれません。

編集

これが私のコードです。基本的に、すべてのレジストリ キーをトラバースしたいと思います。

class Program
{
    // class to store reg key.
    [Serializable]
    [DebuggerDisplay("Name = {Name}, Val = {value}, type={type}")]
    class MyRegKey
    {
        public string Name;
        public object value;
        public RegistryValueKind type;
        public List<MyRegKey> SubKeys = new List<MyRegKey>();
        public List<MyRegKey> Values = new List<MyRegKey>();
    }

    static MyRegKey root = new MyRegKey();

    static void TraverseTree(RegistryKey key, MyRegKey temp)
    {
        foreach (var v in key.GetValueNames())
        {            
            var kind = key.GetValueKind(v);
            var value = key.GetValue(v, null);
            var name = v;

            temp.Values.Add(new MyRegKey { Name = name, value = value, type = kind });
        }

        var x = key.GetSubKeyNames();
        for (var i = 0; i < x.Length; i++)
        {
            RegistryKey productKey;
            productKey = key.OpenSubKey(x[i], false); // <--------- Code crashes here

            if (productKey != null)
            {
                var y = new MyRegKey() { Name = productKey.Name };
                temp.SubKeys.Add(y);
                Foo(productKey, y);
            }
        }        
    }

    public static void Main()
    {

        var key = Registry.LocalMachine;

        root.Name = key.Name;
        TraverseTree(key, root);
    }
}

そのコードを管理者として実行しています...

そして、これは私のプログラムがどのようにクラッシュし、権限がないことを示しているかの画像です: ここに画像の説明を入力

4

1 に答える 1

1

PsExec -sはシステムアカウントでリモートプロセスを実行します

C:\Windows\system32>psexec -i -d -s cmd

PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com


cmd started on SERGMATCOMP with process ID 5356.

PID5356を使用したcmdからの出力

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>whoami
nt authority\system
于 2013-02-26T12:57:50.297 に答える