www.pudn.com > rbScanner.rar > CNetBios.cpp
// CNetBios.cpp: implementation of the CNetBios class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "try4.h" #include "CNetBios.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif #include#include #include #pragma comment(lib,"mpr") #pragma comment(lib,"netapi32") #define LOCALDRIVE "x:" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CNetBios::CNetBios() { } CNetBios::~CNetBios() { } BOOL CNetBios::OpenSession(PTSTR server) { NETRESOURCE nr; DWORD ret; TCHAR username[100]=_T(""); TCHAR password[100]=_T(""); wsprintf(ipc,_T("\\\\%s\\ipc$"),server); //nr.dwScope = RESOURCE_GLOBALNET; nr.lpLocalName=NULL; nr.lpProvider=NULL; nr.dwType=RESOURCETYPE_ANY; nr.lpRemoteName = ipc; ret=WNetAddConnection2(&nr,username,password,NULL); if(ret!=ERROR_SUCCESS) return false ; else return true; } BOOL CNetBios::CloseSession(char *ipc) { DWORD ret; ret=WNetCancelConnection2(ipc,0,TRUE); if(ret!=ERROR_SUCCESS) { return false; } else return true; } int CNetBios::GetUsers(PTSTR server,CString &strOutput) { // char txt[2000]; CFile fileUsers("UserInfo.txt",CFile::modeWrite|CFile::modeCreate); PNET_DISPLAY_USER pBuf,pBuffer; DWORD nStatus; DWORD dwRec; DWORD i=0; DWORD lerror; DWORD dwLevel; char lpwStr[100]=_T(""); //保存server的双字节形式 dwLevel=1; strOutput=_T(""); MultiByteToWideChar(CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); do { nStatus=NetQueryDisplayInformation((unsigned short *)lpwStr,dwLevel,i,100,0xFFFFFFFF,&dwRec,(PVOID *)&pBuf); if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA)) { CFile fileUsersTemp("users.txt",CFile::modeWrite|CFile::modeCreate); pBuffer=pBuf; for(;dwRec>0;dwRec--) { char szTemp[256]; //将双字节形式字符串转换为单字节形式 WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_name,-1,szTemp,256,0,0); CString str; str.Format("\r\n用户名: %s",szTemp); strOutput+="\r\n"+_T(str); // UpdateData(false); CString str1; str1.Format("%s\r\n",szTemp); fileUsersTemp.Write(str1,str1.GetLength()); WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_full_name,-1,szTemp,256,0,0); str.Format("用户全名: %s",szTemp); strOutput+="\r\n"+_T(str); // UpdateData(false); str.Format("用户 ID: %u",pBuffer->usri1_user_id); strOutput+="\r\n"+_T(str); // UpdateData(false); WideCharToMultiByte(CP_ACP,0,pBuffer->usri1_comment,-1,szTemp,256,0,0); str.Format("附注 : %s",szTemp); strOutput+="\r\n"+_T(str); // UpdateData(false); i=pBuffer->usri1_next_index; pBuffer++; } fileUsersTemp.Close(); } else { lerror=GetLastError(); if(lerror==997) { AfxMessageBox(_T("\nUsers:\t\tOverlapped I/O operation is in progress.\n")); } else { CString str; str.Format("Users Error: %d ",lerror); AfxMessageBox(str); } } if(pBuf!=NULL) { NetApiBufferFree(pBuf); } }while(nStatus==ERROR_MORE_DATA); // wsprintf(txt,"%s",strOutput); fileUsers.Write(strOutput,strOutput.GetLength()); fileUsers.Close(); return 0; } int CNetBios::FingerPrint(PTSTR server,CString &strOutput) { CFile fingerprint("ServerInfo.txt",CFile::modeWrite|CFile::modeCreate); DWORD dwlength; DWORD dwLevel; NET_API_STATUS nStatus; PSERVER_INFO_101 pBuf; DWORD lerror; char lpwStr[100]=_T(""); //保存server的双字节形式 dwLevel=101; pBuf=NULL; dwlength=_tcslen(server); strOutput=_T(""); // MultiByteToWideChar (CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); //将server由单字节转换为双字节,否则不对 nStatus=NetServerGetInfo(lpwStr,dwLevel,(PBYTE *)&pBuf);//第一个参数要求为双字节 if(nStatus==NERR_Success) { CString str; str.Format("计算机名: %s",pBuf->sv101_name); strOutput+="\r\n"+str; str.Format("操作系统id: %d",pBuf->sv101_platform_id); strOutput+="\r\n"+str; str.Format("版本号: %d.%d",pBuf->sv101_version_major,pBuf->sv101_version_minor); strOutput+="\r\n"+str; } else { lerror=GetLastError(); if(lerror==997) { AfxMessageBox("\nFingerprint:\tOverlapped I/O operation is in progress.\n"); } else { CString str; str.Format(("Fingerprint Error: %d"),lerror); AfxMessageBox(str); } } if(pBuf!=NULL) { NetApiBufferFree(pBuf); } fingerprint.Write(strOutput,strOutput.GetLength()); fingerprint.Close(); return 0; } int CNetBios::GetShareList(PTSTR server,CString &strOutput) { CFile fileShare("ShareInfo.txt",CFile::modeWrite|CFile::modeCreate); DWORD er,tr,resume; DWORD i,dwLength,dwLevel; PSHARE_INFO_1 pBuf,pBuffer; NET_API_STATUS nStatus; DWORD lerror; char lpwStr[100]=_T(""); //保存server的双字节形式 er=0; tr=0; resume=1; dwLevel=1; dwLength=_tcslen(server); strOutput=_T(""); MultiByteToWideChar (CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); do { nStatus=NetShareEnum(lpwStr,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&er,&tr,&resume); if((nStatus==ERROR_SUCCESS) || (nStatus==ERROR_MORE_DATA)) { pBuffer=pBuf; for(i=1;i<=er;i++) { char szTemp[256]; //将双字节形式字符串转换为单字节形式 WideCharToMultiByte(CP_ACP,0,(unsigned short *)pBuffer->shi1_netname,-1,szTemp,256,0,0); CString str; str.Format("\r\n共享名 : %s",szTemp); strOutput+="\r\n"+str; WideCharToMultiByte(CP_ACP,0,(unsigned short *)pBuffer->shi1_remark,-1,szTemp,256,0,0); str.Format("附注 : %s",szTemp); strOutput+="\r\n"+str; strOutput+="\r\n类型 :"; if(pBuffer->shi1_type==STYPE_DISKTREE) { strOutput+=_T("Disk drive."); } else if(pBuffer->shi1_type==STYPE_PRINTQ) { strOutput+=_T("Print queue."); } else if(pBuffer->shi1_type==STYPE_DEVICE) { strOutput+=_T("Communication device."); } else if(pBuffer->shi1_type==STYPE_IPC) { strOutput+=_T("Interprocess communication (IPC)."); } else if(pBuffer->shi1_type==STYPE_SPECIAL) { strOutput+=_T("Special share reserved for interprocess communication (IPC$) or remote administration of the server (ADMIN$)."); } else { strOutput+=_T("\r\n"); } pBuffer++; } } else { lerror=GetLastError(); if(lerror==997) { AfxMessageBox(_T("\nNetbios:\tOverlapped I/O operation is in progress.\n")); } else { CString str; str.Format("\nNetbios Error:\t%d\n",lerror); AfxMessageBox(str); } } if(pBuf!=NULL) { NetApiBufferFree(pBuf); } } while(nStatus==ERROR_MORE_DATA); fileShare.Write(strOutput,strOutput.GetLength()); fileShare.Close(); return 0; } /* void CNetBios::GetUsersToFile(PTSTR server) { CFile fUsers; NET_API_STATUS nStatus=0; LPBYTE *buf=NULL; DWORD entread=0,totent=0,rhand=0; DWORD maxlen=0xffffffff; PUSER_INFO_0 pBuf; UINT i; int cc=0; char lpwStr[100]=_T(""); //保存server的双字节形式 MultiByteToWideChar(CP_ACP, 0, server, -1, (unsigned short *)lpwStr, 100); buf=(unsigned char**)malloc(5000); nStatus=::NetUserEnum((unsigned short *)lpwStr,0,0,buf,maxlen,&entread,&totent,&rhand); if(nStatus!=NERR_Success) { AfxMessageBox("Couldn't Enum Users!"); return; } cc=sizeof(USER_INFO_0)*entread; if((pBuf=(USER_INFO_0 *)malloc(cc))==NULL) { AfxMessageBox("Malloc Error!"); return; } fUsers.Open("users.txt",CFile::modeWrite|CFile::modeCreate); memcpy(pBuf,*buf,cc); for(i=0;i