Re[2]: Проблеммы с RegCreateKeyEx
От: Healer  
Дата: 28.02.06 16:54
Оценка:
Ок, это я исправил, но вот ведь работать нормально всеравно отказывается.Во первых, функция RegCreateKeyEx возвпащает 1, что как я понял значит ERROR_INVALID_FUNCTION. При этом все остальное, т.е. создание/открытие ключа и вывод соотвествующих сообщений, срабатывает нормально. НО всё это верно до тех пор пока закоментированны след. строки:


var
  phKey: hKey;
  a: word;
  lpClass: PAnsiChar;
  lpdwDisposition: PDWORD;
  flag:boolean;
  rez:integer;
begin
//HSEnablePrivilege('SERESTOREPRIVILEGE');
 // HSEnablePrivilege('SEBACKUPPRIVILEGE');
  RegCreateKeyEx(HKEY_CURRENT_USER, 'Software\TESTAPP',0,lpClass, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS    ,nil,phKey,lpdwDisposition);
  if lpdwDisposition^=REG_CREATED_NEW_KEY then
    begin
      showmessage('Ñîçäàí '+ inttostr(rez));
      flag:=true;
    end;
  if lpdwDisposition^=REG_OPENED_EXISTING_KEY then
    begin
      showmessage('Îòêðûò '+ inttostr(rez)); (*)
      flag:=false;
    end;
end;



где закоментированная функция HSEnablePrivilege выглядит следующим образом:


function HSEnablePrivilege(const PrivilegeName: String): Boolean;
var
 LUID: TLargeInteger;
 Priv: TTokenPrivileges;
 AccessToken: THandle;
 ReturnLen: Cardinal;
 i:integer;
begin
 Result := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,AccessToken);
 if not Result then
      Exit;
 Result := LookupPrivilegeValueA(nil, PChar(PrivilegeName), LUID);
 if not Result then
      Exit;
 Priv.PrivilegeCount := 1;
 Priv.Privileges[0].Luid := LUID;
 Priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
 Result := AdjustTokenPrivileges(AccessToken, false, Priv,
           SizeOf(TTokenPrivileges), nil, ReturnLen);
 i:=1;
end;


Установка соотвествующих привелегий процессу нужна для другой части работы. Если убрать комментарии и дать функциям выполниться часть программы после RegCreateKeyEx просто "игнорируется". Т.е. как я и описывал в первом посте, никакие сообщения не срабатывают, при этом трассировка пробегает по коду, ключ не создается и программа закрывается в строчке (*)
Совсем не понятная для меня ситуация, граничащая с полтергейстом
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.