Вопрос по – Обнаружение виртуализации реестра

20

У меня есть набор приложений на C # (v2), и я борюсь с виртуализацией реестра в Win7 (и, в меньшей степени, в Vista).

У меня есть область конфигурации общего реестра, к которой мои приложения должны обращаться в HKLM \ Software \ Company ... До Vista все просто записывалось и считывалось из этого места по мере необходимости.

Код надлежащим образом обнаружил сбои записи в этот раздел реестра и откатился соответствующим образом (вместо этого он записал в HKCU и уведомил пользователя о том, что примененные ими настройки будут влиять только на текущего пользователя).

В Vista виртуализация реестра прервала все это, потому что проверка доступа, которую мы использовали для записи HKLM, была бы «успешной». тихо и виртуализировать в HKCR \ VirtualStore \ Machine ... вместо этого. В этом случае пользователь будет думать, что он сохранил общесистемную конфигурацию, а вместо этого записал только в виртуальное хранилище.

К сожалению, даже попытка перечислить разрешения для ключа HKLM reg в явном виде возвращает результаты, указывающие, что у пользователя есть доступ, независимо от того, есть он или нет.

Когда мы добавили поддержку Vista, мы использовали обходной путь, чтобы выполнить пробную запись в HKLM ... и затем проверить в HKCR \ VirtualStore \ Machine ... то же самое значение и заметить, что виртуализация произошла, если это значение было найдено.

Win7, кажется, сломал это (снова), потому что запросы к явному виртуальному местоположению (HKCR) теперь показывают объединенные результаты из местоположения HKLM, даже если запись не была виртуализирована.

У кого-нибудь есть предложения по работе с этим?

Ограничения:  - Мне нужно решение, которое работает, не требуя повышения прав (когда у меня нет разрешений на уровне администратора, я получу откат к конфигурации для каждого пользователя в HKCU, но мне нужно иметь возможность надежно обнаруживать этот случай).

It needs to work with a v2 C# app (One option I have seen for C++ code is to embed a manifest which disables virtualization for the .exe but I haven't been able to do that in C# V2 see disable folder virtualization in windows).

It needs to work without an "installer" (this precludes the ability to disable virtualization on the registry key that we need ala the REG FLAGS... command).

Вы должны использовать boxedapppacker или boxedapp. Детализировать системный реестр для приложения. MastAvalons
Вы пытались использовать boxedapp? Это может помочь. Удачи! John Smith

Ваш Ответ

4   ответа
0

<trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
   <security>
      <requestedPrivileges>
         <requestedExecutionLevel level="asInvoker">
         </requestedExecutionLevel>
      </requestedPrivileges>
   </security>
</trustInfo>

<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
   <ms_asmv2:security>
      <ms_asmv2:requestedPrivileges>
         <ms_asmv2:requestedExecutionLevel level="asInvoker">
         </ms_asmv2:requestedExecutionLevel>
      </ms_asmv2:requestedPrivileges>
   </ms_asmv2:security>
</ms_asmv2:trustInfo>

Статья MSDN

mt.exe –manifest YourFile.manifest –outputresource:YourApp.exe;#1

Я предпочитаю использовать манифестный подход, а не изменять флаги узлов реестра с помощью reg.exe, как описано вЭта статья

Alberto

2

етствии сэтотError: User Rate Limit Exceeded

Error: User Rate Limit Exceededтакже.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
10

+1 (Почему это вики сообщества, это заслуживает очков!)

Error: User Rate Limit Exceeded

Некоторые существенные частиДокументация по наборам правил виртуализации реестра в MSDN являются:

[as jeffamaphone says] if the manifest has a requestedPrivileges/requestedExecutionLevel set, it's turned off. You dont seem to have ruled out adding a manifest, so can you please indicate why this won't work for you? (You say "I haven't been able to do that in C# V2" - there is an Add Item option to add an application manifest file, and that's available in VS2005) if the exe is running 64 bit, its off by default if it's not an interactive process (such as a service, or hosted in IIS etc.), it's off

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

0

HKCR это сам виртуализированный магазин, сочетаниеHKLM\Software\Classes а такжеHKCU\Software\Classes.

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Пример:

private bool IsAdministrator
{
    get
    {
        WindowsIdentity wi = WindowsIdentity.GetCurrent();
        WindowsPrincipal wp = new WindowsPrincipal(wi);

        return wp.IsInRole(WindowsBuiltInRole.Administrator);
    }
}

Note:Error: User Rate Limit ExceededError: User Rate Limit Exceeded

Похожие вопросы