It has been solved. I was referencing the wrong function in the vtable of the com object, i simply forgot to implement a function on the interface and this made the complete offset wrong to the function pointer. I have to tell here that i imported the com interface in c# by hand, because i am using it from .NET runtime and there is no IDL file or com interface that can be queried with something like OLEViewer. The information i got depends on the header files of the windows sdk and by importing the interface in c# i simply forgot a single function and this made fail everthing! If someone is interested in what the interface in C# looks like here its is. Note that not all parameters have been implemented, only the ones i need, but this does not affect the interface, nor the functions, as long as the vtable order ist correct and the parameters used on the called functions have been translated and passed porperly:
[Flags]
public enum VSS_SNAPSHOT_COMPATIBILITY : long
{
VSS_SC_DISABLE_DEFRAG = 0x1,
VSS_SC_DISABLE_CONTENTINDEX = 0x2,
}
public enum IVssAsyncWait : uint
{
Infinite = 0xffffffff,
}
public enum VSS_OBJECT_TYPE : uint
{
VSS_OBJECT_UNKNOWN = 0,
VSS_OBJECT_NONE = (VSS_OBJECT_UNKNOWN + 1),
VSS_OBJECT_SNAPSHOT_SET = (VSS_OBJECT_NONE + 1),
VSS_OBJECT_SNAPSHOT = (VSS_OBJECT_SNAPSHOT_SET + 1),
VSS_OBJECT_PROVIDER = (VSS_OBJECT_SNAPSHOT + 1),
VSS_OBJECT_TYPE_COUNT = (VSS_OBJECT_PROVIDER + 1)
}
[Flags]
public enum VSS_VOLUME_SNAPSHOT_ATTRIBUTES : int
{
VSS_VOLSNAP_ATTR_PERSISTENT = 0x1,
VSS_VOLSNAP_ATTR_NO_AUTORECOVERY = 0x2,
VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE = 0x4,
VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE = 0x8,
VSS_VOLSNAP_ATTR_NO_WRITERS = 0x10,
VSS_VOLSNAP_ATTR_TRANSPORTABLE = 0x20,
VSS_VOLSNAP_ATTR_NOT_SURFACED = 0x40,
VSS_VOLSNAP_ATTR_NOT_TRANSACTED = 0x80,
VSS_VOLSNAP_ATTR_HARDWARE_ASSISTED = 0x10000,
VSS_VOLSNAP_ATTR_DIFFERENTIAL = 0x20000,
VSS_VOLSNAP_ATTR_PLEX = 0x40000,
VSS_VOLSNAP_ATTR_IMPORTED = 0x80000,
VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY = 0x100000,
VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY = 0x200000,
VSS_VOLSNAP_ATTR_AUTORECOVER = 0x400000,
VSS_VOLSNAP_ATTR_ROLLBACK_RECOVERY = 0x800000,
VSS_VOLSNAP_ATTR_DELAYED_POSTSNAPSHOT = 0x1000000
}
public enum VSS_SNAPSHOT_STATE : uint
{
VSS_SS_UNKNOWN = 0,
VSS_SS_PREPARING = (VSS_SS_UNKNOWN + 1),
VSS_SS_PROCESSING_PREPARE = (VSS_SS_PREPARING + 1),
VSS_SS_PREPARED = (VSS_SS_PROCESSING_PREPARE + 1),
VSS_SS_PROCESSING_PRECOMMIT = (VSS_SS_PREPARED + 1),
VSS_SS_PRECOMMITTED = (VSS_SS_PROCESSING_PRECOMMIT + 1),
VSS_SS_PROCESSING_COMMIT = (VSS_SS_PRECOMMITTED + 1),
VSS_SS_COMMITTED = (VSS_SS_PROCESSING_COMMIT + 1),
VSS_SS_PROCESSING_POSTCOMMIT = (VSS_SS_COMMITTED + 1),
VSS_SS_PROCESSING_PREFINALCOMMIT = (VSS_SS_PROCESSING_POSTCOMMIT + 1),
VSS_SS_PREFINALCOMMITTED = (VSS_SS_PROCESSING_PREFINALCOMMIT + 1),
VSS_SS_PROCESSING_POSTFINALCOMMIT = (VSS_SS_PREFINALCOMMITTED + 1),
VSS_SS_CREATED = (VSS_SS_PROCESSING_POSTFINALCOMMIT + 1),
VSS_SS_ABORTED = (VSS_SS_CREATED + 1),
VSS_SS_DELETED = (VSS_SS_ABORTED + 1),
VSS_SS_POSTCOMMITTED = (VSS_SS_DELETED + 1),
VSS_SS_COUNT = (VSS_SS_POSTCOMMITTED + 1)
}
public enum VSS_BACKUP_TYPE : uint
{
VSS_BT_UNDEFINED = 0,
VSS_BT_FULL = (VSS_BT_UNDEFINED + 1),
VSS_BT_INCREMENTAL = (VSS_BT_FULL + 1),
VSS_BT_DIFFERENTIAL = (VSS_BT_INCREMENTAL + 1),
VSS_BT_LOG = (VSS_BT_DIFFERENTIAL + 1),
VSS_BT_COPY = (VSS_BT_LOG + 1),
VSS_BT_OTHER = (VSS_BT_COPY + 1)
}
[StructLayout(
LayoutKind.Sequential,
CharSet = CharSet.Unicode)]
public struct VSS_SNAPSHOT_PROP
{
public Guid SnapshotId;
public Guid SnapshotSetId;
public int SnapshotsCount;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszSnapshotDeviceObject;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszOriginalVolumeName;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszOriginatingMachine;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszServiceMachine;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszExposedName;
[MarshalAs(UnmanagedType.LPWStr)]
public string pwszExposedPath;
public Guid ProviderId;
public VSS_VOLUME_SNAPSHOT_ATTRIBUTES SnapshotAttributes;
public long CreationTimestamp;
public int SnapshotState;
}
[ComImport()]
[Guid(“507C37B4-CF5B-4e95-B0AF-14EB9767467E”)]
[InterfaceType(
ComInterfaceType.InterfaceIsIUnknown)]
public interface IVssAsync
{
HRESULT Cancel();
HRESULT Wait(
[In] IVssAsyncWait dwMilliseconds);
HRESULT QueryStatus(
[Out] out HRESULT pHrResult,
[In, Out] ref int pReserved);
}
[ComImport()]
[Guid(“665c1d5f-c218-414d-a05d-7fef5f9d5c86”)]
[InterfaceType(
ComInterfaceType.InterfaceIsIUnknown)]
public interface IVssBackupComponents
{
HRESULT GetWriterComponentsCount();
HRESULT GetWriterComponents();
[DefaultValue(null)]
HRESULT InitializeForBackup(
[MarshalAs(UnmanagedType.BStr)]
[In] string bstrXML);
HRESULT SetBackupState(
[MarshalAs(UnmanagedType.Bool)]
[In] bool bSelectComponents,
[MarshalAs(UnmanagedType.Bool)]
[In] bool bBackupBootableSystemState,
[In] VSS_BACKUP_TYPE backupType,
[MarshalAs(UnmanagedType.Bool)]
[In] bool bPartialFileSupport);
HRESULT InitializeForRestore();
HRESULT SetRestoreState();
//default is 0xffffffff
HRESULT GatherWriterMetadata(
[Out] out IVssAsync ppAsync);
HRESULT GetWriterMetadataCount();
HRESULT GetWriterMetadata();
HRESULT FreeWriterMetadata();
HRESULT AddComponent();
HRESULT PrepareForBackup(
[Out] out IVssAsync ppAsync);
HRESULT AbortBackup();
HRESULT GatherWriterStatus();
HRESULT GetWriterStatusCount();
HRESULT FreeWriterStatus();
HRESULT GetWriterStatus();
HRESULT SetBackupSucceeded();
HRESULT SetBackupOptions();
HRESULT SetSelectedForRestore();
HRESULT SetRestoreOptions();
HRESULT SetAdditionalRestores();
HRESULT SetPreviousBackupStamp();
HRESULT SaveAsXML();
HRESULT BackupComplete();
HRESULT AddAlternativeLocationMapping();
HRESULT AddRestoreSubcomponent();
HRESULT SetFileRestoreStatus();
HRESULT AddNewTarget();
HRESULT SetRangesFilePath();
HRESULT PreRestore();
HRESULT PostRestore();
HRESULT SetContext();
HRESULT StartSnapshotSet(
[Out] out Guid pSnapshotSetId);
HRESULT AddToSnapshotSet(
[MarshalAs(UnmanagedType.BStr)]
[In] string pwszVolumeName,
[In] Guid ProviderId,
[Out] out Guid pidSnapshot);
HRESULT DoSnapshotSet(
[Out] out IVssAsync ppAsync);
HRESULT DeleteSnapshots(
[In] Guid SourceObjectId,
[In] VSS_OBJECT_TYPE eSourceObjectType,
[MarshalAs(UnmanagedType.Bool)]
[In] bool bForceDelete,
[Out] out long plDeletedSnapshots,
[Out] out Guid pNondeletedSnapshotID);
HRESULT ImportSnapshots();
HRESULT BreakSnapshotSet();
HRESULT GetSnapshotProperties(
[In] Guid SnapshotId,
[In,Out] IntPtr pProp);
HRESULT Query();
HRESULT IsVolumeSupported(
[In] Guid ProviderId,
[MarshalAs(UnmanagedType.BStr)]
[In] string pwszVolumeName,
[MarshalAs(UnmanagedType.Bool)]
[Out] out bool pbSupportedByThisProvider);
HRESULT DisableWriterClasses();
HRESULT EnableWriterClasses();
HRESULT DisableWriterInstances();
HRESULT ExposeSnapshot();
HRESULT RevertToSnapshot();
HRESULT QueryRevertStatus();
}