Реестр Windows из PHP. Команда REGINI – управление доступом к разделам реестра Чтение из реестра
Утилита REGINI.EXE первоначально входила в состав пакета Resource Kit, но, начиная с Windows XP, является стандартным компонентом системного программного обеспечения. Используется в сценариях администрирования для управления доступом к разделам (ключам) реестра на локальном или удаленном компьютере.
Формат командной строки:
REGINI [-m \\machinename | -h hivefile hiveroot] [-i n] [-o outputWidth][-b] textFiles...
Параметры командной строки:
-m \\machinename - имя или адрес удаленного компьютера, на котором будет выполняться изменение разрешений для разделов реестра.
-h - определяет куст реестра на локальном компьютере, для которого будут устанавливаться разрешения.
-i n – смещение текста от первой позиции строки. По умолчанию равно 4
-o outputWidth - максимальный размер строк вывода. По умолчанию соответствует ширине консоли.
-b - определяет режим обратной совместимости с предыдущими версиями REGINI (backward compatible).
textFiles - имена текстовых файлов в кодировке ANSI или Unicode, представляющих собой сценарии для изменения разрешений реестра.
Примеры использования:
regini /? - отобразить краткую справку по использованию команды.
regini acl1reg.txt - выполнить изменения разрешений для разделов (ключей) реестра на локальном компьютере с использованием файла сценариев acl1reg.txt
regini –m \\COMP0 C:\scripts\acl2reg.txt - выполнить изменения разрешений для реестра на удаленном компьютере COMP0 с использованием сценария C:\scripts\acl2reg.txt
Сценарии для утилиты REGINI содержат специальные директивы и параметры, с помощью которых можно управлять доступом к разделам (ключам) реестра Windows. Файлы сценариев представляют собой обычные текстовые файлы, которые можно редактировать, например, с помощью редактора ”Блокнот” (Notepad). Строки сценариев содержат адреса разделов и числовые коды, разделенные пробелами и определяющие разрешения в формате:
(путь к разделу реестра) [разрешения]
Например, строка сценария, устанавливающая разрешения доступа для раздела Adm :
HKEY_LOCAL_MACHINE\Software\Adm
В данном примере, устанавливаются разрешения , расшифровать которые можно с использованием следующей таблицы:
1 - Администратор, полный доступ
2 - Администратор, чтение
3 - Администратор, чтение и запись
4 - Администратор, чтение, запись и удаление
5 - Создатель, полный доступ
6 - Создатель, чтение и запись
7 - Все, полный доступ
8 - Все, чтение
9 - Все, чтение и запись
10 - Все, чтение, запись и удаление
11 - Опытные пользователи, полный доступ
12 - Опытные пользователи, чтение и запись
13 - Опытные пользователи, чтение, запись и удаление
14 - Системный оператор, полный доступ
15 - Системный оператор, чтение и запись
16 - Системный оператор, чтение, запись и удаление
17 - Система, полный доступ
18 - Система, чтение и запись
19 - Система, чтение
20 - Администратор, чтение, особые разрешения
21 - Интерактивные пользователи, чтение, полный доступ
22 - Интерактивные пользователи, чтение
23 - Интерактивные пользователи, чтение, особые разрешения
0 - Нет групп или пользователей, имеющих разрешение на доступ к данному объекту, но владелец объекта может назначить разрешения.
Таким образом, код означает
Администратор, полный доступ
Создатель, полный доступ
Все, чтение и запись
Необходимо учитывать тот факт, что ранее установленные разрешения сбрасываются, и если, после комбинации в сценарии будет использована, например директива:
HKEY_LOCAL_MACHINE\Software\Adm
То это означает, не добавление кода 4 - Администратор, чтение, запись и удаление, к существующим кодам 1 5 9 , а их замена. Для добавления новых разрешений, с сохранением старых, строка должна быть следующего вида:
HKEY_LOCAL_MACHINE\Software\Adm
При добавлении новых ключей или параметров в реестр, в файле сценария первой строкой указывается имя ключа, а второй (последующими) строкой указывается имя параметра, знак равенства, тип данных и значение:
ИМЯ КЛЮЧА
Имя параметра = тип данных значение
Пример файла сценария:
HKEY_CURRENT_USER\TEST
Text=REG_SZ String1
Первая строка указывает имя ключа (подраздела реестра) HKEY_CURRENT_USER\TEST, в который будет записан параметр и в квадратных скобках – код разрешения доступа к нему. Если подраздел TEST не существует, то он будет создан с указанными разрешениями, если существует – то выполнится смена разрешений на указанные в квадратных скобках. Если код разрешений не задан, то разрешения не изменяются. Вторая строка указывает имя и значение параметра, который будет записан в данный ключ реестра. Если параметр text не существует, то он будет создан, если существует, то будет изменено его значение на строку String1 .
Наличие знака равенства = в строке сценария утилита regini.exe интерпретирует как команду на запись параметра в формате
имя = тип значение
Для удаления значения параметра, строка должна иметь вид:
Для удаления самого параметра, используется ключевое слово DELETE
text=DELETE
Под строкой с именем ключа можно располагать несколько команд на изменение или добавление параметров:
text=REG_SZ This is text
Value1=REG_DWORD 0x0A0D
Использование команды REGINI представляет собой определенную опасность, поэтому, прежде чем делать серьезные изменения в системе, рекомендуется выполнить резервное копирование и ознакомиться со способами восстановления Windows.
Если необходимо установить новые разрешения для куста реестра, принадлежащего другой операционной системе, то необходимо учитывать тот факт, что пути к разделам реестра должны указываться относительно имени куста, так например, для изменения разрешения для раздела HKEY_LOCAL_MACHINE\System на доступ команда должна иметь вид:
regini –h D:\oldwin\system32\config\system newacl.txt
А файл newacl.txt должен содержать строку без имени подраздела:
Для просмотра существующих разрешений в командной строке Windows NT/2000 можно использовать утилиту regdmp.exe из состава дополнительных инструментов Resource Kit. В составе более поздних версий ОС Windows, стандартных средств, для просмотра разрешений разделов реестра в командной строке, не имеется.
#include
#include
int regcomp(regex_t *
preg
, const char *
regex
, int
cflags
);
int regexec(const regex_t *
preg
, const char *
string
, size_t
nmatch
,
regmatch_t
pmatch
, int
eflags
);
size_t regerror(int
errcode
, const regex_t *
preg
, char *
errbuf
,
size_t
errbuf_size
);
void regfree(regex_t *
preg
);
ОПИСАНИЕ
Компилирование регулярных выражений POSIX
Функция regcomp () используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью regexec ().regcomp () передаётся указатель на область хранения буферного шаблона preg , указатель на заканчивающуюся null строку regex и флаги cflags , используемые для определения типа компиляции.
Все поиски регулярных выражений должны выполняться с помощью скомпилированного буферного шаблона, поэтому regexec () должна всегда вызываться с адресом буферного шаблона, инициализированного функцией regcomp ().
Значение cflags может состоять из поразрядного or нуля или нескольких следующих значений:
REG_EXTENDED Использовать синтаксис расширенных регулярных выражений POSIX во время интерпретации regex . Если не включён этот флаг, то используется синтаксис простых регулярных выражений POSIX. REG_ICASE Не учитывать регистр. Последующие поиски regexec () с использованием данного буферного шаблона не будут зависеть от регистра. REG_NOSUB Не сообщать положение совпадений. Параметры nmatch и pmatch для regexec () игнорируются, если данный буферный шаблон был скомпилирован с этим включённым флагом. REG_NEWLINE Операторы совпадения с любым символом не совпадают с символом новой строки.Список несовпадающих символов ([^...] ) без символа новой строки не совпадает с новой строкой.
Оператор сравнения по началу строки (^ ) совпадает с пустой строкой сразу после новой строки независимо от того, что eflags , флаги выполнения regexec (), содержат REG_NOTBOL .
Оператор сравнения по концу строки ($) совпадает с пустой строкой до символа начала строки независимо от того, что eflags содержит REG_NOTEOL .
Сравнение с регулярным выражением POSIX
Функция regexec () используется для сравнения строки, завершающейся null, с предварительно обработанным буферным шаблоном preg . Аргументы nmatch и pmatch используются для предоставления информации о местонахождении любых совпадений. Значение eflags может быть поразрядным ИЛИ одного или обоих значений REG_NOTBOL и REG_NOTEOL . Данные значения определяют поведение процесса сравнения так, как описано ниже. REG_NOTBOL Оператор сравнения по началу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ). Этот флаг может использоваться, когда в regexec () передаются отдельные части строки, и начало такой строки в данном случае не должно интерпретироваться как начало новой строки. REG_NOTEOL Оператор сравнения по концу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ).Байтовые смещения
Если REG_NOSUB не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение pmatch должно быть определено так, чтобы иметь, по крайней мере, nmatch элементов. Они заполняются regexec () адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с i -й открытой скобки, сохраняется в pmatch[i] . Адрес совпадения всего регулярного выражения сохраняется в pmatch (заметим, что чтобы вернуть смещения совпадений N подвыражений, значение nmatch должно быть не менее N+1 ). Любые неиспользованные элементы структуры будут содержать значение -1.Структура regmatch_t
, являющаяся типом pmatch
, определена в
Typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
Каждый элемент rm_so , не равный -1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент rm_eo указывает на смещение конца совпадения, которое является первым символом после совпавшего текста.
Сообщение об ошибках POSIX
Функция regerror используется для преобразования кодов ошибок, которые могут быть получены от regcomp () и regexec (), в строки сообщений об ошибках.В regerror передаются: код ошибки errcode , буферный шаблон preg , указатель на символьный буфер строки errbuf и размер буфера строки errbuf_size . Функция возвращает размер errbuf , который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и errbuf , и errbuf_size не равны нулю, то errbuf заполняется первыми errbuf_size - 1 символами сообщения об ошибке и завершается байтом null ("\0").
Освобождение буфера шаблона POSIX
Функция regfree () освобождает память, отведённую буферному шаблону preg во время процесса компиляции с помощью regcomp ().ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция regcomp () возвращает ноль при успешной компиляции или в противном случае код ошибки.Функция regexec () возвращает ноль при совпадении или REG_NOMATCH , если совпадений не было.
ОШИБКИ
Функция regcomp () может возвращать следующие ошибки: REG_BADBR Неправильное использование оператора обратных ссылок. REG_BADPAT Неправильное использование операторов шаблона, таких, как операторы группы или списка. REG_BADRPT Неправильное использование операторов повторения, например, использование «*» в качестве первого символа. REG_EBRACE Непарные скобки в операторах интервала. REG_EBRACK Непарные квадратные скобки в операторах списка. REG_ECOLLATE Неправильный элемент сортировки. REG_ECTYPE Неизвестное имя класса символов. REG_EEND Потенциальная ошибка. Не определена в POSIX.2. REG_EESCAPE Конечная обратная косая черта. REG_EPAREN Непарные круглые скобки в операторах группировки. REG_ERANGE Неправильное использование оператора области: например, конец области появляется прежде её начала. REG_ESIZE Скомпилированное регулярное выражение требует буферный шаблон размером, большим 64 Кб. Это не определено в POSIX.2. REG_ESPACE Для процедур регулярных выражений закончилась память. REG_ESUBREG Неправильная обратная ссылка на подвыражение.Для начала мы усовершенствуем страничку регистрации, добавив возможность загружать аватар. Исходное изображение должно быть формата jpg, gif или png. Так же оно должно быть не более 2 Мб. Не беспокойтесь, после его сжатия скриптом, размер аватара будет около 3 кб и формат jpg. Откройте страницу reg. php и допишите в теге < form > строчку enctype="multipart/form-data" ,как в примере: