Здравствуйте Der Teufel, Вы писали:
DT>Привет всем. DT>Вот такая вот задачка. DT>Есть HKEY, надо бы получить че енто за ключ (типа HKEY_LOCAL_MACHINE\Software\Microsoft). DT>Помогите, а....
Как вариант используя RegSaveKey сохранить ключ в файл, а потом разобрать этот файл.
Здравствуйте OlegO, Вы писали:
OO>Здравствуйте Der Teufel, Вы писали:
DT>>Привет всем. DT>>Вот такая вот задачка. DT>>Есть HKEY, надо бы получить че енто за ключ (типа HKEY_LOCAL_MACHINE\Software\Microsoft). DT>>Помогите, а....
OO>Как вариант используя RegSaveKey сохранить ключ в файл, а потом разобрать этот файл.
Ну так конечно можно. Спасибо.
Но это же ИЗВРАТ.
:-)
Здравствуйте Der Teufel, Вы писали:
DT>Здравствуйте OlegO, Вы писали:
OO>>Здравствуйте Der Teufel, Вы писали:
DT>>>Привет всем. DT>>>Вот такая вот задачка. DT>>>Есть HKEY, надо бы получить че енто за ключ (типа HKEY_LOCAL_MACHINE\Software\Microsoft). DT>>>Помогите, а....
OO>>Как вариант используя RegSaveKey сохранить ключ в файл, а потом разобрать этот файл.
DT>Ну так конечно можно. Спасибо. DT>Но это же ИЗВРАТ. DT>:-)
Да изврат не спорю, еще вариант поискать может кто разбирал структуру HKEY'я
из нее наверняка можно все вытащить.
Здравствуйте OlegO, Вы писали:
DT>>>>Привет всем. DT>>>>Вот такая вот задачка. DT>>>>Есть HKEY, надо бы получить че енто за ключ (типа HKEY_LOCAL_MACHINE\Software\Microsoft). DT>>>>Помогите, а....
OO>Да изврат не спорю, еще вариант поискать может кто разбирал структуру HKEY'я из нее наверняка можно все вытащить.
HKEY — это handle, вся его структура — это 32 бита.
В NT требуемую информацию можно получить с помошью native функции ZwQueryKey:
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryKey(
IN HANDLE KeyHandle,
IN KEY_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG KeyInformationLength,
OUT PULONG ResultLength
);
typedef enum _KEY_INFORMATION_CLASS {
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation,
KeyNameInformation
} KEY_INFORMATION_CLASS;
typedef struct _KEY_BASIC_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG NameLength;
WCHAR Name[1]; // Variable length string
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
(c) Windows NT/2000 Native API Reference, Gary Nebbett.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте OlegO.
VD>Интересно, а как удается получить хандл не передавая пути к ключу? Может проще запоминать, что открывал?
Так, прости, каждый может. Надо сначала сделать себе трудностей, а потом самоотверженно их решать.
-- Alex Fedotov
Re[6]: Как получить имя ключа, имея HKEY?
От:
Аноним
Дата:
05.08.05 10:36
Оценка:
VD>>Интересно, а как удается получить хандл не передавая пути к ключу? Может проще запоминать, что открывал?
Здравствуйте, Аноним, Вы писали:
VD>>>Интересно, а как удается получить хандл не передавая пути к ключу? Может проще запоминать, что открывал?
А>Очень просто — SetupDiOpenDevRegKey например
Ну так и продолжай юзать SetupDi...
ИМХО, либо ты сразу начинаешь лазить по реестру сам, либо до конца продолжаешь использовать Setup API
Здравствуйте, Alex Fedotov, Вы писали:
AF>Здравствуйте OlegO, Вы писали:
DT>>>>>Привет всем. DT>>>>>Вот такая вот задачка. DT>>>>>Есть HKEY, надо бы получить че енто за ключ (типа HKEY_LOCAL_MACHINE\Software\Microsoft). DT>>>>>Помогите, а....
OO>>Да изврат не спорю, еще вариант поискать может кто разбирал структуру HKEY'я из нее наверняка можно все вытащить.
AF>HKEY — это handle, вся его структура — это 32 бита.
AF>В NT требуемую информацию можно получить с помошью native функции ZwQueryKey:
AF>
X>Возможен ли вызов ZwQueryKey в пользовательском режиме? Или только в режиме ядра?
А вы посмотрите экспорты ntdll и узнаете. Там функции — парами Nt и Zw. В ядре префикс — имеет большое значение, в ring3 это псевдонимы. Я для ring3 использовал бы вызовы с префиксом Nt, хотя это вкусовой момент.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте OlegO.
VD>Интересно, а как удается получить хандл не передавая пути к ключу?
IEGetWriteableHKCU
Re: Как получить имя ключа, имея HKEY?
От:
Аноним
Дата:
22.01.09 14:37
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:
AF>Здравствуйте OlegO, Вы писали:
AF>В NT требуемую информацию можно получить с помошью native функции ZwQueryKey
Такой вопрос: ZwQueryKey в KEY_BASIC_INFORMATION возвращает только короткое имя ключа, указанного в KeyHandle, т.е. если открыт ключ HKEY_LOCAL_MACHINE\Software\Microsoft, то KEY_BASIC_INFORMATION будет содержать имя Microsoft. А как получить полное имя или HKEY родительского ключа?
А>Такой вопрос: ZwQueryKey в KEY_BASIC_INFORMATION возвращает только короткое имя ключа, указанного в KeyHandle, т.е. если открыт ключ HKEY_LOCAL_MACHINE\Software\Microsoft, то KEY_BASIC_INFORMATION будет содержать имя Microsoft. А как получить полное имя или HKEY родительского ключа?
NtQueryObject() с флагом ObjectNameInformation, расположенная в ntdll.dll:
NTSYSAPI
NTSTATUS
NTAPI
NtQueryObject (
IN HANDLE ObjectHandle OPTIONAL,
IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
OUT PVOID ObjectInformation,
IN ULONG Length,
OUT PULONG ResultLength );
typedef enum _OBJECT_INFORMATION_CLASS
{
ObjectBasicInformation, // Result is OBJECT_BASIC_INFORMATION structure
ObjectNameInformation, // Result is OBJECT_NAME_INFORMATION structure
ObjectTypeInformation, // Result is OBJECT_TYPE_INFORMATION structure
ObjectAllInformation, // Result is OBJECT_ALL_INFORMATION structure
ObjectDataInformation // Result is OBJECT_DATA_INFORMATION structure
}
OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
typedef struct _OBJECT_NAME_INFORMATION
{
UNICODE_STRING ObjectName;
}
OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;