So. Da bin ich wieder. Ich habe nun mal einige Konstanten und die ersten zwei Befehle im entsprechenden Interface geschrieben.
Mir ist es aber vollkommen schleierhaft wie ich jetzt das COM Objekt erzeuge. Ich habe das schonmal in AutoIt geschrieben. Aber mir fehlt der Entsprechende Part in PB. Ich denke ich muss mit CoCreateInstance_ das Objekt erzeugen, grübel aber noch wie....
Ich zeige euch mal die Include Dateie und den Hauptcode. Vielleicht kann mir jemand einen kleinen Stupps geben. Vielleicht habe ich auch nur noch nicht ein für mich verwertbares Beispiel gefunden. Kann aber auch sein das die späten WM Spiele mir einen Streich spielen. *gähn*. (Diese glücklichen Italiener...)
viele Grüße
Sundance
PS: Ich sehe gerade, dass ich keine Datei anhängen kann. Dann mal hier der Code so...
VSSinc.pb:
Code: Alles auswählen
; VSS_OBJECT_TYPE
#VSS_OBJECT_UNKNOWN = 0
#VSS_OBJECT_NONE = 1
#VSS_OBJECT_SNAPSHOT_SET = 2
#VSS_OBJECT_SNAPSHOT = 3
#VSS_OBJECT_PROVIDER = 4
#VSS_OBJECT_TYPE_COUNT = 5
; VSS_BACKUP_TYPE
#VSS_BT_UNDEFINED = 0
#VSS_BT_FULL = 1
#VSS_BT_INCREMENTAL = 2
#VSS_BT_DIFFERENTIAL = 3
#VSS_BT_LOG = 4
#VSS_BT_COPY = 5
#VSS_BT_OTHER = 6
; VSS_VOLUME_SNAPSHOT_ATTRIBUTES
#VSS_VOLSNAP_ATTR_PERSISTENT = $1
#VSS_VOLSNAP_ATTR_NO_AUTORECOVERY = $2
#VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE = $4
#VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE = $8
#VSS_VOLSNAP_ATTR_NO_WRITERS = $10
#VSS_VOLSNAP_ATTR_TRANSPORTABLE = $20
#VSS_VOLSNAP_ATTR_NOT_SURFACED = $40
#VSS_VOLSNAP_ATTR_NOT_TRANSACTED = $80
#VSS_VOLSNAP_ATTR_HARDWARE_ASSISTED = $10000
#VSS_VOLSNAP_ATTR_DIFFERENTIAL = $20000
#VSS_VOLSNAP_ATTR_PLEX = $40000
#VSS_VOLSNAP_ATTR_IMPORTED = $80000
#VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY = $100000
#VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY = $200000
#VSS_VOLSNAP_ATTR_AUTORECOVER = $400000
#VSS_VOLSNAP_ATTR_ROLLBACK_RECOVERY = $800000
#VSS_VOLSNAP_ATTR_DELAYED_POSTSNAPSHOT= $1000000
#VSS_VOLSNAP_ATTR_TXF_RECOVERY = $2000000
; VSS_SNAPSHOT_CONTEXT
#VSS_CTX_BACKUP = 0
#VSS_CTX_FILE_SHARE_BACKUP = #VSS_VOLSNAP_ATTR_NO_WRITERS
#VSS_CTX_NAS_ROLLBACK = #VSS_VOLSNAP_ATTR_PERSISTENT | #VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE | #VSS_VOLSNAP_ATTR_NO_WRITERS
#VSS_CTX_APP_ROLLBACK = #VSS_VOLSNAP_ATTR_PERSISTENT | #VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE
#VSS_CTX_CLIENT_ACCESSIBLE = #VSS_VOLSNAP_ATTR_PERSISTENT | #VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | #VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE | #VSS_VOLSNAP_ATTR_NO_WRITERS
#VSS_CTX_CLIENT_ACCESSIBLE_WRITERS = #VSS_VOLSNAP_ATTR_PERSISTENT | #VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | #VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE
#VSS_CTX_ALL = $ffffffff
; VSS_S_ASYNC
#VSS_S_ASYNC_PENDING = $00042309
#VSS_S_ASYNC_FINISHED = $0004230a
#VSS_S_ASYNC_CANCELLED = $0004230b
; default time in milliseconds to wait for a asynchronous operation to finish
#VSS_S_ASYNC_TIMEOUT = 30000
; _VSS_ERROR_CODES
#_VSS_NO_ARRAY = 5
#_VSS_ARRAY_NO_VOLUME = 6
#_VSS_DLL_ERROR = 10
#_VSS_NO_BACKUP_COMPONENT = 11
#_VSS_SETBACKUPSTATE_ERROR = 20
#_VSS_GATHERWRITERMETADATA_ERROR = 21
#_VSS_ASYNC_CREATE_ERROR = 30
#_VSS_ASYNC_OPERATION_TIMEDOUT = 31
#_VSS_ASYNC_OPERATION_ERROR = 32
#_VSS_SETCONTEXT_ERROR = 40
#_VSS_STARTSNAPSHOTSET_ERROR = 45
#_VSS_ADDTOSNAPSHOTSET_ERROR = 46
#_VSS_ADDTOSNAPSHOTSET_SOURCE_ERROR = 47
#_VSS_PREPAREFORBACKUP_ERROR = 50
#_VSS_GATHERWRITERSTATUS_ERROR = 51
#_VSS_DOSNAPSHOTSET_ERROR = 52
#_VSS_BACKUPCOMPLETE_ERROR = 53
#_VSS_DELETESNAPSHOTSET_ERROR = 55
#_VSS_UNKNOWN_ARCHITECTURE = 70
#sIID_IVssBackupComponents = "{665C1D5F-C218-414D-A05D-7FEF5F9D5C86}"
#sIID_IVssAsync_XP_2003 = "{C7B98A22-222D-4e62-B875-1A44980634AF}" ; Windows XP/2003!
#sIID_IVssAsync_VISTA_LATER = "{507C37B4-CF5B-4e95-B0AF-14EB9767467E}" ; windows Vista and later
Interface IVssBackupComponentes Extends IUnknown
InitializeForBackup(*NullPointer)
SetContext(Context.l)
EndInterface
VSScreate.pb:
Code: Alles auswählen
;
;
; VSS modul to do a create a shadowcopy set
;
;
DeclareModule VSS
Declare CreateShadowCopySet( List DriveLetters.s() )
Declare DeleteShadowCopys( List DriveLetters.s() )
EndDeclareModule
Module VSS
XIncludeFile "VSSinc.pb"
Procedure CreateShadowCopySet( List DriveLetters.s() )
Define.i pIVssBackupComponents, hVSS
hVSS = OpenLibrary(#PB_Any, "c:\windows\system32\vssapi.dll")
pIVssBackupComponents = CallFunction(hVSS, "CreateVssBackupComponentsInternal", 0)
CloseLibrary(hVSS)
PrintN("pIVssBackupComponents: " + pIVssBackupComponents)
; Jetzt müsste ich das Interface erzeugen und die Methode InitializeForBackup aufrufen.
;
ProcedureReturn 1
EndProcedure
Procedure DeleteShadowCopys( List DriveLetters.s() )
EndProcedure
EndModule
; test. Create shadowcopy of drive d and e
;
OpenConsole()
PrintN("Creating a shadowcopy set...")
NewList DriveLetters.s()
AddElement(DriveLetters()) : DriveLetters() = "d:"
AddElement(DriveLetters()) : DriveLetters() = "e:"
VSS::CreateShadowCopySet ( DriveLetters() )
PrintN("press enter to release shadow copys") : Input()
VSS::DeleteShadowCopys( DriveLetters() )
CloseConsole()