NetUserGetLocalGroups - 如何调用它?

时间:2010-12-21 21:26:40

标签: delphi winapi

我正在使用Delphi 2010,JEDI WinAPI和Windows安全代码库(WSCL)的最新版本(来自存储库)。

我不知道如何调用NetUserSetGroups函数。我这样做的方式是抛出异常:

  

地址5B8760BE的访问冲突   在模块'netapi32.dll'中。写的   地址00000000。

以下是我的代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, JwaWindows, JwsclSid;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  NetApiStatus: NET_API_STATUS;
  dwEntriesRead, dwEntriesTotal: PDWORD;
  lgi01: LOCALGROUP_USERS_INFO_0;
  username: PChar;
begin
  username := 'Elise';

  NetApiStatus := NetUserGetLocalGroups(nil, PChar(username), 0, LG_INCLUDE_INDIRECT, PByte(lgi01),
    MAX_PREFERRED_LENGTH, dwEntriesRead, dwEntriesTotal);
  if NetApiStatus = NERR_SUCCESS then
    showmessage('Total groups user belongs to: ' + IntTostr(dwEntriesTotal^));

end;

end.

如果有人可以告诉我如何调用此功能,我将不胜感激?

提前致谢。

1 个答案:

答案 0 :(得分:1)

此代码适用于我:

type
  LocalGroupUsersInfo0Array = array[0..ANYSIZE_ARRAY-1] of LOCALGROUP_USERS_INFO_0;
  PLocalGroupUsersInfo0Array = ^LocalGroupUsersInfo0Array;

procedure TForm3.Button3Click(Sender: TObject);
var
  nas: NET_API_STATUS;
  PLGUIA: PLocalGroupUsersInfo0Array;
  Count: DWORD;
  Total: DWORD;
  i: Integer;
begin
  PLGUIA := nil;
  nas := NetUserGetLocalGroups(nil, PChar('rweijnen'), 0, LG_INCLUDE_INDIRECT,
    PByte(PLGUIA), MAX_PREFERRED_LENGTH, @Count, @Total);

  if (nas =  NERR_Success) or (nas = ERROR_MORE_DATA) then
  begin
    for i := 0 to Count - 1 do
    begin
      Memo1.Lines.Add(Format('name=%s', [PLGUIA^[i].lgrui0_name]));
    end;

    if Assigned(PLGUIA) then
      NetApiBufferFree(PLGUIA);
  end;
end;