📄 netshare.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 + -