![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реестр XP
Serge_ © (2004-02-08 23:41:00)Проблема в следующем:
Есть некие ключи , при открытии которых
функция RegOpenKeyEx возвращает ERROR_SUCCESS
но при попытке вызвать RegEnumKeyEx возникает исключение.
СРАЗУ: это возникает не только при KEY_ALL_ACCESS но и при KEY_READ.
Я так понимаю что надо использовать функцию RegSetKeySecurity или RegGetKeyScurity чтобы пропустить этот ключ
но я не нашел документации с примерами.
Может быть кто нибудь сталкивалься с такой проблемой, подскажите решение пожалуйста.
Сергей.
BiN (2004-02-10 13:17:00) [1]да это на глаз было трудно не заметить :)
Игорь Шевченко (2004-02-10 13:16:00) [2]BiN © (10.02.04 12:53)
И не лень в чужом коде компилятором работать ? :)
BiN (2004-02-10 12:53:00) [3]а тут и без отладчика все ясно
поставь Len:=MaxSubKeyLen + 1;
до
s:=VirtualAlloc(nil,Len,mem_commit,page_readwritE);
Игорь Шевченко (2004-02-10 12:43:00) [4]Serge_ (10.02.04 09:19)
> Какой анализ????
> Я говорю там исключение, исключение возникает работа функции
> прерывается, у тебя есть XP ??
> проверь, попробуй рекурсивно просканировать реестр
> (HKEY_LOCAL_MACHINE) и убедись...
Regedit же нормально все ключи открывает. В чем мне надо убеждаться ?
Приводишь конкретный пример ключа и конкретную строчку кода, при выполнении которой возникает исключение, предварительно сам смотришь отладчиком, не передаешь ли ты в функцию недопустимые параметры.
Я за тебя отладчиком работать не собираюсь.
Serge_ (2004-02-10 09:22:00) [5](Морфейну) Если бы это была ошибка внутри ADVAPI.DLL
то она бы возникала и в других программах, но не возникает.
(Извини за грубый тон предыдущего сообщения.)
Serge_ (2004-02-10 09:19:00) [6]Какой анализ????
Я говорю там исключение, исключение возникает работа функции прерывается, у тебя есть XP ??
проверь, попробуй рекурсивно просканировать реестр
(HKEY_LOCAL_MACHINE) и убедись...
Morfein - какие исключения в WINAPI, морфи ты о чем?
Игорь Шевченко (2004-02-09 10:13:00) [7]Где анализ ошибки ?
if X <> ERROR_SUCCESS then
ShowMessage(SysErrorMessage(X))
Morfein (2004-02-09 03:16:00) [8]исключения в WINAPI не возникают никогда. ну если не никогда, то в 99,9% случаев точно не возникают.
Serge_ (2004-02-09 03:14:00) [9]А заодно и код:
var
Form1: TForm1;
TotalKeys:DWORD;
implementation
{$R *.dfm}
procedure EnumAllKeys(K:HKEY;Name:string);
Label Leave;
var KK:HKEY;
Len,NumSubKeys,MaxSubKeyLen,NumValues,MaxNameValueLen,MaxValueLen:DWORD;
NumSubKeys_,i:integer;
NewName:String;
s:pchar;
x:Integer;
begin
form1.Label1.Caption:=name;
form1.Label2.Caption:=inttostr(TotalKeys);
if (totalkeys mod 50)= 0 then Application.processmessages;
Inc(TotalKeys);
x:=RegOpenKeyEx(k,Pchar(Name),0,KEY_ALL_ACCESS,kk);
if x<>ERROR_SUCCESS then Goto Leave;
//RegGetKeySecurity(kk,
x:=RegQueryInfoKey(kk,nil,nil,nil,@NumSubKeys,@MaxSubKeyLen,nil,@NumValues,@MaxNameValueLen,
@MaxValueLen,nil,nil);
Showmessage(inttostr(x));
if x<>ERROR_SUCCESS then goto Leave;
s:=VirtualAlloc(nil,Len,mem_commit,page_readwritE);
NumSubKeys_:=NumSubKeys;
for i:=0 to NumSubKeys_-1 do begin
Len:=MaxSubKeyLen + 1;
x:=RegEnumKeyEx(kk,i,Pchar(s),Len,nil,nil,nil,nil);
if x<>ERROR_SUCCESS then goto Leave;
//ShowMessage(s+Inttostr(len));
//if s='' then continue;
if Name<>'' then NewName:=Name+'\'+Pchar(S) else NewName:=Pchar(S);
EnumAllKeys(K,NewName);
end;
Leave:
RegCloseKey(kk);
VirtualFree(s,0,mem_release);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TotalKeys:=0;
EnumAllKeys(HKEY_LOCAL_MACHINE,'');
end;
Serge_ (2004-02-09 03:11:00) [10]HKEY_LOCAL_MACHINE\SECURITY\Policy\Accounts
Игорь Шевченко (2004-02-09 00:17:00) [11]Пример ключа в студию