调用ConvertStringSidToSid()时出现“系统错误。代码:87”

时间:2013-02-23 11:48:00

标签: delphi winapi windows-7 delphi-xe3

我必须为“Everyone”用户组的某个文件夹设置权限,因此我需要此组的SID。当我致电ConvertStringSidToSid()时,我收到错误"System Error. Code: 87 - Parameter is incorrect"。为什么?我的代码出了什么问题?

...
function ConvertStringSidToSid(StringSid: LPCTSTR; Sid: PSID): BOOL; stdcall;
  external Advapi32 name 'ConvertStringSidToSidW';
...
var
  Sid: PSID;
...
  Sid := Nil;
  ConvertStringSidToSid(LPCTSTR('S-1-1-0'), Sid);
...

TIA Branko

1 个答案:

答案 0 :(得分:5)

输出Sid参数。在函数原型中为其添加out关键字。此外,将LPCTSTR与函数的Unicode版本(具有W后缀的版本)一起使用是不安全的。一旦将此代码迁移到非Unicode Delphi,您将失败并调用它,因为LPCTSTR在非Unicode Delphi上变为PAnsiChar并且您将调用Unicode函数。而是直接使用PWideChar代替:

function ConvertStringSidToSid(StringSid: PWideChar; out Sid: PSID): BOOL; stdcall;
  external Advapi32 name 'ConvertStringSidToSidW';