JEDI WSCL中的RangeCheckError

Veg*_*gar 2 delphi exception

我正在使用JEDI WSCL在安装期间更改文件夹的权限.在没有优化的情况下进行编译,并且使用范围检查时,我在设置新的访问控制列表时会进行范围检查.

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;
Run Code Online (Sandbox Code Playgroud)

看起来它来自JwsclSid.pas中的函数TJwSecurityId.CreateCopyOfSID(),但我找不到原因.

有人有任何线索吗?

我正在使用Delphi 2007,顺便说一下,wscl代码是sourceforge的最新代码.

问候,
-Vegar

Chr*_*mer 9

原因是PSID结构的声明.它有一个名为SubAuthority的memeber,定义如下:

SubAuthority:DWORD的数组[0..ANYSIZE_ARRAY - 1];

ANYSIZE_ARRAY是一个设置为1的常量,因此数组的范围是0到0.这是ac构造转换为Delphi但Delphi不知道它.通过分配足够的空间以允许阵列中只有一个DWORD来安全地创建结构.

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

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