103 lines
3.6 KiB
C++
103 lines
3.6 KiB
C++
// sfm.cpp : Implementation of shares for Apple Macintosh
|
|
|
|
#include "stdafx.h"
|
|
#include <macfile.h>
|
|
|
|
#define FUNCNAME_AFPADMINCONNECT "AfpAdminConnect"
|
|
#define FUNCNAME_AFPADMINDISCONNECT "AfpAdminDisconnect"
|
|
#define FUNCNAME_AFPADMINVOLUMEGETINFO "AfpAdminVolumeGetInfo"
|
|
#define FUNCNAME_AFPADMINVOLUMEADD "AfpAdminVolumeAdd"
|
|
#define FUNCNAME_AFPADMINBUFFERFREE "AfpAdminBufferFree"
|
|
|
|
typedef DWORD (CALLBACK *PAFPADMINCONNECT)(LPTSTR, PAFP_SERVER_HANDLE);
|
|
typedef VOID (CALLBACK *PAFPADMINDISCONNECT)(AFP_SERVER_HANDLE);
|
|
typedef DWORD (CALLBACK *PAFPADMINVOLUMEGETINFO)(AFP_SERVER_HANDLE, LPWSTR, LPBYTE*);
|
|
typedef DWORD (CALLBACK *PAFPADMINVOLUMEADD)(AFP_SERVER_HANDLE, LPBYTE);
|
|
typedef DWORD (CALLBACK *PAFPADMINBUFFERFREE)(LPVOID);
|
|
|
|
BOOL
|
|
SFMShareNameExists(
|
|
IN LPCTSTR lpszServerName,
|
|
IN LPCTSTR lpszShareName,
|
|
IN HINSTANCE hLib
|
|
)
|
|
{
|
|
BOOL bReturn = FALSE;
|
|
DWORD dwRet = NERR_Success;
|
|
PAFPADMINCONNECT pAfpAdminConnect = NULL;
|
|
PAFPADMINVOLUMEGETINFO pAfpAdminVolumeGetInfo = NULL;
|
|
PAFPADMINBUFFERFREE pAfpAdminBufferFree = NULL;
|
|
PAFPADMINDISCONNECT pAfpAdminDisconnect = NULL;
|
|
|
|
if ( (pAfpAdminConnect = (PAFPADMINCONNECT)GetProcAddress(hLib, FUNCNAME_AFPADMINCONNECT)) &&
|
|
(pAfpAdminVolumeGetInfo = (PAFPADMINVOLUMEGETINFO)GetProcAddress(hLib, FUNCNAME_AFPADMINVOLUMEGETINFO)) &&
|
|
(pAfpAdminBufferFree = (PAFPADMINBUFFERFREE)GetProcAddress(hLib, FUNCNAME_AFPADMINBUFFERFREE)) &&
|
|
(pAfpAdminDisconnect = (PAFPADMINDISCONNECT)GetProcAddress(hLib, FUNCNAME_AFPADMINDISCONNECT)) )
|
|
{
|
|
AFP_SERVER_HANDLE hAfpServerHandle = NULL;
|
|
dwRet = (*pAfpAdminConnect)(
|
|
const_cast<LPTSTR>(lpszServerName),
|
|
&hAfpServerHandle);
|
|
if (NERR_Success == dwRet)
|
|
{
|
|
PAFP_VOLUME_INFO pInfo = NULL;
|
|
dwRet = (*pAfpAdminVolumeGetInfo)(
|
|
hAfpServerHandle,
|
|
const_cast<LPTSTR>(lpszShareName),
|
|
(LPBYTE*)&pInfo);
|
|
|
|
if (NERR_Success == dwRet)
|
|
{
|
|
bReturn = TRUE;
|
|
(*pAfpAdminBufferFree)(pInfo);
|
|
}
|
|
|
|
(*pAfpAdminDisconnect)(hAfpServerHandle);
|
|
}
|
|
}
|
|
|
|
return bReturn;
|
|
}
|
|
|
|
DWORD
|
|
SFMCreateShare(
|
|
IN LPCTSTR lpszServer,
|
|
IN LPCTSTR lpszShareName,
|
|
IN LPCTSTR lpszSharePath,
|
|
IN HINSTANCE hLib
|
|
)
|
|
{
|
|
DWORD dwRet = NERR_Success;
|
|
PAFPADMINCONNECT pAfpAdminConnect = NULL;
|
|
PAFPADMINDISCONNECT pAfpAdminDisconnect = NULL;
|
|
PAFPADMINVOLUMEADD pAfpAdminVolumeAdd = NULL;
|
|
|
|
if (!(pAfpAdminConnect = (PAFPADMINCONNECT)GetProcAddress(hLib, FUNCNAME_AFPADMINCONNECT)) ||
|
|
!(pAfpAdminDisconnect = (PAFPADMINDISCONNECT)GetProcAddress(hLib, FUNCNAME_AFPADMINDISCONNECT)) ||
|
|
!(pAfpAdminVolumeAdd = (PAFPADMINVOLUMEADD)GetProcAddress(hLib, FUNCNAME_AFPADMINVOLUMEADD)))
|
|
{
|
|
dwRet = GetLastError();
|
|
} else
|
|
{
|
|
AFP_SERVER_HANDLE hAfpServerHandle = NULL;
|
|
dwRet = (*pAfpAdminConnect)(
|
|
const_cast<LPTSTR>(lpszServer),
|
|
&hAfpServerHandle);
|
|
if (NERR_Success == dwRet)
|
|
{
|
|
AFP_VOLUME_INFO AfpVolumeInfo;
|
|
ZeroMemory(&AfpVolumeInfo, sizeof(AfpVolumeInfo));
|
|
AfpVolumeInfo.afpvol_name = const_cast<LPTSTR>(lpszShareName);
|
|
AfpVolumeInfo.afpvol_max_uses = AFP_VOLUME_UNLIMITED_USES;
|
|
AfpVolumeInfo.afpvol_props_mask = AFP_VOLUME_GUESTACCESS;
|
|
AfpVolumeInfo.afpvol_path = const_cast<LPTSTR>(lpszSharePath);
|
|
|
|
dwRet = (*pAfpAdminVolumeAdd)(hAfpServerHandle, (LPBYTE)&AfpVolumeInfo);
|
|
|
|
(*pAfpAdminDisconnect)(hAfpServerHandle);
|
|
}
|
|
}
|
|
|
|
return dwRet;
|
|
}
|