Проблемы использования TRegistry под NT/2000/XP

Материал из DRKB

Проблемы использования TRegistry под NT/2000/XP[править | править код]

При использовании компонента TRegistry под NT пользователь с правами доступа ниже чем "Администратор" не может получить доступа к информации реестра в ключе HKEY_LOCAL_MACHINE. Как это обойти?

Проблема вызвана тем, что TRegistry всегда открывает реестр с параметром KEY_ALL_ACCESS (полный доступ), даже если необходим доступ KEY_READ (только чтение). Избежать этого можно используя функции API для работы с реестром (RegOpenKey и т.п.), или создать новый класс из компонента TRegestry, и изменить его так чтобы можно было задавать режим открытия реестра.


Вообще-то можно ничего не переписывать:

Reg := TRegistry.Create(KEY_READ);

т.е. у TRegistry есть два конструктора - один без параметра, тогда доступ будет KEY_ALL_ACCESS, а другой конструктор - с параметром...

Примечание к примечанию Vit Дополнительные конструкторы появились только в последних версиях Дельфи


Author: p0s0l
ID: 02271



Проблема вызвана тем, что TRegistry всегда открывает реестр с параметром KEY_ALL_ACCESS (полный доступ), даже если необходим доступ KEY_READ (только чтение). Избежать этого можно используя вместо TRegistry.OpenKey - TRegistry.OpenKeyReadOnly

В справке про TRegistry указано неверно, что ключ открывается всегда с параметром KEY_ALL_ACCESS. В случае если открывать через TRegistry.OpenKeyReadOnly он откроется с параметром KEY_READ


ID: 02272