2012年7月5日星期四

Netapi32.Cpp


///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//本功能可以列出本电脑上的所有的用户,相当于net user的功能,但还有其他的一些信息。
//可以修改其他的参数以便获得更多的信息。
#include <windows.h> 
#include <locale.h>
#include <lm.h>
#pragma comment(lib,"Netapi32.lib")

int wmain(int argc, wchar_t *argv[])
{
  LPUSER_INFO_1 pBuf = NULL;
  DWORD dwEntriesRead = 0;
  DWORD dwTotalEntries = 0;
  DWORD dwResumeHandle = 0;

  setlocale(LC_CTYPE, ".936");

  NetUserEnum(0, 1, FILTER_NORMAL_ACCOUNT, (LPBYTE*)&pBuf, -1, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
  for (int i = 0; i < dwEntriesRead; i++)
  {
    wprintf(L"%s:%s\n", pBuf->usri1_name,pBuf->usri1_comment);
    pBuf++;
  }

  return 0;
}
//made at 2011.12.07
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//本程序的功能是显示本计算机上的所有的组,及其内的成员的一些信息。
//本程序可以实现net localgroup的功能。
#include <windows.h>
#include <lm.h>
#pragma comment (lib, "Netapi32.lib")

int main( int argc, char *argv[ ] )
{
  DWORD read, total, resume = 0;
  LPVOID buff;

  NetLocalGroupEnum(0, 1, (unsigned char **)&buff, -1, &read, &total, &resume);
  PLOCALGROUP_INFO_1 info = (PLOCALGROUP_INFO_1) buff;
  for (int i=0; i<read; i++) 
  {
    printf("GROUP: %S\n",info[i].lgrpi1_name);
    char comment[255];
    WideCharToMultiByte(CP_ACP, 0, info[i].lgrpi1_comment , -1, comment,255,0,0); 
    printf("COMMENT: %s\n",comment);

    //进一步获取组内各个用户的信息。
    DWORD read, total, resume = 0;//覆盖上面的变量。这样做不好,局部变量里面会有两个同名的变量。
    NetLocalGroupGetMembers(0, info[i].lgrpi1_name, 2, (unsigned char **)&buff, 1024, &read, &total, &resume);
    PLOCALGROUP_MEMBERS_INFO_2 info = (PLOCALGROUP_MEMBERS_INFO_2) buff;
    for (unsigned i=0; i<read; i++) 
    {
      printf("\t域\\名:%S\n", info[i].lgrmi2_domainandname);
      printf("\tSID:%d\n", info[i].lgrmi2_sid);
      if (info[i].lgrmi2_sidusage == SidTypeUser)
      {
        printf("\tSIDUSAGE:The account is a user account\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeGroup)
      {
        printf("\tSIDUSAGE:The account is a global group account\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeWellKnownGroup)
      {
        printf("\tSIDUSAGE:The account is a well-known group account (such as Everyone). \n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeDeletedAccount)
      {
        printf("\tSIDUSAGE:The account has been deleted\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeDomain)
      {
        printf("\tSIDUSAGE:SidTypeDomain\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeAlias)
      {
        printf("\tSIDUSAGE:SidTypeAlias\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeInvalid)
      {
        printf("\tSIDUSAGE:SidTypeInvalid\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeComputer)
      {
        printf("\tSIDUSAGE:SidTypeComputer\n");
      }
      else if (info[i].lgrmi2_sidusage == SidTypeLabel)
      {
        printf("\tSIDUSAGE:SidTypeLabel\n");
      }
      else 
      {
        printf("\tSIDUSAGE:未知\n");
      }
      printf("\n");
    }
    NetApiBufferFree (buff);
    printf("////////////////////////////////////////////////////////////////////////////\n");
  }

  return 0;
}
//made at 2011.12.07
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//本功能可以列出本电脑上的所有的共享资源,相当于net share的功能,当然还有其他的一些信息没有列举出来。
#include <windows.h>
#include <lm.h>
#pragma comment(lib,"Netapi32.lib")

void wmain( int argc, TCHAR *lpszArgv[ ])
{
  PSHARE_INFO_502 p,p1;
  DWORD er=0,tr=0,resume=0;

  printf("共享名:            资源:                          注释               \n");
  printf("---------------------------------------------------------------------\n");

  NetShareEnum (L".", 502, (LPBYTE *) &p, -1, &er, &tr, &resume);
  p1 = p;

  for(int i=1;i<=er;i++)
  {
    char comment[255];
    WideCharToMultiByte(0, 0, p->shi502_remark, -1, comment,255,0,0); 

    printf("%-20S%-30S%s\n",p->shi502_netname, p->shi502_path, comment);

    p++;
  }

  NetApiBufferFree(p1);
  printf("命令成功完成。\n\n");
  return;
}
//made at 2011.12.08
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//本功能可以列出已经登录到本电脑上的所有的用户。第一个好像不是,是啥具体不太清楚。
#include <windows.h> 
#include <lm.h>
#pragma comment(lib,"Netapi32.lib")

int wmain(int argc, wchar_t *argv[])
{
  LPWKSTA_USER_INFO_0 pBuf, pTmpBuf;
  DWORD dwEntriesRead = 0;
  DWORD dwTotalEntries = 0;
  DWORD dwResumeHandle = 0;

  NetWkstaUserEnum(L".", 0, (LPBYTE*)&pBuf, -1, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle);
  pTmpBuf = pBuf;

  for (int i = 0; (i < dwEntriesRead); i++)
  {
    wprintf(L"%s\n", pTmpBuf->wkui0_username);
    pTmpBuf++;
  }

  NetApiBufferFree(pBuf);
  return 0;
}
//made at 2011.12.08
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//NetServerEnum 就不写了,可以使用 WNetEnumResource。
//NetSessionEnum 枚举就不写了,相当于 net session。
//NetServerDiskEnum也不写了。
//NetScheduleJobEnum与此类似,更多的就不写了。

没有评论:

发表评论