我必须在“每个人”用户组的某些文件夹上设置权限,因此我需要该组的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/

10-15 17:58