Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Реестр XP   Найти похожие ветки 

 
Serge_   (2004-02-08 23:41) [0]

Проблема в следующем:
Есть некие ключи , при открытии которых
функция RegOpenKeyEx возвращает ERROR_SUCCESS
но при попытке вызвать RegEnumKeyEx возникает исключение.
СРАЗУ: это возникает не только при KEY_ALL_ACCESS но и при KEY_READ.

Я так понимаю что надо использовать функцию RegSetKeySecurity или RegGetKeyScurity чтобы пропустить этот ключ
но я не нашел документации с примерами.
Может быть кто нибудь сталкивалься с такой проблемой, подскажите решение пожалуйста.

Сергей.


 
Игорь Шевченко ©   (2004-02-09 00:17) [1]

Пример ключа в студию


 
Serge_   (2004-02-09 03:11) [2]

HKEY_LOCAL_MACHINE\SECURITY\Policy\Accounts


 
Serge_   (2004-02-09 03:14) [3]

А заодно и код:

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;


 
Morfein ©   (2004-02-09 03:16) [4]

исключения в WINAPI не возникают никогда. ну если не никогда, то в 99,9% случаев точно не возникают.


 
Игорь Шевченко ©   (2004-02-09 10:13) [5]

Где анализ ошибки ?
if X <> ERROR_SUCCESS then
 ShowMessage(SysErrorMessage(X))


 
Serge_   (2004-02-10 09:19) [6]

Какой анализ????
Я говорю там исключение, исключение возникает работа функции прерывается, у тебя есть XP ??
проверь, попробуй рекурсивно просканировать реестр
(HKEY_LOCAL_MACHINE) и убедись...

Morfein - какие исключения в WINAPI, морфи ты о чем?


 
Serge_   (2004-02-10 09:22) [7]

(Морфейну) Если бы это была ошибка внутри ADVAPI.DLL
то она бы возникала и в других программах, но не возникает.
(Извини за грубый тон предыдущего сообщения.)


 
Игорь Шевченко ©   (2004-02-10 12:43) [8]

Serge_   (10.02.04 09:19)


> Какой анализ????
> Я говорю там исключение, исключение возникает работа функции
> прерывается, у тебя есть XP ??
> проверь, попробуй рекурсивно просканировать реестр
> (HKEY_LOCAL_MACHINE) и убедись...


Regedit же нормально все ключи открывает. В чем мне надо убеждаться ?
Приводишь конкретный пример ключа и конкретную строчку кода, при выполнении которой возникает исключение, предварительно сам смотришь отладчиком, не передаешь ли ты в функцию недопустимые параметры.
Я за тебя отладчиком работать не собираюсь.


 
BiN ©   (2004-02-10 12:53) [9]

а тут и без отладчика все ясно

поставь Len:=MaxSubKeyLen + 1;
до
s:=VirtualAlloc(nil,Len,mem_commit,page_readwritE);


 
Игорь Шевченко ©   (2004-02-10 13:16) [10]

BiN ©   (10.02.04 12:53)

И не лень в чужом коде компилятором работать ? :)


 
BiN ©   (2004-02-10 13:17) [11]

да это на глаз было трудно не заметить :)



Страницы: 1 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
14-1080070794
Добрые пчелы
2004-03-23 22:39
2004.04.18
ИМХО, фраза: "Сайту "Мастера Делфи" нужны рекламодатели"


3-1079447958
race1
2004-03-16 17:39
2004.04.18
adodataset.close


14-1080413355
PVOzerski
2004-03-27 21:49
2004.04.18
NTLDR is missing


1-1080631571
_Andy_
2004-03-30 11:26
2004.04.18
Outlook SideBar?


6-1076770370
Unax
2004-02-14 17:52
2004.04.18
SOCK_RAW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский