;* **********************************************************
;* Copyright (c) 2004-2008 VMware, Inc.  All rights reserved. -- VMware Confidential
;* **********************************************************

#include-once

;*
;* This is the AutoIt interface to the VIX API.
;* Implemented by Greenhorn, June 2011
;*

Global $vixdll = DllOpen ("vix.dll")

;* Declare handle variables for callback functions *
Global $g_hVixEventProc

OnAutoItExitRegister ("VixDllFree")

Func VixDllFree ( )

	; Free the handle variables for callback functions here
	If ($g_hVixEventProc) Then _
		DllCallbackFree ($g_hVixEventProc)

	; Close the vix.dll
	DllClose ($vixdll)

EndFunc

;*
;*-----------------------------------------------------------------------------
;*
;* Basic Types --
;*
;*-----------------------------------------------------------------------------
;*

; typedef int VixHandle;
; typedef int VixHandleType;
; typedef uint64 VixError;
; typedef int VixPropertyType;
; typedef int VixPropertyID;
; typedef int VixEventType;
; typedef int VixHostOptions;
; typedef int VixServiceProvider;
; typedef int VixFindItemType;
; typedef int VixVMOpenOptions;
; typedef int VixPumpEventsOptions;
; typedef int VixVMPowerOpOptions;
; typedef int VixVMDeleteOptions;
; typedef int VixPowerState;
; typedef int VixToolsState;
; typedef int VixRunProgramOptions;
; typedef int VixRemoveSnapshotOptions;
; typedef int VixCreateSnapshotOptions;
; typedef int VixMsgSharedFolderOptions;
; typedef int VixCloneType;


;~ #include "vm_basic_types.h"


Global Enum $VIX_INVALID_HANDLE   = 0


;*
;* These are the types of handles.
;*
Global Enum $VIX_HANDLETYPE_NONE        = 0, _
   $VIX_HANDLETYPE_HOST                 = 2, _
   $VIX_HANDLETYPE_VM                   = 3, _
   $VIX_HANDLETYPE_NETWORK              = 5, _
   $VIX_HANDLETYPE_JOB                  = 6, _
   $VIX_HANDLETYPE_SNAPSHOT             = 7, _
   $VIX_HANDLETYPE_PROPERTY_LIST        = 9, _
   $VIX_HANDLETYPE_METADATA_CONTAINER   = 11




;*
;* The error codes are returned by all public VIX routines.
;*
	;* General errors;*

