#ifndef PFMAPI_H
#define PFMAPI_H
#include "ptfactory1.h"
#include "pfmenum.h"
#ifdef __cplusplus_cli
#pragma managed(push,off)
#endif
PT_TYPE_DEFINE(PfmMountCreateParams)
{
size_t paramsSize;
const wchar_t* mountName;
int mountFlags;
int reserved1;
wchar_t driveLetter;
wchar_t reserved2[sizeof(void*)/sizeof(wchar_t)-1];
const wchar_t* ownerId;
PT_FD_T toFormatterWrite;
PT_FD_T fromFormatterRead;
PT_FD_T toAuthWrite;
PT_FD_T fromAuthRead;
PT_UINT64 blockModeOffset;
unsigned blockModeAlign;
unsigned reserved3[1];
};
PT_INLINE void PfmMountCreateParams_Init(PfmMountCreateParams* mcp)
{
memset(mcp,0,sizeof(*mcp));
mcp->paramsSize = sizeof(*mcp);
mcp->mountFlags = pfmMountFlagCacheNameSpace;
mcp->toAuthWrite = PT_FD_INVALID;
mcp->fromAuthRead = PT_FD_INVALID;
}
#define INTERFACE_NAME PfmMount
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , AddRef );
PT_INTERFACE_FUN0( void , Release );
PT_INTERFACE_FUN0( int , Refresh );
PT_INTERFACE_FUN0( int , GetMountId );
PT_INTERFACE_FUN0( int , GetMountFlags );
PT_INTERFACE_FUN0( int , GetStatusFlags );
PT_INTERFACE_FUN0( int , GetVolumeFlags );
PT_INTERFACE_FUN0( PT_INT64 , GetChangeInstance );
PT_INTERFACE_FUN0( const wchar_t*, GetMountName );
PT_INTERFACE_FUN0( const wchar_t*, GetMountPoint );
PT_INTERFACE_FUN0( const wchar_t*, GetUncName );
PT_INTERFACE_FUN0( const wchar_t*, GetOwnerId );
PT_INTERFACE_FUN0( const wchar_t*, GetOwnerName );
PT_INTERFACE_FUN0( const wchar_t*, GetFormatterName );
PT_INTERFACE_FUN0( wchar_t , GetDriveLetter );
PT_INTERFACE_FUN1( int , WaitReady , int timeoutMsecs);
PT_INTERFACE_FUN1( int , Unmount , int unmountFlags);
PT_INTERFACE_FUN0( int , Flush );
PT_INTERFACE_FUN6( int , Control , int controlCode,const void* input,size_t inputSize,void* output,size_t maxOutputSize,size_t* outputSize);
};
#undef INTERFACE_NAME
#define INTERFACE_NAME PfmFileMountUi
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0(void , Start );
PT_INTERFACE_FUN1(void , Complete ,const wchar_t* errorMessage);
PT_INTERFACE_FUN2(void , Status ,const wchar_t* data,int endOfLine);
PT_INTERFACE_FUN0(void , Suspend );
PT_INTERFACE_FUN0(void , Resume );
PT_INTERFACE_FUN2(const wchar_t* , QueryPassword ,const wchar_t* prompt,int count);
PT_INTERFACE_FUN0(void , ClearPassword );
};
#undef INTERFACE_NAME
PT_STATIC_CONST( int, pfmFileMountFlagConsoleUi , 0x0001 );
PT_STATIC_CONST( int, pfmFileMountFlagInProcess , 0x0002 );
PT_STATIC_CONST( int, pfmFileMountFlagVerbose , 0x0004 );
PT_STATIC_CONST( int, pfmFileMountFlagReserved1 , 0x0008 );
PT_STATIC_CONST( int, pfmFileMountFlagEditOptions , 0x0020 );
PT_STATIC_CONST( int, pfmFileMountFlagMultiMount , 0x0040 );
PT_TYPE_DEFINE(PfmFileMountCreateParams)
{
size_t paramsSize;
const wchar_t* mountFileName;
const wchar_t* reserved1;
const wchar_t*const* argv;
int argc;
int mountFlags;
int fileMountFlags;
int reserved2;
wchar_t driveLetter;
wchar_t reserved3[(sizeof(int)*2)/sizeof(wchar_t)-1];
const wchar_t* ownerId;
const wchar_t* formatterName;
const wchar_t* password;
PfmFileMountUi* ui;
void* reserved4[3];
};
PT_INLINE void PfmFileMountCreateParams_Init(PfmFileMountCreateParams* p)
{
memset(p,0,sizeof(*p));
p->paramsSize = sizeof(*p);
}
#define INTERFACE_NAME PfmFileMount
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , AddRef );
PT_INTERFACE_FUN0( void , Release );
PT_INTERFACE_FUN2( int, GetInterface ,const char* id,void*);
PT_INTERFACE_FUN0( void , Cancel );
PT_INTERFACE_FUN1( int, Start ,const PfmFileMountCreateParams* fmp);
PT_INTERFACE_FUN2( void , Send ,const wchar_t* data,int endOfLine);
PT_INTERFACE_FUN2( void , Status ,const wchar_t* data,int endOfLine);
PT_INTERFACE_FUN0( int, WaitReady );
PT_INTERFACE_FUN0( PfmMount* , GetMount );
PT_INTERFACE_FUN0( void , Detach );
};
#undef INTERFACE_NAME
#define INTERFACE_NAME PfmIterator
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , AddRef );
PT_INTERFACE_FUN0( void , Release);
PT_INTERFACE_FUN1( int, Next , PT_INT64* changeInstance);
};
#undef INTERFACE_NAME
#define INTERFACE_NAME PfmMonitor
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , AddRef );
PT_INTERFACE_FUN0( void , Release);
PT_INTERFACE_FUN2( int, Wait , PT_INT64 nextChangeInstance,int timeoutMsecs);
PT_INTERFACE_FUN0( void , Cancel );
};
#undef INTERFACE_NAME
PT_TYPE_DEFINE(PfmFastPipeCreateParams)
{
size_t paramsSize;
const wchar_t* baseDeviceName;
int fastPipeFlags;
#if UINT_MAX < SIZE_MAX
PT_UINT8 align1[sizeof(size_t)-sizeof(int)];
#endif
wchar_t* deviceName;
size_t maxDeviceNameChars;
};
PT_INLINE void PfmFastPipeCreateParams_Init(PfmFastPipeCreateParams* pcp)
{
memset(pcp,0,sizeof(*pcp));
pcp->paramsSize = sizeof(*pcp);
}
PT_TYPE_DEFINE(PfmFastPipeOp)
{
PT_UINT64 clientId;
PT_UINT64 offset;
int opType;
#if UINT_MAX < SIZE_MAX
PT_UINT8 align1[sizeof(size_t)-sizeof(int)];
#endif
void* input;
size_t maxInputSize;
void* output;
size_t maxOutputSize;
PT_UINT64 opaque[(sizeof(void*)*4+48)/8];
};
PT_TYPE_DEFINE(PfmFastPipeSendContext)
{
void (PT_CCALL*complete)(PfmFastPipeSendContext*,int error,size_t inputSize,size_t outputSize);
#if SIZE_MAX < 0xFFFFFFFFFFFFFFFF
PT_UINT8 align1[8-sizeof(void(*)(void))];
#endif
PT_UINT64 opaque[(sizeof(void*)*10+40)/8];
};
#define INTERFACE_NAME PfmFastPipeServer
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , Release );
PT_INTERFACE_FUN1( void , InitOp , PfmFastPipeOp* op);
PT_INTERFACE_FUN1( void , FreeOp , PfmFastPipeOp* op);
PT_INTERFACE_FUN1( int, Receive , PfmFastPipeOp* op);
PT_INTERFACE_FUN4( void , Complete, PfmFastPipeOp* op,int error,size_t inputSize,size_t outputSize);
PT_INTERFACE_FUN0( void , Cancel );
};
#undef INTERFACE_NAME
#define INTERFACE_NAME PfmApi
PT_INTERFACE_DEFINE
{
PT_INTERFACE_FUN0( void , AddRef );
PT_INTERFACE_FUN0( void , Release );
PT_INTERFACE_FUN0( const char* , Version );
PT_INTERFACE_FUN0( int, SysStart );
PT_INTERFACE_FUN2( int, MountCreate , const PfmMountCreateParams* params,PfmMount** mount);
PT_INTERFACE_FUN2( int, MountNameOpen , const wchar_t* mountName,PfmMount** mount);
PT_INTERFACE_FUN2( int, MountPointOpen , const wchar_t* mountPoint,PfmMount** mount);
PT_INTERFACE_FUN2( int, MountIdOpen , int mountId,PfmMount** mount);
PT_INTERFACE_FUN3( int, MountIterate , PT_INT64 startChangeInstance,PT_INT64* nextChangeInstance,PfmIterator** iterator);
PT_INTERFACE_FUN1( int, Monitor , PfmMonitor** monitor);
PT_INTERFACE_FUN1( int, FileMountCreate , PfmFileMount** mount);
PT_INTERFACE_FUN3( int, FastPipeCreate , const PfmFastPipeCreateParams* params,PT_FD_T* clientHandle,PT_FD_T* serverHandle);
PT_INTERFACE_FUN1( int, FastPipeCancel , PT_FD_T clientFd);
PT_INTERFACE_FUN1( int, FastPipeEnableFastMapping, PT_FD_T clientFd);
PT_INTERFACE_FUN2( int, FastPipeServerFactory , PT_FD_T serverFd,PfmFastPipeServer**);
PT_INTERFACE_FUN2( int, FastPipeClientContext , PT_FD_T clientFd,int* clientContext);
PT_INTERFACE_FUN8( void , FastPipeSend , PT_FD_T clientFd,int clientContext,PT_UINT64 offset,void* input,size_t maxInputSize,void* output,size_t maxOutputSize,PfmFastPipeSendContext*);
};
#undef INTERFACE_NAME
PTFACTORY1_DECLARE(PfmApi,PFM_PRODIDW,PFM_APIIDW);
PT_INLINE int PfmApiFactory(PfmApi** pfmApi)
{ return PfmApiGetInterface("PfmApi10",pfmApi); }
PT_STATIC_CONST( int, pfmInstInstalled , 0);
PT_STATIC_CONST( int, pfmInstOldBuild , 1);
PT_STATIC_CONST( int, pfmInstOldVersion , 2);
PT_STATIC_CONST( int, pfmInstNotInstalled, 3);
PT_INLINE int PfmInstallCheck(void)
{
int res = pfmInstNotInstalled;
PfmApi* api;
if(PfmApiFactory(&api) == 0)
{
res = pfmInstOldBuild;
if(strcmp(PT_VCAL0(api,Version),PFM_BUILDTAGA) >= 0)
res = pfmInstInstalled;
}
else if(PfmApiGetInterface("PfmApi1",&api) == 0)
res = pfmInstOldVersion;
if(api) PT_VCAL0(api,Release);
if(res != pfmInstInstalled) PfmApiUnload();
return res;
}
#ifdef __cplusplus_cli
#pragma managed(pop)
#endif
#endif