Как обнаружить, включен ли контроль учётных записей Vista?

Этот класс генерирует циклы, когда вы запускаете их методы получения. Чтобы их сломать, нужно использовать аннотацию JsonBackReference. Ваш mixin может выглядеть так:

@JsonIgnoreProperties(ignoreUnknown = true)
abstract class DefaultMutableTreeNodeMixIn {

    @JsonCreator
    public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject) {
    }

    @JsonCreator
    public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject, @JsonProperty boolean allowsChildren) {
    }

    @JsonProperty("childCount")
    abstract int getChildCount();

    @JsonProperty("depth")
    abstract int getDepth();

    @JsonProperty("firstChild")
    @JsonBackReference
    abstract TreeNode getFirstChild();

    @JsonProperty("firstLeaf")
    @JsonBackReference
    abstract DefaultMutableTreeNode getFirstLeaf();

    @JsonProperty("lastChild")
    @JsonBackReference
    abstract TreeNode getLastChild();

    @JsonProperty("lastLeaf")
    @JsonBackReference
    abstract DefaultMutableTreeNode getLastLeaf();

    @JsonProperty("leafCount")
    abstract int getLeafCount();

    @JsonProperty("level")
    abstract int getLevel();

    @JsonProperty("nextLeaf")
    abstract DefaultMutableTreeNode getNextLeaf();

    @JsonProperty("nextNode")
    abstract DefaultMutableTreeNode getNextNode();

    @JsonProperty("nextSibling")
    abstract DefaultMutableTreeNode getNextSibling();

    @JsonProperty("parent")
    abstract TreeNode getParent();

    @JsonProperty("path")
    @JsonBackReference
    abstract TreeNode[] getPath();

    @JsonProperty("previousLeaf")
    abstract DefaultMutableTreeNode getPreviousLeaf();

    @JsonProperty("previousNode")
    abstract DefaultMutableTreeNode getPreviousNode();

    @JsonProperty("previousSibling")
    abstract DefaultMutableTreeNode getPreviousSibling();

    @JsonProperty("siblingCount")
    abstract int getSiblingCount();

    @JsonProperty("isLeaf")
    abstract boolean isLeaf();

    @JsonProperty("isRoot")
    abstract boolean isRoot();
}

Но, вероятно, самый лучший и самый OOP способ - это создать новый POJO, представляющий ваше дерево, готовое к сериализации и без циклов.

22
задан Andrei Belogortseff 18 September 2008 в 18:41
поделиться

5 ответов

Этот ключ реестра должен сказать Вам:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

Значение EnableLUA (DWORD)

1 включило / 0, или пропавшие без вести отключили

, Но это предполагает, что Вы имеете права считать его.

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

проблемой здесь является больше, "почему необходимо знать" - она имеет влияние на ответ. Действительно, нет никакого API, потому что с точки зрения поведения ОС, что имеет значение, то, если пользователь является администратором или не - как они принимают решение защитить себя, поскольку администратор является их проблемой.

18
ответ дан 29 November 2019 в 05:13
поделиться

Это сообщение имеет пример кода в C#, чтобы протестировать, если контроль учётных записей идет и если текущему приложению дали поднятые права. Можно загрузить код и интерпретировать по мере необходимости. Также связанный существует образец, который показывает то же в C++

http://www.itwriting.com/blog/198-c-code-to-detect-uac-elevation-on-vista.html

, код в том сообщении только читает из реестра. Если контроль учётных записей включен, возможности - Вы, может не иметь прав считать это из реестра.

4
ответ дан 29 November 2019 в 05:13
поделиться

Можно сделать это исследовать значение DWORD EnableLUA в следующем ключе реестра:

HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System

, Если значение 0 (или не существует) тогда контроль учётных записей ВЫКЛЮЧЕН. Если это присутствует и является ненулевым, то контроль учётных записей идет:

BOOL IsUacEnabled( )
{
    LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
    LPCTSTR pszValue = _T("EnableLUA");
    DWORD dwType = 0;
    DWORD dwValue = 0;
    DWORD dwValueSize = sizeof( DWORD );

    if ( ERROR_SUCCESS != SHGetValue( HKEY_LOCAL_MACHINE, pszSubKey, pszValueOn, 
        &dwType, &dwValue, &dwValueSize) )
    {
            return FALSE;
    }

    return dwValue != 0;
} 

Примечание, что, если пользователь изменил состояние контроля учётных записей, но еще не перезапустил компьютер, эта функция возвратит непоследовательный результат.

3
ответ дан 29 November 2019 в 05:13
поделиться

Проверьте на значение реестра в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

, который определяет значение EnableLUA, активен ли контроль учётных записей.

2
ответ дан 29 November 2019 в 05:13
поделиться

AFAIK, контроль учётных записей является apolicy, устанавливающим на локальном пользователе или группе. Таким образом, можно считать это свойство из.Net. Извините за не наличие большего количества деталей, но я надеюсь, что это помогает

-1
ответ дан 29 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

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