In Vista, How Does the FLAGS Switch of REG.EXE Work? В Vista, то каким образом Флаги Переход от REG.EXE работаем?
Note: this content originally from Примечание: это содержание родом из http://mygreenpaste.blogspot.com http://mygreenpaste.blogspot.com . . If you are reading it from some other site, please take the time to visit Если вы читаете это из другого сайта, пожалуйста, время для посещения My Green Paste, Inc Мой зеленый пасты, Inc . . Thank you. Спасибо.
A while back, there was a topic ( А обратно, то теме ( Virtual Registry vs. "Real registry" Виртуальный реестра против "Реал реестра" ) in the ) В Sysinternals Forums Sysinternals Форумы that brought up the question of how to set the virtualization-related flags of a registry key programmatically in Vista, rather than through the use of the REG.EXE tool's FLAGS switch. что подняли вопрос о том, как настроить виртуализации, связанных с флагами ключ реестра программно в Vista, а не через использование REG.EXE инструмента Флаги выключатель. (For more information on the flags, see (Более подробную информацию о флагах, см. Mark Russinovich Марк Руссинович 's article in TechNet Magazine, " "ы TechNet статью в журнал," Inside Windows Vista User Account Control Внутри Windows Vista пользователь счетом "). Even before that topic in the forum, I had wondered how it was done but had not had a chance to explore. It didn't seem that many others were curious about it. That topic had resurrected the idea, but it quickly fell to the bottom of the list. I've finally gotten around to experimenting, and that leads to this write-up. I still don't see much in the way of this discussed anywhere, by searching for terms involved (data types, function param names, etc.), so hopefully this will help someone. (Keep in mind that there very well may be a reason Microsoft hasn't made this available through another, more direct API.) "). Даже до этой темы в форуме, я хотел бы знать, каким образом это было сделано, но не имели возможности исследовать. Оно не похоже, что многие другие любопытные об этом. Эта тема имеет воскрес идея, но она быстро снизился до нижней части списка. Я, наконец, получали примерно на эксперименты, и это приводит к настоящему писать деятельности. Я до сих пор не вижу много способов это обсуждается в любом месте, при помощи поиска слова участие (типы данных, функции парам имен и т.д.), поэтому мы надеемся, это поможет товарищу. (Имейте в виду, что существует вполне может быть причиной Microsoft не сделала это через другой, более прямой API.)
In the referenced topic, I had gotten so far as determining that REG.EXE was doing its work through the use of NtSetInformationKey, an "undocumented" API in NTDLL.DLL. В ссылками тему, я имел достать до сих пор, как определить, что REG.EXE делает свою работу за счет использования NtSetInformationKey, "без документов" API в NTDLL.DLL.
NTSYSAPI
NTSTATUS
NTAPI
NtSetInformationKey( NtSetInformationKey (
IN HANDLE KeyHandle, В справиться KeyHandle,
IN KEY_SET_INFORMATION_CLASS InformationClass, В KEY_SET_INFORMATION_CLASS InformationClass,
IN PVOID KeyInformationData, В PVOID KeyInformationData,
IN ULONG DataLength ); В ULONG DataLength);
After a bit of plonking around in WinDbg, I've come up with the following following details. После немного plonking примерно в WinDbg, я выйти с следующие следующие подробности. REG.EXE calls REG.EXE звонки NtSetInformationKey , specifying a value of 2 for the InformationClass parameter. , С указанием стоимости 2 для InformationClass параметра. This parameter is of type KEY_SET_INFORMATION_CLASS, which wdm.h tells us is an enum: Этот параметр типа KEY_SET_INFORMATION_CLASS, который wdm.h подсказывает нам, является перечисление:
typedef enum _KEY_SET_INFORMATION_CLASS { typedef перечисление _KEY_SET_INFORMATION_CLASS (
KeyWriteTimeInformation,
KeyWow64FlagsInformation,
KeyControlFlagsInformation,
KeySetVirtualizationInformation,
KeySetDebugInformation,
MaxKeySetInfoClass // MaxKeySetInfoClass should always be the last enum MaxKeySetInfoClass / / MaxKeySetInfoClass всегда должна быть последней перечисление
} KEY_SET_INFORMATION_CLASS; KEY_SET_INFORMATION_CLASS);
So the 2 for the InformationClass parameter would correspond to KeyControlFlagsInformation. Так за 2 InformationClass параметр будет соответствовать KeyControlFlagsInformation. WDM.H also suggests that this class has a type that one passes for the KeyInformationData parameter - KEY_CONTROL_FLAGS_INFORMATION: WDM.H также предположить, что этот класс имеет один вид, что пропуска на KeyInformationData параметр - KEY_CONTROL_FLAGS_INFORMATION:
typedef struct _KEY_CONTROL_FLAGS_INFORMATION { typedef структуру _KEY_CONTROL_FLAGS_INFORMATION (
ULONG ControlFlags; ULONG ControlFlags;
} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION; ) KEY_CONTROL_FLAGS_INFORMATION * PKEY_CONTROL_FLAGS_INFORMATION;
We have a basic idea of how to call NtSetInformationKey now. У нас есть основная идея о том, как назвать NtSetInformationKey сейчас. But what are the values that the ControlFlags member of KEY_CONTROL_FLAGS_INFORMATION can be set to? Но какие ценности, которые ControlFlags член KEY_CONTROL_FLAGS_INFORMATION может быть установлена в? It would appear that the following (self-made) enum covers the pertinent flags - at least the ones REG.EXE FLAGS can handle (there may be more): Представляется, что следующее (самодельные) перечисление охватывает соответствующие флаги - по крайней мере, те REG.EXE Флаги может обрабатывать (там может быть больше):
typedef enum _CONTROL_FLAGS { typedef перечисление _CONTROL_FLAGS (
RegKeyClearFlags = 0, RegKeyClearFlags = 0,
RegKeyDontVirtualize = 2, RegKeyDontVirtualize = 2,
RegKeyDontSilentFail = 4, RegKeyDontSilentFail = 4,
RegKeyRecurseFlag = 8 RegKeyRecurseFlag = 8
} CONTROL_FLAGS; CONTROL_FLAGS);
The control flags are a bitmask, so you can OR them to set more than one. Контроля флаги Битовая маска, так что вы можете ИЛИ им устанавливать более, чем один.
Now that we have this information, what's left? Теперь, когда мы есть эта информация, что слева? We need to put it all together in a call to NtSetInformationKey. Нам нужно поставить все это вместе, в призыв к NtSetInformationKey. So, we need to get a pointer to the function in NTDLL.DLL. Итак, нам необходимо получить указатель на функцию в NTDLL.DLL. Then, we can declare a struct of type KEY_CONTROL_FLAGS_INFORMATION, set the ControlFlags member to be what we wish, and open a key to the desired location in the registry, that can be passed to NtSetInformationKey. Тогда мы сможем объявить структуру типа KEY_CONTROL_FLAGS_INFORMATION, устанавливать ControlFlags членом, чего мы хотим и открыть ключом к нужное место в реестре, который может быть передан NtSetInformationKey. In the end, we wind up with something like the following (error handling has been omitted): В конце концов, мы с ветром-то вроде следующего (ошибка обработки был опущен):
typedef NTSYSAPI NTSTATUS (NTAPI* FuncNtSetInformationKey) ( typedef NTSYSAPI NTSTATUS (NTAPI * FuncNtSetInformationKey) (
HANDLE KeyHandle, Ручка KeyHandle,
KEY_SET_INFORMATION_CLASS InformationClass, KEY_SET_INFORMATION_CLASS InformationClass,
PVOID KeyInformationData, PVOID KeyInformationData,
ULONG DataLength ); ULONG DataLength);
//...
FuncNtSetInformationKey ntsik = (FuncNtSetInformationKey)GetProcAddress( FuncNtSetInformationKey ntsik = (FuncNtSetInformationKey) GetProcAddress (
GetModuleHandle( _T("ntdll.dll") ), "NtSetInformationKey" ); GetModuleHandle (_T ( "ntdll.dll")), "NtSetInformationKey");
KEY_CONTROL_FLAGS_INFORMATION kcfi = {0}; KEY_CONTROL_FLAGS_INFORMATION kcfi = (0);
kcfi.ControlFlags = RegKeyDontVirtualize | RegKeyRecurseFlag; kcfi.ControlFlags = RegKeyDontVirtualize | RegKeyRecurseFlag;
HKEY hTheKey = NULL; HKEY hTheKey = NULL;
RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Whatever"), 0, KEY_ALL_ACCESS, &hTheKey ); RegOpenKeyEx (HKEY_LOCAL_MACHINE, _T ( "SOFTWARE \ \ Независимо"), 0, KEY_ALL_ACCESS, и hTheKey);
ntsik( hTheKey, KeyControlFlagsInformation, &kcfi, sizeof( KEY_CONTROL_FLAGS_INFORMATION ) ); ntsik (hTheKey, KeyControlFlagsInformation, и kcfi, sizeof (KEY_CONTROL_FLAGS_INFORMATION));
RegCloseKey( hTheKey ); RegCloseKey (hTheKey);
hTheKey = NULL; hTheKey = NULL;
The code above is the equivalent of invoking REG.EXE FLAGS HKLM\Software\Whatever SET DONT_VIRTUALIZE RECURSE_FLAGS . Выше код является эквивалентом ссылки REG.EXE Флаги HKLM \ Software \ Независимо SET DONT_VIRTUALIZE RECURSE_FLAGS. To clear the flags, just set kcfi.ControlFlags to RegKeyClearFlags (same as REG.EXE FLAGS HKLM\Software\Whatever SET) . Чтобы очистить флаги, просто набор kcfi.ControlFlags к RegKeyClearFlags (так же как REG.EXE Флаги HKLM \ Software \ Независимо SET).
Hopefully, this will prove useful to those that have wished to set these flags programmatically. Мы надеемся, что это окажется полезным для тех, кто хотел бы установить эти флаги программно. In a future post, I hope to explore querying for these flags, ala REG.EXE FLAGS HKLM\Software\Whatever QUERY . В будущем пост, я надеюсь, изучение запросов для этих флагов, АБА REG.EXE Флаги HKLM \ Software \ Независимо от запроса.
Note that this exploration was done on Windows Vista SP1. Заметим, что это исследование было сделано на Windows Vista SP1. I would expect the content here to also apply to Windows Vista (no SP) as well as Windows Server 2008, but... Я бы ожидать, здесь содержание, также распространяются на Windows Vista (без SP), а также Windows Server 2008, но ...
Popularity: 4% Популярность: 4%
Written by «/\/\Ø|ö±ò\/»®©. Автор  "/ \ / \ М ~ | М ¶  ² ± М \ / »  ®  ©. Read more great feeds at is source Подробнее большие каналы на исходный WEBSITE ИНТЕРНЕТ-САЙТ
no comments нет комментариев . .
Read more articles on Читайте больше статей о flags флаги and и NtSetInformationKey NtSetInformationKey and и REG_KEY_DONT_VIRTUALIZE REG_KEY_DONT_VIRTUALIZE and и Sysinternals Forum Sysinternals форум and и reg.exe flags reg.exe флаги and и registry virtualization реестре виртуализации and и reg рег and и REG_KEY_DONT_SILENT_FAIL REG_KEY_DONT_SILENT_FAIL and и Troubleshooting Устранение неполадок and и vista достопримечательность and и windbg windbg and и otherSoftware otherSoftware and и registry реестр and и Virtualization Виртуализация . .
- [+] Digg [+] Digg : Feature this article : Жанр этой статье
- [+] Del.icio.us [+] Del.icio.us : Bookmark this article : Закладка для этой статьи
- [+] Furl [+] Furl : Bookmark this article : Закладка для этой статьи














