diff options
| author | Adonais Romero González <[email protected]> | 2024-05-06 16:21:31 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-06 16:21:31 -0700 |
| commit | a74a241c664c4e1d7c0838287b34076c19d9858a (patch) | |
| tree | 6ff7562612967b122acf8acf8a69c4dcfd5905db /wpd/WpdWudfSampleDriver/helpers.cpp | |
| parent | def8e8e34ed2b7b1deb2fc9112ac4255f1a0f2ba (diff) | |
| parent | 15477ce52bbb6b42ca591ecdfb484cac089f89ab (diff) | |
Merge develop changes prior to upcoming WDK release (May 2024)
Diffstat (limited to 'wpd/WpdWudfSampleDriver/helpers.cpp')
| -rw-r--r-- | wpd/WpdWudfSampleDriver/helpers.cpp | 1600 |
1 files changed, 0 insertions, 1600 deletions
diff --git a/wpd/WpdWudfSampleDriver/helpers.cpp b/wpd/WpdWudfSampleDriver/helpers.cpp deleted file mode 100644 index 497ae61c..00000000 --- a/wpd/WpdWudfSampleDriver/helpers.cpp +++ /dev/null @@ -1,1600 +0,0 @@ -#include "stdafx.h" -#include "helpers.tmh" - -// Define the value for the registered WAVE format this driver uses -#ifndef WAVE_FORMAT_MSAUDIO3 - #define WAVE_FORMAT_MSAUDIO3 0x0162 -#endif - -#define VCARD_FORMAT "BEGIN:VCARD\r\nVERSION:2.1\r\nN:%ws;%ws\r\nFN:%ws\r\nORG:%ws\r\nTITLE:%ws\r\nTEL;HOME;VOICE:%ws\r\nTEL;WORK;VOICE:%ws\r\nTEL;CELL;VOICE:%ws\r\nTEL;WORK;FAX:%ws\r\nADR;HOME;ENCODING=QUOTED-PRINTABLE:;;%ws=0D=0A%ws;%ws;,;%ws;;REV:20051206T185151Z\r\nEND:VCARD\r\n" - -const PROPERTYKEY* g_SupportedPropertiesForFormatAll[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_FOLDER_CONTENT_TYPES_ALLOWED, - &WPD_OBJECT_ORIGINAL_FILE_NAME, - &WPD_OBJECT_NON_CONSUMABLE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeDeviceContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_DEVICE_SUPPORTS_NON_CONSUMABLE, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_FUNCTIONAL_OBJECT_CATEGORY, - &WPD_DEVICE_FIRMWARE_VERSION, - &WPD_DEVICE_POWER_LEVEL, - &WPD_DEVICE_POWER_SOURCE, - &WPD_DEVICE_PROTOCOL, - &WPD_DEVICE_MODEL, - &WPD_DEVICE_SERIAL_NUMBER, - &WPD_DEVICE_MANUFACTURER, - &WPD_DEVICE_TYPE, - &WPD_DEVICE_FRIENDLY_NAME, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeStorageContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_FOLDER_CONTENT_TYPES_ALLOWED, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_STORAGE_CAPACITY, - &WPD_STORAGE_FREE_SPACE_IN_BYTES, - &WPD_FUNCTIONAL_OBJECT_CATEGORY, - &WPD_STORAGE_TYPE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeImageContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_MEDIA_HEIGHT, - &WPD_MEDIA_WIDTH, - &WPD_OBJECT_DATE_CREATED, - &WPD_OBJECT_ORIGINAL_FILE_NAME, - &WPD_OBJECT_SIZE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeMusicContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_MEDIA_TITLE, - &WPD_MEDIA_ARTIST, - &WPD_MEDIA_DURATION, - &WPD_OBJECT_SIZE, - &WPD_OBJECT_DATE_AUTHORED, - &WPD_OBJECT_DATE_MODIFIED, - &WPD_MUSIC_ALBUM, - &WPD_MEDIA_GENRE, - &WPD_MUSIC_TRACK, - &WPD_OBJECT_ORIGINAL_FILE_NAME, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeVideoContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_MEDIA_TITLE, - &WPD_MEDIA_DURATION, - &WPD_OBJECT_SIZE, - &WPD_MEDIA_HEIGHT, - &WPD_MEDIA_WIDTH, - &WPD_OBJECT_DATE_AUTHORED, - &WPD_OBJECT_DATE_MODIFIED, - &WPD_OBJECT_ORIGINAL_FILE_NAME, - &WPD_VIDEO_SCAN_TYPE, - &WPD_VIDEO_BITRATE, - &WPD_VIDEO_FOURCC_CODE, - &WPD_OBJECT_GENERATE_THUMBNAIL_FROM_RESOURCE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeContactContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_CONTACT_DISPLAY_NAME, - &WPD_CONTACT_PRIMARY_PHONE, - &WPD_CONTACT_MOBILE_PHONE, - &WPD_CONTACT_BUSINESS_PHONE, - &WPD_OBJECT_ORIGINAL_FILE_NAME, - &WPD_OBJECT_SIZE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForRenderingInformation[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_FUNCTIONAL_OBJECT_CATEGORY, - &WPD_RENDERING_INFORMATION_PROFILES, -}; - -const PROPERTYKEY* g_SupportedPropertiesForNetworkConfiguration[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_FOLDER_CONTENT_TYPES_ALLOWED, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_FUNCTIONAL_OBJECT_CATEGORY, -}; - -const PROPERTYKEY* g_SupportedPropertiesForNetworkAssociation[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_NETWORK_ASSOCIATION_HOST_NETWORK_IDENTIFIERS, -}; - - -const PROPERTYKEY* g_SupportedPropertiesForMicrosoftWFC[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, -}; - -const PROPERTYKEY* g_SupportedPropertiesForFakeMemoContentFormat[] = -{ - &WPD_OBJECT_ID, - &WPD_OBJECT_PERSISTENT_UNIQUE_ID, - &WPD_OBJECT_PARENT_ID, - &WPD_OBJECT_NAME, - &WPD_OBJECT_CONTENT_TYPE, - &WPD_OBJECT_FORMAT, - &WPD_OBJECT_CAN_DELETE, - &WPD_OBJECT_ISHIDDEN, - &WPD_OBJECT_ISSYSTEM, - &WPD_OBJECT_NON_CONSUMABLE, - &WPD_OBJECT_SIZE, - &WPD_OBJECT_DATE_AUTHORED, - &WPD_OBJECT_DATE_MODIFIED, - &WPD_OBJECT_ORIGINAL_FILE_NAME, -}; - -KeyAndAttributesEntry g_FixedAttributesTable[] = -{ - // Properties for all objects, regardless of format - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_ALL, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for generic objects - {&FakeContent_Format, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_FOLDER_CONTENT_TYPES_ALLOWED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeContent_Format, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for the device object - {&FakeDeviceContent_Format, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_SUPPORTS_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_FUNCTIONAL_OBJECT_CATEGORY, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_FIRMWARE_VERSION, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_POWER_LEVEL, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_POWER_SOURCE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_PROTOCOL, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_MODEL, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_SERIAL_NUMBER, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_MANUFACTURER, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_NETWORK_IDENTIFIER, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_FRIENDLY_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&FakeDeviceContent_Format, &WPD_DEVICE_SYNC_PARTNER, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - // Properties for storage objects - {&FakeStorageContent_Format, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_FOLDER_CONTENT_TYPES_ALLOWED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_DEVICE_SUPPORTS_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_STORAGE_CAPACITY, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_STORAGE_FREE_SPACE_IN_BYTES, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_FUNCTIONAL_OBJECT_CATEGORY, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeStorageContent_Format, &WPD_STORAGE_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Image objects - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_MEDIA_HEIGHT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_MEDIA_WIDTH, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_DATE_CREATED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_EXIF, &WPD_OBJECT_SIZE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Music objects - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MEDIA_TITLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MEDIA_ARTIST, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MEDIA_DURATION, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_SIZE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_DATE_AUTHORED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_DATE_MODIFIED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MUSIC_ALBUM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MEDIA_GENRE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_MUSIC_TRACK, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMA, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - // Properties for video objects - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_MEDIA_TITLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_MEDIA_DURATION, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_SIZE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_MEDIA_HEIGHT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_MEDIA_WIDTH, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_DATE_AUTHORED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_DATE_MODIFIED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_VIDEO_SCAN_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_VIDEO_BITRATE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_VIDEO_FOURCC_CODE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_WMV, &WPD_OBJECT_GENERATE_THUMBNAIL_FROM_RESOURCE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for contact objects - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_CONTACT_DISPLAY_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_CONTACT_PRIMARY_PHONE, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_CONTACT_MOBILE_PHONE, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_CONTACT_BUSINESS_PHONE, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_VCARD2, &WPD_OBJECT_SIZE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Rendering Information object - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_FUNCTIONAL_OBJECT_CATEGORY, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION, &WPD_RENDERING_INFORMATION_PROFILES, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Network Configuration object - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_FOLDER_CONTENT_TYPES_ALLOWED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION, &WPD_FUNCTIONAL_OBJECT_CATEGORY, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Network Association object - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION, &WPD_NETWORK_ASSOCIATION_HOST_NETWORK_IDENTIFIERS, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - // Properties for Microsoft WFC object - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&WPD_OBJECT_FORMAT_MICROSOFT_WFC, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - // Properties for Memo object - {&FakeMemoContent_Format, &WPD_OBJECT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_PERSISTENT_UNIQUE_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_PARENT_ID, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_FORMAT, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_CONTENT_TYPE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_CAN_DELETE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_ISHIDDEN, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_ISSYSTEM, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_NON_CONSUMABLE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_SIZE, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_DATE_AUTHORED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_DATE_MODIFIED, UnspecifiedForm_CanRead_CannotWrite_CannotDelete_Fast}, - {&FakeMemoContent_Format, &WPD_OBJECT_ORIGINAL_FILE_NAME, UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast}, -}; - -HRESULT AddPropertyKeyArrayToCollection( - _In_reads_(cKeys) const PROPERTYKEY** ppKeys, - const DWORD cKeys, - _In_ IPortableDeviceKeyCollection* pCollection) -{ - - HRESULT hr = S_OK; - - if (hr == S_OK) - { - // Add the keys - for (DWORD dwIndex = 0; dwIndex < cKeys; dwIndex++) - { - hr = pCollection->Add(*ppKeys[dwIndex]); - CHECK_HR(hr, "Failed to add key at index %d", dwIndex); - if (FAILED(hr)) - { - break; - } - } - } - - return hr; -} - -HRESULT AddFixedAttributesByType( - FakeDevicePropertyAttributesType AttributesType, - _In_ IPortableDeviceValues* pAttributes) -{ - - HRESULT hr = S_OK; - - if(pAttributes == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - // Initialize our default values for the static attributes - DWORD dwForm = WPD_PROPERTY_ATTRIBUTE_FORM_UNSPECIFIED; - BOOL bCanRead = TRUE; - BOOL bCanWrite = FALSE; - BOOL bCanDelete = FALSE; - BOOL bFastProperty = TRUE; - - // Adjust the attributes for the specific property type if needed - if(AttributesType == UnspecifiedForm_CanRead_CanWrite_CannotDelete_Fast) - { - bCanWrite = TRUE; - } - - // Add the static attributes for this property. - if(hr == S_OK) - { - if (hr == S_OK) - { - hr = pAttributes->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_FORM, dwForm); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_FORM"); - } - if (hr == S_OK) - { - hr = pAttributes->SetBoolValue(WPD_PROPERTY_ATTRIBUTE_CAN_READ, bCanRead); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_CAN_READ"); - } - if (hr == S_OK) - { - hr = pAttributes->SetBoolValue(WPD_PROPERTY_ATTRIBUTE_CAN_WRITE, bCanWrite); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_CAN_WRITE"); - } - if (hr == S_OK) - { - hr = pAttributes->SetBoolValue(WPD_PROPERTY_ATTRIBUTE_CAN_DELETE, bCanDelete); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_CAN_DELETE"); - } - if (hr == S_OK) - { - hr = pAttributes->SetBoolValue(WPD_PROPERTY_ATTRIBUTE_FAST_PROPERTY, bFastProperty); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_FAST_PROPERTY"); - } - } - - return hr; -} - -HRESULT AddFixedPropertyAttributes( - _In_ REFGUID guidObjectFormat, - _In_ REFPROPERTYKEY key, - _In_ IPortableDeviceValues* pAttributes) -{ - HRESULT hr = S_OK; - - if(pAttributes == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - if (hr == S_OK) - { - for (DWORD dwIndex = 0; dwIndex < ARRAYSIZE(g_FixedAttributesTable); dwIndex++) - { - if((*g_FixedAttributesTable[dwIndex].pFormat == guidObjectFormat) && - (IsEqualPropertyKey(*g_FixedAttributesTable[dwIndex].pKey, key))) - { - hr = AddFixedAttributesByType(g_FixedAttributesTable[dwIndex].type, pAttributes); - CHECK_HR(hr, "Failed to add fixed attributes for %ws.%d on format %ws", (LPWSTR)CComBSTR(key.fmtid), key.pid, (LPWSTR)CComBSTR(guidObjectFormat)); - break; - } - } - } - - return hr; -} - -HRESULT AddSupportedProperties( - _In_ REFGUID guidObjectFormatOrCategory, - _COM_Outptr_ IPortableDeviceKeyCollection** ppKeys) -{ - HRESULT hr = S_OK; - - if(ppKeys == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - *ppKeys = NULL; - CComPtr<IPortableDeviceKeyCollection> pCollection; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceKeyCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceKeyCollection, - (VOID**) &pCollection); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceKeyCollection"); - } - - if (SUCCEEDED(hr)) - { - hr = AddSupportedProperties(guidObjectFormatOrCategory, pCollection); - CHECK_HR(hr, "Failed to add supported properties"); - } - - if (SUCCEEDED(hr)) - { - hr = pCollection->QueryInterface(IID_PPV_ARGS(ppKeys)); - CHECK_HR(hr, "Failed to QI IPortableDeviceKeyCollection for IPortableDeviceKeyCollection"); - } - - return hr; -} - -HRESULT AddSupportedProperties( - _In_ REFGUID guidObjectFormatOrCategory, - _In_ IPortableDeviceKeyCollection* pKeys) -{ - HRESULT hr = S_OK; - - if(pKeys == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_ALL) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFormatAll, - ARRAYSIZE(g_SupportedPropertiesForFormatAll), - pKeys); - } else if (guidObjectFormatOrCategory == FakeContent_Format) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_EXIF) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeImageContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeImageContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_WMA) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeMusicContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeMusicContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_WMV) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeVideoContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeVideoContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_VCARD2) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeContactContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeContactContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_FUNCTIONAL_CATEGORY_RENDERING_INFORMATION) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForRenderingInformation, - ARRAYSIZE(g_SupportedPropertiesForRenderingInformation), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_FUNCTIONAL_CATEGORY_NETWORK_CONFIGURATION) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForNetworkConfiguration, - ARRAYSIZE(g_SupportedPropertiesForNetworkConfiguration), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_NETWORK_ASSOCIATION) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForNetworkAssociation, - ARRAYSIZE(g_SupportedPropertiesForNetworkAssociation), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_OBJECT_FORMAT_MICROSOFT_WFC) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForMicrosoftWFC, - ARRAYSIZE(g_SupportedPropertiesForMicrosoftWFC), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_FUNCTIONAL_CATEGORY_STORAGE) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeStorageContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeStorageContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == WPD_FUNCTIONAL_CATEGORY_DEVICE) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeDeviceContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeDeviceContentFormat), - pKeys); - } - else if (guidObjectFormatOrCategory == FakeMemoContent_Format) - { - hr = AddPropertyKeyArrayToCollection(g_SupportedPropertiesForFakeMemoContentFormat, - ARRAYSIZE(g_SupportedPropertiesForFakeMemoContentFormat), - pKeys); - } - - return hr; -} - -HRESULT GetPreferredAudioProfile( - _COM_Outptr_ IPortableDeviceValues** ppProfile) -{ - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pProfile; - - if(ppProfile == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - *ppProfile = NULL; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pProfile); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - // Set the value for WPD_OBJECT_FORMAT to indicate this profile applies to WMA objects - if (SUCCEEDED(hr)) - { - hr = pProfile->SetGuidValue(WPD_OBJECT_FORMAT, WPD_OBJECT_FORMAT_WMA); - CHECK_HR(hr, "Failed to set WPD_OBJECT_FORMAT"); - } - - // Set the preferred value for WPD_MEDIA_TOTAL_BITRATE - if (SUCCEEDED(hr)) - { - hr = pProfile->SetUnsignedIntegerValue(WPD_MEDIA_TOTAL_BITRATE, 192000); - CHECK_HR(hr, "Failed to set WPD_MEDIA_TOTAL_BITRATE"); - } - - // Set the preferred value for WPD_AUDIO_CHANNEL_COUNT - if (SUCCEEDED(hr)) - { - hr = pProfile->SetUnsignedIntegerValue(WPD_AUDIO_CHANNEL_COUNT, 2); - CHECK_HR(hr, "Failed to set WPD_AUDIO_CHANNEL_COUNT"); - } - - // Set the preferred value for WPD_AUDIO_FORMAT_CODE - if (SUCCEEDED(hr)) - { - hr = pProfile->SetUnsignedIntegerValue(WPD_AUDIO_FORMAT_CODE, WAVE_FORMAT_MSAUDIO3); - CHECK_HR(hr, "Failed to set WPD_AUDIO_FORMAT_CODE"); - } - - // Set the output result - if (SUCCEEDED(hr)) - { - hr = pProfile->QueryInterface(IID_PPV_ARGS(ppProfile)); - CHECK_HR(hr, "Failed to QI for IPortableDeviceValues"); - } - - return hr; -} - -HRESULT GetAudioProfile2( - _COM_Outptr_ IPortableDeviceValues** ppProfile) -{ - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pProfile; - CComPtr<IPortableDeviceValues> pTotalBitRate; - - if(ppProfile == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - *ppProfile = NULL; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pProfile); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pTotalBitRate); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - // Set the value for WPD_OBJECT_FORMAT to indicate this profile applies to WMA objects - if (SUCCEEDED(hr)) - { - hr = pProfile->SetGuidValue(WPD_OBJECT_FORMAT, WPD_OBJECT_FORMAT_WMA); - CHECK_HR(hr, "Failed to set WPD_OBJECT_FORMAT"); - } - - // Set the value for WPD_MEDIA_TOTAL_BITRATE - if (SUCCEEDED(hr)) - { - // First, set the values for the range which will be contained in pTotalBitRate - hr = pTotalBitRate->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_FORM, WPD_PROPERTY_ATTRIBUTE_FORM_RANGE); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_FORM for WPD_MEDIA_TOTAL_BITRATE"); - - if (SUCCEEDED(hr)) - { - hr = pTotalBitRate->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_RANGE_MIN, 64000); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_RANGE_MIN for WPD_MEDIA_TOTAL_BITRATE"); - } - if (SUCCEEDED(hr)) - { - hr = pTotalBitRate->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_RANGE_MAX, 256000); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_RANGE_MAX for WPD_MEDIA_TOTAL_BITRATE"); - } - if (SUCCEEDED(hr)) - { - hr = pTotalBitRate->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_RANGE_STEP, 1000); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_RANGE_STEP for WPD_MEDIA_TOTAL_BITRATE"); - } - - // Now set the bit rate property to be pTotalBitRate - if (SUCCEEDED(hr)) - { - hr = pProfile->SetIPortableDeviceValuesValue(WPD_MEDIA_TOTAL_BITRATE, pTotalBitRate); - CHECK_HR(hr, "Failed to set WPD_MEDIA_TOTAL_BITRATE"); - } - } - - // Set the value for WPD_AUDIO_CHANNEL_COUNT - if (SUCCEEDED(hr)) - { - hr = pProfile->SetUnsignedIntegerValue(WPD_AUDIO_CHANNEL_COUNT, 2); - CHECK_HR(hr, "Failed to set WPD_AUDIO_CHANNEL_COUNT"); - } - - // Set the value for WPD_AUDIO_FORMAT_CODE - if (SUCCEEDED(hr)) - { - hr = pProfile->SetUnsignedIntegerValue(WPD_AUDIO_FORMAT_CODE, WAVE_FORMAT_MSAUDIO3); - CHECK_HR(hr, "Failed to set WPD_AUDIO_FORMAT_CODE"); - } - - // Set the output result - if (SUCCEEDED(hr)) - { - hr = pProfile->QueryInterface(IID_PPV_ARGS(ppProfile)); - CHECK_HR(hr, "Failed to QI for IPortableDeviceValues"); - } - - return hr; -} - -HRESULT GetVideoProfile( - _COM_Outptr_ IPortableDeviceValues** ppProfile) -{ - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pProfile; - CComPtr<IPortableDeviceValues> pFourCCCode; - - if(ppProfile == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - *ppProfile = NULL; - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pProfile); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - if (SUCCEEDED(hr)) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValues, - (VOID**) &pFourCCCode); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValues"); - } - - // Set the value for WPD_OBJECT_FORMAT to indicate this profile applies to WMV objects - if (SUCCEEDED(hr)) - { - hr = pProfile->SetGuidValue(WPD_OBJECT_FORMAT, WPD_OBJECT_FORMAT_WMV); - CHECK_HR(hr, "Failed to set WPD_OBJECT_FORMAT to WPD_OBJECT_FORMAT_WMV for the rendering profile"); - } - - - // Set the value for WPD_VIDEO_FOURCC_CODE - if (SUCCEEDED(hr)) - { - CComPtr<IPortableDevicePropVariantCollection> pFourCCCodeEnumElements; - - hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDevicePropVariantCollection, - (VOID**) &pFourCCCodeEnumElements); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDevicePropVariantCollection"); - - if (SUCCEEDED(hr)) - { - hr = pFourCCCode->SetUnsignedIntegerValue(WPD_PROPERTY_ATTRIBUTE_FORM, WPD_PROPERTY_ATTRIBUTE_FORM_ENUMERATION); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_FORM for WPD_VIDEO_FOURCC_CODE"); - } - - if (SUCCEEDED(hr)) - { - // Only 1 sample value is set here, add more as appropriate for your device - PROPVARIANT pvValue; - PropVariantInit(&pvValue); - pvValue.vt = VT_UI4; - pvValue.ulVal = MAKEFOURCC('W', 'M', 'V', '3'); // No need to PropVariantClear as we are assigning a value - hr = pFourCCCodeEnumElements->Add(&pvValue); - CHECK_HR(hr, "Failed to populate the FourCC Code Enumeration Elements"); - } - - if (SUCCEEDED(hr)) - { - hr = pFourCCCode->SetIPortableDevicePropVariantCollectionValue(WPD_PROPERTY_ATTRIBUTE_ENUMERATION_ELEMENTS, pFourCCCodeEnumElements); - CHECK_HR(hr, "Failed to set WPD_PROPERTY_ATTRIBUTE_ENUMERATION_ELEMENTS for WPD_VIDEO_FOURCC_CODE"); - } - - // Now set the Video FourCC Code property to be pFourCCCode - if (SUCCEEDED(hr)) - { - hr = pProfile->SetIPortableDeviceValuesValue(WPD_VIDEO_FOURCC_CODE, pFourCCCode); - CHECK_HR(hr, "Failed to add the WPD_VIDEO_FOURCC_CODE attributes to the WPD_OBJECT_FORMAT_WMV rendering profile"); - } - } - - // Set the output result - if (SUCCEEDED(hr)) - { - hr = pProfile->QueryInterface(IID_PPV_ARGS(ppProfile)); - CHECK_HR(hr, "Failed to QI for IPortableDeviceValues"); - } - - return hr; -} - -HRESULT SetRenderingProfiles( - _In_ IPortableDeviceValues* pValues) -{ - HRESULT hr = S_OK; - CComPtr<IPortableDeviceValues> pPreferredAudioProfile; - CComPtr<IPortableDeviceValues> pAudioProfile2; - CComPtr<IPortableDeviceValues> pVideoProfile; - - CComPtr<IPortableDeviceValuesCollection> pProfiles; - - if(pValues == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - // Create the collection to hold the profiles - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceValuesCollection, - NULL, - CLSCTX_INPROC_SERVER, - IID_IPortableDeviceValuesCollection, - (VOID**) &pProfiles); - CHECK_HR(hr, "Failed to CoCreateInstance CLSID_PortableDeviceValuesCollection"); - } - - // Get the preferred audio profile - if (hr == S_OK) - { - hr = GetPreferredAudioProfile(&pPreferredAudioProfile); - CHECK_HR(hr, "Failed to get preferred audio profile properties"); - } - - // Add the profile - if (hr == S_OK) - { - hr = pProfiles->Add(pPreferredAudioProfile); - CHECK_HR(hr, "Failed to add preferred audio profile to profile collection"); - } - - // Get the second audio profile - if (hr == S_OK) - { - hr = GetAudioProfile2(&pAudioProfile2); - CHECK_HR(hr, "Failed to get second audio profile properties"); - } - - // Add the profile - if (hr == S_OK) - { - hr = pProfiles->Add(pAudioProfile2); - CHECK_HR(hr, "Failed to add second audio profile to profile collection"); - } - - // Get the video profile - if (hr == S_OK) - { - hr = GetVideoProfile(&pVideoProfile); - CHECK_HR(hr, "Failed to get video profile properties"); - } - - // Add the profile - if (hr == S_OK) - { - hr = pProfiles->Add(pVideoProfile); - CHECK_HR(hr, "Failed to add second audio profile to profile collection"); - } - - // Set the WPD_RENDERING_INFORMATION_PROFILES - if (hr == S_OK) - { - hr = pValues->SetIPortableDeviceValuesCollectionValue(WPD_RENDERING_INFORMATION_PROFILES, pProfiles); - CHECK_HR(hr, "Failed to set WPD_RENDERING_INFORMATION_PROFILES"); - } - - return hr; -} - -DWORD GetResourceSize( - UINT uiResource) -{ - HRESULT hr = S_OK; - LONG lError = ERROR_SUCCESS; - DWORD dwResourceSize = 0; - - HRSRC hResource = FindResource(g_hInstance, MAKEINTRESOURCE(uiResource), TEXT("DATA_FILE")); - if (hResource) - { - HGLOBAL hGlobal = LoadResource(g_hInstance, hResource); - if (hGlobal) - { - dwResourceSize = SizeofResource(g_hInstance, hResource); - } - else - { - lError = GetLastError(); - hr = HRESULT_FROM_WIN32(lError); - } - } - else - { - lError = GetLastError(); - hr = HRESULT_FROM_WIN32(lError); - } - - if (FAILED(hr)) - { - CHECK_HR(hr, "Failed to get resource size for '%d'", uiResource); - } - - return dwResourceSize; -} - -PBYTE GetResourceData( - UINT uiResource) -{ - HRESULT hr = S_OK; - LONG lError = ERROR_SUCCESS; - PBYTE pData = NULL; - - HRSRC hResource = FindResource(g_hInstance, MAKEINTRESOURCE(uiResource), TEXT("DATA_FILE")); - if (hResource) - { - HGLOBAL hGlobal = LoadResource(g_hInstance, hResource); - if (hGlobal) - { - pData = static_cast<BYTE*>(LockResource(hGlobal)); - } - else - { - lError = GetLastError(); - hr = HRESULT_FROM_WIN32(lError); - } - } - else - { - lError = GetLastError(); - hr = HRESULT_FROM_WIN32(lError); - } - - if (FAILED(hr)) - { - CHECK_HR(hr, "Failed to get resource data pointer for '%d'", uiResource); - } - - return pData; -} - -HRESULT IsValidContentType( - _In_ REFGUID guidObjectContentType, - _In_ CAtlArray<GUID>& RestrictedTypes) -{ - HRESULT hr = S_OK; - - size_t numElems = RestrictedTypes.GetCount(); - if(numElems > 0) - { - BOOL bContentTypeAllowed = FALSE; - for(size_t typeIndex = 0; typeIndex < numElems; typeIndex++) - { - if(RestrictedTypes[typeIndex] == guidObjectContentType) - { - bContentTypeAllowed = TRUE; - } - } - if(!bContentTypeAllowed) - { - hr = E_INVALIDARG; - CHECK_HR(hr, "Parent Object does not allow creation of content type %ws", CComBSTR(guidObjectContentType)); - } - } - - return hr; -} - -HRESULT GetClientContext( - _In_ IPortableDeviceValues* pParams, - _In_ LPCWSTR pszContextKey, - _COM_Outptr_ IUnknown** ppContext) -{ - HRESULT hr = S_OK; - ContextMap* pContextMap = NULL; - - if(ppContext == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, ("Cannot have NULL parameter")); - return hr; - } - - *ppContext = NULL; - - if (SUCCEEDED(hr)) - { - hr = pParams->GetIUnknownValue(PRIVATE_SAMPLE_DRIVER_CLIENT_CONTEXT_MAP, (IUnknown**) &pContextMap); - CHECK_HR(hr, "Failed to get PRIVATE_SAMPLE_DRIVER_CLIENT_CONTEXT_MAP"); - } - - if (SUCCEEDED(hr) && pContextMap == NULL) - { - hr = E_POINTER; - CHECK_HR(hr, "Client context map is NULL"); - } - - if (SUCCEEDED(hr)) - { - *ppContext = pContextMap->GetContext(pszContextKey); - if(*ppContext == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND); - CHECK_HR(hr, "Failed to find context %ws for this client", pszContextKey); - } - } - - SAFE_RELEASE(pContextMap); - - return hr; -} - -HRESULT GetClientEventCookie( - _In_ IPortableDeviceValues* pParams, - _Outptr_result_maybenull_ LPWSTR* ppszEventCookie) -{ - HRESULT hr = S_OK; - LPWSTR pszClientContext = NULL; - ClientContext* pClientContext = NULL; - - if ((pParams == NULL) || - (ppszEventCookie == NULL)) - { - return E_POINTER; - } - - *ppszEventCookie = NULL; - - hr = pParams->GetStringValue(WPD_PROPERTY_COMMON_CLIENT_INFORMATION_CONTEXT, &pszClientContext); - CHECK_HR(hr, "Missing value for WPD_PROPERTY_COMMON_CLIENT_INFORMATION_CONTEXT"); - - if (SUCCEEDED(hr)) - { - // Get the client context for this request. - hr = GetClientContext(pParams, pszClientContext, (IUnknown**)&pClientContext); - CHECK_HR(hr, "Failed to get the client context"); - } - - if (SUCCEEDED(hr) && (pClientContext->EventCookie.GetLength() > 0)) - { - // Get the event cookie only if it has been set - *ppszEventCookie = AtlAllocTaskWideString(pClientContext->EventCookie); - if (*ppszEventCookie == NULL) - { - hr = E_OUTOFMEMORY; - CHECK_HR(hr, "Failed to allocate the client event cookie"); - } - } - - // We're done with the context - SAFE_RELEASE(pClientContext); - - CoTaskMemFree(pszClientContext); - pszClientContext = NULL; - - return hr; -} - -HRESULT PostWpdEvent( - _In_ IPortableDeviceValues* pCommandParams, - _In_ IPortableDeviceValues* pEventParams) -{ - HRESULT hr = S_OK; - BYTE* pBuffer = NULL; - DWORD cbBuffer = 0; - LPWSTR pszEventCookie = NULL; - - CComPtr<IWDFDevice> pDevice; - CComPtr<IWpdSerializer> pSerializer; - - // Get the WUDF Device Object - hr = pCommandParams->GetIUnknownValue(PRIVATE_SAMPLE_DRIVER_WUDF_DEVICE_OBJECT, (IUnknown**) &pDevice); - CHECK_HR(hr, "Failed to get PRIVATE_SAMPLE_DRIVER_WUDF_DEVICE_OBJECT"); - - // Get the WpdSerializer Object - if (hr == S_OK) - { - hr = pCommandParams->GetIUnknownValue(PRIVATE_SAMPLE_DRIVER_WPD_SERIALIZER_OBJECT, (IUnknown**) &pSerializer); - CHECK_HR(hr, "Failed to get PRIVATE_SAMPLE_DRIVER_WPD_SERIALIZER_OBJECT"); - } - - if (hr == S_OK) - { - // Set the client event cookie if available. This is benign, as some clients may not provide a cookie. - HRESULT hrEventCookie = GetClientEventCookie(pCommandParams, &pszEventCookie); - if ((hrEventCookie == S_OK) && (pszEventCookie != NULL)) - { - hrEventCookie = pEventParams->SetStringValue(WPD_CLIENT_EVENT_COOKIE, pszEventCookie); - CHECK_HR(hrEventCookie, "Failed to set WPD_CLIENT_EVENT_COOKIE (error ignored)"); - } - } - - if (hr == S_OK) - { - // Create a buffer with the serialized parameters - hr = pSerializer->GetBufferFromIPortableDeviceValues(pEventParams, &pBuffer, &cbBuffer); - CHECK_HR(hr, "Failed to get buffer from IPortableDeviceValues"); - } - - // Send the event - if (hr == S_OK && pBuffer != NULL) - { - hr = pDevice->PostEvent(WPD_EVENT_NOTIFICATION, WdfEventBroadcast, pBuffer, cbBuffer); - CHECK_HR(hr, "Failed to post WPD (broadcast) event"); - } - - // Free the memory - CoTaskMemFree(pBuffer); - pBuffer = NULL; - - CoTaskMemFree(pszEventCookie); - pszEventCookie = NULL; - - return hr; -} - -HRESULT PostWpdEventWithProgress( - _In_ IPortableDeviceValues* pCommandParams, - _In_ IPortableDeviceValues* pEventParams, - _In_ REFGUID guidEvent, - const DWORD dwOperationState, - const DWORD dwOperationProgress) -{ - HRESULT hr = S_OK; - - if((pCommandParams == NULL) || (pEventParams == NULL)) - { - hr = E_POINTER; - CHECK_HR(hr, "Cannot have NULL parameter"); - return hr; - } - - hr = pEventParams->SetGuidValue(WPD_EVENT_PARAMETER_EVENT_ID, guidEvent); - CHECK_HR(hr, "Failed to set WPD_EVENT_PARAMETER_EVENT_ID"); - - if (hr == S_OK) - { - hr = pEventParams->SetUnsignedIntegerValue(WPD_EVENT_PARAMETER_OPERATION_STATE, dwOperationState); - CHECK_HR(hr, "Failed to set WPD_EVENT_PARAMETER_OPERATION_STATE"); - } - - if (hr == S_OK) - { - hr = pEventParams->SetUnsignedIntegerValue(WPD_EVENT_PARAMETER_OPERATION_PROGRESS, dwOperationProgress); - CHECK_HR(hr, "Failed to set WPD_EVENT_PARAMETER_OPERATION_PROGRESS"); - } - - if (hr == S_OK) - { - hr = PostWpdEvent(pCommandParams, pEventParams); - CHECK_HR(hr, "Failed to post event with progress"); - } - - return hr; -} - - -BOOL ExistsInCollection( - _In_ REFGUID guid, - _In_ IPortableDevicePropVariantCollection* pCollection) -{ - HRESULT hr = S_OK; - - BOOL bFound = FALSE; - DWORD dwNumGuids = 0; - - if(pCollection != NULL) - { - hr = pCollection->GetCount(&dwNumGuids); - if (SUCCEEDED(hr)) - { - // Loop through each guid in the collection - for (DWORD dwIndex = 0; dwIndex < dwNumGuids; dwIndex++) - { - PROPVARIANT pv = {0}; - PropVariantInit(&pv); - hr = pCollection->GetAt(dwIndex, &pv); - if (SUCCEEDED(hr)) - { - if ((pv.puuid != NULL) && (pv.vt == VT_CLSID)) - { - bFound = IsEqualGUID(guid, *pv.puuid); - } - } - - PropVariantClear(&pv); - - if (bFound == TRUE) - { - break; - } - } - } - } - - return bFound; -} - -HRESULT GetAtlStringValue( - _In_ REFPROPERTYKEY Key, - _In_ IPortableDeviceValues* pValues, - _Out_ CAtlStringW& strValue) -{ - HRESULT hr = S_OK; - LPWSTR wszValue = NULL; - strValue = L""; - - if (pValues == NULL) - { - hr = E_POINTER; - return hr; - } - - hr = pValues->GetStringValue(Key, &wszValue); - if (hr == S_OK) - { - strValue = wszValue; - } - - if (wszValue != NULL) - { - CoTaskMemFree(wszValue); - wszValue = NULL; - } - - return hr; -} - -HRESULT CreateVCard( - _In_ IPortableDeviceValues* pValues, - _Out_ CAtlStringA& strVCard) -{ - CAtlStringW strLastName; // WPD_CONTACT_LAST_NAME - CAtlStringW strFirstName; // WPD_CONTACT_FIRST_NAME - CAtlStringW strDisplayName; // WPD_CONTACT_DISPLAY_NAME - CAtlStringW strCompanyName; // WPD_CONTACT_COMPANY_NAME - CAtlStringW strRole; // WPD_CONTACT_ROLE - CAtlStringW strPrimaryPhoneNumber; // WPD_CONTACT_PRIMARY_PHONE or WPD_CONTACT_PERSONAL_PHONE - CAtlStringW strBusinessPhoneNumber; // WPD_CONTACT_BUSINESS_PHONE - CAtlStringW strMobilePhoneNumber; // WPD_CONTACT_MOBILE_PHONE - CAtlStringW strPrimaryFaxPhoneNumber; // WPD_CONTACT_PRIMARY_FAX - CAtlStringW strAddressLine1; // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE1 - CAtlStringW strAddressLine2; // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE2 - CAtlStringW strAddressCity; // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_CITY - CAtlStringW strAddressPostalCode; // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_POSTAL_CODE - - if (pValues != NULL) - { - // Read the contact property values from IPortableDeviceValues - // NOTE: ALL values are not required to be present to create a valid VCARD file. If no properties are - // found then a blank VCARD will be created. - GetAtlStringValue(WPD_CONTACT_LAST_NAME, pValues, strLastName); // WPD_CONTACT_LAST_NAME - GetAtlStringValue(WPD_CONTACT_FIRST_NAME, pValues, strFirstName); // WPD_CONTACT_FIRST_NAME - GetAtlStringValue(WPD_CONTACT_DISPLAY_NAME, pValues, strDisplayName); // WPD_CONTACT_DISPLAY_NAME - GetAtlStringValue(WPD_CONTACT_COMPANY_NAME, pValues, strCompanyName); // WPD_CONTACT_COMPANY_NAME - GetAtlStringValue(WPD_CONTACT_ROLE, pValues, strRole); // WPD_CONTACT_ROLE - GetAtlStringValue(WPD_CONTACT_PRIMARY_PHONE, pValues, strPrimaryPhoneNumber); // WPD_CONTACT_PRIMARY_PHONE or WPD_CONTACT_PERSONAL_PHONE - GetAtlStringValue(WPD_CONTACT_BUSINESS_PHONE, pValues, strBusinessPhoneNumber); // WPD_CONTACT_BUSINESS_PHONE - GetAtlStringValue(WPD_CONTACT_MOBILE_PHONE, pValues, strMobilePhoneNumber); // WPD_CONTACT_MOBILE_PHONE - GetAtlStringValue(WPD_CONTACT_PRIMARY_FAX, pValues, strPrimaryFaxPhoneNumber); // WPD_CONTACT_PRIMARY_FAX - GetAtlStringValue(WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE1, pValues, strAddressLine1); // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE1 - GetAtlStringValue(WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE2, pValues, strAddressLine2); // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_LINE2 - GetAtlStringValue(WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_CITY, pValues, strAddressCity); // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_CITY - GetAtlStringValue(WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_POSTAL_CODE, pValues, strAddressPostalCode); // WPD_CONTACT_PERSONAL_POSTAL_ADDRESS_POSTAL_CODE - } - - // Create the VCARD from the properties found in the IPortableDeviceValues - strVCard.Format(VCARD_FORMAT, strLastName.GetString(), strFirstName.GetString(), - strDisplayName.GetString(), - strCompanyName.GetString(), - strRole.GetString(), - strPrimaryPhoneNumber.GetString(), - strBusinessPhoneNumber.GetString(), - strMobilePhoneNumber.GetString(), - strPrimaryFaxPhoneNumber.GetString(), - strAddressLine1.GetString(), strAddressLine2.GetString(), - strAddressCity.GetString(), strAddressPostalCode.GetString()); - return S_OK; -} - -HRESULT UpdateDeviceFriendlyName( - _In_ IPortableDeviceClassExtension* pPortableDeviceClassExtension, - _In_ LPCWSTR wszDeviceFriendlyName) -{ - HRESULT hr = S_OK; - - // If we were passed NULL parameters we have nothing to do, return S_OK. - if ((pPortableDeviceClassExtension == NULL) || (wszDeviceFriendlyName == NULL)) - { - return S_OK; - } - - CComPtr<IPortableDeviceValues> pParams; - CComPtr<IPortableDeviceValues> pResults; - CComPtr<IPortableDeviceValues> pValues; - - // Prepare to make a call to set the device information - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, NULL, CLSCTX_INPROC_SERVER, IID_IPortableDeviceValues, (VOID**)&pParams); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues"); - } - - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, NULL, CLSCTX_INPROC_SERVER, IID_IPortableDeviceValues, (VOID**)&pResults); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues for results"); - } - - if (hr == S_OK) - { - hr = CoCreateInstance(CLSID_PortableDeviceValues, NULL, CLSCTX_INPROC_SERVER, IID_IPortableDeviceValues, (VOID**)&pValues); - CHECK_HR(hr, "Failed to CoCreate CLSID_PortableDeviceValues for results"); - } - - // Get the information values to update and set them in WPD_PROPERTY_CLASS_EXTENSION_DEVICE_INFORMATION_VALUES - if (hr == S_OK) - { - hr = pValues->SetStringValue(WPD_DEVICE_FRIENDLY_NAME, wszDeviceFriendlyName); - CHECK_HR(hr, ("Failed to set WPD_DEVICE_FRIENDLY_NAME")); - } - - // Set the params - if (hr == S_OK) - { - hr = pParams->SetGuidValue(WPD_PROPERTY_COMMON_COMMAND_CATEGORY, WPD_COMMAND_CLASS_EXTENSION_WRITE_DEVICE_INFORMATION.fmtid); - CHECK_HR(hr, ("Failed to set WPD_PROPERTY_COMMON_COMMAND_CATEGORY")); - } - if (hr == S_OK) - { - hr = pParams->SetUnsignedIntegerValue(WPD_PROPERTY_COMMON_COMMAND_ID, WPD_COMMAND_CLASS_EXTENSION_WRITE_DEVICE_INFORMATION.pid); - CHECK_HR(hr, ("Failed to set WPD_PROPERTY_COMMON_COMMAND_ID")); - } - if (hr == S_OK) - { - hr = pParams->SetIPortableDeviceValuesValue(WPD_PROPERTY_CLASS_EXTENSION_DEVICE_INFORMATION_VALUES, pValues); - CHECK_HR(hr, ("Failed to set WPD_PROPERTY_CLASS_EXTENSION_DEVICE_INFORMATION_VALUES")); - } - - // Make the call - if (hr == S_OK) - { - hr = pPortableDeviceClassExtension->ProcessLibraryMessage(pParams, pResults); - CHECK_HR(hr, ("Failed to process update device information message")); - } - - // A Failed ProcessLibraryMessage operation for updating this value is not considered - // fatal and should return S_OK. - - return S_OK; -} - -HRESULT GetCommonResourceAttributes( - _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"); - } - - // Add the attributes that are common to all our resources. - if (SUCCEEDED(hr)) - { - // Add a default value for size. This will be overridden by the content objects with the actual value. - hr = pAttributes->SetUnsignedIntegerValue(WPD_RESOURCE_ATTRIBUTE_TOTAL_SIZE, FAKE_DATA_SIZE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_TOTAL_SIZE"); - } - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetBoolValue(WPD_RESOURCE_ATTRIBUTE_CAN_READ, TRUE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_CAN_READ"); - } - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetBoolValue(WPD_RESOURCE_ATTRIBUTE_CAN_WRITE, FALSE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_CAN_WRITE"); - } - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetBoolValue(WPD_RESOURCE_ATTRIBUTE_CAN_DELETE, FALSE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_CAN_DELETE"); - } - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetUnsignedIntegerValue(WPD_RESOURCE_ATTRIBUTE_OPTIMAL_READ_BUFFER_SIZE, OPTIMAL_BUFFER_SIZE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_OPTIMAL_READ_BUFFER_SIZE"); - } - if (SUCCEEDED(hr)) - { - hr = pAttributes->SetUnsignedIntegerValue(WPD_RESOURCE_ATTRIBUTE_OPTIMAL_WRITE_BUFFER_SIZE, OPTIMAL_BUFFER_SIZE); - CHECK_HR(hr, "Failed to set WPD_RESOURCE_ATTRIBUTE_OPTIMAL_WRITE_BUFFER_SIZE"); - } - - // 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; -} - - |
