调用ConvertStringSidToSid()时出现"系统错误.代码:87"

Bra*_*nko 1 delphi winapi windows-7 delphi-xe3

我必须在"Everyone"用户组的某个文件夹上设置prmissions,所以我需要这个组的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);
...
Run Code Online (Sandbox Code Playgroud)

TIA Branko

TLa*_*ama 5

Sid参数被输出.out在函数原型中添加关键字.此外,使用LPCTSTRUnicode版本的函数(带W后缀的版本)也不安全.一旦你迁移此代码,以非Unicode德尔福,你会失败,其呼叫,因为LPCTSTR成为PAnsiChar非Unicode Delphi和你会打电话Unicode的功能.而是直接使用PWideChar:

function ConvertStringSidToSid(StringSid: PWideChar; out Sid: PSID): BOOL; stdcall;
  external Advapi32 name 'ConvertStringSidToSidW';
Run Code Online (Sandbox Code Playgroud)