IPC实现代码(BCB)


//---------------------------------------------------------------------------

#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);

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值