/*------------------------------------
Author: Ted--Nefarian Zhu
Date: 2011/04/20 03:30
Version: V1.00 All rights reserved !
Life sucks,but we all have to move on!
------------------------------------*/
#ifndef CSHARE_H_H
#define CSHARE_H_H
#include <windows.h>
#include <lm.h>
#pragma comment(lib, "netapi32.lib")
class CShare
{
public:
CShare();
~CShare();
int AddShare(WCHAR* pwShareName, WCHAR* pwSharePath);
int DelShare(WCHAR* pwShareName);
int CheckShare(char buff[], int size);
};
CShare::CShare(){}
CShare::~CShare(){}
int CShare::AddShare(WCHAR* pwShareName, WCHAR* pwSharePath)
{
SHARE_INFO_502 si502;
NET_API_STATUS nas;
si502.shi502_netname = (LPTSTR)pwShareName;
si502.shi502_type = STYPE_DISKTREE;
si502.shi502_remark = NULL;
si502.shi502_permissions = 0;
si502.shi502_max_uses = SHI_USES_UNLIMITED;
si502.shi502_current_uses = 0;
si502.shi502_path = (LPTSTR)pwSharePath;
si502.shi502_passwd = NULL;
si502.shi502_reserved = 0;
si502.shi502_security_descriptor = NULL;
nas = NetShareAdd(
NULL, // share is on local machine
502, // info-level
(LPBYTE)&si502, // info-buffer
NULL // don't bother with parm
);
return nas;
}
int CShare::DelShare(WCHAR* pwShareName)
{
NET_API_STATUS res;
res = NetShareDel(NULL, (LPSTR)pwShareName, 0);
return res;
}
int CShare::CheckShare(char buff[], int size)
{
memset(buff, 0, size);
PSHARE_INFO_502 BufPtr, p;
NET_API_STATUS res;
DWORD er=0, tr=0, resume=0;
do
{
res = NetShareEnum(0, 502, (LPBYTE*)&BufPtr, 512, &er, &tr, &resume);
if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p = BufPtr;
char szChar[128] = "";
for(int i=1; i<=er; i++)
{
wsprintf(szChar, "%S\t", p->shi502_netname);
strcat(buff, szChar);
wsprintf(szChar, "%S\n", p->shi502_path);
strcat(buff, szChar);
p++;
}
NetApiBufferFree(BufPtr);
}
else
return res;
}
while (res==ERROR_MORE_DATA);
return 0;
}
#endif /*-----CHARE_H_H-----*/