Global Enum $VIX_OK                              = 0, _
   $VIX_E_FAIL                                   = 1, _
   $VIX_E_OUT_OF_MEMORY                          = 2, _
   $VIX_E_INVALID_ARG                            = 3, _
   $VIX_E_FILE_NOT_FOUND                         = 4, _
   $VIX_E_OBJECT_IS_BUSY                         = 5, _
   $VIX_E_NOT_SUPPORTED                          = 6, _
   $VIX_E_FILE_ERROR                             = 7, _
   $VIX_E_DISK_FULL                              = 8, _
   $VIX_E_INCORRECT_FILE_TYPE                    = 9, _
   $VIX_E_CANCELLED                              = 10, _
   $VIX_E_FILE_READ_ONLY                         = 11, _
   $VIX_E_FILE_ALREADY_EXISTS                    = 12, _
   $VIX_E_FILE_ACCESS_ERROR                      = 13, _
   $VIX_E_REQUIRES_LARGE_FILES                   = 14, _
   $VIX_E_FILE_ALREADY_LOCKED                    = 15, _
   $VIX_E_VMDB                                   = 16, _
   $VIX_E_NOT_SUPPORTED_ON_REMOTE_OBJECT         = 20, _
   $VIX_E_FILE_TOO_BIG                           = 21, _
   $VIX_E_FILE_NAME_INVALID                      = 22, _
   $VIX_E_ALREADY_EXISTS                         = 23, _
   $VIX_E_BUFFER_TOOSMALL                        = 24, _
   $VIX_E_OBJECT_NOT_FOUND                       = 25, _
   $VIX_E_HOST_NOT_CONNECTED                     = 26, _
   $VIX_E_INVALID_UTF8_STRING                    = 27, _
   $VIX_E_OPERATION_ALREADY_IN_PROGRESS          = 31, _
   $VIX_E_UNFINISHED_JOB                         = 29, _
   $VIX_E_NEED_KEY                               = 30, _
   $VIX_E_LICENSE                                = 32, _
   $VIX_E_VM_HOST_DISCONNECTED                   = 34, _
   $VIX_E_AUTHENTICATION_FAIL                    = 35, _
   $VIX_E_HOST_CONNECTION_LOST                   = 36, _
   $VIX_E_DUPLICATE_NAME                         = 41

 	;* Handle Errors;*
 Global Enum  $VIX_E_INVALID_HANDLE              = 1000, _
   $VIX_E_NOT_SUPPORTED_ON_HANDLE_TYPE           = 1001, _
   $VIX_E_TOO_MANY_HANDLES                       = 1002

 	;* XML errors;*
 Global Enum $VIX_E_NOT_FOUND                    = 2000, _
   $VIX_E_TYPE_MISMATCH                          = 2001, _
   $VIX_E_INVALID_XML                            = 2002

 	;* VM Control Errors;*
 Global Enum $VIX_E_TIMEOUT_WAITING_FOR_TOOLS    = 3000, _
   $VIX_E_UNRECOGNIZED_COMMAND                   = 3001, _
   $VIX_E_OP_NOT_SUPPORTED_ON_GUEST              = 3003, _
   $VIX_E_PROGRAM_NOT_STARTED                    = 3004, _
   $VIX_E_CANNOT_START_READ_ONLY_VM              = 3005, _
   $VIX_E_VM_NOT_RUNNING                         = 3006, _
   $VIX_E_VM_IS_RUNNING                          = 3007, _
   $VIX_E_CANNOT_CONNECT_TO_VM                   = 3008, _
   $VIX_E_POWEROP_SCRIPTS_NOT_AVAILABLE          = 3009, _
   $VIX_E_NO_GUEST_OS_INSTALLED                  = 3010, _
   $VIX_E_VM_INSUFFICIENT_HOST_MEMORY            = 3011, _
   $VIX_E_SUSPEND_ERROR                          = 3012, _
   $VIX_E_VM_NOT_ENOUGH_CPUS                     = 3013, _
   $VIX_E_HOST_USER_PERMISSIONS                  = 3014, _
   $VIX_E_GUEST_USER_PERMISSIONS                 = 3015, _
   $VIX_E_TOOLS_NOT_RUNNING                      = 3016, _
   $VIX_E_GUEST_OPERATIONS_PROHIBITED            = 3017, _
   $VIX_E_ANON_GUEST_OPERATIONS_PROHIBITED       = 3018, _
   $VIX_E_ROOT_GUEST_OPERATIONS_PROHIBITED       = 3019, _
   $VIX_E_MISSING_ANON_GUEST_ACCOUNT             = 3023, _
   $VIX_E_CANNOT_AUTHENTICATE_WITH_GUEST         = 3024, _
   $VIX_E_UNRECOGNIZED_COMMAND_IN_GUEST          = 3025, _
   $VIX_E_CONSOLE_GUEST_OPERATIONS_PROHIBITED    = 3026, _
   $VIX_E_MUST_BE_CONSOLE_USER                   = 3027, _
   $VIX_E_VMX_MSG_DIALOG_AND_NO_UI               = 3028, _
   $VIX_E_NOT_ALLOWED_DURING_VM_RECORDING        = 3029, _
   $VIX_E_NOT_ALLOWED_DURING_VM_REPLAY           = 3030, _
   $VIX_E_OPERATION_NOT_ALLOWED_FOR_LOGIN_TYPE   = 3031, _
   $VIX_E_LOGIN_TYPE_NOT_SUPPORTED               = 3032, _
   $VIX_E_EMPTY_PASSWORD_NOT_ALLOWED_IN_GUEST    = 3033, _
   $VIX_E_INTERACTIVE_SESSION_NOT_PRESENT        = 3034, _
   $VIX_E_INTERACTIVE_SESSION_USER_MISMATCH      = 3035, _
   $VIX_E_UNABLE_TO_REPLAY_VM                    = 3039, _
   $VIX_E_CANNOT_POWER_ON_VM                     = 3041, _
   $VIX_E_NO_DISPLAY_SERVER                      = 3043, _
   $VIX_E_VM_NOT_RECORDING                       = 3044, _
   $VIX_E_VM_NOT_REPLAYING                       = 3045

 	;* VM Errors;*
 Global Enum $VIX_E_VM_NOT_FOUND                 = 4000, _
   $VIX_E_NOT_SUPPORTED_FOR_VM_VERSION           = 4001, _
   $VIX_E_CANNOT_READ_VM_CONFIG                  = 4002, _
   $VIX_E_TEMPLATE_VM                            = 4003, _
   $VIX_E_VM_ALREADY_LOADED                      = 4004, _
   $VIX_E_VM_ALREADY_UP_TO_DATE                  = 4006, _
   $VIX_E_VM_UNSUPPORTED_GUEST                   = 4011

 	;* Property Errors;*
 Global Enum $VIX_E_UNRECOGNIZED_PROPERTY        = 6000, _
   $VIX_E_INVALID_PROPERTY_VALUE                 = 6001, _
   $VIX_E_READ_ONLY_PROPERTY                     = 6002, _
   $VIX_E_MISSING_REQUIRED_PROPERTY              = 6003, _
   $VIX_E_INVALID_SERIALIZED_DATA                = 6004, _
   $VIX_E_PROPERTY_TYPE_MISMATCH                 = 6005

 	;* Completion Errors;*
 Global Enum $VIX_E_BAD_VM_INDEX                 = 8000

 	;* Message errors;*
 Global Enum  $VIX_E_INVALID_MESSAGE_HEADER      = 10000, _
   $VIX_E_INVALID_MESSAGE_BODY                   = 10001

 	;* Snapshot errors;*
 Global Enum $VIX_E_SNAPSHOT_INVAL               = 13000, _
   $VIX_E_SNAPSHOT_DUMPER                        = 13001, _
   $VIX_E_SNAPSHOT_DISKLIB                       = 13002, _
   $VIX_E_SNAPSHOT_NOTFOUND                      = 13003, _
   $VIX_E_SNAPSHOT_EXISTS                        = 13004, _
   $VIX_E_SNAPSHOT_VERSION                       = 13005, _
   $VIX_E_SNAPSHOT_NOPERM                        = 13006, _
   $VIX_E_SNAPSHOT_CONFIG                        = 13007, _
   $VIX_E_SNAPSHOT_NOCHANGE                      = 13008, _
   $VIX_E_SNAPSHOT_CHECKPOINT                    = 13009, _
   $VIX_E_SNAPSHOT_LOCKED                        = 13010, _
   $VIX_E_SNAPSHOT_INCONSISTENT                  = 13011, _
   $VIX_E_SNAPSHOT_NAMETOOLONG                   = 13012, _
   $VIX_E_SNAPSHOT_VIXFILE                       = 13013, _
   $VIX_E_SNAPSHOT_DISKLOCKED                    = 13014, _
   $VIX_E_SNAPSHOT_DUPLICATEDDISK                = 13015, _
   $VIX_E_SNAPSHOT_INDEPENDENTDISK               = 13016, _
   $VIX_E_SNAPSHOT_NONUNIQUE_NAME                = 13017, _
   $VIX_E_SNAPSHOT_MEMORY_ON_INDEPENDENT_DISK    = 13018, _
   $VIX_E_SNAPSHOT_MAXSNAPSHOTS                  = 13019, _
   $VIX_E_SNAPSHOT_MIN_FREE_SPACE                = 13020, _
   $VIX_E_SNAPSHOT_HIERARCHY_TOODEEP             = 13021

 	;* Host Errors;*
 Global Enum $VIX_E_HOST_DISK_INVALID_VALUE      = 14003, _
   $VIX_E_HOST_DISK_SECTORSIZE                   = 14004, _
   $VIX_E_HOST_FILE_ERROR_EOF                    = 14005, _
   $VIX_E_HOST_NETBLKDEV_HANDSHAKE               = 14006, _
   $VIX_E_HOST_SOCKET_CREATION_ERROR             = 14007, _
   $VIX_E_HOST_SERVER_NOT_FOUND                  = 14008, _
   $VIX_E_HOST_NETWORK_CONN_REFUSED              = 14009, _
   $VIX_E_HOST_TCP_SOCKET_ERROR                  = 14010, _
   $VIX_E_HOST_TCP_CONN_LOST                     = 14011, _
   $VIX_E_HOST_NBD_HASHFILE_VOLUME               = 14012, _
   $VIX_E_HOST_NBD_HASHFILE_INIT                 = 14013

 	;* Disklib errors;*
 Global Enum $VIX_E_DISK_INVAL                   = 16000, _
   $VIX_E_DISK_NOINIT                            = 16001, _
   $VIX_E_DISK_NOIO                              = 16002, _
   $VIX_E_DISK_PARTIALCHAIN                      = 16003, _
   $VIX_E_DISK_NEEDSREPAIR                       = 16006, _
   $VIX_E_DISK_OUTOFRANGE                        = 16007, _
   $VIX_E_DISK_CID_MISMATCH                      = 16008, _
   $VIX_E_DISK_CANTSHRINK                        = 16009, _
   $VIX_E_DISK_PARTMISMATCH                      = 16010, _
   $VIX_E_DISK_UNSUPPORTEDDISKVERSION            = 16011, _
   $VIX_E_DISK_OPENPARENT                        = 16012, _
   $VIX_E_DISK_NOTSUPPORTED                      = 16013, _
   $VIX_E_DISK_NEEDKEY                           = 16014, _
   $VIX_E_DISK_NOKEYOVERRIDE                     = 16015, _
   $VIX_E_DISK_NOTENCRYPTED                      = 16016, _
   $VIX_E_DISK_NOKEY                             = 16017, _
   $VIX_E_DISK_INVALIDPARTITIONTABLE             = 16018, _
   $VIX_E_DISK_NOTNORMAL                         = 16019, _
   $VIX_E_DISK_NOTENCDESC                        = 16020, _
   $VIX_E_DISK_NEEDVMFS                          = 16022, _
   $VIX_E_DISK_RAWTOOBIG                         = 16024, _
   $VIX_E_DISK_TOOMANYOPENFILES                  = 16027, _
   $VIX_E_DISK_TOOMANYREDO                       = 16028, _
   $VIX_E_DISK_RAWTOOSMALL                       = 16029, _
   $VIX_E_DISK_INVALIDCHAIN                      = 16030, _
   $VIX_E_DISK_KEY_NOTFOUND                      = 16052, _ ;// metadata key is not found
   $VIX_E_DISK_SUBSYSTEM_INIT_FAIL               = 16053, _
   $VIX_E_DISK_INVALID_CONNECTION                = 16054, _
   $VIX_E_DISK_ENCODING                          = 16061, _
   $VIX_E_DISK_CANTREPAIR                        = 16062, _
   $VIX_E_DISK_INVALIDDISK                       = 16063, _
   $VIX_E_DISK_NOLICENSE                         = 16064, _
   $VIX_E_DISK_NODEVICE                          = 16065, _
   $VIX_E_DISK_UNSUPPORTEDDEVICE                 = 16066

 	;* Crypto Library Errors;*
 Global Enum $VIX_E_CRYPTO_UNKNOWN_ALGORITHM     = 17000, _
   $VIX_E_CRYPTO_BAD_BUFFER_SIZE                 = 17001, _
   $VIX_E_CRYPTO_INVALID_OPERATION               = 17002, _
   $VIX_E_CRYPTO_RANDOM_DEVICE                   = 17003, _
   $VIX_E_CRYPTO_NEED_PASSWORD                   = 17004, _
   $VIX_E_CRYPTO_BAD_PASSWORD                    = 17005, _
   $VIX_E_CRYPTO_NOT_IN_DICTIONARY               = 17006, _
   $VIX_E_CRYPTO_NO_CRYPTO                       = 17007, _
   $VIX_E_CRYPTO_ERROR                           = 17008, _
   $VIX_E_CRYPTO_BAD_FORMAT                      = 17009, _
   $VIX_E_CRYPTO_LOCKED                          = 17010, _
   $VIX_E_CRYPTO_EMPTY                           = 17011, _
   $VIX_E_CRYPTO_KEYSAFE_LOCATOR                 = 17012

 	;* Remoting Errors.;*
 Global Enum $VIX_E_CANNOT_CONNECT_TO_HOST       = 18000, _
   $VIX_E_NOT_FOR_REMOTE_HOST                    = 18001, _
   $VIX_E_INVALID_HOSTNAME_SPECIFICATION         = 18002

 	;* Screen Capture Errors.;*
 Global Enum $VIX_E_SCREEN_CAPTURE_ERROR         = 19000, _
   $VIX_E_SCREEN_CAPTURE_BAD_FORMAT              = 19001, _
   $VIX_E_SCREEN_CAPTURE_COMPRESSION_FAIL        = 19002, _
   $VIX_E_SCREEN_CAPTURE_LARGE_DATA              = 19003

 	;* Guest Errors;*
 Global Enum $VIX_E_GUEST_VOLUMES_NOT_FROZEN     = 20000, _
   $VIX_E_NOT_A_FILE                             = 20001, _
   $VIX_E_NOT_A_DIRECTORY                        = 20002, _
   $VIX_E_NO_SUCH_PROCESS                        = 20003, _
   $VIX_E_FILE_NAME_TOO_LONG                     = 20004

 	;* Tools install errors;*
 Global Enum $VIX_E_TOOLS_INSTALL_NO_IMAGE       = 21000, _
   $VIX_E_TOOLS_INSTALL_IMAGE_INACCESIBLE        = 21001, _
   $VIX_E_TOOLS_INSTALL_NO_DEVICE                = 21002, _
   $VIX_E_TOOLS_INSTALL_DEVICE_NOT_CONNECTED     = 21003, _
   $VIX_E_TOOLS_INSTALL_CANCELLED                = 21004, _
   $VIX_E_TOOLS_INSTALL_INIT_FAILED              = 21005, _
   $VIX_E_TOOLS_INSTALL_AUTO_NOT_SUPPORTED       = 21006, _
   $VIX_E_TOOLS_INSTALL_GUEST_NOT_READY          = 21007, _
   $VIX_E_TOOLS_INSTALL_SIG_CHECK_FAILED         = 21008, _
   $VIX_E_TOOLS_INSTALL_ERROR                    = 21009, _
   $VIX_E_TOOLS_INSTALL_ALREADY_UP_TO_DATE       = 21010, _
   $VIX_E_TOOLS_INSTALL_IN_PROGRESS              = 21011

 	;* Wrapper Errors;*
 Global Enum $VIX_E_WRAPPER_WORKSTATION_NOT_INSTALLED      = 22001, _
   $VIX_E_WRAPPER_VERSION_NOT_FOUND              = 22002, _
   $VIX_E_WRAPPER_SERVICEPROVIDER_NOT_FOUND      = 22003, _
   $VIX_E_WRAPPER_PLAYER_NOT_INSTALLED           = 22004, _
   $VIX_E_WRAPPER_RUNTIME_NOT_INSTALLED          = 22005, _
   $VIX_E_WRAPPER_MULTIPLE_SERVICEPROVIDERS      = 22006

 	;* FuseMnt errors*
 Global Enum $VIX_E_MNTAPI_MOUNTPT_NOT_FOUND     = 24000, _
   $VIX_E_MNTAPI_MOUNTPT_IN_USE                  = 24001, _
   $VIX_E_MNTAPI_DISK_NOT_FOUND                  = 24002, _
   $VIX_E_MNTAPI_DISK_NOT_MOUNTED                = 24003, _
   $VIX_E_MNTAPI_DISK_IS_MOUNTED                 = 24004, _
   $VIX_E_MNTAPI_DISK_NOT_SAFE                   = 24005, _
   $VIX_E_MNTAPI_DISK_CANT_OPEN                  = 24006, _
   $VIX_E_MNTAPI_CANT_READ_PARTS                 = 24007, _
   $VIX_E_MNTAPI_UMOUNT_APP_NOT_FOUND            = 24008, _
   $VIX_E_MNTAPI_UMOUNT                          = 24009, _
   $VIX_E_MNTAPI_NO_MOUNTABLE_PARTITONS          = 24010, _
   $VIX_E_MNTAPI_PARTITION_RANGE                 = 24011, _
   $VIX_E_MNTAPI_PERM                            = 24012, _
   $VIX_E_MNTAPI_DICT                            = 24013, _
   $VIX_E_MNTAPI_DICT_LOCKED                     = 24014, _
   $VIX_E_MNTAPI_OPEN_HANDLES                    = 24015, _
   $VIX_E_MNTAPI_CANT_MAKE_VAR_DIR               = 24016, _
   $VIX_E_MNTAPI_NO_ROOT                         = 24017, _
   $VIX_E_MNTAPI_LOOP_FAILED                     = 24018, _
   $VIX_E_MNTAPI_DAEMON                          = 24019, _
   $VIX_E_MNTAPI_INTERNAL                        = 24020, _
   $VIX_E_MNTAPI_SYSTEM                          = 24021, _
   $VIX_E_MNTAPI_NO_CONNECTION_DETAILS           = 24022
    ;* FuseMnt errors: Do not exceed 24299;*/

 	;* VixMntapi errors*/
 Global Enum $VIX_E_MNTAPI_INCOMPATIBLE_VERSION  = 24300, _
   $VIX_E_MNTAPI_OS_ERROR                        = 24301, _
   $VIX_E_MNTAPI_DRIVE_LETTER_IN_USE             = 24302, _
   $VIX_E_MNTAPI_DRIVE_LETTER_ALREADY_ASSIGNED   = 24303, _
   $VIX_E_MNTAPI_VOLUME_NOT_MOUNTED              = 24304, _
   $VIX_E_MNTAPI_VOLUME_ALREADY_MOUNTED          = 24305, _
   $VIX_E_MNTAPI_FORMAT_FAILURE                  = 24306, _
   $VIX_E_MNTAPI_NO_DRIVER                       = 24307, _
   $VIX_E_MNTAPI_ALREADY_OPENED                  = 24308, _
   $VIX_E_MNTAPI_ITEM_NOT_FOUND                  = 24309, _
   $VIX_E_MNTAPI_UNSUPPROTED_BOOT_LOADER         = 24310, _
   $VIX_E_MNTAPI_UNSUPPROTED_OS                  = 24311, _
   $VIX_E_MNTAPI_CODECONVERSION                  = 24312, _
   $VIX_E_MNTAPI_REGWRITE_ERROR                  = 24313, _
   $VIX_E_MNTAPI_UNSUPPORTED_FT_VOLUME           = 24314, _
   $VIX_E_MNTAPI_PARTITION_NOT_FOUND             = 24315, _
   $VIX_E_MNTAPI_PUTFILE_ERROR                   = 24316, _
   $VIX_E_MNTAPI_GETFILE_ERROR                   = 24317, _
   $VIX_E_MNTAPI_REG_NOT_OPENED                  = 24318, _
   $VIX_E_MNTAPI_REGDELKEY_ERROR                 = 24319, _
   $VIX_E_MNTAPI_CREATE_PARTITIONTABLE_ERROR     = 24320, _
   $VIX_E_MNTAPI_OPEN_FAILURE                    = 24321, _
   $VIX_E_MNTAPI_VOLUME_NOT_WRITABLE             = 24322

 	;* Network Errors;*/
 Global Enum $VIX_E_NET_HTTP_UNSUPPORTED_PROTOCOL     = 30001, _
   $VIX_E_NET_HTTP_URL_MALFORMAT            = 30003, _
   $VIX_E_NET_HTTP_COULDNT_RESOLVE_PROXY    = 30005, _
   $VIX_E_NET_HTTP_COULDNT_RESOLVE_HOST     = 30006, _
   $VIX_E_NET_HTTP_COULDNT_CONNECT          = 30007, _
   $VIX_E_NET_HTTP_HTTP_RETURNED_ERROR      = 30022, _
   $VIX_E_NET_HTTP_OPERATION_TIMEDOUT       = 30028, _
   $VIX_E_NET_HTTP_SSL_CONNECT_ERROR        = 30035, _
   $VIX_E_NET_HTTP_TOO_MANY_REDIRECTS       = 30047, _
   $VIX_E_NET_HTTP_TRANSFER                 = 30200, _
   $VIX_E_NET_HTTP_SSL_SECURITY             = 30201, _
   $VIX_E_NET_HTTP_GENERIC                  = 30202

