Получить неизменяемый раздел реестра [duplicate]

Измените <view на <View, потому что view не находится в пустом представлении. Это для пользовательского представления, определенного через class attr, как показано ниже:

<view
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    class="com.your.package.YourCustomView" />

И вы получили

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference

из-за LayoutInflater пытается разобрать class attr:

LayoutInflater Исходный код

//...
View createViewFromTag(View parent, String name, Context context, AttributeSet attrs,
        boolean ignoreThemeAttr) {
    if (name.equals("view")) { // line 724
        name = attrs.getAttributeValue(null, "class"); // line 725
    }

    // Apply a theme wrapper, if allowed and one is specified.
    if (!ignoreThemeAttr) {
        final TypedArray ta = context.obtainStyledAttributes(attrs, ATTRS_THEME);
        final int themeResId = ta.getResourceId(0, 0);
        if (themeResId != 0) {
            context = new ContextThemeWrapper(context, themeResId);
        }
        ta.recycle();
    }

    if (name.equals(TAG_1995)) { // line 738
        // Let's party like it's 1995!
        return new BlinkLayout(context, attrs);
    }
//...
  • В строке 724 он проверяет, что ваш тэг view и получает true
  • Вкл. строка 725 пытается получить класс через class attr и получает null
  • В строке 738 он пытается проверить тэг blink и получает сбой

Кроме того, есть любопытная вещь, разработчики Android добавили пасхальное яйцо, вы можете попробовать:

<view
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    class="blink">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Some text" />
</view>
3
задан skaffman 17 December 2010 в 18:42
поделиться

3 ответа

начать с win7 существует недокументированный путь - нужно вызвать ZwQueryKey с KeyFlagsInformation . с этим мы можем запросить ключевые волатильные или нет, также - ключевые являются символической ссылкой на другой ключ. код может выглядеть так:

struct KEY_CONTROL_FLAGS_INFO_W7  // KeyFlagsInformation for Win7
{
    ULONG ControlFlags[3];
};

#define KEY_CTRL_FL_W7_01__IS_VOLATILE                                 0x01
#define KEY_CTRL_FL_W7_01__SYM_LINK                                    0x02


    HKEY hKey;
    LSTATUS r = RegOpenKeyEx(HKEY_CURRENT_USER, 
        L"Volatile Environment", 0, KEY_READ, &hKey);
    if (r == NOERROR)
    {
        ULONG cb;
        KEY_CONTROL_FLAGS_INFO_W7 kcf;

        if (0 <= ZwQueryKey(hKey, KeyFlagsInformation, &kcf, sizeof(kcf), &cb))
        {
            if (kcf.ControlFlags[1] & KEY_CTRL_FL_W7_01__IS_VOLATILE)
            {
                DbgPrint("key is volatile\n");
            }

            if (kcf.ControlFlags[1] & KEY_CTRL_FL_W7_01__SYM_LINK)
            {
                DbgPrint("key is link\n");
            }
        }
        RegCloseKey(hKey);
    }
2
ответ дан RbMm 18 August 2018 в 19:25
поделиться
  • 1
    @eryksun - эти флаги найдены не мной. и я не знаю, как это произошло. несмотря на то, что здесь KEY_FLAGS_INFORMATION , определенный как одиночный DWORD, если вы вызываете ZwQueryKey(..KeyFlagsInformation..), мы можем видеть, что размер выходного файла 0xc - так должно быть 3 DWORD. здесь уже сканирует мой фрейм. Я нашел несколько других флагов на некоторых клавишах, но я не могу их интерпретировать - что это значит. может быть, вы можете это знать. – RbMm 7 July 2018 в 09:27

Проверьте параметр параметров реестра здесь:

https://msdn.microsoft.com/en-us/library/dd411617 (v = vs.110) .aspx

Это Enum с Volatile как опция

-2
ответ дан Stephen Walker 18 August 2018 в 19:25
поделиться
  • 1
    Это нужно создать новый раздел реестра - не проверять существующий. – Heath 21 March 2018 в 00:28
  • 2
    Параметры, доступные для RegCreateKey, не применяются к другим функциям RegX. – Ken White 15 June 2018 в 17:24

Один из способов - попытаться создать нелетучий подраздел под проверяемым ключом, используя RegCreateKeyEx. Если ключ действительно волатилен, тогда он с ошибкой будет ERROR_CHILD_MUST_BE_VOLATILE. Даже ShSetValue возвращает ERROR_CHILD_MUST_BE_VOLATILE при попытке установить значение в энергозависимой клавише.

3
ответ дан swatkat 18 August 2018 в 19:25
поделиться
  • 1
    +1. Вы можете использовать простую команду reg.exe для создания подраздела в летучем состоянии в качестве теста, и это приведет к ошибке. Например. reg add HKLM\SOFTWARE\WOW6432Node\volkeytocheck\test "ОШИБКА: невозможно создать стабильный подраздел под летучим родительским ключом. & quot; Если вы проверите с Process Monitor, Reg.exe получит результат для операции RegCreateKey, указанной как «CHILD MUST BE VOLATILE». – HelpingHand 20 June 2017 в 11:02
  • 2
    Ошибка не будет ACCESS_DENIED! Где это оставит вас? – Paul Sanders 16 June 2018 в 05:05
Другие вопросы по тегам:

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