far

级别:中级站友 威望:0 经验:0 货币:387 体力: 来源:61.174.138.* 总发帖数:60 注册日期:2002-07-03
|
|
查看 邮件 主页 QQ 消息 引用 复制 下载
/*****************************************************************
** 函数名: ConnIPC ** 功能描述: 建立ipc连接 ** 变量说明: RemoteName
远程计算机名,以\\开头的字符串, User 用户名, pass 密码 ** 返回值:连接成功 1,连接失败 0 **
作 者: far ** 日 期: 2002.6.6 11:04
****************************************************************/
int CNetWorking::ConnIPC(char *RemoteName,char *User,char *Pass)
{ NETRESOURCE nr;
char RN[50]="\\\\";
strncat(RN,RemoteName,sizeof(RN)-11);
strcat(RN,"\\ipc$");
nr.dwType=RESOURCETYPE_ANY; nr.lpLocalName=NULL;
nr.lpRemoteName=RN;
nr.lpProvider=NULL; int iResult =
WNetAddConnection2(&nr,Pass,User,FALSE);
if(iResult == NO_ERROR)return 1;
else return 0; }
/*****************************************************************
** 函数名: DisConnIPC ** 功能描述: 断开IPC连接 ** 变量说明: RemoteName
远程计算机名,以\\开头的字符串 ** 返回值:无 ** 作 者: far ** 日 期: 2002.6.6
15:16
****************************************************************/
void CNetWorking: isConnIPC(char *RemoteName)
{ char tmp[52],tmp2[96];
strncpy(tmp,RemoteName,sizeof(tmp)-1);
wsprintf(tmp2,"\\\\%s\\ipc$",tmp);
m_dwError =
WNetCancelConnection2(tmp2,CONNECT_UPDATE_PROFILE,TRUE);
if(m_dwError != NO_ERROR)
{ #ifdef _DEBUG
DumpError(); #endif }
}
/*****************************************************************
** 函数名: SendFile ** 功能描述: 上载文件到远程计算机 ** 变量说明:
RemotePathAndFile 文件在远程计算机的路径,LocalPathAndFile 要上载的本机文件路径 **
返回值:上载成功 1,上载失败 0 ** 作 者: far ** 日 期: 2002.6.6 15:16
****************************************************************/
BOOL CNetWorking: endFile(char
*RemotePathAndFile, char *LocalPathAndFile) {
HANDLE hRF; hRF =
CreateFile(RemotePathAndFile, GENERIC_ALL,FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);//建立文件
if (hRF == INVALID_HANDLE_VALUE)return FALSE;
//写文件过程: unsigned long
iLength = 0; char* pBuf = NULL;
TRY {
CFile
file(LocalPathAndFile, CFile::modeRead);
iLength = file.GetLength();
pBuf = new char[iLength];
memset(pBuf, 0, iLength);
file.Read(pBuf,
iLength);
file.Close();
} CATCH (CException,
e) {
CString str = (CString)LocalPathAndFile;
str += " : Read file
error!";
AfxMessageBox(str); }
END_CATCH unsigned
long iWritten = 0; unsigned long iThisWritten
= 0; while(iWritten < iLength)
{
iThisWritten = 0;
if(WriteFile(hRF, pBuf+iWritten, iLength-iWritten,
&iThisWritten, NULL) == 0)return FALSE;
iWritten += iThisWritten;
} CloseHandle(hRF);
if(pBuf)delete []pBuf;
return TRUE; }
/*****************************************************************
** 函数名: NetTime ** 功能描述: 查询远程计算机的当前时间 ** 变量说明: strServer
以\\开头的远程计算机名 ** 返回值:远程计算机的当前时间,不计算年月日,单位为秒 ** 作 者: far
** 日 期: 2002.6.3 2:14
****************************************************************/
unsigned long CNetManageFunc::NetTime(CString strServer) {
LPTIME_OF_DAY_INFO pBuf = NULL;
NET_API_STATUS nStatus;
LPCWSTR pszServerName = NULL;
unsigned long ulResult = 0;
pszServerName =
strServer.AllocSysString();
//
// Call the NetRemoteTOD function.
// nStatus =
NetRemoteTOD(pszServerName,
(LPBYTE *)&pBuf); //
// If the function succeeds, display the
current date and time. //
if (nStatus == NERR_Success)
{
if (pBuf != NULL) {
FILETIME FileTime, LocalFileTime;
SYSTEMTIME UTCTime, LocalTime;
UTCTime.wDay = pBuf->tod_day;
UTCTime.wDayOfWeek =
pBuf->tod_weekday;
UTCTime.wHour = pBuf->tod_hours;
UTCTime.wMilliseconds = 0;
UTCTime.wMinute = pBuf->tod_mins;
UTCTime.wMonth = pBuf->tod_month;
UTCTime.wSecond =
pBuf->tod_secs;
UTCTime.wYear = pBuf->tod_year;
SystemTimeToFileTime(&UTCTime,&FileTime);
FileTimeToLocalFileTime(&FileTime, &LocalFileTime);
FileTimeToSystemTime(&LocalFileTime, &LocalTime);
ulResult = LocalTime.wHour*3600 + LocalTime.wMinute*60 +
LocalTime.wSecond;
/*
fprintf(stderr, "\nThe current date is:
%d/%d/%d\n",
pBuf->tod_month,
pBuf->tod_day, pBuf->tod_year);
fprintf(stderr, "The current
time is: %d:%d:%d\n",
pBuf->tod_hours,
pBuf->tod_mins, pBuf->tod_secs);
*/
} else
return 0; } //
// Otherwise, display a system error.
else return 0;
//
// Free the allocated buffer.
// if (pBuf != NULL)
NetApiBufferFree(pBuf);
return ulResult; }
/*****************************************************************
** 函数名: NetSchedule ** 功能描述: 定时运行某一程序 ** 变量说明: strServer
以\\开头的远程计算机名 info 启动时间的结构变量 ** 返回值:shedule成功 1,失败 0 ** 作 者:
far ** 日 期: 2002.6.3 2:14
****************************************************************/
BOOL CNetManageFunc::NetSchedule(CString strServer, struct
_AT_INFO info) { LPWSTR pszServer;
pszServer = strServer.AllocSysString();
DWORD JobId = 0;
m_nStatus = NetScheduleJobAdd(pszServer, (LPBYTE)&info,
&JobId); if(m_nStatus != NERR_Success)
{
DumpError(); return FALSE;
}
return
TRUE; }
将以上几个函数组装一下就可以实现程序种植了,具体的API函数的用法可以参照一下MSDN
以后我会不断发布一下代码,但不会将NetPeer的源码做为一个整体公开 |