1

我必须为“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布兰科

4

1 回答 1

5

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

function ConvertStringSidToSid(StringSid: PWideChar; out Sid: PSID): BOOL; stdcall;
  external Advapi32 name 'ConvertStringSidToSidW';
于 2013-02-23T12:02:57.787 回答