Quantcast
Channel: VMware Communities : Unanswered Discussions - Virtual Disk Development Kit
Viewing all articles
Browse latest Browse all 872

how to use VDDK to mount vmdk?

$
0
0

. compile  by vs2003

header files contain (vixDiskLib.h, vixMntapi.h, vm_basic_types.h)

dll file contain( libeay32.dll ,ssleay32.dll ,vixDiskLib.dll ,vixMntapi.dll )

 

it is my cpp file. i can't mount the vmdk file as a driver..

 

my english is not good,sorry,hope u understand my meaning. 

 

if u r willing,u can contact with me by MSN/gmail: dousao@gmail.com

 

 

#include "stdafx.h"
#include "windows.h"
#include ".\Include\vixMntapi.h"
#define VMDK_FILE "F:\\VM\\Windows XP Professional.vmdk"
//warning
void VixDiskLibGenericLogFunc0(const char *fmt, va_list args)
{
int i = 0;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
VixError   vixError ;
VixDiskLibHandle vixDiskLibHandle = NULL;
VixDiskSetHandle vixDiskSetHandle = NULL;
VixDiskLibConnection vixDiskLibCon;
VixVolumeHandle  *vixVolumeHandle = NULL;
size_t   numberOfVolumes;
VixVolumeInfo *vixVolumeInfo = NULL;
CHAR   szFileName[MAX_PATH];
do
{
vixError = VixDiskLib_Init(
VIXMNTAPI_MAJOR_VERSION,
VIXMNTAPI_MINOR_VERSION,
VixDiskLibGenericLogFunc0,
VixDiskLibGenericLogFunc0,
VixDiskLibGenericLogFunc0,
"..\\lib");
if ( VIX_OK != vixError )
{
break;
}
vixError = VixDiskLib_Connect(NULL, &vixDiskLibCon);
if ( VIX_OK != vixError )
{
break;
}
vixError = VixDiskLib_Open(
vixDiskLibCon,
VMDK_FILE,
VIXDISKLIB_FLAG_OPEN_UNBUFFERED,
&vixDiskLibHandle);
if ( VIX_OK != vixError )
{
break;
}
vixError = VixMntapi_OpenDiskSet(
&vixDiskLibHandle,
1,
0,
&vixDiskSetHandle);
if ( VIX_OK != vixError )
{
break;
}
vixError = VixMntapi_Init(
VIXMNTAPI_MAJOR_VERSION,
VIXMNTAPI_MINOR_VERSION,
VixDiskLibGenericLogFunc0,
VixDiskLibGenericLogFunc0,
VixDiskLibGenericLogFunc0,
NULL,
NULL);
if ( VIX_OK != vixError )
{
break;
}
vixError = VixMntapi_GetVolumeHandles(
vixDiskSetHandle,
&numberOfVolumes,
&vixVolumeHandle);
printf("%d\n",numberOfVolumes);
if ( VIX_OK != vixError )
{
break;
}
for ( int i = 0; i < numberOfVolumes; i++ )
{
vixError = VixMntapi_MountVolume(vixVolumeHandle[i], FALSE);
//error msg..
char* msg = VixDiskLib_GetErrorText(vixError,NULL);
MessageBoxA(NULL,msg,"",MB_OK);
VixDiskLib_FreeErrorText(msg);
printf("%d",vixError);
if ( VIX_OK != vixError )
{
break;
}
vixError = VixMntapi_GetVolumeInfo(vixVolumeHandle[i], &vixVolumeInfo);
if ( VIX_OK != vixError )
{
break;
}
wsprintf(szFileName, "%s\\a.txt", vixVolumeInfo->symbolicLink);
HANDLE hFile   = INVALID_HANDLE_VALUE;
DWORD  dwByteWritten ;
do
{
//               MessageBoxA(NULL,szFileName,"",MB_OK);
hFile = CreateFileA(szFileName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
0,
NULL);
if ( INVALID_HANDLE_VALUE == hFile )
{
break;
}
if ( !WriteFile(hFile, "123\r\n", 5, &dwByteWritten, NULL) )
{
break;
}
} while (FALSE);
if ( INVALID_HANDLE_VALUE != hFile )
{
CloseHandle(hFile);
}
VixMntapi_FreeVolumeInfo(vixVolumeInfo);
VixMntapi_DismountVolume(vixVolumeHandle[i], TRUE);
}
} while (FALSE);
if ( vixVolumeHandle )
{
VixMntapi_FreeVolumeHandles(vixVolumeHandle);
}
if ( vixDiskSetHandle )
{
        VixMntapi_CloseDiskSet(vixDiskSetHandle);
}
if ( vixDiskLibHandle )
{
VixDiskLib_Close(vixDiskLibHandle);
}
VixMntapi_Exit();
VixDiskLib_Exit();
getchar();
return 0;
}

 

hope your advice..


Viewing all articles
Browse latest Browse all 872

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>