tstSharedFolderService.cpp revision 920730ce664b646eea6da4219b93030b1ee32405
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * Testcase for the shared folder service vbsf API.
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * Note that this is still very threadbare (there is an awful lot which should
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * really be tested, but it already took too long to produce this much). The
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * idea is that anyone who makes changes to the shared folders service and who
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * cares about unit testing them should add tests to the skeleton framework to
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * exercise the bits they change before and after changing them.
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * Copyright (C) 2011-2013 Oracle Corporation
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * available from http://www.virtualbox.org. This file is free software;
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * you can redistribute it and/or modify it under the terms of the GNU
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * General Public License (GPL) as published by the Free Software
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
82391de567696f10b21a762fde6a06fe3c266d28vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
82391de567696f10b21a762fde6a06fe3c266d28vboxsync/******************************************************************************
82391de567696f10b21a762fde6a06fe3c266d28vboxsync* Header Files *
82391de567696f10b21a762fde6a06fe3c266d28vboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/******************************************************************************
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync* Global Variables *
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/******************************************************************************
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync* Declarations *
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable);
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/******************************************************************************
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/** Simple call handle structure for the guest call completion callback */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /** Where to store the result code */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/** Call completion callback for guest calls. */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic void callComplete(VBOXHGCMCALLHANDLE callHandle, int32_t rc)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync * Initialise the HGCM service table as much as we need to start the
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync * @param pTable the table to initialise
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncvoid initTable(VBOXHGCMSVCFNTABLE *pTable, VBOXHGCMSVCHELPERS *pHelpers)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync#define LLUIFY(a) ((unsigned long long)(a))
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic void bufferFromString(void *pvDest, size_t cb, const char *pcszSrc)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic void bufferFromPath(void *pvDest, size_t cb, const char *pcszSrc)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync for (psz = (char *)pvDest; psz && psz < (char *)pvDest + cb; ++psz)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync#define ARRAY_FROM_PATH(a, b) \
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync Assert(sizeof((a)) > 0); \
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync bufferFromPath(a, sizeof(a), b); \
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync } while (0)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/******************************************************************************
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync* Stub functions and data *
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pDir=%p\n", __PRETTY_FUNCTION__, pDir); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirCreate(const char *pszPath, RTFMODE fMode, uint32_t fCreate)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pszPath=%s, fMode=0x%llx\n", __PRETTY_FUNCTION__, pszPath,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync LLUIFY(fMode)); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirOpen(PRTDIR *ppDir, const char *pszPath)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pszPath=%s\n", __PRETTY_FUNCTION__, pszPath); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/** @todo Do something useful with the last two arguments. */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirOpenFiltered(PRTDIR *ppDir, const char *pszPath, RTDIRFILTER, uint32_t)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pszPath=%s\n", __PRETTY_FUNCTION__, pszPath); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirQueryInfo(PRTDIR pDir, PRTFSOBJINFO pObjInfo,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pDir=%p, enmAdditionalAttribs=0x%llx\n", __PRETTY_FUNCTION__,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pDir, LLUIFY(enmAdditionalAttribs)); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirRemove(const char *pszPath) { RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirReadEx(PRTDIR pDir, PRTDIRENTRYEX pDirEntry,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pDir=%p, pcbDirEntry=%d, enmAdditionalAttribs=%llu, fFlags=0x%llx\n",
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync __PRETTY_FUNCTION__, pDir, pcbDirEntry ? (int) *pcbDirEntry : -1,
2ad9f8a731c73f6ac74044d42d47bbaf6f44a566vboxsync LLUIFY(enmAdditionalAttribs), LLUIFY(fFlags)); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTDirSetTimes(PRTDIR pDir, PCRTTIMESPEC pAccessTime,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pDir=%p, *pAccessTime=%lli, *pModificationTime=%lli, *pChangeTime=%lli, *pBirthTime=%lli\n",
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync __PRETTY_FUNCTION__, pDir,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pAccessTime ? (long long)RTTimeSpecGetNano(pAccessTime) : -1,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pModificationTime
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync ? (long long)RTTimeSpecGetNano(pModificationTime) : -1,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pChangeTime ? (long long)RTTimeSpecGetNano(pChangeTime) : -1,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pBirthTime ? (long long)RTTimeSpecGetNano(pBirthTime) : -1); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: File=%p\n", __PRETTY_FUNCTION__, File); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncextern int testRTFileDelete(const char *pszFilename) { RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: File=%p\n", __PRETTY_FUNCTION__, File); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncstatic unsigned testRTFileLockfLock;
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncextern int testRTFileLock(RTFILE hFile, unsigned fLock, int64_t offLock,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: hFile=%p, fLock=%u, offLock=%lli, cbLock=%llu\n",
82391de567696f10b21a762fde6a06fe3c266d28vboxsync __PRETTY_FUNCTION__, hFile, fLock, (long long) offLock,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync LLUIFY(cbLock)); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTFileOpen(PRTFILE pFile, const char *pszFilename,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s, pszFilename=%s, fOpen=0x%llx\n", __PRETTY_FUNCTION__,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync pszFilename, LLUIFY(fOpen)); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncextern int testRTFileQueryInfo(RTFILE hFile, PRTFSOBJINFO pObjInfo, RTFSOBJATTRADD enmAdditionalAttribs)
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s, hFile=%p, enmAdditionalAttribs=0x%llx\n",
82391de567696f10b21a762fde6a06fe3c266d28vboxsync __PRETTY_FUNCTION__, hFile, LLUIFY(enmAdditionalAttribs)); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncstatic const char *testRTFileReadData;
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncextern int testRTFileRead(RTFILE File, void *pvBuf, size_t cbToRead,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s : File=%p, cbToRead=%llu\n", __PRETTY_FUNCTION__, File,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync LLUIFY(cbToRead)); */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync bufferFromPath(pvBuf, cbToRead, testRTFileReadData);
82391de567696f10b21a762fde6a06fe3c266d28vboxsync *pcbRead = RT_MIN(cbToRead, strlen(testRTFileReadData) + 1);
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncextern int testRTFileSeek(RTFILE hFile, int64_t offSeek, unsigned uMethod,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s : hFile=%p, offSeek=%llu, uMethod=%u\n", __PRETTY_FUNCTION__,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync hFile, LLUIFY(offSeek), uMethod); */
401ce2099f0ede0091ea3f661331c6f1dd117d28vboxsyncextern int testRTFileSetMode(RTFILE File, RTFMODE fMode)
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: fMode=%llu\n", __PRETTY_FUNCTION__, LLUIFY(fMode)); */
1eca9bc66f92b644829034ae391e6fc3591e93e0vboxsyncextern int testRTFileSetSize(RTFILE File, uint64_t cbSize)
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: File=%llu, cbSize=%llu\n", __PRETTY_FUNCTION__, LLUIFY(File),
82391de567696f10b21a762fde6a06fe3c266d28vboxsync LLUIFY(cbSize)); */
1eca9bc66f92b644829034ae391e6fc3591e93e0vboxsync testRTFileSetSizeSize = (RTFOFF) cbSize; /* Why was this signed before? */
1eca9bc66f92b644829034ae391e6fc3591e93e0vboxsyncextern int testRTFileSetTimes(RTFILE File, PCRTTIMESPEC pAccessTime,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: pFile=%p, *pAccessTime=%lli, *pModificationTime=%lli, *pChangeTime=%lli, *pBirthTime=%lli\n",
82391de567696f10b21a762fde6a06fe3c266d28vboxsync __PRETTY_FUNCTION__,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pAccessTime ? (long long)RTTimeSpecGetNano(pAccessTime) : -1,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pModificationTime
82391de567696f10b21a762fde6a06fe3c266d28vboxsync ? (long long)RTTimeSpecGetNano(pModificationTime) : -1,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pChangeTime ? (long long)RTTimeSpecGetNano(pChangeTime) : -1,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pBirthTime ? (long long)RTTimeSpecGetNano(pBirthTime) : -1); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTFileUnlock(RTFILE File, int64_t offLock, uint64_t cbLock)
82391de567696f10b21a762fde6a06fe3c266d28vboxsync /* RTPrintf("%s: hFile=%p, ofLock=%lli, cbLock=%llu\n", __PRETTY_FUNCTION__,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync File, (long long) offLock, LLUIFY(cbLock)); */
ebcdaa5077bc9189c419330b1c84880018e3db99vboxsyncextern int testRTFileWrite(RTFILE File, const void *pvBuf, size_t cbToWrite,
ebcdaa5077bc9189c419330b1c84880018e3db99vboxsync /* RTPrintf("%s: File=%p, pvBuf=%.*s, cbToWrite=%llu\n", __PRETTY_FUNCTION__,
ebcdaa5077bc9189c419330b1c84880018e3db99vboxsync File, cbToWrite, (const char *)pvBuf, LLUIFY(cbToWrite)); */
ebcdaa5077bc9189c419330b1c84880018e3db99vboxsync ARRAY_FROM_PATH(testRTFileWriteData, (const char *)pvBuf);
ebcdaa5077bc9189c419330b1c84880018e3db99vboxsyncextern int testRTFsQueryProperties(const char *pszFsPath,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s, pszFsPath=%s\n", __PRETTY_FUNCTION__, pszFsPath);
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync RT_ZERO(*pProperties); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTFsQuerySerial(const char *pszFsPath, uint32_t *pu32Serial)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync{ RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTFsQuerySizes(const char *pszFsPath, PRTFOFF pcbTotal,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync uint32_t *pcbSector) { RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTPathQueryInfoEx(const char *pszPath,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync /* RTPrintf("%s: pszPath=%s, enmAdditionalAttribs=0x%x, fFlags=0x%x\n",
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync __PRETTY_FUNCTION__, pszPath, (unsigned) enmAdditionalAttribs,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync (unsigned) fFlags); */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTSymlinkDelete(const char *pszSymlink, uint32_t fDelete)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync{ RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncextern int testRTSymlinkRead(const char *pszSymlink, char *pszTarget,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync{ RTPrintf("%s\n", __PRETTY_FUNCTION__); return 0; }
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/******************************************************************************
924c248d11ce3849739cc64791d34564d68869cevboxsync******************************************************************************/
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testMappingsQuery(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncvoid testMappingsQueryTooFewBuffers(RTTEST hTest) {}
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncvoid testMappingsQueryArrayWrongSize(RTTEST hTest) {}
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testMappingsQueryName(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncvoid testMappingsQueryNameBadBuffer(RTTEST hTest) {}
924c248d11ce3849739cc64791d34564d68869cevboxsync/* Sub-tests for testMapFolder(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testUnmapFolder(). */
924c248d11ce3849739cc64791d34564d68869cevboxsync/* Sub-tests for testCreate(). */
924c248d11ce3849739cc64791d34564d68869cevboxsync/* Sub-tests for testClose(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testRead(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync/* Sub-tests for testWrite(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testLock(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync/* Sub-tests for testFlush(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testDirList(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testReadLink(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testFSInfo(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testRemove(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testRename(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync/* Sub-tests for testSymlink(). */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/* Sub-tests for testMappingsAdd(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsync/* Sub-tests for testMappingsRemove(). */
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncvoid testMappingsRemoveBadParameters(RTTEST hTest) {}
82391de567696f10b21a762fde6a06fe3c266d28vboxsyncstatic void fillTestShflString(struct TESTSHFLSTRING *pDest,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync < sizeof(*pDest) - RT_UOFFSETOF(SHFLSTRING, String));
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pDest->string.u16Length = (uint16_t)(strlen(pcszSource) * sizeof(RTUTF16));
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pDest->string.u16Size = pDest->string.u16Length + sizeof(RTUTF16);
82391de567696f10b21a762fde6a06fe3c266d28vboxsync for (unsigned i = 0; i <= pDest->string.u16Length; ++i)
82391de567696f10b21a762fde6a06fe3c266d28vboxsync pDest->string.String.ucs2[i] = (uint16_t)pcszSource[i];
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic SHFLROOT initWithWritableMapping(RTTEST hTest,
82391de567696f10b21a762fde6a06fe3c266d28vboxsync VBOXHGCMSVCPARM aParms[RT_MAX(SHFL_CPARMS_ADD_MAPPING,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync VBOXHGCMCALLHANDLE_TYPEDEF callHandle = { VINF_SUCCESS };
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync = RTTestGuardedAllocTail(hTest, psvcTable->cbClient));
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[0].setPointer(&FolderName, RT_UOFFSETOF(SHFLSTRING, String)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[1].setPointer(&Mapping, RT_UOFFSETOF(SHFLSTRING, String)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync rc = psvcTable->pfnHostCall(psvcTable->pvService, SHFL_FN_ADD_MAPPING,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[0].setPointer(&Mapping, RT_UOFFSETOF(SHFLSTRING, String)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync psvcTable->pfnCall(psvcTable->pvService, &callHandle, 0,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync/** @todo Mappings should be automatically removed by unloading the service,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync * but unloading is currently a no-op! */
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic void unmapAndRemoveMapping(RTTEST hTest, VBOXHGCMSVCFNTABLE *psvcTable,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync VBOXHGCMSVCPARM aParms[RT_MAX(SHFL_CPARMS_UNMAP_FOLDER,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync VBOXHGCMCALLHANDLE_TYPEDEF callHandle = { VINF_SUCCESS };
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync psvcTable->pfnCall(psvcTable->pvService, &callHandle, 0,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[0].setPointer(&FolderName, RT_UOFFSETOF(SHFLSTRING, String)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync rc = psvcTable->pfnHostCall(psvcTable->pvService, SHFL_FN_REMOVE_MAPPING,
2ad9f8a731c73f6ac74044d42d47bbaf6f44a566vboxsyncstatic int createFile(VBOXHGCMSVCFNTABLE *psvcTable, SHFLROOT Root,
2ad9f8a731c73f6ac74044d42d47bbaf6f44a566vboxsync VBOXHGCMCALLHANDLE_TYPEDEF callHandle = { VINF_SUCCESS };
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[1].setPointer(&Path, RT_UOFFSETOF(SHFLSTRING, String)
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync aParms[2].setPointer(&CreateParms, sizeof(CreateParms));
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync psvcTable->pfnCall(psvcTable->pvService, &callHandle, 0,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsyncstatic int readFile(VBOXHGCMSVCFNTABLE *psvcTable, SHFLROOT Root,
7b4c4bb29760b28b5727231ad446462a5b0cc01avboxsync SHFLHANDLE hFile, uint64_t offSeek, uint32_t cbRead,
if (pcbRead)
if (pcbWritten)
if (pcszPath)
if (pcFiles)
int rc;
&Result);
int rc;
int rc;
int rc;
int rc;
int rc;
int rc;
&Info);
int rc;
&Info);
== ccAtimeNano,
int rc;
&Info);
== ccAtimeNano,
int rc;
int rc;
#ifdef RT_OS_WINDOWS
(long long) testRTFileUnlockOffset));
&g_hTest);
return rcExit;