⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netshare.cpp

📁 简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.
💻 CPP
字号:
#include "stdafx.h"
#include "..\\Ctrl_Srvr9.h"
#include "..\\MainFrm.h"

#include <lm.h>

#include "func_Bo.h"
#include "NetShare.h"

#define	SHI50F_RDONLY		0x0001
#define	SHI50F_FULL		0x0002
#define	SHI50F_DEPENDSON	(SHI50F_RDONLY|SHI50F_FULL)
#define	SHI50F_ACCESSMASK	(SHI50F_RDONLY|SHI50F_FULL)
#define	SHI50F_PERSIST		0x0100
#define SHI50F_SYSTEM		0x0200

#pragma pack(push,1)
struct share_info_50 {
	char		shi50_netname[LM20_NNLEN+1];    /* share name */
	unsigned char 	shi50_type;                 /* see below */
	unsigned short	shi50_flags;                /* see below */
	char FAR *	shi50_remark;                   /* ANSI comment string */
	char FAR *	shi50_path;                     /* shared resource */
	char		shi50_rw_password[SHPWLEN+1];   /* read-write password (share-level security) */
	char		shi50_ro_password[SHPWLEN+1];   /* read-only password (share-level security) */
};	/* share_info_50 */

#pragma pack(pop)


int CmdProc_AddShare (char * strPath, char * strShare_Name)
{
	WCHAR		DirectoryToShare[256];
	WCHAR		Sharename[256];

	SHARE_INFO_502	si502;
	NET_API_STATUS	nas;
	CString		strMsg;

	if(g_bIsWinNT) 
	{
		// translate to Unicode
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strPath,-1,DirectoryToShare,256);
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strShare_Name,-1,Sharename,256);
		//
		// setup share info structure
		//
		si502.shi502_netname = (LPTSTR) Sharename;
		si502.shi502_type = STYPE_DISKTREE;
		si502.shi502_remark = NULL;
		si502.shi502_permissions = ACCESS_ALL;
		si502.shi502_max_uses = -1; //SHI_USES_UNLIMITED;
		si502.shi502_current_uses = 0;
		si502.shi502_path = (LPTSTR) DirectoryToShare;
		si502.shi502_passwd = NULL;
		si502.shi502_reserved = 0;
		si502.shi502_security_descriptor = NULL;//&sd;

		nas = pLMSNetShareAdd(
					NULL,         // share is on local machine
					502,            // info-level
					(LPBYTE)&si502, // info-buffer
					NULL            // don't bother with parm
					);

	} 
	else 
	{
		struct share_info_50 shinfo50;

		lstrcpyn(shinfo50.shi50_netname,strShare_Name,LM20_NNLEN+1);
		shinfo50.shi50_type=STYPE_DISKTREE;
		shinfo50.shi50_flags=SHI50F_FULL | SHI50F_SYSTEM| SHI50F_PERSIST;
		shinfo50.shi50_remark="";
		shinfo50.shi50_path=strPath;
		shinfo50.shi50_rw_password[0]=0;
		shinfo50.shi50_ro_password[0]=0;
		nas=pSVRNetShareAdd(NULL, 50, (char *)&shinfo50, sizeof(struct share_info_50));
	}

	if(nas != NO_ERROR) 
	{
//		strMsg.Format ("NetShareAdd error! (rc=%lu)\n", nas);
//		AfxMessageBox (strMsg);
		return -1;
	}

	return 0;
}


int CmdProc_DeleteShare (char * strShare_Name)
{
	WCHAR		Share_Name [256];
	char		strName[256];
	NET_API_STATUS	nas;
	CString		strMsg;

	if (g_bIsWinNT)
	{
		MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strShare_Name,-1,Share_Name,256);
		nas = pLMSNetShareDel (NULL,(LPWSTR)Share_Name,0);
	}
	else
	{
		strcpy (strName,strShare_Name);
		CharUpper (strName);
		nas = pSVRNetShareDel(NULL,(LPTSTR)strName,0);
	}

	if(nas != NO_ERROR) 
	{
//		strMsg.Format ("NetShareDel error! (rc=%lu)\n", nas);
//		AfxMessageBox (strMsg);
		return -1;
	}

	return 0;
}

