我必须在“每个人”用户组的某些文件夹上设置权限,因此我需要该组的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布兰科
最佳答案
将输出Sid
参数。在函数原型中向其添加out
关键字。同样,将LPCTSTR
与该函数的Unicode版本一起使用(带有W
后缀的版本)也不安全。一旦将此代码迁移到非Unicode Delphi,您的调用将失败,因为在非Unicode Delphi上LPCTSTR
变为PAnsiChar
,并且您将调用Unicode函数。而是直接使用PWideChar
代替:
function ConvertStringSidToSid(StringSid: PWideChar; out Sid: PSID): BOOL; stdcall;
external Advapi32 name 'ConvertStringSidToSidW';
关于delphi - “系统错误。调用ConvertStringSidToSid()时代码:87英寸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15040199/