2

代替テキスト http://www.freeimagehosting.net/uploads/b350914deb.png

ユーザーとローカルサービスとネットワークサービスのリストを取得したい

4

2 に答える 2

8

WMIにはWin32_UserAccountクラスがありますが、それを列挙すると、と同じリストがNetEnumUsers生成され、「ローカルサービス」や「ネットワークサービス」などの組み込みのセキュリティプリンシパルではなく、(多かれ少なかれ)「通常の」アカウントのみが生成されます。

NetLocalGroupEnumとを使用してすべてを取得NetLocalGroupGetMembersできますが、WMI経由ではなく(少なくともAFAIK)、Win32APIを直接操作できるものから取得する必要があります。それでも役立つ場合は、グループとメンバーを一覧表示するサンプルコードを次に示します。

#define UNICODE 
#include <windows.h>
#include <lmaccess.h>
#include <lmapibuf.h>

#include <iostream>

int main() {

    LOCALGROUP_INFO_0 *l_info;
    DWORD read;
    DWORD total;

    NetLocalGroupEnum(NULL, 
                    0, 
                    (unsigned char **)&l_info,
                    MAX_PREFERRED_LENGTH,
                    &read,
                    &total,
                    NULL);

    std::wcout << L"Local Groups\n";

    for (int i=0; i<read; i++) {
        std::wcout << l_info[i].lgrpi0_name << std::endl;

        LOCALGROUP_MEMBERS_INFO_1 *members;
        DWORD entries, total_entries;

        NetLocalGroupGetMembers(NULL, 
                                l_info[i].lgrpi0_name, 
                                1,
                                reinterpret_cast<BYTE **>(&members),
                                MAX_PREFERRED_LENGTH,
                                &entries, 
                                &total_entries,
                                NULL);

        for (int mem_num = 0; mem_num<entries; mem_num++)
            std::wcout << L"\t" << members[mem_num].lgrmi1_name << L"\n";
        NetApiBufferFree(members);
    }


    NetApiBufferFree(l_info);

    GROUP_INFO_0 *g_info;

    NetGroupEnum(NULL, 
                0, 
                (unsigned char **)&g_info,
                MAX_PREFERRED_LENGTH,
                &read,
                &total,
                NULL);

    std::wcout << L"\nGlobal Groups\n";

    for (i=0; i<read; i++)
        std::wcout << g_info[i].grpi0_name << std::endl;

    NetApiBufferFree(g_info);
    return 0;
}
于 2010-05-20T14:02:29.177 に答える
0

これは WSH 経由で実行できます。以下は JavaScript の例です: http://www.winscripter.com/WSH/ADSI/56.aspx

C# のサンプル: http://www.geekzone.co.nz/chakkaradeep/3938

win32 リストのユーザー アカウントを検索して、BING に関するいくつかの回答を見つけました

最後に Microsoft からのサンプル: http://gallery.technet.microsoft.com/ScriptCenter/en-us/827623f5-eb55-4035-8f57-25c4afb444cd

于 2010-05-20T13:47:42.847 に答える