diff options
Diffstat (limited to 'wpd/WpdWudfSampleDriver/FakeContent.h')
| -rw-r--r-- | wpd/WpdWudfSampleDriver/FakeContent.h | 576 |
1 files changed, 0 insertions, 576 deletions
diff --git a/wpd/WpdWudfSampleDriver/FakeContent.h b/wpd/WpdWudfSampleDriver/FakeContent.h deleted file mode 100644 index 6e427793..00000000 --- a/wpd/WpdWudfSampleDriver/FakeContent.h +++ /dev/null @@ -1,576 +0,0 @@ -#include "FakeContent.h.tmh" - -class FakeContent -{ -public: - FakeContent() : - MarkedForDeletion(FALSE), - CanDelete(TRUE), - IsHidden(FALSE), - IsSystem(FALSE), - NonConsumable(FALSE) - { - ContentType = WPD_CONTENT_TYPE_UNSPECIFIED; - } - - FakeContent(const FakeContent& src) : - MarkedForDeletion(FALSE), - CanDelete(TRUE), - IsHidden(FALSE), - IsSystem(FALSE), - NonConsumable(FALSE) - { - *this = src; - } - - virtual ~FakeContent() - { - } - - virtual FakeContent& operator= (const FakeContent& src) - { - ObjectID = src.ObjectID; - PersistentUniqueID = src.PersistentUniqueID; - ParentID = src.ParentID; - Name = src.Name; - FileName = src.FileName; - ContentType = src.ContentType; - MarkedForDeletion = src.MarkedForDeletion; - CanDelete = src.CanDelete; - IsHidden = src.IsHidden; - IsSystem = src.IsSystem; - NonConsumable = src.NonConsumable; - - return *this; - } - - virtual HRESULT GetSupportedProperties(_COM_Outptr_ IPortableDeviceKeyCollection** ppKeys) - { - HRESULT hr = S_OK; - - if(ppKeys == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL collection parameter"); - return hr; - } - - hr = AddSupportedProperties(GetObjectFormat(), ppKeys); - CHECK_HR(hr, ("Failed to add supported proeprties for FakeContent")); - return hr; - } - - virtual HRESULT GetAllValues(_In_ IPortableDeviceValues* pStore) - { - HRESULT hr = S_OK; - HRESULT hrSetValue = S_OK; - PropVariantWrapper pvValue; - - if(pStore == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - // Add WPD_OBJECT_ID - pvValue = ObjectID; - hrSetValue = pStore->SetValue(WPD_OBJECT_ID, &pvValue); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_ID")); - return hrSetValue; - } - - // Add WPD_OBJECT_PERSISTENT_UNIQUE_ID - pvValue = this->PersistentUniqueID; - hrSetValue = pStore->SetValue(WPD_OBJECT_PERSISTENT_UNIQUE_ID, &pvValue); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_PERSISTENT_UNIQUE_ID")); - return hrSetValue; - } - - // Add WPD_OBJECT_PARENT_ID - pvValue = ParentID; - hrSetValue = pStore->SetValue(WPD_OBJECT_PARENT_ID, &pvValue); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_PARENT_ID")); - return hrSetValue; - } - - // Add WPD_OBJECT_NAME - pvValue = Name; - hrSetValue = pStore->SetValue(WPD_OBJECT_NAME, &pvValue); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_NAME")); - return hrSetValue; - } - - // Add WPD_OBJECT_CONTENT_TYPE - hrSetValue = pStore->SetGuidValue(WPD_OBJECT_CONTENT_TYPE, ContentType); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_CONTENT_TYPE")); - return hrSetValue; - } - - // Add WPD_OBJECT_FORMAT - hrSetValue = pStore->SetGuidValue(WPD_OBJECT_FORMAT, GetObjectFormat()); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_FORMAT")); - return hrSetValue; - } - - // Add WPD_OBJECT_CAN_DELETE - hrSetValue = pStore->SetBoolValue(WPD_OBJECT_CAN_DELETE, CanDelete); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_CAN_DELETE")); - return hrSetValue; - } - - // Add WPD_OBJECT_ISHIDDEN - hrSetValue = pStore->SetBoolValue(WPD_OBJECT_ISHIDDEN, IsHidden); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_ISHIDDEN")); - return hrSetValue; - } - - // Add WPD_OBJECT_ISSYSTEM - hrSetValue = pStore->SetBoolValue(WPD_OBJECT_ISSYSTEM, IsSystem); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_ISSYSTEM")); - return hrSetValue; - } - - // Add WPD_OBJECT_NON_CONSUMABLE - hrSetValue = pStore->SetBoolValue(WPD_OBJECT_NON_CONSUMABLE, NonConsumable); - if (hrSetValue != S_OK) - { - CHECK_HR(hrSetValue, ("Failed to set WPD_OBJECT_NON_CONSUMABLE")); - return hrSetValue; - } - - // Add WPD_FOLDER_CONTENT_TYPES_ALLOWED if necessary - if(!RestrictToContentTypes.IsEmpty()) - { - CComPtr<IPortableDevicePropVariantCollection> pContentTypes; - hrSetValue = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pContentTypes); - CHECK_HR(hrSetValue, "Failed to CoCreate CLSID_PortableDevicePropVariantCollection"); - - if (hrSetValue == S_OK) - { - PROPVARIANT pvContentType = {0}; - PropVariantInit(&pvContentType); - pvContentType.vt = VT_CLSID; // Don't PropVariantClear this since we won't allocate memory for it - - size_t numElems = RestrictToContentTypes.GetCount(); - for(size_t typeIndex = 0; hrSetValue == S_OK && typeIndex < numElems; typeIndex++) - { - pvContentType.puuid = &RestrictToContentTypes[typeIndex]; - hrSetValue = pContentTypes->Add(&pvContentType); - CHECK_HR(hrSetValue, "Failed to add content type"); - } - - if (hrSetValue == S_OK) - { - hrSetValue = pStore->SetIPortableDevicePropVariantCollectionValue(WPD_FOLDER_CONTENT_TYPES_ALLOWED, pContentTypes); - CHECK_HR(hrSetValue, "Failed to set WPD_FOLDER_CONTENT_TYPES_ALLOWED"); - } - - if (FAILED(hrSetValue)) - { - hr = hrSetValue; - } - } - } - - return hr; - } - - virtual HRESULT WriteValue( - _In_ REFPROPERTYKEY key, - _In_ REFPROPVARIANT Value) - { - HRESULT hr = S_OK; - PropVariantWrapper pvValue; - - if(IsEqualPropertyKey(key, WPD_OBJECT_NAME)) - { - if(Value.vt == VT_LPWSTR) - { - if (Value.pwszVal != NULL && Value.pwszVal[0] != L'\0') - { - Name = Value.pwszVal; - } - else - { - hr = E_INVALIDARG; - CHECK_HR(hr, "Failed to set WPD_OBJECT_NAME because value was an empty string"); - } - } - else - { - hr = E_INVALIDARG; - CHECK_HR(hr, "Failed to set WPD_OBJECT_NAME because type was not VT_LPWSTR"); - } - } - else if (IsEqualPropertyKey(key, WPD_OBJECT_NON_CONSUMABLE)) - { - if(Value.vt == VT_BOOL) - { - NonConsumable = Value.boolVal; - } - else - { - hr = E_INVALIDARG; - CHECK_HR(hr, "Failed to set WPD_OBJECT_NON_CONSUMABLE because type was not VT_BOOL"); - } - } - else - { - hr = E_ACCESSDENIED; - CHECK_HR(hr, "Property %ws.%d on [%ws] does not support set value operation", CComBSTR(key.fmtid), key.pid, ObjectID); - } - - return hr; - } - - virtual HRESULT GetAttributes( - _In_ REFPROPERTYKEY Key, - _COM_Outptr_ IPortableDeviceValues** ppAttributes) - { - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pAttributes; - - if(ppAttributes == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL attributes parameter"); - return hr; - } - - *ppAttributes = NULL; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pAttributes); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (SUCCEEDED(hr)) - { - hr = AddFixedPropertyAttributes(GetObjectFormat(), Key, pAttributes); - CHECK_HR(hr, "Failed to add fixed property attributes for %ws.%d on FakeContent", CComBSTR(Key.fmtid), Key.pid); - } - - // Some of our properties have extra attributes on top of the ones that are common to all - if(IsEqualPropertyKey(Key, WPD_OBJECT_NAME)) - { - CAtlStringW strDefaultName; - - strDefaultName.Format(L"%ws%ws", L"Name", ObjectID.GetString()); - - hr = pAttributes->SetStringValue(WPD_PROPERTY_ATTRIBUTE_DEFAULT_VALUE, strDefaultName.GetString());; - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_DEFAULT_VALUE"); - } - - // Return the property attributes - if (SUCCEEDED(hr)) - { - hr = pAttributes->QueryInterface(IID_IPortableDeviceValues, (VOID**) ppAttributes); - CHECK_HR(hr, "Failed to QI for IPortableDeviceValues on Wpd IPortableDeviceValues"); - } - return hr; - } - - virtual HRESULT GetSupportedResources(_COM_Outptr_ IPortableDeviceKeyCollection** ppKeys) - { - HRESULT hr = S_OK; - CComPtr<IPortableDeviceKeyCollection> pKeys; - - if(ppKeys == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL collection parameter"); - return hr; - } - - *ppKeys = NULL; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceKeyCollection, - (VOID**) &pKeys); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceKeyCollection"); - } - - // This object has no resources so return the empty collection - if (SUCCEEDED(hr)) - { - hr = pKeys->QueryInterface(IID_IPortableDeviceKeyCollection, (VOID**) ppKeys); - CHECK_HR(hr, "Failed to QI for IPortableDeviceKeyCollection on IPortableDeviceKeyCollection"); - } - - return hr; - } - - virtual HRESULT GetResourceAttributes( - _In_ REFPROPERTYKEY Key, - _COM_Outptr_ IPortableDeviceValues** ppAttributes) - { - UNREFERENCED_PARAMETER(Key); - *ppAttributes = NULL; - - // This object has no resources therefore has no attributes to return. - - return E_NOTIMPL; - } - - virtual HRESULT ReadData( - _In_ REFPROPERTYKEY ResourceKey, - DWORD dwStartByte, - _Out_writes_to_(dwNumBytesToRead, *pdwNumBytesRead) BYTE* pBuffer, - DWORD dwNumBytesToRead, - _Out_ DWORD* pdwNumBytesRead) - { - HRESULT hr = S_OK; - DWORD dwBytesToTransfer = 0; - - if((pBuffer == NULL) || - (pdwNumBytesRead == NULL)) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - *pdwNumBytesRead = 0; - UNREFERENCED_PARAMETER(ResourceKey); - - // Calculate how many bytes to transfer - if (hr == S_OK) - { - if (dwStartByte < FAKE_DATA_SIZE) - { - dwBytesToTransfer = (FAKE_DATA_SIZE - dwStartByte); - if (dwBytesToTransfer > dwNumBytesToRead) - { - dwBytesToTransfer = dwNumBytesToRead; - } - } - } - - // This sample driver does not have any real data content, - // so we generate fake data content. - // The content we generate is made up of the Name string repeated - // in the data buffer. - if ((hr == S_OK) && (dwBytesToTransfer > 0)) - { - DWORD dwOffset = 0; - DWORD dwSourceStringSizeInBytes = (Name.GetLength() * sizeof(WCHAR)) + sizeof(L'\0'); - for (DWORD counter = 0; counter < (dwBytesToTransfer / dwSourceStringSizeInBytes); counter++) - { - _Analysis_assume_((dwOffset + dwSourceStringSizeInBytes) <= dwNumBytesToRead); - memcpy(pBuffer + dwOffset, Name.GetString(), dwSourceStringSizeInBytes); - dwOffset += dwSourceStringSizeInBytes; - } - memset(pBuffer + dwOffset, 0, dwBytesToTransfer % dwSourceStringSizeInBytes); - } - - if (hr == S_OK) - { - *pdwNumBytesRead = dwBytesToTransfer; - } - - return hr; - } - - virtual HRESULT WriteData( - _In_ REFPROPERTYKEY ResourceKey, - DWORD dwStartByte, - _In_reads_(dwNumBytesToWrite) BYTE* pBuffer, - DWORD dwNumBytesToWrite, - _Out_ DWORD* pdwNumBytesWritten) - { - HRESULT hr = S_OK; - - if((pBuffer == NULL) || - (pdwNumBytesWritten == NULL)) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - *pdwNumBytesWritten = 0; - UNREFERENCED_PARAMETER(ResourceKey); - UNREFERENCED_PARAMETER(dwStartByte); - // This fake driver does nothing with the data. The write method is simply - // a dummy one. - // Normally, a driver would copy the contents from the buffer to the device. - - if (hr == S_OK) - { - *pdwNumBytesWritten = dwNumBytesToWrite; - } - - return hr; - } - - virtual GUID GetObjectFormat() - { - return FakeContent_Format; - } - - virtual HRESULT EnableResource( - _In_ REFPROPERTYKEY ResourceKey) - { - UNREFERENCED_PARAMETER(ResourceKey); - return E_NOTIMPL; - } - - CAtlStringW ObjectID; - CAtlStringW PersistentUniqueID; - CAtlStringW ParentID; - CAtlStringW Name; - CAtlStringW FileName; - GUID ContentType; - BOOL MarkedForDeletion; - BOOL CanDelete; - BOOL IsHidden; - BOOL IsSystem; - BOOL NonConsumable; - CAtlArray<GUID> RestrictToContentTypes; -}; - -class FakeGenericFileContent : public FakeContent -{ -public: - - virtual HRESULT GetAllValues( - _In_ IPortableDeviceValues* pStore) - { - HRESULT hr = S_OK; - PropVariantWrapper pvValue; - - if(pStore == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - // Call the base class to fill in the standard properties - hr = FakeContent::GetAllValues(pStore); - if (FAILED(hr)) - { - CHECK_HR(hr, "Failed to get basic property set"); - return hr; - } - - // Add WPD_OBJECT_ORIGINAL_FILE_NAME - pvValue = FileName; - hr = pStore->SetValue(WPD_OBJECT_ORIGINAL_FILE_NAME, &pvValue); - if (hr != S_OK) - { - CHECK_HR(hr, ("Failed to set WPD_OBJECT_ORIGINAL_FILE_NAME")); - return hr; - } - - return hr; - } - - virtual HRESULT GetSupportedResources(_COM_Outptr_ IPortableDeviceKeyCollection** ppKeys) - { - HRESULT hr = S_OK; - CComPtr<IPortableDeviceKeyCollection> pKeys; - - if(ppKeys == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL collection parameter"); - return hr; - } - - *ppKeys = NULL; - - if (SUCCEEDED(hr)) - { - // Call the base class to fill in the standard resources if any - hr = FakeContent::GetSupportedResources(&pKeys); - CHECK_HR(hr, "Failed to get basic supported resources"); - } - - if (SUCCEEDED(hr)) - { - // Add WPD_RESOURCE_DEFAULT - hr = pKeys->Add(WPD_RESOURCE_DEFAULT); - CHECK_HR(hr, "Failed to add WPD_RESOURCE_DEFAULT to collection"); - } - - if (SUCCEEDED(hr)) - { - hr = pKeys->QueryInterface(IID_IPortableDeviceKeyCollection, (VOID**) ppKeys); - CHECK_HR(hr, "Failed to QI for IPortableDeviceKeyCollection on IPortableDeviceKeyCollection"); - } - - return hr; - } - - virtual HRESULT GetResourceAttributes( - _In_ REFPROPERTYKEY Key, - _COM_Outptr_ IPortableDeviceValues** ppAttributes) - { - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pAttributes; - - if(ppAttributes == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL attributes parameter"); - return hr; - } - - *ppAttributes = NULL; - - if (SUCCEEDED(hr)) - { - // Fill in the common resource attributes - hr = GetCommonResourceAttributes(&pAttributes); - CHECK_HR(hr, "Failed to get common resource attributes set"); - } - - // Override the necessary attributes for this resource. - if ((hr == S_OK) && (IsEqualPropertyKey(Key, WPD_RESOURCE_DEFAULT))) - { - hr = pAttributes->SetBoolValue(WPD_RESOURCE_ATTRIBUTE_CAN_WRITE, TRUE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_CAN_WRITE"); - } - - // Return the resource attributes - if (SUCCEEDED(hr)) - { - hr = pAttributes->QueryInterface(IID_IPortableDeviceValues, (VOID**) ppAttributes); - CHECK_HR(hr, "Failed to QI for IPortableDeviceValues on Wpd IPortableDeviceValues"); - } - return hr; - } -}; |