Func VIX_ERROR_CODE ($err)
	Return BitAND($err, 0xFFFF)
EndFunc

Func VIX_SUCCEEDED ($err)
	Return $VIX_OK == ($err)
EndFunc

Func VIX_FAILED ($err)
	Return $VIX_OK <> ($err)
EndFunc

Func Vix_GetErrorText ($err, $locale)

	Local $aRes = DllCall ($vixdll, "str", "Vix_GetErrorText", _
								"UINT64", $err, _
								"str", $locale)
	Return $aRes[0]

EndFunc

;*
;*-----------------------------------------------------------------------------
;*
;* VIX Handles --
;*
;* These are common functions that apply to handles of several types.
;*-----------------------------------------------------------------------------
;*

;*
;* VIX Property Type
;*

;~ typedef int VixPropertyType;
Global Enum $VIX_PROPERTYTYPE_ANY    = 0, _
   $VIX_PROPERTYTYPE_INTEGER         = 1, _
   $VIX_PROPERTYTYPE_STRING          = 2, _
   $VIX_PROPERTYTYPE_BOOL            = 3, _
   $VIX_PROPERTYTYPE_HANDLE          = 4, _
   $VIX_PROPERTYTYPE_INT64           = 5, _
   $VIX_PROPERTYTYPE_BLOB            = 6

;*
;* VIX Property ID's
;*

;~ typedef int VixPropertyID;
Global Enum $VIX_PROPERTY_NONE                         = 0

    ;* Properties used by several handle types.;*/
Global Enum $VIX_PROPERTY_META_DATA_CONTAINER          = 2

    ;* VIX_HANDLETYPE_HOST properties;*/
 Global Enum $VIX_PROPERTY_HOST_HOSTTYPE               = 50, _
   $VIX_PROPERTY_HOST_API_VERSION                      = 51

    ;* VIX_HANDLETYPE_VM properties;*/
 Global Enum $VIX_PROPERTY_VM_NUM_VCPUS                = 101, _
   $VIX_PROPERTY_VM_VMX_PATHNAME                       = 103, _
   $VIX_PROPERTY_VM_VMTEAM_PATHNAME                    = 105, _
   $VIX_PROPERTY_VM_MEMORY_SIZE                        = 106, _
   $VIX_PROPERTY_VM_READ_ONLY                          = 107, _
   $VIX_PROPERTY_VM_NAME                               = 108, _
   $VIX_PROPERTY_VM_GUESTOS                            = 109, _
   $VIX_PROPERTY_VM_IN_VMTEAM                          = 128, _
   $VIX_PROPERTY_VM_POWER_STATE                        = 129, _
   $VIX_PROPERTY_VM_TOOLS_STATE                        = 152, _
   $VIX_PROPERTY_VM_IS_RUNNING                         = 196, _
   $VIX_PROPERTY_VM_SUPPORTED_FEATURES                 = 197, _
   $VIX_PROPERTY_VM_IS_RECORDING                       = 236, _
   $VIX_PROPERTY_VM_IS_REPLAYING                       = 237

    ;* Result properties; these are returned by various procedures;*/
 Global Enum $VIX_PROPERTY_JOB_RESULT_ERROR_CODE       = 3000, _
   $VIX_PROPERTY_JOB_RESULT_VM_IN_GROUP                = 3001, _
   $VIX_PROPERTY_JOB_RESULT_USER_MESSAGE               = 3002, _
   $VIX_PROPERTY_JOB_RESULT_EXIT_CODE                  = 3004, _
   $VIX_PROPERTY_JOB_RESULT_COMMAND_OUTPUT             = 3005, _
   $VIX_PROPERTY_JOB_RESULT_HANDLE                     = 3010, _
   $VIX_PROPERTY_JOB_RESULT_GUEST_OBJECT_EXISTS        = 3011, _
   $VIX_PROPERTY_JOB_RESULT_GUEST_PROGRAM_ELAPSED_TIME = 3017, _
   $VIX_PROPERTY_JOB_RESULT_GUEST_PROGRAM_EXIT_CODE    = 3018, _
   $VIX_PROPERTY_JOB_RESULT_ITEM_NAME                  = 3035, _
   $VIX_PROPERTY_JOB_RESULT_FOUND_ITEM_DESCRIPTION     = 3036, _
   $VIX_PROPERTY_JOB_RESULT_SHARED_FOLDER_COUNT        = 3046, _
   $VIX_PROPERTY_JOB_RESULT_SHARED_FOLDER_HOST         = 3048, _
   $VIX_PROPERTY_JOB_RESULT_SHARED_FOLDER_FLAGS        = 3049, _
   $VIX_PROPERTY_JOB_RESULT_PROCESS_ID                 = 3051, _
   $VIX_PROPERTY_JOB_RESULT_PROCESS_OWNER              = 3052, _
   $VIX_PROPERTY_JOB_RESULT_PROCESS_COMMAND            = 3053, _
   $VIX_PROPERTY_JOB_RESULT_FILE_FLAGS                 = 3054, _
   $VIX_PROPERTY_JOB_RESULT_PROCESS_START_TIME         = 3055, _
   $VIX_PROPERTY_JOB_RESULT_VM_VARIABLE_STRING         = 3056, _
   $VIX_PROPERTY_JOB_RESULT_PROCESS_BEING_DEBUGGED     = 3057, _
   $VIX_PROPERTY_JOB_RESULT_SCREEN_IMAGE_SIZE          = 3058, _
   $VIX_PROPERTY_JOB_RESULT_SCREEN_IMAGE_DATA          = 3059, _
   $VIX_PROPERTY_JOB_RESULT_FILE_SIZE                  = 3061, _
   $VIX_PROPERTY_JOB_RESULT_FILE_MOD_TIME              = 3062, _
   $VIX_PROPERTY_JOB_RESULT_EXTRA_ERROR_INFO           = 3084

    ;* Event properties; these are sent in the moreEventInfo for some events.;*/
 Global Enum $VIX_PROPERTY_FOUND_ITEM_LOCATION         = 4010

    ;* VIX_HANDLETYPE_SNAPSHOT properties;*/
 Global Enum $VIX_PROPERTY_SNAPSHOT_DISPLAYNAME        = 4200, _
   $VIX_PROPERTY_SNAPSHOT_DESCRIPTION                  = 4201, _
   $VIX_PROPERTY_SNAPSHOT_POWERSTATE                   = 4205, _
   $VIX_PROPERTY_SNAPSHOT_IS_REPLAYABLE                = 4207

 Global Enum $VIX_PROPERTY_GUEST_SHAREDFOLDERS_SHARES_PATH       = 4525

    ;* Virtual machine encryption properties;*/
 Global Enum $VIX_PROPERTY_VM_ENCRYPTION_PASSWORD      = 7001

