Moved VssApi (C#) project to new directory and project name of VssApiMgd. Added C++/CLI project for VssApi wrappers named VssApi.

pull/267/head
dahall 2021-12-12 10:39:49 -07:00
parent f7620793fc
commit b7e26fcfd7
30 changed files with 2722 additions and 90 deletions

View File

@ -0,0 +1,20 @@
#include "pch.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
[assembly:AssemblyTitleAttribute(L"VssApi")];
[assembly:AssemblyDescriptionAttribute(L"")];
[assembly:AssemblyConfigurationAttribute(L"")];
[assembly:AssemblyCompanyAttribute(L"")];
[assembly:AssemblyProductAttribute(L"VssApi")];
[assembly:AssemblyCopyrightAttribute(L"Copyright (c) 2021")];
[assembly:AssemblyTrademarkAttribute(L"")];
[assembly:AssemblyCultureAttribute(L"")];
[assembly:AssemblyVersionAttribute("1.0.*")];
[assembly:ComVisible(false)];

View File

@ -0,0 +1,25 @@
#pragma once
using namespace System;
template <class T>
ref class BaseWrapper : MarshalByRefObject
{
protected:
T* pNative;
public:
BaseWrapper(T* ptr) : pNative(ptr) {}
~BaseWrapper() { this->!BaseWrapper(); }
!BaseWrapper() { if (pNative) { pNative->Release(); pNative = nullptr; } }
};
template <class T>
ref class BaseClassWrapper : MarshalByRefObject
{
protected:
T* pNative;
public:
BaseClassWrapper(T* ptr) : pNative(ptr) {}
~BaseClassWrapper() { this->!BaseClassWrapper(); }
!BaseClassWrapper() { if (pNative) { delete pNative; pNative = nullptr; } }
};

70
PInvoke/VssApi/CliLists.h Normal file
View File

@ -0,0 +1,70 @@
#pragma once
using namespace System;
using namespace System::Collections::Generic;
delegate int GetCount();
generic <typename T>
delegate T GetValue(int index);
generic <typename T>
delegate void AddValue(T value);
template <class T>
ref class IEnumeratorImpl;
template <class T>
ref class ListImplBase : IReadOnlyList<T>
{
protected:
GetCount^ getCount;
GetValue<T>^ getValue;
virtual System::Collections::IEnumerator^ ObjGetEnum() = System::Collections::IEnumerable::GetEnumerator{ return GetEnumerator(); }
public:
ListImplBase(GetCount^ gc, GetValue<T>^ gv) : getCount(gc), getValue(gv) { }
~ListImplBase() {}
!ListImplBase() { getCount = nullptr; getValue = nullptr; }
virtual property int Count { int get() { return getCount(); } }
virtual property T default[Int32] { T get(Int32 index) { return getValue(index); } }
virtual System::Collections::Generic::IEnumerator<T>^ GetEnumerator()
{
return gcnew ListEnumerator<T>(this);
}
};
template <class T>
ref class AppendOnlyList : public ListImplBase<T>, public Vanara::PInvoke::VssApi::IAppendOnlyList<T>
{
protected:
AddValue<T>^ addValue;
public:
AppendOnlyList(GetCount^ gc, GetValue<T>^ gv, AddValue<T>^ add) :
ListImplBase(gc, gv), addValue(add) {}
~AppendOnlyList() {}
!AppendOnlyList() { addValue = nullptr; }
virtual void Add(T item) { addValue(item); }
};
template <class T>
ref class ListEnumerator : public IEnumerator<T>
{
protected:
ListImplBase<T>^ list;
int i;
public:
ListEnumerator(ListImplBase<T>^ l) : list(l), i(0) { }
~ListEnumerator() {}
!ListEnumerator() { list = nullptr; }
virtual property T Current { T get() { return list->default[i]; } }
virtual bool MoveNext() { return i++ <= list->Count; }
virtual void Reset() { i = 0; }
private:
property Object^ ObjectCurrent { virtual Object^ get() sealed = System::Collections::IEnumerator::Current::get{ return Current; } };
};

85
PInvoke/VssApi/Macros.h Normal file
View File

@ -0,0 +1,85 @@
#define DECL_WRAPPER_PROP(prop, rtype) \
property rtype prop { virtual rtype get(); }
#define DEFINE_WRAPPER_PROPC(prop, rtype, gtype, meth, conv) \
virtual property rtype prop {\
rtype get() {\
gtype v;\
Utils::ThrowIfFailed(pNative->meth(&v));\
return conv(v);\
}\
}
#define DEFINE_WRAPPER_GS_PROP(prop, rtype, gtype) \
virtual property rtype prop {\
rtype get() {\
gtype v;\
Utils::ThrowIfFailed(pNative->Get##prop(&v));\
return static_cast<rtype>(v);\
}\
void set(rtype value) {\
Utils::ThrowIfFailed(pNative->Set##prop(static_cast<gtype>(value)));\
}\
}
#define DEFINE_WRAPPER_QI_PROP(prop, rtype, gtype, meth, qitf) \
virtual property rtype prop {\
rtype get() {\
SafeComPtr<qitf*> p = pNative;\
gtype v;\
Utils::ThrowIfFailed(p->meth(&v));\
return static_cast<rtype>(v);\
}\
}
#define DEFINE_WRAPPER_PROP(prop, rtype, gtype, meth) \
DEFINE_WRAPPER_PROPC(prop, rtype, gtype, meth, static_cast<rtype>)
#define DEFINE_WRAPPER_STRING_PROP(prop, meth) \
virtual property String^ prop {\
String^ get() {\
SafeBSTR v;\
Utils::ThrowIfFailed(pNative->meth(&v));\
return (String^)v;\
}\
}
#define DEFINE_WRAPPER_STRING_QI_PROP(prop, meth, qitf) \
virtual property String^ prop {\
String^ get() {\
SafeComPtr<qitf*> p = pNative;\
SafeBSTR v;\
Utils::ThrowIfFailed(p->meth(&v));\
return (String^)v;\
}\
}
#define DEFINE_WRAPPER_STRING_GS_PROP(prop) \
virtual property String^ prop {\
String^ get() {\
SafeBSTR v;\
Utils::ThrowIfFailed(pNative->Get##prop(&v));\
return (String^)v;\
}\
void set(String^ value) {\
SafeString v(value);\
Utils::ThrowIfFailed(pNative->Set##prop(v));\
}\
}
#define DEFINE_WRAPPER_STRING_QI_GS_PROP(prop, qitf) \
virtual property String^ prop {\
String^ get() {\
SafeComPtr<qitf*> p = pNative;\
SafeBSTR v;\
Utils::ThrowIfFailed(p->Get##prop(&v));\
return (String^)v;\
}\
void set(String^ value) {\
SafeComPtr<qitf*> p = pNative;\
SafeString v(value);\
Utils::ThrowIfFailed(p->Set##prop(v));\
}\
}
#define mgd_cast(T, t) (T^)Marshal::GetObjectForIUnknown(IntPtr((void*)t));

View File

@ -0,0 +1,3 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by app.rc

53
PInvoke/VssApi/SafePtr.h Normal file
View File

@ -0,0 +1,53 @@
#pragma once
#include <wtypes.h>
using namespace System;
template <typename T>
class SafePointer
{
protected:
T m_ptr;
public:
SafePointer() : m_ptr(0) { }
SafePointer(T ptr) : m_ptr(ptr) { }
virtual ~SafePointer() { if (m_ptr != 0) { Release(m_ptr); } }
operator T() { return m_ptr; }
T* operator&() { return &m_ptr; }
virtual void Release(T ptr) {};
};
class SafeBSTR : public SafePointer<BSTR>
{
public:
SafeBSTR() : SafePointer() {}
SafeBSTR(LPWSTR pString) : SafePointer(::SysAllocString(pString)) {}
void Release(BSTR ptr) override { ::SysFreeString(ptr); }
operator String^() { return (m_ptr == 0) ? nullptr : Runtime::InteropServices::Marshal::PtrToStringBSTR((IntPtr)m_ptr); }
};
class SafeString : public SafePointer<BSTR>
{
public:
SafeString(String^ value) : SafePointer((BSTR)Runtime::InteropServices::Marshal::StringToBSTR(value).ToPointer()) {}
void Release(BSTR ptr) override { System::Runtime::InteropServices::Marshal::FreeBSTR((IntPtr)ptr); }
operator String^() { return (m_ptr == 0) ? nullptr : Runtime::InteropServices::Marshal::PtrToStringBSTR((IntPtr)m_ptr); }
};
class SafeWString : public SafePointer<LPWSTR>
{
public:
SafeWString(String^ value) : SafePointer((LPWSTR)Runtime::InteropServices::Marshal::StringToCoTaskMemUni(value).ToPointer()) {}
void Release(LPWSTR ptr) override { System::Runtime::InteropServices::Marshal::FreeCoTaskMem((IntPtr)ptr); }
operator String^() { return (m_ptr == 0) ? nullptr : Runtime::InteropServices::Marshal::PtrToStringUni((IntPtr)m_ptr); }
};
template <class T>
class SafeComPtr : public SafePointer<T>
{
public:
SafeComPtr() : SafePointer() {}
SafeComPtr(IUnknown* pUnk) { Utils::ThrowIfFailed(pUnk->QueryInterface(IID_PPV_ARGS(&m_ptr))); }
void Release(T ptr) override { ((IUnknown*)m_ptr)->Release(); }
T operator->() const { return m_ptr; }
};

69
PInvoke/VssApi/Utils.h Normal file
View File

@ -0,0 +1,69 @@
#pragma once
#include <winerror.h>
#include <guiddef.h>
using namespace System;
ref class Utils sealed
{
public:
static void ThrowIfFailed(::HRESULT hr)
{
if (hr < 0)
throw gcnew Runtime::InteropServices::COMException(nullptr, hr);
}
static Guid FromGUID(_GUID& guid) {
return Guid(guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
}
static _GUID ToGUID(Guid& guid) {
array<Byte>^ guidData = guid.ToByteArray();
pin_ptr<Byte> data = &(guidData[0]);
return *(_GUID*)data;
}
static _GUID* ToGUIDArray([System::Runtime::InteropServices::In] array<Guid>^ input)
{
if (input == nullptr)
return nullptr;
pin_ptr<Guid> pg = &input[0];
VSS_ID* buf = new VSS_ID[input->Length];
for (int i = 0; i < input->Length; i++)
buf[i] = Utils::ToGUID(pg[i]);
return buf;
}
generic <class TIN, class TOUT>
delegate TOUT Conv(TIN input);
template <class TIN, class TOUT>
static TOUT* ToNative(array<TIN>^ input, Conv<TIN, TOUT>^ func)
{
if (input == nullptr)
return nullptr;
if (input->Length == 0)
return new TOUT[0];
pin_ptr<TIN> pin = &input[0];
TIN* p = pin;
TOUT* buf = new TOUT[input->Length];
for (int i = 0; i < input->Len; i++)
{
input[i] = func(pin[i]);
}
return buf;
}
};
class SmartGuid
{
private:
_GUID mGuid;
public:
SmartGuid(_GUID& guid) : mGuid(guid) {}
SmartGuid(Guid& guid) : mGuid(Utils::ToGUID(guid)) {}
operator Guid() { return Utils::FromGUID(mGuid); }
operator _GUID() { return mGuid; }
};

107
PInvoke/VssApi/VsBackup.cpp Normal file
View File

@ -0,0 +1,107 @@
#include "pch.h"
#include "vsbackup.h"
#include "vswriter.h"
namespace Vanara { namespace PInvoke { namespace VssApi {
Vanara::PInvoke::VssApi::VSS_COMPONENTINFO CVssWMComponent::GetComponentInfo() {
RefreshInfo();
return Marshal::PtrToStructure<Vanara::PInvoke::VssApi::VSS_COMPONENTINFO>(IntPtr((void*)pInfo));
}
void CVssExamineWriterMetadata::RefreshRestoreMethod()
{
::VSS_RESTOREMETHOD_ENUM eMethod;
SafeBSTR bstrService;
SafeBSTR bstrUserProcedure;
::VSS_WRITERRESTORE_ENUM eWriterRestore;
bool bRebootRequired;
UINT iMappings;
Utils::ThrowIfFailed(pNative->GetRestoreMethod(&eMethod, &bstrService, &bstrUserProcedure, &eWriterRestore, &bRebootRequired, &iMappings));
restoreMethod = VSS_RESTORE_METHOD(eMethod, bstrService, bstrUserProcedure, eWriterRestore, bRebootRequired, iMappings);
}
void CVssExamineWriterMetadata::RefreshFileCounts()
{
pin_ptr<UINT> pci = &cIncludeFiles;
pin_ptr<UINT> pce = &cExcludeFiles;
pin_ptr<UINT> pcc = &cComponents;
Utils::ThrowIfFailed(pNative->GetFileCounts(pci, pce, pcc));
}
Version^ CVssExamineWriterMetadata::Version::get()
{
SafeComPtr<::IVssExamineWriterMetadataEx2*> p2 = pNative;
DWORD maj, min;
Utils::ThrowIfFailed(((::IVssExamineWriterMetadataEx2*)p2)->GetVersion(&maj, &min));
return gcnew System::Version(static_cast<int>(maj), static_cast<int>(min));
}
void CVssExamineWriterMetadata::GetIdentity(Guid% pidInstance, Guid% pidWriter, String^% pbstrWriterName, String^% pbstrInstanceName, Vanara::PInvoke::VssApi::VSS_USAGE_TYPE% pUsage,
Vanara::PInvoke::VssApi::VSS_SOURCE_TYPE% pSource)
{
::VSS_ID inst, writer;
SafeBSTR name;
::VSS_USAGE_TYPE use;
::VSS_SOURCE_TYPE src;
Utils::ThrowIfFailed(pNative->GetIdentity(&inst, &writer, &name, &use, &src));
pidInstance = Utils::FromGUID(inst);
pidWriter = Utils::FromGUID(writer);
pbstrInstanceName = name;
pUsage = static_cast<Vanara::PInvoke::VssApi::VSS_USAGE_TYPE>(use);
pSource = static_cast<Vanara::PInvoke::VssApi::VSS_SOURCE_TYPE>(src);
}
void CVssExamineWriterMetadata::GetRestoreMethod(Vanara::PInvoke::VssApi::VSS_RESTOREMETHOD_ENUM% pMethod, System::String^% pbstrService, System::String^% pbstrUserProcedure,
Vanara::PInvoke::VssApi::VSS_WRITERRESTORE_ENUM% pwriterRestore, bool% pbRebootRequired, UInt32% pcMappings)
{
RefreshRestoreMethod();
pMethod = static_cast<Vanara::PInvoke::VssApi::VSS_RESTOREMETHOD_ENUM>(restoreMethod.eMethod);
pbstrService = restoreMethod.bstrService;
pbstrUserProcedure = restoreMethod.bstrUserProcedure;
pwriterRestore = static_cast<Vanara::PInvoke::VssApi::VSS_WRITERRESTORE_ENUM>(restoreMethod.eWriterRestore);
pbRebootRequired = restoreMethod.bRebootRequired;
pcMappings = static_cast<UInt32>(restoreMethod.iMappings);
}
void CVssExamineWriterMetadata::LoadFromXML(String^ bstrXML)
{
SafeString xml = bstrXML;
Utils::ThrowIfFailed(pNative->LoadFromXML(xml));
}
String^ CVssExamineWriterMetadata::SaveAsXML()
{
SafeBSTR bstr;
Utils::ThrowIfFailed(pNative->SaveAsXML(&bstr));
return bstr;
}
IVssWriterComponentsExt^ VssApi::CVssBackupComponents::GetWriterComponents(int i)
{
::IVssWriterComponentsExt* p;
Utils::ThrowIfFailed(pNative->GetWriterComponents(i, &p));
return gcnew CVssWriterComponents(p);
}
IVssExamineWriterMetadata^ VssApi::CVssBackupComponents::GetWriterMetadata(int i)
{
::IVssExamineWriterMetadata* p;
VSS_ID id;
Utils::ThrowIfFailed(pNative->GetWriterMetadata(i, &id, &p));
return gcnew CVssExamineWriterMetadata(p);
}
VssWriterStatus VssApi::CVssBackupComponents::GetWriterStatus(int i)
{
VSS_ID id, wri;
SafeBSTR swri, msg;
::VSS_WRITER_STATE stat;
::HRESULT hr, hrApp;
SafeComPtr<::IVssBackupComponentsEx3*> p = pNative;
Utils::ThrowIfFailed(p->GetWriterStatusEx(i, &id, &wri, &swri, &stat, &hr, &hrApp, &msg));
VssWriterStatus ret{ Utils::FromGUID(id), Utils::FromGUID(wri), swri, static_cast<VSS_WRITER_STATE>(stat), (HRESULT)hr, (HRESULT)hrApp, msg };
return ret;
}
}}}

434
PInvoke/VssApi/VsBackup.h Normal file
View File

@ -0,0 +1,434 @@
#pragma once
#include "pch.h"
#include "vswriter.h"
#include "CliLists.h"
using namespace System;
using namespace Collections::Generic;
using namespace Runtime::InteropServices;
namespace Vanara {
namespace PInvoke {
namespace VssApi {
ref class CVssExamineWriterMetadata;
ref class CVssWMComponent : IVssWMComponent, BaseWrapper<::IVssWMComponent>
{
public:
CVssWMComponent(::IVssWMComponent* ptr) : BaseWrapper(ptr) {}
~CVssWMComponent() { if (pInfo && pNative) { pin_ptr<::VSS_COMPONENTINFO> p = pInfo; pNative->FreeComponentInfo(p); } }
virtual VSS_COMPONENTINFO GetComponentInfo();
#define DEFINE_WM_COMP_ROLIST(prop, itf, cfield, gfunc, cwrap) \
private:\
ListImplBase<itf^>^ f##prop;\
int Get##prop##Count() { RefreshInfo(); return pInfo->cfield; }\
itf^ Get##prop(int i) { ::itf* p; Utils::ThrowIfFailed(pNative->gfunc(i, &p)); return gcnew cwrap(p); }\
public:\
property IReadOnlyList<itf^>^ prop { virtual IReadOnlyList<itf^>^ get() {\
if (!f##prop) f##prop = gcnew ListImplBase<itf^>(gcnew GetCount(this, &CVssWMComponent::Get##prop##Count), gcnew GetValue<itf^>(this, &CVssWMComponent::Get##prop));\
return f##prop; } }
DEFINE_WM_COMP_ROLIST(DatabaseFiles, IVssWMFiledesc, cDatabases, GetDatabaseFile, CVssWMFiledesc)
DEFINE_WM_COMP_ROLIST(Files, IVssWMFiledesc, cFileCount, GetFile, CVssWMFiledesc)
DEFINE_WM_COMP_ROLIST(DatabaseLogFiles, IVssWMFiledesc, cLogFiles, GetDatabaseLogFile, CVssWMFiledesc)
DEFINE_WM_COMP_ROLIST(Dependencies, IVssWMDependency, cDependencies, GetDependency, CVssWMDependency)
private:
::VSS_COMPONENTINFO* pInfo;
void RefreshInfo()
{
pin_ptr<::VSS_COMPONENTINFO> p = pInfo;
if (pInfo != nullptr)
pNative->FreeComponentInfo(p);
Utils::ThrowIfFailed(pNative->GetComponentInfo((::PVSSCOMPONENTINFO*)&p));
}
};
ref class CVssBackupComponents : IVssBackupComponents, BaseWrapper<::IVssBackupComponents>
{
public:
CVssBackupComponents(::IVssBackupComponents* ptr) : BaseWrapper(ptr) {}
virtual void AbortBackup() { Utils::ThrowIfFailed(pNative->AbortBackup()); }
virtual void AddAlternativeLocationMapping(Guid writerId, VSS_COMPONENT_TYPE componentType, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath,
String^ wszComponentName, String^ wszPath, String^ wszFilespec, Boolean bRecursive, String^ wszDestination)
{
Utils::ThrowIfFailed(pNative->AddAlternativeLocationMapping(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(componentType),
SafeWString(wszLogicalPath), SafeWString(wszComponentName), SafeWString(wszPath), SafeWString(wszFilespec), bRecursive, SafeWString(wszDestination)));
}
virtual void AddComponent(Guid instanceId, Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName)
{
Utils::ThrowIfFailed(pNative->AddComponent(SmartGuid(instanceId), SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct),
SafeWString(wszLogicalPath), SafeWString(wszComponentName)));
}
virtual void AddNewTarget(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, String^ wszPath,
String^ wszFileName, Boolean bRecursive, String^ wszAlternatePath)
{
Utils::ThrowIfFailed(pNative->AddNewTarget(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName),
SafeWString(wszPath), SafeWString(wszFileName), bRecursive, SafeWString(wszAlternatePath)));
}
virtual void AddRestoreSubcomponent(Guid writerId, VSS_COMPONENT_TYPE componentType, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath,
String^ wszComponentName, String^ wszSubComponentLogicalPath, String^ wszSubComponentName, Boolean bRepair)
{
Utils::ThrowIfFailed(pNative->AddRestoreSubcomponent(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(componentType), SafeWString(wszLogicalPath), SafeWString(wszComponentName),
SafeWString(wszSubComponentLogicalPath), SafeWString(wszSubComponentName), bRepair));
}
virtual void AddSnapshotToRecoverySet(Guid snapshotId, [System::Runtime::InteropServices::Optional] UInt32 dwFlags, [System::Runtime::InteropServices::Optional] String^ pwszDestinationVolume)
{
SafeComPtr<::IVssBackupComponentsEx3*> p = pNative;
Utils::ThrowIfFailed(p->AddSnapshotToRecoverySet(SmartGuid(snapshotId), dwFlags, SafeWString(pwszDestinationVolume)));
}
virtual Guid AddToSnapshotSet(String^ pwszVolumeName, Guid ProviderId)
{
VSS_ID id;
Utils::ThrowIfFailed(pNative->AddToSnapshotSet(SafeWString(pwszVolumeName), SmartGuid(ProviderId), &id));
return Utils::FromGUID(id);
}
virtual IVssAsync^ BackupComplete()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->BackupComplete(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual void BreakSnapshotSet(Guid SnapshotSetId) { Utils::ThrowIfFailed(pNative->BreakSnapshotSet(SmartGuid(SnapshotSetId))); }
virtual IVssAsync^ BreakSnapshotSetEx(Guid SnapshotSetID, VSS_HARDWARE_OPTIONS dwBreakFlags)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(p->BreakSnapshotSetEx(SmartGuid(SnapshotSetID), static_cast<::VSS_HARDWARE_OPTIONS>(dwBreakFlags), &pa));
return mgd_cast(IVssAsync, pa);
}
virtual void DeleteSnapshots(Guid SourceObjectId, VSS_OBJECT_TYPE eSourceObjectType, Boolean bForceDelete, [System::Runtime::InteropServices::Out] Int32% plDeletedSnapshots, [System::Runtime::InteropServices::Out] Guid% pNondeletedSnapshotID)
{
LONG dSnap;
GUID sId;
Utils::ThrowIfFailed(pNative->DeleteSnapshots(SmartGuid(SourceObjectId), static_cast<::VSS_OBJECT_TYPE>(eSourceObjectType), bForceDelete, &dSnap, &sId));
plDeletedSnapshots = dSnap;
pNondeletedSnapshotID = Utils::FromGUID(sId);
}
virtual void DisableWriterClasses([In] array<Guid>^ rgWriterClassId)
{
if (rgWriterClassId == nullptr || rgWriterClassId->Length == 0)
return;
VSS_ID* buf = Utils::ToGUIDArray(rgWriterClassId);
Utils::ThrowIfFailed(pNative->DisableWriterClasses(buf, rgWriterClassId->Length));
delete buf;
}
virtual void DisableWriterInstances([In] array<Guid>^ rgWriterInstanceId)
{
if (rgWriterInstanceId == nullptr || rgWriterInstanceId->Length == 0)
return;
VSS_ID* buf = Utils::ToGUIDArray(rgWriterInstanceId);
Utils::ThrowIfFailed(pNative->DisableWriterInstances(buf, rgWriterInstanceId->Length));
delete buf;
}
virtual IVssAsync^ DoSnapshotSet()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->DoSnapshotSet(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual void EnableWriterClasses([In] array<Guid>^ rgWriterClassId)
{
if (rgWriterClassId == nullptr || rgWriterClassId->Length == 0)
return;
VSS_ID* buf = Utils::ToGUIDArray(rgWriterClassId);
Utils::ThrowIfFailed(pNative->EnableWriterClasses(buf, rgWriterClassId->Length));
delete buf;
}
virtual String^ ExposeSnapshot(Guid SnapshotId, [System::Runtime::InteropServices::Optional] String^ wszPathFromRoot, VSS_VOLUME_SNAPSHOT_ATTRIBUTES lAttributes, [System::Runtime::InteropServices::Optional] String^ wszExpose)
{
VSS_PWSZ exp;
Utils::ThrowIfFailed(pNative->ExposeSnapshot(SmartGuid(SnapshotId), SafeWString(wszPathFromRoot), static_cast<::VSS_VOLUME_SNAPSHOT_ATTRIBUTES>(lAttributes), SafeWString(wszExpose), &exp));
String^ ret = Marshal::PtrToStringUni(IntPtr(exp));
CoTaskMemFree(exp);
return ret;
}
virtual IVssAsync^ FastRecovery(Guid SnapshotSetID, [System::Runtime::InteropServices::Optional] UInt32 dwFastRecoveryFlags)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(p->FastRecovery(SmartGuid(SnapshotSetID), dwFastRecoveryFlags, &pa));
return mgd_cast(IVssAsync, pa);
}
virtual void FreeWriterMetadata()
{
Utils::ThrowIfFailed(pNative->FreeWriterMetadata());
}
virtual void FreeWriterStatus()
{
Utils::ThrowIfFailed(pNative->FreeWriterStatus());
}
virtual IVssAsync^ GatherWriterMetadata()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->GatherWriterMetadata(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssAsync^ GatherWriterStatus()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->GatherWriterStatus(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual void GetRootAndLogicalPrefixPaths(String^ pwszFilePath, [System::Runtime::InteropServices::Out] String^% ppwszRootPath, [System::Runtime::InteropServices::Out] String^% ppwszLogicalPrefix, [System::Runtime::InteropServices::Optional] Boolean bNormalizeFQDNforRootPath)
{
SafeComPtr<::IVssBackupComponentsEx4*> p = pNative;
VSS_PWSZ rPath, lPref;
Utils::ThrowIfFailed(p->GetRootAndLogicalPrefixPaths(SafeWString(pwszFilePath), &rPath, &lPref, bNormalizeFQDNforRootPath));
}
virtual Guid GetSessionId()
{
SafeComPtr<::IVssBackupComponentsEx3*> p = pNative;
VSS_ID id;
Utils::ThrowIfFailed(p->GetSessionId(&id));
return Utils::FromGUID(id);
}
virtual VSS_SNAPSHOT_PROP GetSnapshotProperties(Guid SnapshotId)
{
::VSS_SNAPSHOT_PROP prop;
Utils::ThrowIfFailed(pNative->GetSnapshotProperties(SmartGuid(SnapshotId), &prop));
return Marshal::PtrToStructure<VSS_SNAPSHOT_PROP>(IntPtr(&prop));
}
virtual IVssAsync^ ImportSnapshots()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->ImportSnapshots(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual void InitializeForBackup([System::Runtime::InteropServices::Optional] String^ bstrXML)
{
Utils::ThrowIfFailed(pNative->InitializeForBackup(SafeWString(bstrXML)));
}
virtual void InitializeForRestore([System::Runtime::InteropServices::Optional] String^ bstrXML)
{
Utils::ThrowIfFailed(pNative->InitializeForRestore(SafeWString(bstrXML)));
}
virtual Boolean IsVolumeSupported(Guid ProviderId, String^ pwszVolumeName)
{
::BOOL b;
Utils::ThrowIfFailed(pNative->IsVolumeSupported(SmartGuid(ProviderId), SafeWString(pwszVolumeName), &b));
return b;
}
virtual IVssAsync^ PostRestore()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->PostRestore(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssAsync^ PreFastRecovery(Guid SnapshotSetID, [System::Runtime::InteropServices::Optional] UInt32 dwPreFastRecoveryFlags)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(p->PreFastRecovery(SmartGuid(SnapshotSetID), dwPreFastRecoveryFlags, &pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssAsync^ PrepareForBackup()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->PrepareForBackup(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssAsync^ PreRestore()
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->PreRestore(&pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssEnumObject^ Query(Guid QueriedObjectId, VSS_OBJECT_TYPE eQueriedObjectType, VSS_OBJECT_TYPE eReturnedObjectsType)
{
SafeComPtr<::IVssEnumObject*> pa;
Utils::ThrowIfFailed(pNative->Query(SmartGuid(QueriedObjectId), static_cast<::VSS_OBJECT_TYPE>(eQueriedObjectType), static_cast<::VSS_OBJECT_TYPE>(eReturnedObjectsType), &pa));
return mgd_cast(IVssEnumObject, pa);
}
virtual IVssAsync^ QueryRevertStatus(String^ pwszVolume)
{
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(pNative->QueryRevertStatus(SafeWString(pwszVolume), &pa));
return mgd_cast(IVssAsync, pa);
}
virtual IVssAsync^ RecoverSet(VSS_RECOVERY_OPTIONS dwFlags)
{
SafeComPtr<::IVssBackupComponentsEx3*> p = pNative;
SafeComPtr<::IVssAsync*> pa;
Utils::ThrowIfFailed(p->RecoverSet(static_cast<::VSS_RECOVERY_OPTIONS>(dwFlags), &pa));
return mgd_cast(IVssAsync, pa);
}
virtual void RevertToSnapshot(Guid SnapshotId, Boolean bForceDismount)
{
Utils::ThrowIfFailed(pNative->RevertToSnapshot(SmartGuid(SnapshotId), bForceDismount));
}
virtual String^ SaveAsXML()
{
SafeBSTR s;
Utils::ThrowIfFailed(pNative->SaveAsXML(&s));
return s;
}
virtual void SetAdditionalRestores(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, Boolean bAdditionalRestores)
{
Utils::ThrowIfFailed(pNative->SetAdditionalRestores(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), bAdditionalRestores));
}
virtual void SetAuthoritativeRestore(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, Boolean bAuth)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
Utils::ThrowIfFailed(p->SetAuthoritativeRestore(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), bAuth));
}
virtual void SetBackupOptions(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, String^ wszBackupOptions)
{
Utils::ThrowIfFailed(pNative->SetBackupOptions(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), SafeWString(wszBackupOptions)));
}
virtual void SetBackupState(Boolean bSelectComponents, Boolean bBackupBootableSystemState, VSS_BACKUP_TYPE backupType, [System::Runtime::InteropServices::Optional] Boolean bPartialFileSupport)
{
Utils::ThrowIfFailed(pNative->SetBackupState(bSelectComponents, bBackupBootableSystemState, static_cast<::VSS_BACKUP_TYPE>(backupType), bPartialFileSupport));
}
virtual void SetBackupSucceeded(Guid instanceId, Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, Boolean bSucceded)
{
Utils::ThrowIfFailed(pNative->SetBackupSucceeded(SmartGuid(instanceId), SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), bSucceded));
}
virtual void SetContext(VSS_SNAPSHOT_CONTEXT lContext)
{
Utils::ThrowIfFailed(pNative->SetContext(static_cast<::VSS_SNAPSHOT_CONTEXT>(lContext)));
}
virtual void SetFileRestoreStatus(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, VSS_FILE_RESTORE_STATUS status)
{
Utils::ThrowIfFailed(pNative->SetFileRestoreStatus(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), static_cast<::VSS_FILE_RESTORE_STATUS>(status)));
}
virtual void SetPreviousBackupStamp(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, String^ wszPreviousBackupStamp)
{
Utils::ThrowIfFailed(pNative->SetPreviousBackupStamp(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), SafeWString(wszPreviousBackupStamp)));
}
virtual void SetRangesFilePath(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, UInt32 iPartialFile, String^ wszRangesFile)
{
Utils::ThrowIfFailed(pNative->SetRangesFilePath(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), iPartialFile, SafeWString(wszRangesFile)));
}
virtual void SetRestoreName(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, String^ wszRestoreName)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
Utils::ThrowIfFailed(p->SetRestoreName(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), SafeWString(wszRestoreName)));
}
virtual void SetRestoreOptions(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, String^ wszRestoreOptions)
{
Utils::ThrowIfFailed(pNative->SetRestoreOptions(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), SafeWString(wszRestoreOptions)));
}
virtual void SetRestoreState(VSS_RESTORE_TYPE restoreType)
{
Utils::ThrowIfFailed(pNative->SetRestoreState(static_cast<::VSS_RESTORE_TYPE>(restoreType)));
}
virtual void SetRollForward(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, VSS_ROLLFORWARD_TYPE rollType, String^ wszRollForwardPoint)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
Utils::ThrowIfFailed(p->SetRollForward(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), static_cast<::VSS_ROLLFORWARD_TYPE>(rollType), SafeWString(wszRollForwardPoint)));
}
virtual void SetSelectedForRestore(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, Boolean bSelectedForRestore)
{
Utils::ThrowIfFailed(pNative->SetSelectedForRestore(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), bSelectedForRestore));
}
virtual void SetSelectedForRestoreEx(Guid writerId, VSS_COMPONENT_TYPE ct, [System::Runtime::InteropServices::Optional] String^ wszLogicalPath, String^ wszComponentName, Boolean bSelectedForRestore, [System::Runtime::InteropServices::Optional] Guid instanceId)
{
SafeComPtr<::IVssBackupComponentsEx*> p = pNative;
Utils::ThrowIfFailed(p->SetSelectedForRestoreEx(SmartGuid(writerId), static_cast<::VSS_COMPONENT_TYPE>(ct), SafeWString(wszLogicalPath), SafeWString(wszComponentName), bSelectedForRestore, SmartGuid(instanceId)));
}
virtual Guid StartSnapshotSet()
{
VSS_ID id;
Utils::ThrowIfFailed(pNative->StartSnapshotSet(&id));
return Utils::FromGUID(id);
}
virtual void UnexposeSnapshot(Guid snapshotId)
{
SafeComPtr<::IVssBackupComponentsEx2*> p = pNative;
Utils::ThrowIfFailed(p->UnexposeSnapshot(SmartGuid(snapshotId)));
}
private:
IVssWriterComponentsExt^ GetWriterComponents(int i);
IVssExamineWriterMetadata^ GetWriterMetadata(int i);
VssWriterStatus GetWriterStatus(int i);
#define DEFINE_BC_ROLIST(prop, itf, ref) \
private:\
ListImplBase<itf>^ f##prop;\
int Get##prop##Count() { UINT c; Utils::ThrowIfFailed(pNative->ref(&c)); return c; }\
public:\
property IReadOnlyList<itf>^ prop { virtual IReadOnlyList<itf>^ get() {\
if (!f##prop) f##prop = gcnew ListImplBase<itf>(gcnew GetCount(this, &CVssBackupComponents::Get##prop##Count), gcnew GetValue<itf>(this, &CVssBackupComponents::Get##prop));\
return f##prop; } }
DEFINE_BC_ROLIST(WriterComponents, IVssWriterComponentsExt^, GetWriterComponentsCount)
DEFINE_BC_ROLIST(WriterMetadata, IVssExamineWriterMetadata^, GetWriterMetadataCount)
DEFINE_BC_ROLIST(WriterStatus, VssWriterStatus, GetWriterStatusCount)
};
value struct VSS_RESTORE_METHOD
{
public:
::VSS_RESTOREMETHOD_ENUM eMethod;
String^ bstrService;
String^ bstrUserProcedure;
::VSS_WRITERRESTORE_ENUM eWriterRestore;
bool bRebootRequired;
UINT iMappings;
VSS_RESTORE_METHOD(::VSS_RESTOREMETHOD_ENUM method, String^ strService, String^ strUserProcedure, ::VSS_WRITERRESTORE_ENUM writerRestore, bool rebootRequired, UINT mappings) :
eMethod(method), bstrService(strService), bstrUserProcedure(strUserProcedure), eWriterRestore(writerRestore), bRebootRequired(rebootRequired), iMappings(mappings) {}
};
ref class CVssExamineWriterMetadata : IVssExamineWriterMetadata, BaseWrapper<::IVssExamineWriterMetadata>
{
private:
VSS_RESTORE_METHOD restoreMethod;
UINT cIncludeFiles, cExcludeFiles, cComponents;
ListImplBase<IVssWMFiledesc^>^ fExcludeFromSnapshotFiles;
int GetExcludeFromSnapshotFilesCount() { SafeComPtr<::IVssExamineWriterMetadataEx2*> p2 = pNative; UINT c; Utils::ThrowIfFailed(p2->GetExcludeFromSnapshotCount(&c)); return c; }
IVssWMFiledesc^ GetExcludeFromSnapshotFiles(int i) { SafeComPtr<::IVssExamineWriterMetadataEx2*> p2 = pNative; ::IVssWMFiledesc* p; Utils::ThrowIfFailed(p2->GetExcludeFromSnapshotFile(i, &p)); return gcnew CVssWMFiledesc(p); }
void RefreshRestoreMethod();
void RefreshFileCounts();
public:
CVssExamineWriterMetadata(::IVssExamineWriterMetadata* ptr) : BaseWrapper(ptr) {}
#define DEFINE_EWM_ROLIST(prop, itf, gfunc, cwrap, ref, cexp) \
private:\
ListImplBase<itf^>^ f##prop;\
int Get##prop##Count() { ref(); return cexp; }\
itf^ Get##prop(int i) { ::itf* p; Utils::ThrowIfFailed(pNative->gfunc(i, &p)); return gcnew cwrap(p); }\
public:\
property IReadOnlyList<itf^>^ prop { virtual IReadOnlyList<itf^>^ get() {\
if (!f##prop) f##prop = gcnew ListImplBase<itf^>(gcnew GetCount(this, &CVssExamineWriterMetadata::Get##prop##Count), gcnew GetValue<itf^>(this, &CVssExamineWriterMetadata::Get##prop));\
return f##prop; } }
DEFINE_EWM_ROLIST(AlternateLocationMappings, IVssWMFiledesc, GetAlternateLocationMapping, CVssWMFiledesc, RefreshRestoreMethod, restoreMethod.iMappings)
DEFINE_EWM_ROLIST(Components, IVssWMComponent, GetComponent, CVssWMComponent, RefreshFileCounts, cComponents)
DEFINE_EWM_ROLIST(ExcludeFiles, IVssWMFiledesc, GetExcludeFile, CVssWMFiledesc, RefreshFileCounts, cExcludeFiles)
// DEFINE_EWM_ROLIST(IncludeFiles, IVssWMFiledesc, GetIncludeFile, CVssWMFiledesc, RefreshFileCounts, cIncludeFiles);
private:
public:
DEFINE_WRAPPER_PROP(BackupSchema, VSS_BACKUP_SCHEMA, DWORD, GetBackupSchema);
property IReadOnlyList<IVssWMFiledesc^>^ ExcludeFromSnapshotFiles { virtual IReadOnlyList<IVssWMFiledesc^>^ get() {
if (!fExcludeFromSnapshotFiles)
fExcludeFromSnapshotFiles = gcnew ListImplBase<IVssWMFiledesc^>(gcnew GetCount(this, &CVssExamineWriterMetadata::GetExcludeFromSnapshotFilesCount),
gcnew GetValue<IVssWMFiledesc^>(this, &CVssExamineWriterMetadata::GetExcludeFromSnapshotFiles));
return fExcludeFromSnapshotFiles;
} }
property Version^ Version { virtual System::Version^ get(); }
virtual void GetIdentity(Guid% pidInstance, Guid% pidWriter, String^% pbstrWriterName, String^% pbstrInstanceName, VSS_USAGE_TYPE% pUsage,
VSS_SOURCE_TYPE% pSource);
virtual void GetRestoreMethod(VSS_RESTOREMETHOD_ENUM% pMethod, System::String^% pbstrService, System::String^% pbstrUserProcedure,
VSS_WRITERRESTORE_ENUM% pwriterRestore, bool% pbRebootRequired, UInt32% pcMappings);
virtual void LoadFromXML(String^ bstrXML);
virtual String^ SaveAsXML();
};
}
}
}

151
PInvoke/VssApi/VsWriter.cpp Normal file
View File

@ -0,0 +1,151 @@
#include "pch.h"
#include <windef.h>
#include "vswriter.h"
#include "CliLists.h"
using namespace Vanara::PInvoke::VssApi;
using namespace System::Collections::Generic;
#define DEFINE_COMP_ROLIST(prop, cFunc, iElem, gFunc, cElem) \
IReadOnlyList<Vanara::PInvoke::VssApi::IVssWMFiledesc^>^ CVssComponent::prop::get() {\
UINT c;\
Utils::ThrowIfFailed(pNative->cFunc(&c));\
auto ret = gcnew List<iElem^>();\
::iElem* v;\
for (UINT i = 0; i < c; i++) {\
pNative->gFunc(i, &v);\
ret->Add(gcnew cElem(v));\
}\
return ret;\
}
DEFINE_COMP_ROLIST(AlternateLocationMappings, GetAlternateLocationMappingCount, IVssWMFiledesc, GetAlternateLocationMapping, CVssWMFiledesc)
DEFINE_COMP_ROLIST(NewTargets, GetNewTargetCount, IVssWMFiledesc, GetNewTarget, CVssWMFiledesc)
VssDifferencedFile CVssComponent::GetDifferencedFilesItem(int i)
{
SafeBSTR path, filespec, lsn;
::BOOL recur;
FILETIME ft;
Utils::ThrowIfFailed(pNative->GetDifferencedFile(i, &path, &filespec, &recur, &lsn, &ft));
VssDifferencedFile e;
e.Path = path;
e.FileSpec = filespec;
e.Recursive = recur;
::Int64 nFT = static_cast<::Int64>(*(long long*)&ft);
e.LastModifyTime = DateTime::FromFileTime(nFT);
return e;
}
void CVssComponent::AddDifferencedFile(VssDifferencedFile item)
{
auto llft = item.LastModifyTime.ToFileTime();
FILETIME ft = *(FILETIME*)&llft;
Utils::ThrowIfFailed(pNative->AddDifferencedFilesByLastModifyTime(SafeWString(item.Path), SafeWString(item.FileSpec), item.Recursive, ft));
}
IAppendOnlyList<VssDifferencedFile>^ CVssComponent::DifferencedFiles::get()
{
return gcnew AppendOnlyList<Vanara::PInvoke::VssApi::VssDifferencedFile>(
gcnew GetCount(this, &CVssComponent::GetDifferencedFilesCount),
gcnew GetValue<VssDifferencedFile>(this, &CVssComponent::GetDifferencedFilesItem),
gcnew AddValue<VssDifferencedFile>(this, &CVssComponent::AddDifferencedFile));
}
VssDirectedTarget CVssComponent::GetDirectedTargetItem(int i)
{
SafeBSTR spath, sfn, srng, dpath, dfn, drng;
Utils::ThrowIfFailed(pNative->GetDirectedTarget(i, &spath, &sfn, &srng, &dpath, &dfn, &drng));
VssDirectedTarget e = { dfn, dpath, drng, sfn, spath, srng, };
return e;
}
void CVssComponent::AddDirectedTarget(VssDirectedTarget v)
{
Utils::ThrowIfFailed(pNative->AddDirectedTarget(SafeWString(v.SourcePath),
SafeWString(v.SourceFilename), SafeWString(v.SourceRangeList), SafeWString(v.DestinationPath),
SafeWString(v.DestinationFilename), SafeWString(v.DestinationRangeList)));
}
IAppendOnlyList<VssDirectedTarget>^ CVssComponent::DirectedTargets::get()
{
return gcnew AppendOnlyList<Vanara::PInvoke::VssApi::VssDirectedTarget>(
gcnew GetCount(this, &CVssComponent::GetDirectedTargetCount),
gcnew GetValue<VssDirectedTarget>(this, &CVssComponent::GetDirectedTargetItem),
gcnew AddValue<VssDirectedTarget>(this, &CVssComponent::AddDirectedTarget));
}
VssPartialFile CVssComponent::GetPartialFileItem(int i)
{
SafeBSTR path, fn, rng, meta;
Utils::ThrowIfFailed(pNative->GetPartialFile(i, &path, &fn, &rng, &meta));
VssPartialFile e = { fn, meta, path, rng };
return e;
}
void CVssComponent::AddPartialFile(VssPartialFile v)
{
Utils::ThrowIfFailed(pNative->AddPartialFile(SafeWString(v.Path), SafeWString(v.Filename),
SafeWString(v.Ranges), SafeWString(v.Metadata)));
}
IAppendOnlyList<VssPartialFile>^ CVssComponent::PartialFiles::get()
{
return gcnew AppendOnlyList<Vanara::PInvoke::VssApi::VssPartialFile>(
gcnew GetCount(this, &CVssComponent::GetPartialFileCount),
gcnew GetValue<VssPartialFile>(this, &CVssComponent::GetPartialFileItem),
gcnew AddValue<VssPartialFile>(this, &CVssComponent::AddPartialFile));
}
VssRestoreSubcomponent CVssComponent::GetRestoreSubcomponentsItem(int i)
{
SafeBSTR path, n;
bool repair;
Utils::ThrowIfFailed(pNative->GetRestoreSubcomponent(i, &path, &n, &repair));
VssRestoreSubcomponent e = { repair, n, path };
return e;
}
IReadOnlyList<VssRestoreSubcomponent>^ CVssComponent::RestoreSubcomponents::get()
{
return gcnew ListImplBase<Vanara::PInvoke::VssApi::VssRestoreSubcomponent>(
gcnew GetCount(this, &CVssComponent::GetRestoreSubcomponentsCount),
gcnew GetValue<VssRestoreSubcomponent>(this, &CVssComponent::GetRestoreSubcomponentsItem));
}
void CVssComponent::GetFailure(Vanara::PInvoke::HRESULT% phr, Vanara::PInvoke::HRESULT% phrApplication, System::String^% pbstrApplicationMessage)
{
SafeComPtr<::IVssComponentEx2*> p = pNative;
::HRESULT hr, hrApp;
SafeBSTR msg;
DWORD d;
Utils::ThrowIfFailed(p->GetFailure(&hr, &hrApp, &msg, &d));
phr = static_cast<HRESULT>(hr);
phrApplication = static_cast<HRESULT>(hrApp);
pbstrApplicationMessage = msg;
}
void CVssComponent::GetRollForward(VSS_ROLLFORWARD_TYPE% pRollType, System::String^% pbstrPoint)
{
SafeComPtr<::IVssComponentEx*> p = pNative;
::VSS_ROLLFORWARD_TYPE type;
SafeBSTR pt;
Utils::ThrowIfFailed(p->GetRollForward(&type, &pt));
pRollType = static_cast<VSS_ROLLFORWARD_TYPE>(type);
pbstrPoint = pt;
}
void CVssComponent::SetFailure(Vanara::PInvoke::HRESULT hr, Vanara::PInvoke::HRESULT hrApplication, System::String^ wszApplicationMessage)
{
SafeComPtr<::IVssComponentEx2*> p = pNative;
SafeString msg = wszApplicationMessage;
Utils::ThrowIfFailed(p->SetFailure(static_cast<::HRESULT>((Int32)hr), static_cast<::HRESULT>((Int32)hrApplication), msg, 0));
}
Vanara::PInvoke::VssApi::IVssComponent^ CVssWriterComponents::GetComponent(int i)
{
SafeComPtr<::IVssComponent*> c;
Utils::ThrowIfFailed(pNative->GetComponent(i, &c));
return (IVssComponent^)Marshal::GetObjectForIUnknown(IntPtr((::IVssComponent*)c));
}

1105
PInvoke/VssApi/VsWriter.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
#include "pch.h"
#include "VssApi.h"

2
PInvoke/VssApi/VssApi.h Normal file
View File

@ -0,0 +1,2 @@
#pragma once

View File

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}</ProjectGuid>
<Keyword>NetCoreCProj</Keyword>
<RootNamespace>VssApi</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<TargetFramework>net5.0</TargetFramework>
<ProjectName>Vanara.PInvoke.VssApi</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CLRSupport>NetCore</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CLRSupport>NetCore</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CLRSupport>NetCore</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CLRSupport>NetCore</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<TargetName>Vanara.PInvoke.VssApi</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>vssapi.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies />
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="BaseWrapper.h" />
<ClInclude Include="CliLists.h" />
<ClInclude Include="Macros.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="SafePtr.h" />
<ClInclude Include="Utils.h" />
<ClInclude Include="VsBackup.h" />
<ClInclude Include="VssApi.h" />
<ClInclude Include="VssFactory.h" />
<ClInclude Include="VsWriter.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="AssemblyInfo.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="VsBackup.cpp" />
<ClCompile Include="VssApi.cpp" />
<ClCompile Include="VssFactory.cpp" />
<ClCompile Include="VsWriter.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="app.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="app.ico" />
</ItemGroup>
<ItemGroup>
<Reference Include="Vanara.Core">
<HintPath>..\..\..\..\GitHubRepos\Vanara\PInvoke\VssApi\bin\Debug\net5.0\Vanara.Core.dll</HintPath>
<Private>false</Private>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
</Reference>
<Reference Include="Vanara.PInvoke.Shared">
<HintPath>..\..\..\..\GitHubRepos\Vanara\PInvoke\VssApi\bin\Debug\net5.0\Vanara.PInvoke.Shared.dll</HintPath>
<Private>false</Private>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
</Reference>
<Reference Include="Vanara.PInvoke.VssApi">
<HintPath>..\..\..\..\GitHubRepos\Vanara\PInvoke\VssApi\bin\Debug\net5.0\Vanara.PInvoke.VssApi.dll</HintPath>
<Private>false</Private>
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
</Reference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="VssApi.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VsBackup.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="BaseWrapper.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SafePtr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Macros.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VsWriter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VssFactory.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CliLists.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="VssApi.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AssemblyInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VsBackup.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VssFactory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VsWriter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="app.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<Image Include="app.ico">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)docs\icons\Vanara64x64.png">
<Filter>Resource Files</Filter>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,34 @@
#include "pch.h"
#include "VssFactory.h"
using namespace System;
using namespace Runtime::InteropServices;
namespace Vanara { namespace PInvoke { namespace VssApi {
HRESULT Vanara::PInvoke::VssApi::VssFactory::CreateVssBackupComponents(Vanara::PInvoke::VssApi::IVssBackupComponents^% ppBackup)
{
SafeComPtr<::IVssBackupComponents*> pBC;
auto hr = ::CreateVssBackupComponents(&pBC);
ppBackup = hr >= 0 ? gcnew Vanara::PInvoke::VssApi::CVssBackupComponents(pBC) : nullptr;
return HRESULT(hr);
}
HRESULT Vanara::PInvoke::VssApi::VssFactory::CreateVssExamineWriterMetadata(String^ bstrXML, Vanara::PInvoke::VssApi::IVssExamineWriterMetadata^% ppMetadata)
{
SafeBSTR bstr = (BSTR)Marshal::StringToBSTR(bstrXML).ToPointer();
SafeComPtr<::IVssExamineWriterMetadata*> pMeta;
auto hr = ::CreateVssExamineWriterMetadata(bstr, &pMeta);
ppMetadata = hr >= 0 ? gcnew Vanara::PInvoke::VssApi::CVssExamineWriterMetadata(pMeta) : nullptr;
return HRESULT(hr);
}
HRESULT Vanara::PInvoke::VssApi::VssFactory::CreateVssExpressWriter(Vanara::PInvoke::VssApi::IVssExpressWriter^% ppWriter)
{
SafeComPtr<::IVssExpressWriter*> pWriter;
auto hr = ::CreateVssExpressWriter(&pWriter);
ppWriter = hr >= 0 ? gcnew Vanara::PInvoke::VssApi::CVssExpressWriter(pWriter) : nullptr;
return HRESULT(hr);
}
}}}

160
PInvoke/VssApi/VssFactory.h Normal file
View File

@ -0,0 +1,160 @@
#pragma once
#include "pch.h"
#include "vswriter.h"
#include "vsbackup.h"
using namespace System;
using namespace Runtime::InteropServices;
namespace Vanara { namespace PInvoke { namespace VssApi {
public ref class VssFactory sealed
{
public:
/// <summary>The <c>CreateVssExamineWriterMetadata</c> function creates an IVssExamineWriterMetadata object.</summary>
/// <param name="bstrXML">
/// An XML string containing a Writer Metadata Document with which to initialize the returned IVssExamineWriterMetadata object.
/// </param>
/// <param name="ppMetadata">A variable that receives an IVssExamineWriterMetadata interface pointer to the object.</param>
/// <returns>
/// <para>The return values listed here are in addition to the normal COM HRESULTs that may be returned at any time from the function.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>S_OK</term>
/// <term>Successfully returned a pointer to an IVssExamineWriterMetadata interface.</term>
/// </item>
/// <item>
/// <term>E_ACCESSDENIED</term>
/// <term>The caller does not have sufficient backup privileges or is not an administrator.</term>
/// </item>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>Out of memory or other system resources.</term>
/// </item>
/// <item>
/// <term>VSS_E_INVALID_XML_DOCUMENT</term>
/// <term>
/// The XML document passed in the bstrXML parameter is not valid—that is, either it is not a correctly formed XML string or it does
/// not match the schema.
/// </term>
/// </item>
/// <item>
/// <term>VSS_E_UNEXPECTED</term>
/// <term>
/// Unexpected error. The error code is logged in the error log file. For more information, see Event and Error Handling Under VSS.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not supported until Windows Server 2008 R2
/// and Windows 7. E_UNEXPECTED is used instead.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// To save a copy of a writers Writer Metadata Document into an XML string to pass in the bstrXML parameter, use the
/// IVssExamineWriterMetadata::SaveAsXML method.
/// </para>
/// <para>
/// To retrieve the latest version of a writers Writer Metadata Document, use the IVssBackupComponents::GetWriterMetadata method.
/// </para>
/// <para>
/// To load a writer metadata document into an existing IVssExamineWriterMetadata object, use the
/// IVssExamineWriterMetadata::LoadFromXML method.
/// </para>
/// <para>Users should not attempt to modify the contents of the Writer Metadata Document.</para>
/// <para>
/// The calling application is responsible for calling IUnknown::Release to release the resources held by the
/// IVssExamineWriterMetadata object when the object is no longer needed.
/// </para>
/// </remarks>
[PInvokeData("vsbackup.h", MSDNShortId = "NF:vsbackup.CreateVssExamineWriterMetadata")]
static HRESULT CreateVssExamineWriterMetadata(String^ bstrXML, [Runtime::InteropServices::Out] Vanara::PInvoke::VssApi::IVssExamineWriterMetadata^% ppMetadata);
/// <summary>Creates an IVssExpressWriter interface object and returns a pointer to it.</summary>
/// <param name="ppWriter">Doubly indirect pointer to the newly created IVssExpressWriter object.</param>
/// <returns>
/// <para>
/// The return values listed here are in addition to the normal COM HRESULT values that may be returned at any time from the function.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>S_OK</term>
/// <term>Successfully returned a pointer to an IVssExpressWriter interface.</term>
/// </item>
/// <item>
/// <term>E_ACCESSDENIED</term>
/// <term>The caller does not have sufficient privileges.</term>
/// </item>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// </list>
/// </returns>
// https://docs.microsoft.com/en-us/windows/win32/api/vswriter/nf-vswriter-createvssexpresswriter HRESULT CreateVssExpressWriter(
// [out] IVssExpressWriter **ppWriter );
[PInvokeData("vswriter.h", MSDNShortId = "NF:vswriter.CreateVssExpressWriter")]
static HRESULT CreateVssExpressWriter([Runtime::InteropServices::Out] Vanara::PInvoke::VssApi::IVssExpressWriter^% ppWriter);
/// <summary>
/// <para>
/// The <c>CreateVssBackupComponents</c> function creates an IVssBackupComponents interface object and returns a pointer to it.
/// </para>
/// </summary>
/// <param name="ppBackup">Doubly indirect pointer to the created IVssBackupComponents interface object.</param>
/// <returns>
/// <para>
/// The return values listed here are in addition to the normal COM <c>HRESULT</c> s that may be returned at any time from the function.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>S_OK</term>
/// <term>Successfully returned a pointer to an IVssBackupComponents interface.</term>
/// </item>
/// <item>
/// <term>E_ACCESSDENIED</term>
/// <term>The caller does not have sufficient backup privileges or is not an administrator.</term>
/// </item>
/// <item>
/// <term>E_INVALIDARG</term>
/// <term>One of the parameters is not valid.</term>
/// </item>
/// <item>
/// <term>E_OUTOFMEMORY</term>
/// <term>Out of memory or other system resources.</term>
/// </item>
/// <item>
/// <term>VSS_E_UNEXPECTED</term>
/// <term>
/// Unexpected error. The error code is logged in the error log file. For more information, see Event and Error Handling Under VSS.
/// Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not supported until Windows Server 2008 R2
/// and Windows 7. E_UNEXPECTED is used instead.
/// </term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// The calling application is responsible for calling IUnknown::Release to release the resources held by the returned
/// IVssBackupComponents when it is no longer needed.
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/vsbackup/nf-vsbackup-createvssbackupcomponents HRESULT
// CreateVssBackupComponents( [out] IVssBackupComponents **ppBackup);
[PInvokeData("vsbackup.h", MSDNShortId = "NF:vsbackup.CreateVssBackupComponents")]
static HRESULT CreateVssBackupComponents([Runtime::InteropServices::Out] Vanara::PInvoke::VssApi::IVssBackupComponents^% ppBackup);
};
}}}

BIN
PInvoke/VssApi/app.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
PInvoke/VssApi/app.rc Normal file

Binary file not shown.

5
PInvoke/VssApi/pch.cpp Normal file
View File

@ -0,0 +1,5 @@
// pch.cpp: source file corresponding to the pre-compiled header
#include "pch.h"
// When you are using pre-compiled headers, this source file is necessary for compilation to succeed.

23
PInvoke/VssApi/pch.h Normal file
View File

@ -0,0 +1,23 @@
// pch.h: This is a precompiled header file.
// Files listed below are compiled only once, improving build performance for future builds.
// This also affects IntelliSense performance, including code completion and many code browsing features.
// However, files listed here are ALL re-compiled if any one of them is updated between builds.
// Do not add files here that you will be updating frequently as this negates the performance advantage.
#ifndef PCH_H
#define PCH_H
// add headers that you want to pre-compile here
#define WINVER 0x0502
#define _AFXDLL
#include <windows.h>
#include <comdef.h>
#include <vss.h>
#include <vswriter.h>
#include <vsbackup.h>
#include "SafePtr.h"
#include "BaseWrapper.h"
#include "Utils.h"
#include "Macros.h"
#endif //PCH_H

View File

@ -85,63 +85,63 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core", "UnitTests\Core\Core.csproj", "{8EDF4429-251A-416D-BB68-93F227191BCF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Security", "UnitTests\Security\Security.csproj", "{31F68B09-2933-45A1-B86B-9F6D647ED2D9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Security", "UnitTests\Security\Security.csproj", "{31F68B09-2933-45A1-B86B-9F6D647ED2D9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System", "UnitTests\System\System.csproj", "{9AEC2C7E-09D3-41C7-BDA7-4A7BAAA3441E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Windows.Forms", "UnitTests\Windows.Forms\Windows.Forms.csproj", "{C1FFE607-1D85-49F8-9421-6B21AB778816}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Windows.Forms", "UnitTests\Windows.Forms\Windows.Forms.csproj", "{C1FFE607-1D85-49F8-9421-6B21AB778816}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Windows.Shell", "UnitTests\Windows.Shell\Windows.Shell.csproj", "{2616C074-DF6C-47D4-BE82-6768885ACAC9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PInvoke", "PInvoke", "{385CAD2D-0A5E-4F80-927B-D5499D126B90}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AclUI", "UnitTests\PInvoke\AclUI\AclUI.csproj", "{81A79BCD-C322-4742-842E-F70344FAD01D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AclUI", "UnitTests\PInvoke\AclUI\AclUI.csproj", "{81A79BCD-C322-4742-842E-F70344FAD01D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComCtl32", "UnitTests\PInvoke\ComCtl32\ComCtl32.csproj", "{FC54780C-E523-450E-BC74-1F900A652A2C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComCtl32", "UnitTests\PInvoke\ComCtl32\ComCtl32.csproj", "{FC54780C-E523-450E-BC74-1F900A652A2C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CredUI", "UnitTests\PInvoke\CredUI\CredUI.csproj", "{D26F23F2-35E8-4253-BCEF-56F113C93B02}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CredUI", "UnitTests\PInvoke\CredUI\CredUI.csproj", "{D26F23F2-35E8-4253-BCEF-56F113C93B02}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cryptography", "UnitTests\PInvoke\Cryptography\Cryptography.csproj", "{D2F143F6-25E8-4B00-A260-B3E3AA46960F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cryptography", "UnitTests\PInvoke\Cryptography\Cryptography.csproj", "{D2F143F6-25E8-4B00-A260-B3E3AA46960F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DwmApi", "UnitTests\PInvoke\DwmApi\DwmApi.csproj", "{495E0181-1513-423C-8056-A5EE400FA066}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DwmApi", "UnitTests\PInvoke\DwmApi\DwmApi.csproj", "{495E0181-1513-423C-8056-A5EE400FA066}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gdi32", "UnitTests\PInvoke\Gdi32\Gdi32.csproj", "{A1A941E2-CF51-4582-B8B3-5CBC8905CA8D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gdi32", "UnitTests\PInvoke\Gdi32\Gdi32.csproj", "{A1A941E2-CF51-4582-B8B3-5CBC8905CA8D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IpHlpApi", "UnitTests\PInvoke\IpHlpApi\IpHlpApi.csproj", "{FB4E72CC-FF45-4A75-84FB-D220E0C06698}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IpHlpApi", "UnitTests\PInvoke\IpHlpApi\IpHlpApi.csproj", "{FB4E72CC-FF45-4A75-84FB-D220E0C06698}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kernel32", "UnitTests\PInvoke\Kernel32\Kernel32.csproj", "{EF6CA228-59F6-495B-8F59-372690E68650}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mpr", "UnitTests\PInvoke\Mpr\Mpr.csproj", "{A300ACD4-2E77-4649-B773-2DD55CDB9573}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mpr", "UnitTests\PInvoke\Mpr\Mpr.csproj", "{A300ACD4-2E77-4649-B773-2DD55CDB9573}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetApi32", "UnitTests\PInvoke\NetApi32\NetApi32.csproj", "{2043D4AA-5286-491F-A334-A3CC7A08DB56}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetApi32", "UnitTests\PInvoke\NetApi32\NetApi32.csproj", "{2043D4AA-5286-491F-A334-A3CC7A08DB56}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetListMgr", "UnitTests\PInvoke\NetListMgr\NetListMgr.csproj", "{969234E4-6C92-4DAD-9AB9-25E618906643}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetListMgr", "UnitTests\PInvoke\NetListMgr\NetListMgr.csproj", "{969234E4-6C92-4DAD-9AB9-25E618906643}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NtDll", "UnitTests\PInvoke\NtDll\NtDll.csproj", "{6DD8BB87-AFBB-4E20-87CA-82967D01EF2D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NtDll", "UnitTests\PInvoke\NtDll\NtDll.csproj", "{6DD8BB87-AFBB-4E20-87CA-82967D01EF2D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NTDSApi", "UnitTests\PInvoke\NTDSApi\NTDSApi.csproj", "{D7E06BE2-1BAC-4016-8228-FAA091ED4831}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NTDSApi", "UnitTests\PInvoke\NTDSApi\NTDSApi.csproj", "{D7E06BE2-1BAC-4016-8228-FAA091ED4831}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ole", "UnitTests\PInvoke\Ole\Ole.csproj", "{BB78D331-8903-40CE-90C4-B0E77D7B20FB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowrProf", "UnitTests\PInvoke\PowrProf\PowrProf.csproj", "{BAD9E08F-4001-4294-804D-7421012DAA3D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PowrProf", "UnitTests\PInvoke\PowrProf\PowrProf.csproj", "{BAD9E08F-4001-4294-804D-7421012DAA3D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Security", "UnitTests\PInvoke\Security\Security.csproj", "{C580868E-D913-454C-BF9B-CAFE3BD28DF0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Security", "UnitTests\PInvoke\Security\Security.csproj", "{C580868E-D913-454C-BF9B-CAFE3BD28DF0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "UnitTests\PInvoke\Shared\Shared.csproj", "{6F668E05-8141-48B8-9031-326C79745AF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shell32", "UnitTests\PInvoke\Shell32\Shell32.csproj", "{40E5CA4E-527F-4F79-875D-2342D1136FDD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskSchd", "UnitTests\PInvoke\TaskSchd\TaskSchd.csproj", "{85157400-A6FF-41E7-B650-4952ECBC28AD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaskSchd", "UnitTests\PInvoke\TaskSchd\TaskSchd.csproj", "{85157400-A6FF-41E7-B650-4952ECBC28AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "User32", "UnitTests\PInvoke\User32\User32.csproj", "{60A80A72-67BD-4CC2-95DA-0F6D3553A221}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "User32", "UnitTests\PInvoke\User32\User32.csproj", "{60A80A72-67BD-4CC2-95DA-0F6D3553A221}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UxTheme", "UnitTests\PInvoke\UxTheme\UxTheme.csproj", "{EFAFBD16-A9FB-4656-896D-AD434B778EF0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UxTheme", "UnitTests\PInvoke\UxTheme\UxTheme.csproj", "{EFAFBD16-A9FB-4656-896D-AD434B778EF0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtDisk", "UnitTests\PInvoke\VirtDisk\VirtDisk.csproj", "{6947F255-E176-409C-9788-9C02A68C9D3B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VirtDisk", "UnitTests\PInvoke\VirtDisk\VirtDisk.csproj", "{6947F255-E176-409C-9788-9C02A68C9D3B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinINet", "UnitTests\PInvoke\WinINet\WinINet.csproj", "{A4BF5AA2-4D73-4BE7-ABB4-3DC089CFA77A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinINet", "UnitTests\PInvoke\WinINet\WinINet.csproj", "{A4BF5AA2-4D73-4BE7-ABB4-3DC089CFA77A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ws2_32", "UnitTests\PInvoke\Ws2_32\Ws2_32.csproj", "{15DC485D-B379-4087-97A7-981ADB4D48F9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ws2_32", "UnitTests\PInvoke\Ws2_32\Ws2_32.csproj", "{15DC485D-B379-4087-97A7-981ADB4D48F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Accessibility", "PInvoke\Accessibility\Vanara.PInvoke.Accessibility.csproj", "{D5BD6ECE-B285-4CE8-ABFC-964AB1DEA464}"
EndProject
@ -155,27 +155,27 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Wer", "PInvo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.KtmW32", "PInvoke\KtmW32\Vanara.PInvoke.KtmW32.csproj", "{C325C0A4-B8CF-442B-B393-C65FC9174045}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KtmW32", "UnitTests\PInvoke\KtmW32\KtmW32.csproj", "{8BC51B6B-77FA-4571-8E1C-EA75ED4DCD56}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KtmW32", "UnitTests\PInvoke\KtmW32\KtmW32.csproj", "{8BC51B6B-77FA-4571-8E1C-EA75ED4DCD56}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Pdh", "PInvoke\Pdh\Vanara.PInvoke.Pdh.csproj", "{C1D9429F-A8BD-4094-ABE3-32581FC4614F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pdh", "UnitTests\PInvoke\Pdh\Pdh.csproj", "{15189584-3BD8-47DB-8B65-F58482063585}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pdh", "UnitTests\PInvoke\Pdh\Pdh.csproj", "{15189584-3BD8-47DB-8B65-F58482063585}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.BITS", "BITS\Vanara.BITS.csproj", "{C7ACE187-CB36-4CEA-AE0C-651669237427}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.VirtualDisk", "VirtualDisk\Vanara.VirtualDisk.csproj", "{D4E36942-7492-46B9-985B-F99D8F5A35AB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BITS", "UnitTests\BITS\BITS.csproj", "{5558B8E3-FF1C-401F-978E-E91D1E78B898}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BITS", "UnitTests\BITS\BITS.csproj", "{5558B8E3-FF1C-401F-978E-E91D1E78B898}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualDisk", "UnitTests\VirtualDisk\VirtualDisk.csproj", "{687F9162-8CA0-4277-B868-4E7F2EC614F8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VirtualDisk", "UnitTests\VirtualDisk\VirtualDisk.csproj", "{687F9162-8CA0-4277-B868-4E7F2EC614F8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExplorerBrowserDemo", "UnitTests\ExplorerBrowser\ExplorerBrowserDemo.csproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExplorerBrowserDemo", "UnitTests\ExplorerBrowser\ExplorerBrowserDemo.csproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Windows.Forms.App", "UnitTests\Windows.Forms.App\Windows.Forms.App.csproj", "{9520EC8B-9C63-47E6-A7BD-1CCF9BBB5BFA}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Windows.Forms.App", "UnitTests\Windows.Forms.App\Windows.Forms.App.csproj", "{9520EC8B-9C63-47E6-A7BD-1CCF9BBB5BFA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Printing", "PInvoke\Printing\Vanara.PInvoke.Printing.csproj", "{D3E1F2B8-D475-4922-B334-919795B858CB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Printing", "UnitTests\PInvoke\Printing\Printing.csproj", "{D2A4FD48-FCED-4E45-BBA0-C2D5CC536428}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Printing", "UnitTests\PInvoke\Printing\Printing.csproj", "{D2A4FD48-FCED-4E45-BBA0-C2D5CC536428}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.UrlMon", "PInvoke\UrlMon\Vanara.PInvoke.UrlMon.csproj", "{1A232558-F25A-4D9B-99DE-76F1B4E41F22}"
EndProject
@ -183,7 +183,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Opc", "PInvo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.UserEnv", "PInvoke\UserEnv\Vanara.PInvoke.UserEnv.csproj", "{2F4AF0C8-483B-4F0E-89F7-EB9AC32385B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UserEnv", "UnitTests\PInvoke\UserEnv\UserEnv.csproj", "{FFF69906-9EEC-4D01-879F-CE96DE2FFC6A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UserEnv", "UnitTests\PInvoke\UserEnv\UserEnv.csproj", "{FFF69906-9EEC-4D01-879F-CE96DE2FFC6A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{067384DF-120D-485D-B2BF-D6D6089937B8}"
ProjectSection(SolutionItems) = preProject
@ -195,45 +195,45 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
Vanara.Library.nuspec = Vanara.Library.nuspec
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Opc", "UnitTests\PInvoke\Opc\Opc.csproj", "{9783BAFF-8388-44FA-882B-A92142CC20F5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Opc", "UnitTests\PInvoke\Opc\Opc.csproj", "{9783BAFF-8388-44FA-882B-A92142CC20F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UrlMon", "UnitTests\PInvoke\UrlMon\UrlMon.csproj", "{2D9E5288-94AA-486A-B89D-0569AE2284F1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UrlMon", "UnitTests\PInvoke\UrlMon\UrlMon.csproj", "{2D9E5288-94AA-486A-B89D-0569AE2284F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WcmApi", "PInvoke\WcmApi\Vanara.PInvoke.WcmApi.csproj", "{7508C4E0-D14B-45DF-B644-9236B0B83607}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WlanApi", "PInvoke\WlanApi\Vanara.PInvoke.WlanApi.csproj", "{141B6B19-6F07-4644-B72D-B189E49030BF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WlanApi", "UnitTests\PInvoke\WlanApi\WlanApi.csproj", "{F8E02C7E-99E9-4C99-B63D-E678BC43C734}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WlanApi", "UnitTests\PInvoke\WlanApi\WlanApi.csproj", "{F8E02C7E-99E9-4C99-B63D-E678BC43C734}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WcmApi", "UnitTests\PInvoke\WcmApi\WcmApi.csproj", "{35B95D64-CC7E-48B4-B104-4886411531AC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WcmApi", "UnitTests\PInvoke\WcmApi\WcmApi.csproj", "{35B95D64-CC7E-48B4-B104-4886411531AC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.DnsApi", "PInvoke\DnsApi\Vanara.PInvoke.DnsApi.csproj", "{15023E19-86A7-40C7-838E-21EEB15A63AF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DnsApi", "UnitTests\PInvoke\DnsApi\DnsApi.csproj", "{5B4ADAFE-DCCC-40BC-9A9E-8086E57E8B49}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DnsApi", "UnitTests\PInvoke\DnsApi\DnsApi.csproj", "{5B4ADAFE-DCCC-40BC-9A9E-8086E57E8B49}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.CldApi", "PInvoke\CldApi\Vanara.PInvoke.CldApi.csproj", "{DDFCBC19-B6CE-4DD4-A1BB-96EE86C54D93}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CldApi", "UnitTests\PInvoke\CldApi\CldApi.csproj", "{CCEE0CAA-27BF-43B3-8609-2279BEDA3F61}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CldApi", "UnitTests\PInvoke\CldApi\CldApi.csproj", "{CCEE0CAA-27BF-43B3-8609-2279BEDA3F61}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.ProjectedFSLib", "PInvoke\ProjectedFSLib\Vanara.PInvoke.ProjectedFSLib.csproj", "{30F2727D-0B8E-4364-8F0E-9EEB4CD9CB0E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Graphics", "PInvoke\Graphics\Vanara.PInvoke.Graphics.csproj", "{FAF09C42-66CA-4765-910A-2A9A2EF399D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Graphics", "UnitTests\PInvoke\Graphics\Graphics.csproj", "{AD003766-998F-4969-8632-A9CD0E3A21F8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Graphics", "UnitTests\PInvoke\Graphics\Graphics.csproj", "{AD003766-998F-4969-8632-A9CD0E3A21F8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreConsoleApp", "UnitTests\CoreConsoleApp\CoreConsoleApp.csproj", "{3E14800D-4E2D-43A0-8C15-B64C6F4469CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Magnification", "PInvoke\Magnification\Vanara.PInvoke.Magnification.csproj", "{93EFCE73-4A4D-40A3-882E-6A4A20C40816}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Magnification", "UnitTests\PInvoke\Magnification\Magnification.csproj", "{E753F3A4-2A0B-49E2-9611-4F35534B5F72}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Magnification", "UnitTests\PInvoke\Magnification\Magnification.csproj", "{E753F3A4-2A0B-49E2-9611-4F35534B5F72}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.DbgHelp", "PInvoke\DbgHelp\Vanara.PInvoke.DbgHelp.csproj", "{69604ECE-B123-4328-BEC3-996CCF22DB90}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbgHelp", "UnitTests\PInvoke\DbgHelp\DbgHelp.csproj", "{F2C94926-224F-43AB-B351-C20C9B2D8656}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbgHelp", "UnitTests\PInvoke\DbgHelp\DbgHelp.csproj", "{F2C94926-224F-43AB-B351-C20C9B2D8656}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.P2P", "PInvoke\P2P\Vanara.PInvoke.P2P.csproj", "{200D7E57-452A-4A43-A96D-386F7C49E7BA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "P2P", "UnitTests\PInvoke\P2P\P2P.csproj", "{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "P2P", "UnitTests\PInvoke\P2P\P2P.csproj", "{BBA10B94-658F-4BD7-A3DD-AA39CDF9A68D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.PeerDist", "PInvoke\PeerDist\Vanara.PInvoke.PeerDist.csproj", "{3108565B-2F79-447B-9386-42203CD949A5}"
EndProject
@ -241,13 +241,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Drt", "PInvo
EndProject
Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Vanara.PInvoke.FirewallApi", "PInvoke\FirewallApi\Vanara.PInvoke.FirewallApi.vbproj", "{E74C1A09-1051-4616-8693-B69A6A95AD03}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FirewallApi", "UnitTests\PInvoke\FirewallApi\FirewallApi.csproj", "{6A9599A6-89D5-4072-8DA1-A13E37023613}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FirewallApi", "UnitTests\PInvoke\FirewallApi\FirewallApi.csproj", "{6A9599A6-89D5-4072-8DA1-A13E37023613}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BITS", "UnitTests\PInvoke\BITS\BITS.csproj", "{95E98514-A4D0-4ACD-8BE0-35D7BD185C71}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BITS", "UnitTests\PInvoke\BITS\BITS.csproj", "{95E98514-A4D0-4ACD-8BE0-35D7BD185C71}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cabinet", "UnitTests\PInvoke\Cabinet\Cabinet.csproj", "{CD8A5176-6EEC-4739-9748-A45D3FDECFA0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cabinet", "UnitTests\PInvoke\Cabinet\Cabinet.csproj", "{CD8A5176-6EEC-4739-9748-A45D3FDECFA0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShlwApi", "UnitTests\PInvoke\ShlwApi\ShlwApi.csproj", "{80E10D65-5B7C-4BC8-8000-2B5BC9A21874}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ShlwApi", "UnitTests\PInvoke\ShlwApi\ShlwApi.csproj", "{80E10D65-5B7C-4BC8-8000-2B5BC9A21874}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Files", "Build Files", "{27FA62A4-C1EE-461D-9F5B-287C0A848B88}"
ProjectSection(SolutionItems) = preProject
@ -255,23 +255,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Files", "Build Files"
UnitTests\Directory.Build.targets = UnitTests\Directory.Build.targets
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.Dhcp", "PInvoke\Dhcp\Vanara.PInvoke.Dhcp.csproj", "{CB2EAE48-7503-459F-BD63-69FAE9740A20}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Dhcp", "PInvoke\Dhcp\Vanara.PInvoke.Dhcp.csproj", "{CB2EAE48-7503-459F-BD63-69FAE9740A20}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dhcp", "UnitTests\PInvoke\Dhcp\Dhcp.csproj", "{94D2C3ED-2101-439C-AAAA-452883A493B4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dhcp", "UnitTests\PInvoke\Dhcp\Dhcp.csproj", "{94D2C3ED-2101-439C-AAAA-452883A493B4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Rpc", "PInvoke\Rpc\Vanara.PInvoke.Rpc.csproj", "{4108A2DD-AD00-44D0-B926-405D65E630A3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.WTSApi32", "PInvoke\WTSApi32\Vanara.PInvoke.WTSApi32.csproj", "{CEBC8DBE-0A4F-4A71-BEB5-8A5B28F89352}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WTSApi32", "PInvoke\WTSApi32\Vanara.PInvoke.WTSApi32.csproj", "{CEBC8DBE-0A4F-4A71-BEB5-8A5B28F89352}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WTSApi32", "UnitTests\PInvoke\WTSApi32\WTSApi32.csproj", "{A231F6BB-C9C0-4CB2-A9CB-892AD4F9D836}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WTSApi32", "UnitTests\PInvoke\WTSApi32\WTSApi32.csproj", "{A231F6BB-C9C0-4CB2-A9CB-892AD4F9D836}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.OleDlg", "PInvoke\OleDlg\Vanara.PInvoke.OleDlg.csproj", "{52DB113A-CE55-437C-B6DF-6A4CA1B3F965}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.OleDlg", "PInvoke\OleDlg\Vanara.PInvoke.OleDlg.csproj", "{52DB113A-CE55-437C-B6DF-6A4CA1B3F965}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.ComDlg32", "PInvoke\ComDlg32\Vanara.PInvoke.ComDlg32.csproj", "{8452C9E4-39CB-431F-BBD6-EF3E64675BB1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OleDlg", "UnitTests\PInvoke\OleDlg\OleDlg.csproj", "{76740A8B-28F1-41C8-A724-F2E3F56AA75A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OleDlg", "UnitTests\PInvoke\OleDlg\OleDlg.csproj", "{76740A8B-28F1-41C8-A724-F2E3F56AA75A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComDlg32", "UnitTests\PInvoke\ComDlg32\ComDlg32.csproj", "{1E29742F-1DAB-4186-B058-262BD7BC7FEC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ComDlg32", "UnitTests\PInvoke\ComDlg32\ComDlg32.csproj", "{1E29742F-1DAB-4186-B058-262BD7BC7FEC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.NewDev", "PInvoke\NewDev\Vanara.PInvoke.NewDev.csproj", "{1D581A26-F2BF-4E12-8C32-C1C838044ECE}"
EndProject
@ -279,41 +279,41 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.SetupAPI", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SetupAPI", "UnitTests\PInvoke\SetupAPI\SetupAPI.csproj", "{B1F98DFA-7FC7-4728-B4C2-A2B3E163EF79}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.Msi", "PInvoke\Msi\Vanara.PInvoke.Msi.csproj", "{CC8EB859-0940-4D91-B165-3B028A1B7B5D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Msi", "PInvoke\Msi\Vanara.PInvoke.Msi.csproj", "{CC8EB859-0940-4D91-B165-3B028A1B7B5D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Msi", "UnitTests\PInvoke\Msi\Msi.csproj", "{E7242839-78DE-4AFE-8AF7-E9DDCE06E18C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Msi", "UnitTests\PInvoke\Msi\Msi.csproj", "{E7242839-78DE-4AFE-8AF7-E9DDCE06E18C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.SHCore", "PInvoke\SHCore\Vanara.PInvoke.SHCore.csproj", "{F1417ADE-A8D3-432F-8F43-EF626DF4A3C9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.SHCore", "PInvoke\SHCore\Vanara.PInvoke.SHCore.csproj", "{F1417ADE-A8D3-432F-8F43-EF626DF4A3C9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.WsmSvc", "PInvoke\WsmSvc\Vanara.PInvoke.WsmSvc.csproj", "{1D1A06C8-57E8-4754-8383-BBFB3C98F49F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WsmSvc", "PInvoke\WsmSvc\Vanara.PInvoke.WsmSvc.csproj", "{1D1A06C8-57E8-4754-8383-BBFB3C98F49F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WsmSvc", "UnitTests\PInvoke\WsmSvc\WsmSvc.csproj", "{28175EF4-C5CA-48EB-AD8D-1B0608AD4389}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WsmSvc", "UnitTests\PInvoke\WsmSvc\WsmSvc.csproj", "{28175EF4-C5CA-48EB-AD8D-1B0608AD4389}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.IScsiDsc", "PInvoke\IScsiDsc\Vanara.PInvoke.IScsiDsc.csproj", "{C407D019-7D53-4C6A-B27A-5468F2430F10}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.IScsiDsc", "PInvoke\IScsiDsc\Vanara.PInvoke.IScsiDsc.csproj", "{C407D019-7D53-4C6A-B27A-5468F2430F10}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.Version", "PInvoke\Version\Vanara.PInvoke.Version.csproj", "{460964A8-894C-45A1-AFA5-EF2DA3FC436D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Version", "PInvoke\Version\Vanara.PInvoke.Version.csproj", "{460964A8-894C-45A1-AFA5-EF2DA3FC436D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Version", "UnitTests\PInvoke\Version\Version.csproj", "{6C2D8577-ECEF-4E07-B4D7-CBFFD7BB6F53}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Version", "UnitTests\PInvoke\Version\Version.csproj", "{6C2D8577-ECEF-4E07-B4D7-CBFFD7BB6F53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.RstrtMgr", "PInvoke\RstrtMgr\Vanara.PInvoke.RstrtMgr.csproj", "{6FFDB484-24E0-4338-B816-D9975AF35853}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.RstrtMgr", "PInvoke\RstrtMgr\Vanara.PInvoke.RstrtMgr.csproj", "{6FFDB484-24E0-4338-B816-D9975AF35853}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.FunDisc", "PInvoke\FunDisc\Vanara.PInvoke.FunDisc.csproj", "{D0CD8393-BE38-4B9D-911F-C372293EF62D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.FunDisc", "PInvoke\FunDisc\Vanara.PInvoke.FunDisc.csproj", "{D0CD8393-BE38-4B9D-911F-C372293EF62D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.WcnApi", "PInvoke\WcnApi\Vanara.PInvoke.WcnApi.csproj", "{55952C51-B68B-432E-A168-4ADD569B9274}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WcnApi", "PInvoke\WcnApi\Vanara.PInvoke.WcnApi.csproj", "{55952C51-B68B-432E-A168-4ADD569B9274}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.IMAPI", "PInvoke\IMAPI\Vanara.PInvoke.IMAPI.csproj", "{17EFDD95-3E52-44C1-80D9-48031E3F6B3F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.IMAPI", "PInvoke\IMAPI\Vanara.PInvoke.IMAPI.csproj", "{17EFDD95-3E52-44C1-80D9-48031E3F6B3F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.CfgMgr32", "PInvoke\CfgMgr32\Vanara.PInvoke.CfgMgr32.csproj", "{2ECB955C-F05D-4FD7-BCC7-449A494CA66B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.TextServicesFramework", "PInvoke\TextServicesFramework\Vanara.PInvoke.TextServicesFramework.csproj", "{17DE6265-EE0F-42E5-AE1A-7ACCDD8A45E8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.TextServicesFramework", "PInvoke\TextServicesFramework\Vanara.PInvoke.TextServicesFramework.csproj", "{17DE6265-EE0F-42E5-AE1A-7ACCDD8A45E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CfgMgr32", "UnitTests\PInvoke\CfgMgr32\CfgMgr32.csproj", "{6F4649D2-CB4E-463A-A5DE-CCC3B0DBD07A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.Lz32", "PInvoke\Lz32\Vanara.PInvoke.Lz32.csproj", "{553081F3-A380-44B4-94ED-E8CE510F3E96}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Lz32", "PInvoke\Lz32\Vanara.PInvoke.Lz32.csproj", "{553081F3-A380-44B4-94ED-E8CE510F3E96}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.Multimedia", "PInvoke\Multimedia\Vanara.PInvoke.Multimedia.csproj", "{A7936B0B-A16B-42A5-A6DA-5D00FA98EEDD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Multimedia", "UnitTests\PInvoke\Multimedia\Multimedia.csproj", "{A9F11EBE-C1CE-40C3-A611-B444652215A0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Multimedia", "UnitTests\PInvoke\Multimedia\Multimedia.csproj", "{A9F11EBE-C1CE-40C3-A611-B444652215A0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.WinBio", "PInvoke\WinBio\Vanara.PInvoke.WinBio.csproj", "{C786E4D5-B2DD-453A-82E7-5DD8374A0A2A}"
EndProject
@ -323,19 +323,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.CimFs", "PIn
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CimFs", "UnitTests\PInvoke\CimFs\CimFs.csproj", "{5DBC32A2-1FF0-41F6-9D6B-CE701F599BE0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vanara.PInvoke.FhSvcCtl", "PInvoke\FhSvcCtl\Vanara.PInvoke.FhSvcCtl.csproj", "{B419C1F3-AB66-40B9-9693-817CD061F7EF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.FhSvcCtl", "PInvoke\FhSvcCtl\Vanara.PInvoke.FhSvcCtl.csproj", "{B419C1F3-AB66-40B9-9693-817CD061F7EF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FhSvcCtl", "UnitTests\PInvoke\FhSvcCtl\FhSvcCtl.csproj", "{089EA815-567E-4430-BEB4-4E18FD0B1473}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FhSvcCtl", "UnitTests\PInvoke\FhSvcCtl\FhSvcCtl.csproj", "{089EA815-567E-4430-BEB4-4E18FD0B1473}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.EnhancedStorage", "PInvoke\EnhancedStorage\Vanara.PInvoke.EnhancedStorage.csproj", "{1D842CC7-BECA-4011-A7FB-98773CFF8CD0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.PortableDeviceApi", "PInvoke\PortableDeviceApi\Vanara.PInvoke.PortableDeviceApi.csproj", "{7DA64CE7-F149-46CD-AC2A-AA8DBA1CDB39}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableDeviceApi", "UnitTests\PInvoke\PortableDeviceApi\PortableDeviceApi.csproj", "{0E4D9AB7-1881-49F6-B307-D1681A0703FD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PortableDeviceApi", "UnitTests\PInvoke\PortableDeviceApi\PortableDeviceApi.csproj", "{0E4D9AB7-1881-49F6-B307-D1681A0703FD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnhancedStorage", "UnitTests\PInvoke\EnhancedStorage\EnhancedStorage.csproj", "{A205BA61-E2C4-41C5-B7CE-9EB5940C7076}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EnhancedStorage", "UnitTests\PInvoke\EnhancedStorage\EnhancedStorage.csproj", "{A205BA61-E2C4-41C5-B7CE-9EB5940C7076}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.VssApi", "PInvoke\VssApi\Vanara.PInvoke.VssApi.csproj", "{A29388B1-0F2F-4551-BDB8-272E0865D96C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Vanara.PInvoke.VssApiMgd", "PInvoke\VssApiMgd\Vanara.PInvoke.VssApiMgd.csproj", "{39AEDD51-C627-41B9-96D3-44F481ED4E7C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vanara.PInvoke.VssApi", "PInvoke\VssApi\VssApi.vcxproj", "{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -2038,24 +2040,40 @@ Global
{A205BA61-E2C4-41C5-B7CE-9EB5940C7076}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A205BA61-E2C4-41C5-B7CE-9EB5940C7076}.Release|x64.ActiveCfg = Release|Any CPU
{A205BA61-E2C4-41C5-B7CE-9EB5940C7076}.Release|x86.ActiveCfg = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|x64.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|x64.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|x86.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Debug|x86.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|Any CPU.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|Any CPU.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|x64.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|x64.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|x86.ActiveCfg = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.DebugNoTests|x86.Build.0 = Debug|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|Any CPU.Build.0 = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|x64.ActiveCfg = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|x64.Build.0 = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|x86.ActiveCfg = Release|Any CPU
{A29388B1-0F2F-4551-BDB8-272E0865D96C}.Release|x86.Build.0 = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|x64.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|x64.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|x86.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Debug|x86.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|Any CPU.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|Any CPU.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|x64.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|x64.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|x86.ActiveCfg = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.DebugNoTests|x86.Build.0 = Debug|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|Any CPU.Build.0 = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|x64.ActiveCfg = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|x64.Build.0 = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|x86.ActiveCfg = Release|Any CPU
{39AEDD51-C627-41B9-96D3-44F481ED4E7C}.Release|x86.Build.0 = Release|Any CPU
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Debug|Any CPU.ActiveCfg = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Debug|x64.ActiveCfg = Debug|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Debug|x64.Build.0 = Debug|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Debug|x86.ActiveCfg = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Debug|x86.Build.0 = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|Any CPU.ActiveCfg = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|Any CPU.Build.0 = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|x64.ActiveCfg = Debug|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|x64.Build.0 = Debug|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|x86.ActiveCfg = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.DebugNoTests|x86.Build.0 = Debug|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Release|Any CPU.ActiveCfg = Release|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Release|x64.ActiveCfg = Release|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Release|x64.Build.0 = Release|x64
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Release|x86.ActiveCfg = Release|Win32
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -2205,7 +2223,8 @@ Global
{7DA64CE7-F149-46CD-AC2A-AA8DBA1CDB39} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
{0E4D9AB7-1881-49F6-B307-D1681A0703FD} = {385CAD2D-0A5E-4F80-927B-D5499D126B90}
{A205BA61-E2C4-41C5-B7CE-9EB5940C7076} = {385CAD2D-0A5E-4F80-927B-D5499D126B90}
{A29388B1-0F2F-4551-BDB8-272E0865D96C} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
{39AEDD51-C627-41B9-96D3-44F481ED4E7C} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
{11EF8FFF-25DE-4ADB-A951-FA10A421FFE4} = {212ABBD0-B724-4CFA-9D6D-E3891547FA90}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {543FAC75-2AF1-4EF1-9609-B242B63FEED4}