NetUserGetLocalGroups - как это назвать? - PullRequest
0 голосов
/ 22 декабря 2010

Я использую 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 Ответ

1 голос
/ 22 декабря 2010

Этот код отлично работает для меня:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...