;*
;* These are events that may be signalled by calling a procedure
;* of type VixEventProc.
;*

;~ typedef int VixEventType;
Global Enum $VIX_EVENTTYPE_JOB_COMPLETED = 2, _
   $VIX_EVENTTYPE_JOB_PROGRESS           = 3, _
   $VIX_EVENTTYPE_FIND_ITEM              = 8, _
   $VIX_EVENTTYPE_CALLBACK_SIGNALLED     = 2		; Deprecated - Use VIX_EVENTTYPE_JOB_COMPLETED instead.


;*
;* These are the property flags for each file.
;*

Global Enum $VIX_FILE_ATTRIBUTES_DIRECTORY       = 0x0001, _
   $VIX_FILE_ATTRIBUTES_SYMLINK                  = 0x0002

;*
;* Procedures of this type are called when an event happens on a handle.
;*

;************************************************************************
;* Registration of function prototype, must be implemented by the user! *
;************************************************************************

;~ $g_hVixEventProc = DllCallbackRegister ("VixEventProc", "none", "int;int;int;ptr")

;********************************************************
;* Function prototype, must be implemented by the user! *
;********************************************************

;~ Func VixEventProc ($handle, $eventType, $moreEventInfo, $clientData)
;~
;~ 	; $handle - An int value
;~ 	; $eventType - An int value
;~ 	; $moreEventInfo - An int value
;~ 	; $clientData - A void pointer to a structure
;~
;~ 	; Code goes here ...

;~ 	; No return value

;~ EndFunc


;*
;* Handle Property functions
;*/

Func Vix_ReleaseHandle ($handle)

	Local $aRes = DllCall ($vixdll, "none", "Vix_ReleaseHandle", _
								"int", $handle)	; VixHandle
	Return $aRes[0]

EndFunc

Func Vix_AddRefHandle ($handle)

	Local $aRes = DllCall ($vixdll, "none", "Vix_AddRefHandle", _
								"int", $handle)	; VixHandle
	Return $aRes[0]

EndFunc

Func Vix_GetHandleType ($handle)

	Local $aRes = DllCall ($vixdll, "int", "Vix_GetHandleType", _
								"int", $handle)	; VixHandle
	Return $aRes[0]

EndFunc

Func Vix_GetProperties ($handle, $firstPropertyID, $secondPropertyID = 0, $thirdPropertyID = 0, $fourthPropertyID = 0, $fifthPropertyID = 0, $sixthPropertyID = 0, $seventhPropertyID = 0, $eighthPropertyID = 0, $ninthPropertyID = 0, $tenthPropertyID = 0)

	Local $aRes = DllCall ($vixdll, "uint64", "Vix_GetProperties", _
								"int", $handle, _			; VixHandle
								"int", $firstPropertyID, _	; VixPropertyID
								"int", $secondPropertyID, _	; VixPropertyID
								"int", $thirdPropertyID, _	; VixPropertyID
								"int", $fourthPropertyID, _	; VixPropertyID
								"int", $fifthPropertyID, _	; VixPropertyID
								"int", $sixthPropertyID, _	; VixPropertyID
								"int", $seventhPropertyID, _	; VixPropertyID
								"int", $eighthPropertyID, _	; VixPropertyID
								"int", $ninthPropertyID, _	; VixPropertyID
								"int", $tenthPropertyID)		; VixPropertyID
	Return $aRes[0]

EndFunc

Func Vix_GetPropertyType ($handle, $propertyID, $propertyType)

	Local $aRes = DllCall ($vixdll, "uint64", "Vix_GetPropertyType", _
								"int", $handle, _		; VixHandle
								"int", $propertyID, _	; VixPropertyID
								"PTR", $propertyType)	; Pointer to an int
	Return $aRes[0]

EndFunc

Func Vix_FreeBuffer ($p)

	Local $aRes = DllCall ($vixdll, "none", "Vix_FreeBuffer", _
								"PTR", $p)	; void pointer
	Return $aRes[0]

EndFunc


;*
;*-----------------------------------------------------------------------------
;*
;* VIX Host --
;*
;*-----------------------------------------------------------------------------
;*

Global Enum _
   $VIX_HOSTOPTION_USE_EVENT_PUMP        = 0x0008

Global Enum _
   $VIX_SERVICEPROVIDER_DEFAULT               = 1, _
   $VIX_SERVICEPROVIDER_VMWARE_SERVER         = 2, _
   $VIX_SERVICEPROVIDER_VMWARE_WORKSTATION    = 3, _
   $VIX_SERVICEPROVIDER_VMWARE_PLAYER         = 4, _
   $VIX_SERVICEPROVIDER_VMWARE_VI_SERVER      = 10

;*
;* VIX_API_VERSION tells VixHost_Connect to use the latest API version
;* that is available for the product specified in the VixServiceProvider
;* parameter.
;*

Global Enum _
   $VIX_API_VERSION      = -1