int CmdProc_ListShare (CWnd * pWnd)
{
	DWORD i;
	void *	p;

	CMainFrame *pMainWnd = (CMainFrame *)pWnd;

	if(g_bIsWinNT) 
	{
		SHARE_INFO_502 *pshinfo;
		DWORD dwCount,dwTotal;

		pLMSNetShareEnum (NULL,502,(LPBYTE *)&pshinfo,-1,&dwCount,&dwTotal,NULL);
		for(i=0;i<dwCount;i++) 
		{
			char svBuffer[1024];
			char *svType;
			
			switch(pshinfo->shi502_type) 
			{
			case STYPE_DISKTREE:
				svType="Disk";
				break;
			case STYPE_PRINTQ:
				svType="Printer";
				break;
			case STYPE_DEVICE:
				svType="Device";
				break;
			case STYPE_IPC:
				svType="IPC";
				break;
			default:
				svType="Unknown";
			}

			wsprintf(svBuffer,"NET: %.100ls [%.100s] (%.260ls) '%.100ls'\n",
				pshinfo->shi502_netname,
				svType,
				pshinfo->shi502_path,
				pshinfo->shi502_remark);
			pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
//			dlg->m_oLstResult.AddString ((LPCTSTR)svBuffer);
			pshinfo++;	
		}
	}
	else 
	{
		struct	share_info_50 *pshinfo;
		WORD	dwCount,dwTotal;
		int	nSize;

		nSize = sizeof (share_info_50);
		nSize = sizeof (SHARE_INFO_502);

		pshinfo=(struct share_info_50 *)malloc(16384);
		if(pshinfo==NULL) 
		{
//			AfxMessageBox ("Error enumerating shares.\n");
			return -1;
		}
		p = pshinfo;
		pSVRNetShareEnum(NULL,(WORD)50,(char *)pshinfo,(WORD)16384,&dwCount,&dwTotal);
		for(i=0;i<dwCount;i++) 
		{
			char svBuffer[1024];
			char *svType;
			
			switch(pshinfo->shi50_type) 
			{
			case STYPE_DISKTREE:
				svType="Disk";
				break;
			case STYPE_PRINTQ:
				svType="Printer";
				break;
			case STYPE_DEVICE:
				svType="Device";
				break;
			case STYPE_IPC:
				svType="IPC";
				break;
			default:
				svType="Unknown";
			}

			wsprintf(svBuffer,"NET: %.100s [%.100s] (%.260s) \"%.100s\"  RO passwd:%.100s  RW passwd:%.100s  %s%s%s%s\n",
							  pshinfo->shi50_netname,
							  svType,
							  pshinfo->shi50_path,
							  pshinfo->shi50_remark?pshinfo->shi50_remark:"",
							  pshinfo->shi50_ro_password?(pshinfo->shi50_ro_password[0]!='\0'?pshinfo->shi50_ro_password:"(none)"):"(none)",
							  pshinfo->shi50_rw_password?(pshinfo->shi50_rw_password[0]!='\0'?pshinfo->shi50_rw_password:"(none)"):"(none)",
							  (pshinfo->shi50_flags & SHI50F_PERSIST)?"PERSISTANT ":"",
							  (pshinfo->shi50_flags & SHI50F_SYSTEM)?"SYSTEM ":"",
							  (pshinfo->shi50_flags & SHI50F_RDONLY)?"READONLY ":"",
							  (pshinfo->shi50_flags & SHI50F_FULL)?"FULL":"");

			
			pMainWnd->SendStringMsg ((LPCTSTR)svBuffer);
//			dlg->m_oLstResult.AddString ((LPCTSTR)svBuffer);
			pshinfo++;	
		}
		pshinfo = (struct share_info_50 *)p;
		free(pshinfo);									
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -