2025-04-27 07:49:33 -04:00

113 lines
3.8 KiB
C++

// --------------------------------------------------------------------------------
// tstdrv.cpp
// --------------------------------------------------------------------------------
#include <objbase.h>
#include <stdio.h>
#include <shlobj.h>
#include "shellstg.clsid.h"
#include "ishellstg.h"
#include "davinet.clsid.h"
#include "idavinet.h"
#include "davstore.clsid.h"
#include "idavstore.h"
#include "strutil.h"
// --------------------------------------------------------------------------------
// main
// --------------------------------------------------------------------------------
void __cdecl main(INT argc, CHAR * argv[])
{
// locals
HRESULT hr;
IDavTransport* pDavTransport = NULL;
IShellStorage* pShellStg = NULL;
IDavStorage* pStorage = NULL;
IShellFolder* pshfDesk = NULL;
LPITEMIDLIST pidl = NULL;
LPWSTR pwsz = NULL;
CoInitialize(NULL);
hr = ::CoCreateInstance(CLSID_CShellStorage,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellStorage,
(LPVOID*)&pShellStg);
if (SUCCEEDED(hr))
{
hr = pShellStg->Init(NULL, L"http://aidanl:8088/dav/aidanl/", TRUE);
if (SUCCEEDED(hr))
{
hr = SHGetDesktopFolder(&pshfDesk);
if (SUCCEEDED(hr))
{
for (INT i = 1; i < argc; i++)
{
pwsz = ConvertToUnicode(CP_ACP, argv[i]);
if (!pwsz)
{
hr = E_OUTOFMEMORY;
}
else
{
hr = pshfDesk->ParseDisplayName(NULL, NULL, pwsz, NULL, &pidl, NULL);
if (SUCCEEDED(hr))
{
hr = pShellStg->AddIDListReference((LPVOID*)&pidl, 1, TRUE);
}
free(pwsz);
if (FAILED(hr))
{
break;
}
}
}
if (SUCCEEDED(hr))
{
hr = ::CoCreateInstance(CLSID_CDavStorage,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDavStorage,
(LPVOID*)&pStorage);
if (SUCCEEDED(hr))
{
hr = ::CoCreateInstance(CLSID_DAVInet,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDavTransport,
(LPVOID*)&pDavTransport);
if (SUCCEEDED(hr))
{
hr = pDavTransport->SetAuthentication(L"aidan", L"grendel");
if (SUCCEEDED(hr))
{
hr = pStorage->Init(L"http://aidanl:8088/dav/aidanl/", pDavTransport);
if (SUCCEEDED(hr))
{
hr = pShellStg->CopyTo(0, NULL, 0, pStorage);
}
}
}
pDavTransport->Release();
}
pStorage->Release();
}
}
}
pShellStg->Release();
}
CoUninitialize();
}