Delphi 绝地WSCL中的RangeCheckError

Delphi 绝地WSCL中的RangeCheckError,delphi,exception,Delphi,Exception,我正在使用在安装期间更改文件夹的权限。 在没有优化的情况下编译时,使用范围检查时,在设置新的访问控制列表时,我会得到一个范围检查 procedure SetFilePermissions(const folder: string); var FileObject: TJwSecureFileObject; DACL: TJwDAccessControlList; begin FileObject := TJwSecureFileObject.Create(folder); try

我正在使用在安装期间更改文件夹的权限。 在没有优化的情况下编译时,使用范围检查时,在设置新的访问控制列表时,我会得到一个范围检查

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;
它看起来像来自JwsclSid.pas中的函数TJwSecurityId.CreateCopyOfSID(),但我不知道为什么

有人有什么线索吗

顺便说一句,我使用的是Delphi2007,wscl代码是sourceforge的最新版本

问候,

-Vegar

原因是PSID结构的声明。它有一个叫做次权威的成员 其定义如下:

子权限:DWORD的数组[0..ANYSIZE_数组-1]

ANYSIZE_数组是一个设置为1的常量,因此数组的范围为0到0。 这是一个转换为Delphi的c结构,但Delphi不知道。通过分配足够的空间以允许阵列中有多个DWORD,可以安全地创建该结构

如果您在Delphi中使用变量c结构并激活范围检查错误,则经常会发生此异常

但是,作为一种解决方案,您可以通过打开JWSCL.inc文件并添加{$R-}来关闭JWSCL的开关。
AFAIK开关仅持续到每个单元的末尾,然后使用默认值。inc文件包含在每个jwscl文件中。

Wow!我不确定是否有人会有答案,但随后它弹出,快速而准确。谢谢可能是因为wimmer是JWSCL的维护者;)维护人员在这附近(我是另一个)不是很好;-)如果你不知道“绝地Windows安全库”,请查看!我同意这很好。谢谢你们两个做得很好。哇。我显然记性不好。又遇到同样的问题了。根本不知道出了什么事。谷歌给我指出了我自己的问题,不过,再次感谢你的回答…:-/