Func VixHost_Connect ($apiVersion, $hostType, $hostName, $hostPort, $userName, $password, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixHost_Connect", _
								"INT", $apiVersion, _
								"INT", $hostType, _
								"str", $hostName, _
								"INT", $hostPort, _
								"str", $userName, _
								"str", $password, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixHost_Disconnect ($hostHandle)

	Local $aRes = DllCall ($vixdll, "none", "VixHost_Disconnect", _
								"INT", $hostHandle)
	Return $aRes[0]

EndFunc

;*
;* VM Registration
;*

Func VixHost_RegisterVM ($hostHandle, $vmxFilePath, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixHost_RegisterVM", _
								"INT", $hostHandle, _
								"str", $vmxFilePath, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixHost_UnregisterVM ($hostHandle, $vmxFilePath, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixHost_UnregisterVM", _
								"INT", $hostHandle, _
								"str", $vmxFilePath, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* VM Search
;*

Global Enum _
   $VIX_FIND_RUNNING_VMS         = 1, _
   $VIX_FIND_REGISTERED_VMS      = 4

Func VixHost_FindItems ($hostHandle, $searchType, $searchCriteria, $timeout, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixHost_FindItems", _
								"INT", $hostHandle, _
								"INT", $searchType, _
								"INT", $searchCriteria, _
								"int32", $timeout, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* VixHost_OpenVM() supercedes VixVM_Open() since it allows for
;* the passing of option flags and extra data in the form of a
;* property list.
;* It is recommended to use VixHost_OpenVM() instead of VixVM_Open().
;*

Global Enum _
   $VIX_VMOPEN_NORMAL  = 0x0

Func VixHost_OpenVM ($hostHandle, $vmxFilePathName, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixHost_OpenVM", _
								"INT", $hostHandle, _
								"str", $vmxFilePathName, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Event pump
;*

Global Enum _
   $VIX_PUMPEVENTOPTION_NONE = 0

Func Vix_PumpEvents ($hostHandle, $options)

	Local $aRes = DllCall ($vixdll, "none", "Vix_PumpEvents", _
								"INT", $hostHandle, _
								"INT", $options)
	Return $aRes[0]

EndFunc

;*
;*-----------------------------------------------------------------------------
;*
;* PropertyList --
;*
;*-----------------------------------------------------------------------------
;*

;~ #ifndef VIX_HIDE_FROM_JAVA
Func VixPropertyList_AllocPropertyList ($hostHandle, $resultHandle, $firstPropertyID, $secondPropertyID = 0, $thirdPropertyID = 0, $fourthPropertyID = 0, $fifthPropertyID = 0, $sixthPropertyID = 0, $seventhPropertyID = 0, $eighthPropertyID = 0, $ninthPropertyID = 0, $tenthPropertyID = 0)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixPropertyList_AllocPropertyList", _
								"INT", $hostHandle, _
								"PTR", $resultHandle, _
								"INT", $firstPropertyID, _
								"int", $secondPropertyID, _	; VixPropertyID
								"int", $thirdPropertyID, _	; VixPropertyID
								"int", $fourthPropertyID, _	; VixPropertyID
								"int", $fifthPropertyID, _	; VixPropertyID
								"int", $sixthPropertyID, _	; VixPropertyID
								"int", $seventhPropertyID, _	; VixPropertyID
								"int", $eighthPropertyID, _	; VixPropertyID
								"int", $ninthPropertyID, _	; VixPropertyID
								"int", $tenthPropertyID)		; VixPropertyID
	Return $aRes[0]

EndFunc


;~ #endif


;*
;*-----------------------------------------------------------------------------
;*
;* VIX VM --
;*
;* This describes the persistent configuration state of a single VM. The
;* VM may or may not be running.
;*
;*-----------------------------------------------------------------------------
;*

Func VixVM_Open ($hostHandle, $vmxFilePathName, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Open", _
								"INT", $hostHandle, _
								"str", $vmxFilePathName, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Global Enum _
   $VIX_VMPOWEROP_NORMAL                      = 0, _
   $VIX_VMPOWEROP_FROM_GUEST                  = 0x0004, _
   $VIX_VMPOWEROP_SUPPRESS_SNAPSHOT_POWERON   = 0x0080, _
   $VIX_VMPOWEROP_LAUNCH_GUI                  = 0x0200, _
   $VIX_VMPOWEROP_START_VM_PAUSED             = 0x1000

;*
;* Power operations
;*

Func VixVM_PowerOn ($vmHandle, $powerOnOptions, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_PowerOn", _
								"INT", $vmHandle, _
								"INT", $powerOnOptions, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_PowerOff ($vmHandle, $powerOffOptions, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_PowerOff", _
								"INT", $vmHandle, _
								"INT", $powerOffOptions, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_Reset ($vmHandle, $resetOptions, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Reset", _
								"INT", $vmHandle, _
								"INT", $resetOptions, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_Suspend ($vmHandle, $suspendOptions, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Suspend", _
								"INT", $vmHandle, _
								"INT", $suspendOptions, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_Pause ($vmHandle, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Pause", _
								"INT", $vmHandle, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_Unpause ($vmHandle, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Unpause", _
								"INT", $vmHandle, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Global Enum _
   $VIX_VMDELETE_DISK_FILES     = 0x0002

Func VixVM_Delete ($vmHandle, $deleteOptions, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Delete", _
								"INT", $vmHandle, _
								"INT", $deleteOptions, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* This is the state of an individual VM.  These values are bitwise flags.
;* The actual value returned for may be a bitwise OR of one more of these
;* flags, along with other reserved values not documented here.
;*

Global Enum _
      $VIX_POWERSTATE_POWERING_OFF    = 0x0001, _
      $VIX_POWERSTATE_POWERED_OFF     = 0x0002, _
      $VIX_POWERSTATE_POWERING_ON     = 0x0004, _
      $VIX_POWERSTATE_POWERED_ON      = 0x0008, _
      $VIX_POWERSTATE_SUSPENDING      = 0x0010, _
      $VIX_POWERSTATE_SUSPENDED       = 0x0020, _
      $VIX_POWERSTATE_TOOLS_RUNNING   = 0x0040, _
      $VIX_POWERSTATE_RESETTING       = 0x0080, _
      $VIX_POWERSTATE_BLOCKED_ON_MSG  = 0x0100, _
      $VIX_POWERSTATE_PAUSED          = 0x0200, _
      $VIX_POWERSTATE_RESUMING        = 0x0800

Global Enum _
      $VIX_TOOLSSTATE_UNKNOWN           = 0x0001, _
      $VIX_TOOLSSTATE_RUNNING           = 0x0002, _
      $VIX_TOOLSSTATE_NOT_INSTALLED     = 0x0004

;*
;* These flags describe optional functions supported by different
;* types of VM.
;*


Global Enum _
      $VIX_VM_SUPPORT_SHARED_FOLDERS       = 0x0001, _
      $VIX_VM_SUPPORT_MULTIPLE_SNAPSHOTS   = 0x0002, _
      $VIX_VM_SUPPORT_TOOLS_INSTALL        = 0x0004, _
      $VIX_VM_SUPPORT_HARDWARE_UPGRADE     = 0x0008

;*
;* VIX_ADMINISTRATOR_USER_NAME and VIX_CONSOLE_USER_NAME are no longer
;* supported. If your code includes references to these constants please
;* update your code to use a valid guest username and password when calling
;* VixVM_LoginInGuest().
;*

;~ //#define VIX_ADMINISTRATOR_USER_NAME    "__VMware_Vix_Guest_User_Admin__"
;~ //#define VIX_CONSOLE_USER_NAME          "__VMware_Vix_Guest_Console_User__"


;*
;* Record/replay operations
;*
Func VixVM_BeginRecording ($vmHandle, $displayName, $description, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_BeginRecording", _
								"INT", $vmHandle, _
								"str", $displayName, _
								"str", $description, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_EndRecording ($vmHandle, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_EndRecording", _
								"INT", $vmHandle, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_BeginReplay ($vmHandle, $snapshotHandle, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_BeginReplay", _
								"INT", $vmHandle, _
								"INT", $snapshotHandle, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_EndReplay ($vmHandle, $options, $propertyList, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_EndReplay", _
								"INT", $vmHandle, _
								"INT", $options, _
								"INT", $propertyList, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Guest operations
;*

Func VixVM_WaitForToolsInGuest ($vmHandle, $timeoutInSeconds, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_WaitForToolsInGuest", _
								"INT", $vmHandle, _
								"INT", $timeoutInSeconds, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* VixVM_LoginInGuest option flags.
;*
Global Enum _
   $VIX_LOGIN_IN_GUEST_REQUIRE_INTERACTIVE_ENVIRONMENT      = 0x08

Func VixVM_LoginInGuest ($vmHandle, $userName, $password, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_LoginInGuest", _
								"INT", $vmHandle, _
								"str", $userName, _
								"str", $password, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_LogoutFromGuest ($vmHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_LogoutFromGuest", _
								"INT", $vmHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Guest Process functions
;*

Global Enum _
   $VIX_RUNPROGRAM_RETURN_IMMEDIATELY   = 0x0001, _
   $VIX_RUNPROGRAM_ACTIVATE_WINDOW      = 0x0002

Func VixVM_RunProgramInGuest ($vmHandle, $guestProgramName, $commandLineArgs, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RunProgramInGuest", _
								"INT", $vmHandle, _
								"str", $guestProgramName, _
								"str", $commandLineArgs, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_ListProcessesInGuest ($vmHandle, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_ListProcessesInGuest", _
								"INT", $vmHandle, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_KillProcessInGuest ($vmHandle, $pid, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_KillProcessInGuest", _
								"INT", $vmHandle, _
								"uint64", $pid, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_RunScriptInGuest ($vmHandle, $interpreter, $scriptText, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RunScriptInGuest", _
								"INT", $vmHandle, _
								"str", $interpreter, _
								"str", $scriptText, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_OpenUrlInGuest ($vmHandle, $url, $windowState, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_OpenUrlInGuest", _
								"INT", $vmHandle, _
								"str", $url, _
								"INT", $windowState, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Guest File functions
;*

Func VixVM_CopyFileFromHostToGuest ($vmHandle, $hostPathName, $guestPathName, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CopyFileFromHostToGuest", _
								"INT", $vmHandle, _
								"str", $hostPathName, _
								"str", $guestPathName, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_CopyFileFromGuestToHost ($vmHandle, $guestPathName, $hostPathName, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CopyFileFromGuestToHost", _
								"INT", $vmHandle, _
								"str", $guestPathName, _
								"str", $hostPathName, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_DeleteFileInGuest ($vmHandle, $guestPathName, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_DeleteFileInGuest", _
								"INT", $vmHandle, _
								"str", $guestPathName, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_FileExistsInGuest ($vmHandle, $guestPathName, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_FileExistsInGuest", _
								"INT", $vmHandle, _
								"str", $guestPathName, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_RenameFileInGuest ($vmHandle, $oldName, $newName, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RenameFileInGuest", _
								"INT", $vmHandle, _
								"str", $oldName, _
								"str", $newName, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_CreateTempFileInGuest ($vmHandle, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CreateTempFileInGuest", _
								"INT", $vmHandle, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_GetFileInfoInGuest ($vmHandle, $pathName, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_GetFileInfoInGuest", _
								"INT", $vmHandle, _
								"str", $pathName, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Guest Directory functions
;*

Func VixVM_ListDirectoryInGuest ($vmHandle, $pathName, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_ListDirectoryInGuest", _
								"INT", $vmHandle, _
								"str", $pathName, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_CreateDirectoryInGuest ($vmHandle, $pathName, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CreateDirectoryInGuest", _
								"INT", $vmHandle, _
								"str", $pathName, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_DeleteDirectoryInGuest ($vmHandle, $pathName, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_DeleteDirectoryInGuest", _
								"INT", $vmHandle, _
								"str", $pathName, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_DirectoryExistsInGuest ($vmHandle, $pathName, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_DirectoryExistsInGuest", _
								"INT", $vmHandle, _
								"str", $pathName, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Guest Variable Functions
;*
Global Enum _
   $VIX_VM_GUEST_VARIABLE            = 1, _
   $VIX_VM_CONFIG_RUNTIME_ONLY       = 2, _
   $VIX_GUEST_ENVIRONMENT_VARIABLE   = 3

Func VixVM_ReadVariable ($vmHandle, $variableType, $name, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_ReadVariable", _
								"INT", $vmHandle, _
								"INT", $variableType, _
								"str", $name, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_WriteVariable ($vmHandle, $variableType, $valueName, $value, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_WriteVariable", _
								"INT", $vmHandle, _
								"INT", $variableType, _
								"str", $valueName, _
								"str", $value, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Snapshot functions that operate on a VM
;*

Func VixVM_GetNumRootSnapshots ($vmHandle, $result)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixVM_GetNumRootSnapshots", _
								"INT", $vmHandle, _
								"PTR", $result)
	Return $aRes[0]

EndFunc

Func VixVM_GetRootSnapshot ($vmHandle, $index, $snapshotHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixVM_GetRootSnapshot", _
								"INT", $vmHandle, _
								"INT", $index, _
								"PTR", $snapshotHandle)
	Return $aRes[0]

EndFunc

Func VixVM_GetCurrentSnapshot ($vmHandle, $snapshotHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixVM_GetCurrentSnapshot", _
								"INT", $vmHandle, _
								"PTR", $snapshotHandle)
	Return $aRes[0]

EndFunc

Func VixVM_GetNamedSnapshot ($vmHandle, $name, $snapshotHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixVM_GetNamedSnapshot", _
								"INT", $vmHandle, _
								"str", $name, _
								"PTR", $snapshotHandle)
	Return $aRes[0]

EndFunc

Global Enum _
   $VIX_SNAPSHOT_REMOVE_CHILDREN    = 0x0001

Func VixVM_RemoveSnapshot ($vmHandle, $snapshotHandle, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RemoveSnapshot", _
								"INT", $vmHandle, _
								"INT", $snapshotHandle, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_RevertToSnapshot ($vmHandle, $snapshotHandle, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RevertToSnapshot", _
								"INT", $vmHandle, _
								"INT", $snapshotHandle, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Global Enum _
   $VIX_SNAPSHOT_INCLUDE_MEMORY     = 0x0002

Func VixVM_CreateSnapshot ($vmHandle, $name, $description, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CreateSnapshot", _
								"INT", $vmHandle, _
								"str", $name, _
								"str", $description, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Shared Folders Functions
;*

;*
;* These are the flags describing each shared folder.
;*
Global Enum _
   $VIX_SHAREDFOLDER_WRITE_ACCESS     = 0x04

Func VixVM_EnableSharedFolders ($vmHandle, $enabled, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_EnableSharedFolders", _
								"INT", $vmHandle, _
								"Bool", $enabled, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_GetNumSharedFolders ($vmHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_GetNumSharedFolders", _
								"INT", $vmHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_GetSharedFolderState ($vmHandle, $index, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_GetSharedFolderState", _
								"INT", $vmHandle, _
								"INT", $index, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_SetSharedFolderState ($vmHandle, $shareName, $hostPathName, $flags, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_SetSharedFolderState", _
								"INT", $vmHandle, _
								"str", $shareName, _
								"str", $hostPathName, _
								"INT", $flags, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_AddSharedFolder ($vmHandle, $shareName, $hostPathName, $flags, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_AddSharedFolder", _
								"INT", $vmHandle, _
								"str", $shareName, _
								"str", $hostPathName, _
								"INT", $flags, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Func VixVM_RemoveSharedFolder ($vmHandle, $shareName, $flags, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_RemoveSharedFolder", _
								"INT", $vmHandle, _
								"str", $shareName, _
								"INT", $flags, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Screen Capture
;*

;~ #ifndef VIX_HIDE_FROM_JAVA
Global Enum _
   $VIX_CAPTURESCREENFORMAT_PNG            = 0x01, _
   $VIX_CAPTURESCREENFORMAT_PNG_NOCOMPRESS = 0x02

Func VixVM_CaptureScreenImage ($vmHandle, $captureType, $additionalProperties, $callbackProc, $clientdata)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_CaptureScreenImage", _
								"INT", $vmHandle, _
								"INT", $captureType, _
								"INT", $additionalProperties, _
								"PTR", $callbackProc, _
								"PTR", $clientdata)
	Return $aRes[0]

EndFunc
;~ #endif   // VIX_HIDE_FROM_JAVA

;*
;* VM Cloning --
;*

Global Enum _
   $VIX_CLONETYPE_FULL       = 0, _
   $VIX_CLONETYPE_LINKED     = 1

Func VixVM_Clone ($vmHandle, $snapshotHandle, $cloneType, $destConfigPathName, $options, $propertyListHandle, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_Clone", _
								"INT", $vmHandle, _
								"INT", $snapshotHandle, _
								"INT", $cloneType, _
								"str", $destConfigPathName, _
								"INT", $options, _
								"INT", $propertyListHandle, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

;*
;* Misc Functions
;*

Func VixVM_UpgradeVirtualHardware ($vmHandle, $options, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_UpgradeVirtualHardware", _
								"INT", $vmHandle, _
								"INT", $options, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc

Global Enum _
   $VIX_INSTALLTOOLS_MOUNT_TOOLS_INSTALLER = 0x00, _
   $VIX_INSTALLTOOLS_AUTO_UPGRADE          = 0x01, _
   $VIX_INSTALLTOOLS_RETURN_IMMEDIATELY    = 0x02

Func VixVM_InstallTools ($vmHandle, $options, $commandLineArgs, $callbackProc, $clientData)

	Local $aRes = DllCall ($vixdll, "INT", "VixVM_InstallTools", _
								"INT", $vmHandle, _
								"INT", $options, _
								"str", $commandLineArgs, _
								"PTR", $callbackProc, _
								"PTR", $clientData)
	Return $aRes[0]

EndFunc


;*
;*-----------------------------------------------------------------------------
;*
;* VIX Job --
;*
;*-----------------------------------------------------------------------------
;*

;*
;* Synchronization functions
;* (used to detect when an asynch operation completes).
;*

Func VixJob_Wait ($jobHandle, $firstPropertyID, $secondPropertyID = 0, $thirdPropertyID = 0, $fourthPropertyID = 0, $fifthPropertyID = 0, $sixthPropertyID = 0, $seventhPropertyID = 0, $eighthPropertyID = 0, $ninthPropertyID = 0, $tenthPropertyID = 0)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixJob_Wait", _
								"INT", $jobHandle, _
								"INT", $firstPropertyID, _
								"int", $secondPropertyID, _	; VixPropertyID
								"int", $thirdPropertyID, _	; VixPropertyID
								"int", $fourthPropertyID, _	; VixPropertyID
								"int", $fifthPropertyID, _	; VixPropertyID
								"int", $sixthPropertyID, _	; VixPropertyID
								"int", $seventhPropertyID, _	; VixPropertyID
								"int", $eighthPropertyID, _	; VixPropertyID
								"int", $ninthPropertyID, _	; VixPropertyID
								"int", $tenthPropertyID)		; VixPropertyID
	Return $aRes[0]

EndFunc

Func VixJob_CheckCompletion ($jobHandle, $complete)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixJob_CheckCompletion", _
								"INT", $jobHandle, _
								"PTR", $complete)
	Return $aRes[0]

EndFunc

;*
;* Accessor functions
;* (used to get results of a completed asynch operation).
;*

Func VixJob_GetError ($jobHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixJob_GetError", _
								"INT", $jobHandle)
	Return $aRes[0]

EndFunc

Func VixJob_GetNumProperties ($jobHandle, $resultPropertyID)

	Local $aRes = DllCall ($vixdll, "INT", "VixJob_GetNumProperties", _
								"INT", $jobHandle, _
								"INT", $resultPropertyID)
	Return $aRes[0]

EndFunc

Func VixJob_GetNthProperties ($jobHandle, $index, $propertyID0, $propertyID1 = 0, $propertyID2 = 0, $propertyID3 = 0, $propertyID4 = 0, $propertyID5 = 0, $propertyID6 = 0, $propertyID7 = 0, $propertyID8 = 0, $propertyID9 = 0)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixJob_GetNthProperties", _
								"INT", $jobHandle, _
								"INT", $index, _
								"INT", $propertyID0, _
								"INT", $propertyID1, _
								"INT", $propertyID2, _
								"INT", $propertyID3, _
								"INT", $propertyID4, _
								"INT", $propertyID5, _
								"INT", $propertyID6, _
								"INT", $propertyID7, _
								"INT", $propertyID8, _
								"INT", $propertyID9)
	Return $aRes[0]

EndFunc


;*
;*-----------------------------------------------------------------------------
;*
;* VIX Snapshot --
;*
;*-----------------------------------------------------------------------------
;*


Func VixSnapshot_GetNumChildren ($parentSnapshotHandle, $numChildSnapshots)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixSnapshot_GetNumChildren", _
								"INT", $parentSnapshotHandle, _
								"PTR", $numChildSnapshots)
	Return $aRes[0]

EndFunc

Func VixSnapshot_GetChild ($parentSnapshotHandle, $index, $childSnapshotHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixSnapshot_GetChild", _
								"INT", $parentSnapshotHandle, _
								"INT", $index, _
								"PTR", $childSnapshotHandle)
	Return $aRes[0]

EndFunc

Func VixSnapshot_GetParent ($snapshotHandle, $parentSnapshotHandle)

	Local $aRes = DllCall ($vixdll, "UINT64", "VixSnapshot_GetParent", _
								"INT", $snapshotHandle, _
								"PTR", $parentSnapshotHandle)
	Return $aRes[0]

EndFunc




;лллллллллллллллллллллллллллллллл End Of File ллллллллллллллллллллллллллллллллл
