Реестр в Windows Vista

Тема в разделе "WASM.WIN32", создана пользователем vg, 13 ноя 2008.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Как программно изменять значения в реестре Windows Vista?
    Если включен "Контроль учетных записей" (UAC) то прога не меняет нужные значения в ветке HKEY_LOCAL_MACHINE, если выключен - всё работает. Встречал в некоторых прогах, при попытке доступа к реестру, система спрашивает стоит ли давать ей доступ к реестру. У меня такого не происходит, всё успешно завершается, но значения не изменяются.
    Раньше, как мне кажется, этого не было, значения изменялись при включенном и выключенном UAC. Может что-то изменилось? Хотя, может и кажется... У кого как?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    vg
    Вы уверены, что при попытке доступа, а не при запуске программы? Информацию о необходимости высоких привилегий приложению можно указать в манифесте.
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Меняются, но не там, где вы ожидаете. Прочитайте про registry virtualization

    Например, вы пишите в HKEY_LOCAL_MACHINE\Software
    система перенаправляет в HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software

    http://msdn.microsoft.com/en-us/library/aa965884.aspx
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    При запуске, я неточно выразился.

    l_inc, Partner
    Похоже то, что нужно. Только у меня что-то не получается. Раньше у меня был такой манифест для поддержки XP-интерфейса (masm32).
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    3.     <dependency>
    4.         <dependentAssembly>
    5.             <assemblyIdentity
    6.                 type="win32"
    7.                 name="Microsoft.Windows.Common-Controls"
    8.                 version="6.0.0.0"
    9.                 processorArchitecture="*"
    10.                 publicKeyToken="6595b64144ccf1df"
    11.                 language="*"
    12.             />
    13.         </dependentAssembly>
    14.     </dependency>
    15. </assembly>
    Теперь делаю так.
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    2. <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    3.     <dependency>
    4.         <dependentAssembly>
    5.             <assemblyIdentity
    6.                 type="win32"
    7.                 name="Microsoft.Windows.Common-Controls"
    8.                 version="6.0.0.0"
    9.                 processorArchitecture="*"
    10.                 publicKeyToken="6595b64144ccf1df"
    11.                 language="*"
    12.             />
    13.         </dependentAssembly>
    14.     </dependency>
    15. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    16.     <security>
    17.       <requestedPrivileges>
    18.         <requestedExecutionLevel
    19.           level="requireAdministrator"
    20.           uiAccess="false"/>
    21.         </requestedPrivileges>
    22.        </security>
    23.   </trustInfo>
    24. </assembly>
    Как правильно должен выглядеть манифест с нужными привилегиями?
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    а если через RegSetKeySecurity?
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Дело не в секюрити, а в Integrity level.
    http://msdn.microsoft.com/en-us/library/bb625964.aspx
     
  7. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Кто-нибудь уже использовал в своих программах, написанных на masm32, манифест с указанием высоких привилегий?
     
  8. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Получилось!!! Путём подкулючения внешнего манифеста (создание файла с именем типа "application.exe.manifest" в одной папке с исполняемым модулем). Код в посте №4 правильный.
    Но меня не совсем удовлетворяет то, что манифест нужно таскать отдельным файлом. Хотелось бы подключать манифест через ресурсы. Судя по всему дело в указываемом номере ресурса.
    Раньше (для поддержки XP-GUI) я подключал так
    Код (Text):
    1. 1 24 DISCARDABLE "Res/manifest.xml
    и всё работало.
    Насколько я знаю
    24 - номер группы в ресурсах для манифеста
    1 - номер манифеста для определения версии библиотеки comctl32.dll
    Вероятно, номера могли измениться в новых версиях.

    Кто, что думает по этому поводу? Где-то можно уточнить?