Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка `RangeCheckError` при работе с JEDI WSCL в Delphi 2007: Поиск и устранение

Delphi , Синтаксис , Ошибки и Исключения

Статья: Ошибка RangeCheckError при работе с JEDI WSCL в Delphi 2007

Введение

JEDI WSCL (Windows Security Library) - это компонент для Delphi, предназначенный для работы с безопасностью файлов и каталогов в операционных системах семейства Windows. В процессе разработки программ, использующих JEDI WSCL, разработчики могут столкнуться с различными ошибками, в том числе и с ошибкой RangeCheckError. В данной статье мы рассмотрим, что может быть причиной возникновения такой ошибки при использовании JEDI WSCL в среде разработки Delphi 2007.

Описание проблемы

Разработчик столкнулся с ошибкой RangeCheckError при попытке изменить права доступа к папке во время установки программы. Ошибка возникает при компиляции без оптимизации и с включенной проверкой диапазонов значений (range checking). Проблема обнаружена в процедуре SetFilePermissions, которая использует классы TJwSecureFileObject и TJwDAccessControlList из JEDI WSCL. Ошибка, по всей видимости, связана с функцией TJwSecurityId.CreateCopyOfSID в модуле JwsclSid.pas.

Пример кода

procedure SetFilePermissions(const folder: string);
var
  FileObject: TJwSecureFileObject;
  DACL: TJwDAccessControlList;
begin
  FileObject := TJwSecureFileObject.Create(folder);
  try
     DACL := FileObject.DACL;
     JwInitWellknownSIDs;
     DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce],
       GENERIC_ALL, JwWorldSID, false));
     FileObject.SetDACL(DACL);
  finally
    FileObject.Free;
  end;
end;

Подтвержденное решение

Причиной RangeCheckError является некорректное объявление структуры PSID. В структуре присутствует поле SubAuthority, которое определено как массив с диапазоном от 0 до 0. Это связано с конвертацией C-конструкции в Delphi, и среда разработки не может корректно интерпретировать такой массив. Для решения проблемы можно отключить проверку диапазонов значений в JWSCL, открыв файл jwscl.inc и добавив директиву {$R-}. Обратите внимание, что эта директива действует только до конца текущего модуля, после чего используется значение по умолчанию.

Альтернативный ответ

В качестве альтернативного решения можно обновить версию JEDI WSCL до последней стабильной и проверить наличие исправлений, связанных с ошибкой RangeCheckError.

Заключение

Ошибка RangeCheckError при работе с JEDI WSCL в Delphi 2007 может быть вызвана некорректным использованием структур, связанных с безопасностью файлов. Важно внимательно изучать документацию и примеры использования компонентов JEDI WSCL, а также следить за обновлениями библиотеки. В случае возникновения подобных ошибок, не стесняйтесь обращаться к сообществу разработчиков, которые, как правило, быстро и точно помогут найти решение проблемы.


Примечание: Статья подготовлена на основе реального запроса разработчика и предоставленного решения. Приведенные примеры кода написаны на Object Pascal, что соответствует стандартам программирования в среде Delphi.

Создано по материалам из источника по ссылке.

В статье рассматривается ошибка `RangeCheckError` при использовании компонента JEDI WSCL в Delphi 2007 и предложены способы её устранения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки и Исключения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 12:43:00/0.0054800510406494/1