Поиск в реестре C #, обратный обход результатов - PullRequest
3 голосов
/ 19 февраля 2012

Я связался с моим Windows Phone после нахождения и использования редактирования реестра, чтобы разрешить доступ к нему через проводник.Моя цель - написать быстрое консольное приложение для выполнения этого редактирования реестра на любом компьютере, к которому он подключен.

ЭТО РЕГИСТРАЦИЯ WINDOWS 7.НЕ ТЕЛЕФОН Вот шаги, которые я пытаюсь выполнить

Пока что я написал код, который будет находить все экземпляры записей реестра устройств, содержащие 'ZuneDriver'

RegistryKey start = Registry.LocalMachine;
    using (RegistryKey root = start.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\USB"))
    {
        string myKey = "ZuneDriver";
        SearchSubKeys(root, myKey);

Проблема здесь в том, что раздел реестра «ZuneDriver» является подразделом ключа «Параметры устройства». Мне потребуется изменить значение.

На данный момент результатыпоиск хранится в:

    static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();

с помощью моей функции поиска:

public static void SearchSubKeys(RegistryKey root, String searchKey)
{
    foreach (string keyname in root.GetSubKeyNames())
    {
        try
        {
            using (RegistryKey key = root.OpenSubKey(keyname))
            {
                if (keyname == searchKey)
                {
                    log.Add(key.Name);
                }


                SearchSubKeys(key, searchKey);
            }
        }
        catch (System.Security.SecurityException)
        {
        }
    }
}

Сохраненный результат выглядит следующим образом:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB\ VID_045E & PID_04EC & MI_00 \ 7 & b85dba6 & 0 & 0000 \ Параметры устройства \ ZuneDriver

Я бы хотел, чтобы у моей программы был доступ к реестру по адресу:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ & & 080_080_080_080_080_0805/0805/080_0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805/0805 \ USB_B_080_0805/0806/45

, чтобы отредактировать значение DWORD с именем 'ShowInShell'

, но для этого необходимо определить \ VID_045E & PID_04EC & MI_00 \ 7 & b85dba6 & 0 & 0000 \ через initial search .....

Любые указатели или предложения очень ценятся:)

Приветствия,

Ben

1 Ответ

0 голосов
/ 19 февраля 2012

Я бы сделал это так:

public static void SearchSubKeys(RegistryKey root, String searchKey)
{
    bool containsKey = false;
    foreach (string keyname in root.GetSubKeyNames())
    {
        try
        {
            using (RegistryKey key = root.OpenSubKey(keyname))
            {
                if (keyname == searchKey)
                {
                    containsKey = true;
                }

                SearchSubKeys(key, searchKey);
            }
        }
        catch (System.Security.SecurityException)
        {
        }
    }
    if(containsKey){
        using (RegistryKey key = root.CreateSubKey("Device Parameters"))
        {
            key.SetValue("ShowInShell", /* your value */, RegistryValueKind.DWord);
        }
    }
}
...