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

225 lines
5.5 KiB
C++

#include "hwdevcb.h"
#include <stdio.h>
#include <shpriv.h> // for IStorageInfo
#define ARRAYSIZE(a) (sizeof((a))/sizeof((a)[0]))
// {AA2ED7B9-2D5F-43e7-A832-6C9151BB0E39}
extern "C" const CLSID CLSID_HWDevCBTest =
{0xaa2ed7b9, 0x2d5f, 0x43e7,
{0xa8, 0x32, 0x6c, 0x91, 0x51, 0xbb, 0xe, 0x39}};
#define NOT_USED(a)
void PrintVolumeAddedOrUpdatedHelper(VOLUMEINFO* pvolinfo);
STDMETHODIMP CHWDevCBTestImpl::VolumeAddedOrUpdated(
BOOL fAdded,
VOLUMEINFO* pvolinfo)
{
wprintf(L"\n----VolumeAddedOrUpdated------~0x%08X~\n", GetCurrentThreadId());
if (fAdded)
{
wprintf(L" ADDED'\n");
}
else
{
wprintf(L" UPDATED'\n");
}
PrintVolumeAddedOrUpdatedHelper(pvolinfo);
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::VolumeRemoved(LPCWSTR pszVolume)
{
wprintf(L"\n----VolumeRemoved------~0x%08X~\n", GetCurrentThreadId());
wprintf(L" MtPt: '%s'\n", pszVolume);
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::MountPointAdded(
LPCWSTR pszMountPoint, // eg: "c:\", or "d:\MountFolder\"
LPCWSTR pszDeviceIDVolume)// eg: \\?\STORAGE#Volume#...{...GUID...}
{
wprintf(L"\n----MountPointAdded------~0x%08X~\n", GetCurrentThreadId());
wprintf(L" MtPt: '%s' ->\n Vol: '%s'\n",
pszMountPoint, pszDeviceIDVolume);
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::MountPointRemoved(LPCWSTR pszMountPoint)
{
wprintf(L"\n----MountPointRemoved------~0x%08X~\n", GetCurrentThreadId());
wprintf(L" MtPt: '%s'\n", pszMountPoint);
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::DeviceAdded(LPCWSTR NOT_USED(pszDeviceID),
GUID NOT_USED(guidDeviceID))
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::DeviceUpdated(LPCWSTR NOT_USED(pszDeviceID))
{
return E_NOTIMPL;
}
// Both for devices and volumes
STDMETHODIMP CHWDevCBTestImpl::DeviceRemoved(LPCWSTR NOT_USED(pszDeviceID))
{
return E_NOTIMPL;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#if 0
STDMETHODIMP CHWDevCBTestImpl::BindToObject(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [in] */ REFIID /*riidResult*/,
/* [iid_is][out] */ void /***ppvResult*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::STDMETHODCALLTYPE BindToStorage(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [in] */ REFIID /*riid*/,
/* [iid_is][out] */ void /***ppvObj*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::Reduce(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [in] */ DWORD /*dwReduceHowFar*/,
/* [unique][out][in] */ /*IMoniker **ppmkToLeft*/,
/* [out] */ IMoniker /***ppmkReduced*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::ComposeWith(
/* [unique][in] */ IMoniker /**pmkRight*/,
/* [in] */ BOOL /*fOnlyIfNotGeneric*/,
/* [out] */ IMoniker /***ppmkComposite*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::Enum(
/* [in] */ BOOL /*fForward*/,
/* [out] */ IEnumMoniker **ppenumMoniker)
{
*ppenumMoniker = NULL;
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::IsEqual(
/* [unique][in] */ IMoniker *pmkOtherMoniker)
{
LPWSTR pszName;
HRESULT hr = pmkOtherMoniker->GetDisplayName(NULL, NULL, pszName);
if (!lstrcmpi(pszName, TEXT("Autoplay.TestEventHandler.td_devenum")))
{
hr = S_OK;
}
else
{
hr = S_FALSE;
}
return hr;
}
STDMETHODIMP CHWDevCBTestImpl::Hash(
/* [out] */ DWORD *pdwHash)
{
*pdwHash = 26;
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::IsRunning(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [unique][in] */ IMoniker /**pmkNewlyRunning*/)
{
return S_OK;
}
STDMETHODIMP CHWDevCBTestImpl::GetTimeOfLastChange(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [out] */ FILETIME /**pFileTime*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::Inverse(
/* [out] */ IMoniker /***ppmk*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::CommonPrefixWith(
/* [unique][in] */ IMoniker /**pmkOther*/,
/* [out] */ IMoniker /***ppmkPrefix*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::RelativePathTo(
/* [unique][in] */ IMoniker /**pmkOther*/,
/* [out] */ IMoniker /***ppmkRelPath*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::GetDisplayName(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [out] */ LPOLESTR *ppszDisplayName)
{
*ppszDisplayName = CoTaskMemAlloc(sizeof(TEXT("Autoplay.TestEventHandler.td_devenum")) + 1 * sizeof(WCHAR));
if (*ppszDisplayName)
{
lstrcpy(*ppszDisplayName, TEXT("Autoplay.TestEventHandler.td_devenum"));
}
else
{
hr = E_OUTOFMEMORY;
}
return hr;
}
STDMETHODIMP CHWDevCBTestImpl::ParseDisplayName(
/* [unique][in] */ IBindCtx /**pbc*/,
/* [unique][in] */ IMoniker /**pmkToLeft*/,
/* [in] */ LPOLESTR /*pszDisplayName*/,
/* [out] */ ULONG /**pchEaten*/,
/* [out] */ IMoniker /***ppmkOut*/)
{
return E_NOTIMPL;
}
STDMETHODIMP CHWDevCBTestImpl::IsSystemMoniker(
/* [out] */ DWORD *pdwMksys)
{
return S_FALSE;
}
#endif