お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"WindowsNTローカルグループの一覧"




{
WindowsNTのローカルグループの一覧を表示します。
WindowsNT専用です。
NET〜APIの使用方法と、APIヘッダの定義方法のサンプル(のつもり)
処理するサーバ名を引数に指定して起動します。
}
program lgrplst;

uses
  Windows, SysUtils;

type
//コメント部分は元の宣言部分です
//typedef struct _LOCALGROUP_INFO_1 {
//LPWSTRlgrpi1_name;
//LPWSTRlgrpi1_comment;
//} LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, LPLOCALGROUP_INFO_1;
  PLOCALGROUP_INFO_1_Array = ^TLOCALGROUP_INFO_1_Array;
  TLOCALGROUP_INFO_1 = record
    lgrpi1_name: PWideChar;
    lgrpi1_comment: PWideChar;
  end;
  TLOCALGROUP_INFO_1_Array = array [0..65535] of TLOCALGROUP_INFO_1;

const
  netapi32  = 'netapi32.dll';

//#define NET_API_STATUS          DWORD
//NET_API_STATUS
//NetApiBufferFree (
//    LPVOID Buffer
//   );
function NetApiBufferFree(buffer: pointer): DWORD; stdcall;
  external netapi32 name 'NetApiBufferFree';

//NET_API_STATUS
//NetLocalGroupEnum (
//    LPWSTR servername,
//    DWORD level,
//    LPBYTE * bufptr,
//    DWORD prefmaxlen,
//    LPDWORD entriesread,
//    LPDWORD totalentries,
//    LPDWORD resumehandle
//   );
function NetLocalGroupEnum(servername: PWideChar; level: DWORD;
  var bufptr: PLOCALGROUP_INFO_1_Array; prefmaxlen: DWORD;
  var entriesread, totalentries, resumehandle:DWORD): DWORD; stdcall;
  external netapi32 name 'NetLocalGroupEnum';

{$R *.RES}

var
  flRet: DWORD;
  servername: array [0..31] of WideChar;
  bufptr: PLOCALGROUP_INFO_1_Array;
  entriesread,
  totalentries,
  resumehandle:DWORD;
  i: integer;
begin
  StringToWideChar('\\' + ParamStr(1), servername, 32);
  resumehandle := 0;
  repeat
    flRet := NetLocalGroupEnum(servername,
                      1,
                      bufptr,
                      4096, // 根拠のない値です
                      entriesread,
                      totalentries,
                      resumehandle);
    if (flRet = 0) or (flRet = ERROR_MORE_DATA) then
    begin
      for i := 0 to entriesread - 1 do
      begin
        Writeln(WideCharToString(bufptr[i].lgrpi1_name));
        Writeln('  ' + WideCharToString(bufptr[i].lgrpi1_comment));
      end;
    end
    else
    begin
      Writeln('ERROR:' + IntToStr(flRet));
      Halt(flRet);
    end;
    if bufptr <> nil then
    begin
      NetApiBufferFree(bufptr);
      bufptr := nil;
    end;
  until flRet <> ERROR_MORE_DATA;
end.

{
久しぶりに、変わったコードを書いてみたのでアップしてみました。
ここへは初めてのアップなので、問題があったらご指摘ください。
}

                              98/6/22(Mon) 09:15pm  CXJ04762 仁義偉王

Original document by 仁義偉王        氏 ID:(CXJ04762)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum