. 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"//warningvoid 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..