VIX API应用

需要vix.lib vix.dll ssleay32.dll libeay32.dll   vm_basic_types.h vix.h 

实现虚拟机的启动、启动内部程序、snapshot、Revert等等

#include "stdafx.h"
#include <stdio.h> 
#include "vix.h" 

int main(int argc, char * argv[]) 

         VixHandle hostHandle = VIX_INVALID_HANDLE; 
         VixHandle vmHandle = VIX_INVALID_HANDLE; 
         VixHandle snapshotHandle = VIX_INVALID_HANDLE; 
         VixHandle jobHandle = VIX_INVALID_HANDLE; 
         VixError err; 
   
         printf("Hostname: "); 
         printf(argv[1]); //主机IP
         printf("\n"); 
         printf("Username: "); //主机账号
         printf(argv[2]); 
         printf("\n"); 
         printf("Password: "); 
         printf(argv[3]); 
         printf("\n"); 
         printf("VMPath: "); //虚拟机在主机上的安装目录
         printf(argv[4]); 
         printf("\n"); 
         printf("Guest Username: "); //虚拟机的账号
         printf(argv[5]); 
         printf("\n"); 
         printf("Guest Password: "); 
         printf(argv[6]); 
         printf("\n"); 
         printf("Guest Cmd: "); //虚拟机上的可行性文件
         printf(argv[7]); 
         printf("\n"); 
         printf("Guest Options: "); //一些参数 
         printf(argv[8]); 
         printf("\n");
       
         // Connect to specified host. 
         jobHandle = VixHost_Connect(VIX_API_VERSION, 
                                VIX_SERVICEPROVIDER_VMWARE_SERVER, 
                                argv[1], // hostName 
                                0, // hostPort 
                                argv[2], // userName 
                                argv[3], // password, 
                                0, // options 
                                VIX_INVALID_HANDLE, // propertyListHandle 
                                NULL, // callbackProc 
                                NULL); // clientData 
         err = VixJob_Wait(jobHandle, 
                      VIX_PROPERTY_JOB_RESULT_HANDLE, 
                      &hostHandle, 
                      VIX_PROPERTY_NONE);                             
         if (VIX_OK != err) {             
           printf("VIX Error on connect in connect: "); 
           printf(Vix_GetErrorText(err,NULL)); 
           printf("\n"); 
           goto abort; 
         } else { 
           //printf("Connected\n"); 
        } 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 
          
         //get handle 
         jobHandle = VixVM_Open(hostHandle, 
                        argv[4], 
                        NULL, // callbackProc 
                        NULL); // clientData 
         err = VixJob_Wait(jobHandle, 
                   VIX_PROPERTY_JOB_RESULT_HANDLE, 
                   &vmHandle, 
                   VIX_PROPERTY_NONE); 
         if (VIX_OK != err) { 
            printf("VIX Error on obtaining handle: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
            goto abort; 
         } else { 
            //printf("Obtained handle\n"); 
         } 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 

         //get snapshot 
         err = VixVM_GetRootSnapshot(vmHandle, 
                                         0, 
                                         &snapshotHandle); 
         if(VIX_OK != err) { 
            printf("VIX Error on obtaining root snapshot: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
                 goto abort; 
         } else { 
                 //printf("Obtained snapshot\n"); 
         } 
          

         //revert snapshot
         jobHandle = VixVM_RevertToSnapshot(vmHandle, 
                  snapshotHandle, 
                  0, // options 
                  VIX_INVALID_HANDLE, // propertyListHandle 
                  NULL, // callbackProc 
                  NULL); // clientData 
         err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); 
         if(VIX_OK != err) { 
            printf("VIX Error on reverting to snapshot: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
                 goto abort; 
         } else { 
               //printf("Reverted to snapshot\n"); 
         } 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 
          
         // Wait until guest is completely booted. 
         jobHandle = VixVM_WaitForToolsInGuest(vmHandle, 
                                       60, // timeoutInSeconds 
                                       NULL, // callbackProc 
                                       NULL); // clientData 
         err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); 
         if (VIX_OK != err) { 
                 printf("VIX Error on waitingForToolsInGuest: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
                 goto abort; 
         } else { 
                 //printf("Waited for tools in guest\n"); 
         } 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 
          
         //login 
         jobHandle = VixVM_LoginInGuest(vmHandle, 
                                 argv[5], // userName 
                                 argv[6], // password 
                                 0, // options 
                                 NULL, // callbackProc 
                                 NULL); // clientData 
         err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); 
         if (VIX_OK != err) { 
                 printf("VIX Error on login: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
                 goto abort; 
         } else { 
                 //printf("Logged into guest\n"); 
         } 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 
          
         //run capture 
         jobHandle = VixVM_RunProgramInGuest(vmHandle, 
                                                 argv[7], 
                                                 argv[8], 
                                                 VIX_RUNPROGRAM_RETURN_IMMEDIATELY, // options, 
                                                 VIX_INVALID_HANDLE, // propertyListHandle, 
                                                 NULL, // callbackProc, 
                                                 NULL); // clientData 
         err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE); 
         if (VIX_OK != err) { 
                 printf("VIX Error on run program in guest: "); 
            printf(Vix_GetErrorText(err,NULL)); 
            printf("\n"); 
                 goto abort; 
         } else { 
                 //printf("Ran program in guest\n"); 
         } 
         Vix_ReleaseHandle(snapshotHandle); 
         snapshotHandle = VIX_INVALID_HANDLE; 
         Vix_ReleaseHandle(vmHandle); 
         vmHandle = VIX_INVALID_HANDLE; 

         VixHost_Disconnect(hostHandle); 
         printf("Disconnected\n"); 
         Vix_ReleaseHandle(hostHandle); 
         hostHandle = VIX_INVALID_HANDLE; 
     
         return 0; 
         
abort: 
         Vix_ReleaseHandle(jobHandle); 
         jobHandle = VIX_INVALID_HANDLE; 

         Vix_ReleaseHandle(snapshotHandle); 
         snapshotHandle = VIX_INVALID_HANDLE; 

         Vix_ReleaseHandle(vmHandle); 
         vmHandle = VIX_INVALID_HANDLE; 

         VixHost_Disconnect(hostHandle); 
         printf("E Disconnected\n"); 
          
         Vix_ReleaseHandle(hostHandle); 
         hostHandle = VIX_INVALID_HANDLE; 
          
         return -1; 
}

进入cmd 运行,到VIX.exe中,参数如下:

VIX.exe hostIP hostUsename hostPSW WMPath WMUsername WMPSW WM_RUNProgram Option

说明:Guest Options (arg[8]) 比如当启动IE(对应参数是WM_RUNProgram),那么option 可以作为

url(e.g:www.baidu.com) 这样启动IE 就可打开baidu主页了。

这样就可以启动虚拟机了,并让其执行需要的程序了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值