//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ipc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment (lib, "Mpr.lib")
#pragma comment (lib, "Netapi32.lib")
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1:: explorer_groups(char *server)
{
DWORD ret, read, total, resume = 0;
int i;
LPVOID buff;
String Tempstr;
char comment[255];
wchar_t wserver[100];
AnsiString(server).WideChar(wserver,20);
// strncpy(wserver,WideString(server).c_bstr(),100);
do {
// ret = NetLocalGroupEnum((wchar_t*)server, 1, (unsigned char **)&buff, MAX_PREFERRED_LENGTH, &read, &total, &resume);
ret = NetLocalGroupEnum(wserver, 1, (unsigned char **)&buff, MAX_PREFERRED_LENGTH, &read, &total, &resume);
switch(ret){
case NERR_Success :
Memo1->Lines->Add("NERR_Success");
break;
case ERROR_MORE_DATA :
Memo1->Lines->Add("ERROR_MORE_DATA");
break;
case NERR_InvalidComputer:
Memo1->Lines->Add("NERR_InvalidComputer");
break;
case ERROR_ACCESS_DENIED :
Memo1->Lines->Add("ERROR_ACCESS_DENIED");
break;
}
PLOCALGROUP_INFO_1 info = (PLOCALGROUP_INFO_1) buff;
for (i=0; i<read; i++) {
Tempstr=String(info[i].lgrpi1_name);
Memo1->Lines->Add("群组:"+ Tempstr);
WideCharToMultiByte(CP_ACP, 0, info[i].lgrpi1_comment , -1, comment,255,NULL,NULL);
Tempstr= String(comment);
//Memo1->Lines->Add("注解:"+Tempstr);
DWORD ret, read, total, resume = 0;
// ret = NetLocalGroupGetMembers((wchar_t*)server, info[i].lgrpi1_name, 2, (unsigned char **)&buff, 1024, &read, &total, &resume);
ret = NetLocalGroupGetMembers(wserver, info[i].lgrpi1_name, 2, (unsigned char **)&buff, 1024, &read, &total, &resume);
if (ret != NERR_Success && ret != ERROR_MORE_DATA) {
Memo1->Lines->Add("fail/n");//en
break;
}
PLOCALGROUP_MEMBERS_INFO_2 info = (PLOCALGROUP_MEMBERS_INFO_2) buff;
for (unsigned i=0; i<read; i++) {
Tempstr= String( info[i].lgrmi2_domainandname) ;
Memo1->Lines->Add(" 域名用户名:"+Tempstr);
//Tempstr=String(info[i].lgrmi2_sidusage) ;
//Memo1->Lines->Add(" SIDUSAGE:"+Tempstr);
//Memo1->Lines->Add(" SID:"+String(char(info[i].lgrmi2_sid)));
}
NetApiBufferFree (buff);
}
NetApiBufferFree (buff);
} while (ret == ERROR_MORE_DATA );
}
//---------------------------------------------------------------------------
void __fastcall TForm1:: explorer_disks(char *server)
{
DWORD ret, read, total, resume = 0;
int i;
LPVOID buff;
String Tempstr;
char comment[255];
wchar_t wserver[100];
AnsiString(server).WideChar(wserver,20);
// strncpy(wserver,WideString(server).c_bstr(),100);
do {
// ret = NetLocalGroupEnum((wchar_t*)server, 1, (unsigned char **)&buff, MAX_PREFERRED_LENGTH, &read, &total, &resume);
// ret = NetServerDiskEnum(NULL, 100, (unsigned char **)&buff, MAX_PREFERRED_LENGTH, &read, &total, &resume);
ret = NetShareEnum(wserver, 2, (unsigned char **)&buff, 8192, &read, &total, &resume);
switch(ret){
case NERR_Success :
Memo1->Lines->Add("NERR_Success");
break;
case ERROR_MORE_DATA :
Memo1->Lines->Add("ERROR_MORE_DATA");
break;
case NERR_InvalidComputer:
Memo1->Lines->Add("NERR_InvalidComputer");
break;
case ERROR_ACCESS_DENIED :
Memo1->Lines->Add("ERROR_ACCESS_DENIED");
break;
}
// PSERVER_INFO_100 info = (PSERVER_INFO_100) buff;
// PSERVER_INFO_100 info = (PSERVER_INFO_100) buff;
PSHARE_INFO_2 info = (PSHARE_INFO_2)buff;
for (i=0; i<read; i++) {
Tempstr=String(info[i].shi2_netname);
Memo1->Lines->Add("disk:"+ Tempstr);
}
NetApiBufferFree (buff);
} while (ret == ERROR_MORE_DATA );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD ret;
char username[100] = "", password[100] = "";
char server[100] = "", ipc[100] = "";
NETRESOURCE NET;
// strncpy(server,"10.1.13.8",100);
strncpy(server,Edit1->Text.c_str(),100);
Memo1->Lines->Add(server);
//printf("server: %s/n", server);
sprintf(ipc,"%s//ipc$",server);
NET.lpLocalName = NULL;
NET.lpProvider = NULL;
NET.dwType = RESOURCETYPE_ANY;
NET.lpRemoteName = (char*)&ipc;
// printf();
Memo1->Lines->Add("setting up session... ");
ret = WNetAddConnection2(&NET,(const char *)&password,(const char *)&username,0);
if (ret != ERROR_SUCCESS)
{
Memo1->Lines->Add("IPC$ connect fail./n");
exit(1);
}
else Memo1->Lines->Add("IPC$ connect success./n");
explorer_groups((char*)&server);
explorer_disks((char*)&server);
Memo1->Lines->Add("Disconnect Server... ");
ret = WNetCancelConnection2((char*)&ipc,0,TRUE);
if (ret != ERROR_SUCCESS)
{
Memo1->Lines->Add("fail./n");
exit(1);
}
else Memo1->Lines->Add("success./n");
// exit (0);
}