我必须为“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
答案 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';