• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Tregistry

  • Автор темы Jeefo
  • Дата начала
J

Jeefo

возник вопрос по работе с реестром, а именно: не пойму как возвращаться на один уровень вверх. то есть например нахожусь в ключе "HKEY_CURRENT_USER\Software\Opera Software\", а мне нужно попасть обратно в "HKEY_CURRENT_USER\Software\". как?
 
B

Barmutik

Сделать OpenKey нужного Вам ключа ...
 
J

Jeefo

ну например нахожусь я в ключе A. в этом ключе есть еще два ключа - B и C. я делаю reg.OpenKey(B, false). теперь я в ключе B. записываю какие то нужные мне данные, а теперь мне требуется попасть в ключ C. если я просто сделаю OpenKey(C, false), то программа будет искать ключ в B (то есть в том ключе, в котором я нахожусь). а мне то нужен ключ, располагающийся в A. у меня есть вариант сделать CloseKey и потом заново пройти весь путь до A, но может быть есть более простой способ? что то типа "вернуться на уровень вверх"?
 
R

root

Для: Jeefo
RTFM =RegEnumKey(Key: HKey; index: Longint; Buffer: PChar;cb: Longint): Longint;) ->index=счетчик
 
J

Jeefo

Для: root

а не могли бы вы написать какой нибудь простейший примерчик с этой функцией, например про то, что я в #3 посте сказал? а то не разберусь, как это работает :)
 
R

root

Для: Jeefo
OK
Пример не мой но суть такая
Код:
procedure TForm1.Button1Click(Sender: TObject); 
var 
MyKey: HKey; { Handle для работы с разделом } 
Buffer : array[0..1000] of char; { Буфер } 
Err, { Код ошибки } 
index : longint; { Индекс подраздела } 
begin 
Err:=RegOpenKey(HKEY_CLASSES_ROOT,'DelphiUnit',MyKey); { Открыли раздел } 
if Err<> ERROR_SUCCESS then 
begin 
MessageDlg('Нет такого раздела !!',mtError,[mbOk],0); 
exit; 
end; 
index:=0; 
{Определили имя первого подраздела } 
Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); 
while err=ERROR_SUCCESS do { Цикл, пока есть подразделы } 
begin 
memo1.lines.add(StrPas(Buffer)); { Добавим имя подраздела в список } 
inc(index); { Увеличим номер подраздела } 
Err:=RegEnumKey(MyKey,index,Buffer,Sizeof(Buffer)); { Запрос } 
end; 
RegCloseKey(MyKey); { Закрыли подраздел } 
end;
 
J

Jeefo

вот вопр такой возник. я как понял в делфи для работы с реестром можно использовать TRegistry, TRegIniFile и еще можно пользоваться процедурами, начинающимися на Reg (ну вот RegEnumKey например, то что перед этим обсуждалось). что такое TRegistry и TRegIniFile я понимаю, это типы, можно объявлять относящиеся к ним переменные и потом использовать функции и процедуры этих типов. а вот что собой представляют функции и процедуры, начинающиеся на Reg? к чему они относятся? чем отличаются от TRegistry и TRegIniFile (вроде с ними те же функции делать можно)?
 
S

Silver Wind

Функции начинающиеся на Reg - это WinAPI функции для работы с реестром (родные, так сказать, для Windows). Ну а классы в Delphi TRegistry, TRegIniFile - это т.н. классы-обертки над родными WinAPI функциями Windows.
Открой исходный код модуля Registry и увидишь, что эти классы лишь предоставляют более удобный способ работы с реестром и сами используют для доступа к реестру Reg* функции.
 
J

Jeefo

Для: Silver Wind
То бишь разница в использовании заключается лишь в удобстве для программиста? Спасибо за объяснение
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!