From d3a3d73491c4de8c51f949eb5f1187f1b82a44b2 Mon Sep 17 00:00:00 2001 From: Geoffroy Bonneville Date: Mon, 11 Sep 2017 15:13:04 +0200 Subject: [PATCH] KeePassLib finally portable (but version 2.19) Windows Store project stub --- .gitattributes | 63 - .gitignore | 242 - .vs/ModernKeePass/v14/.suo | Bin 0 -> 355840 bytes ModernKeePass.sln | 46 + .../{ModernKeePass.Shared => }/App.xaml | 0 ModernKeePass/App.xaml.cs | 109 + .../Assets/Logo.scale-100.png | Bin .../Assets/SmallLogo.scale-100.png | Bin .../Assets/SplashScreen.scale-100.png | Bin .../Assets/StoreLogo.scale-100.png | Bin .../{ModernKeePass.Windows => }/MainPage.xaml | 0 .../MainPage.xaml.cs | 4 +- .../ModernKeePass.Shared/App.xaml.cs | 137 - .../ModernKeePass.Shared.projitems | 19 - .../ModernKeePass.Shared.shproj | 12 - .../Properties/AssemblyInfo.cs | 29 - .../Assets/Logo.scale-240.png | Bin 2516 -> 0 bytes .../Assets/SmallLogo.scale-240.png | Bin 753 -> 0 bytes .../Assets/SplashScreen.scale-240.png | Bin 14715 -> 0 bytes .../Assets/Square71x71Logo.scale-240.png | Bin 1122 -> 0 bytes .../Assets/StoreLogo.scale-240.png | Bin 2200 -> 0 bytes .../Assets/WideLogo.scale-240.png | Bin 4530 -> 0 bytes .../ModernKeePass.WindowsPhone/MainPage.xaml | 14 - .../MainPage.xaml.cs | 48 - .../ModernKeePass.WindowsPhone.csproj | 125 - .../Package.appxmanifest | 44 - .../Properties/AssemblyInfo.cs | 29 - ...ss.Windows.csproj => ModernKeePass.csproj} | 39 +- ModernKeePass/ModernKeePass_TemporaryKey.pfx | Bin 0 -> 2446 bytes .../Package.appxmanifest | 14 +- ModernKeePass/Properties/AssemblyInfo.cs | 29 + ModernKeePass/obj/Debug/App.g.cs | 0 ModernKeePass/obj/Debug/App.g.i.cs | 56 + ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 14069 bytes ModernKeePass/obj/Debug/MainPage.g.cs | 0 ModernKeePass/obj/Debug/MainPage.g.i.cs | 35 + ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 ModernKeePass/obj/Debug/XamlSaveStateFile.xml | 4 + ModernKeePass/obj/Debug/XamlTypeInfo.g.cs | 0 .../Collections/AutoTypeConfig.cs | 220 + .../Collections/ProtectedBinaryDictionary.cs | 173 + .../Collections/ProtectedStringDictionary.cs | 306 + ModernKeePassLib/Collections/PwObjectList.cs | 303 + ModernKeePassLib/Collections/PwObjectPool.cs | 80 + .../Collections/StringDictionaryEx.cs | 116 + .../Cryptography/Cipher/CipherPool.cs | 157 + .../Cryptography/Cipher/ICipherEngine.cs | 66 + .../Cryptography/Cipher/Salsa20Cipher.cs | 188 + .../Cryptography/Cipher/StandardAesEngine.cs | 146 + ModernKeePassLib/Cryptography/CryptoRandom.cs | 331 + .../Cryptography/CryptoRandomStream.cs | 208 + .../Cryptography/HashingStreamEx.cs | 207 + ModernKeePassLib/Cryptography/HmacOtp.cs | 89 + .../CharSetBasedGenerator.cs | 65 + .../PasswordGenerator/CustomPwGenerator.cs | 66 + .../CustomPwGeneratorPool.cs | 110 + .../PatternBasedGenerator.cs | 173 + .../PasswordGenerator/PwCharSet.cs | 318 + .../PasswordGenerator/PwGenerator.cs | 146 + .../PasswordGenerator/PwProfile.cs | 274 + .../Cryptography/PopularPasswords.cs | 539 + .../Cryptography/QualityEstimation.cs | 145 + .../Cryptography/SHA256Managed.cs | 48 + ModernKeePassLib/Cryptography/SelfTest.cs | 425 + ModernKeePassLib/DebugAssert.cs | 30 + ModernKeePassLib/Delegates/Handlers.cs | 49 + ModernKeePassLib/Interfaces/IDeepCloneable.cs | 37 + ModernKeePassLib/Interfaces/IStatusLogger.cs | 105 + ModernKeePassLib/Interfaces/IStructureItem.cs | 37 + ModernKeePassLib/Interfaces/ITimeLogger.cs | 105 + ModernKeePassLib/Interfaces/IUIOperations.cs | 37 + .../Interfaces/IXmlSerializerEx.cs | 33 + .../KeePassLib.2.19.0.26321.nupkg | Bin 0 -> 97123 bytes ModernKeePassLib/KeePassLib.nuget.targets | 9 + ModernKeePassLib/Keys/CompositeKey.cs | 410 + ModernKeePassLib/Keys/IUserKey.cs | 46 + ModernKeePassLib/Keys/KcpCustomKey.cs | 69 + ModernKeePassLib/Keys/KcpKeyFile.cs | 287 + ModernKeePassLib/Keys/KcpPassword.cs | 82 + ModernKeePassLib/Keys/KcpUserAccount.cs | 150 + ModernKeePassLib/Keys/KeyProvider.cs | 152 + ModernKeePassLib/Keys/KeyProviderPool.cs | 105 + ModernKeePassLib/Keys/KeyValidator.cs | 51 + ModernKeePassLib/Keys/KeyValidatorPool.cs | 86 + ModernKeePassLib/Keys/UserKeyType.cs | 33 + ModernKeePassLib/ModernKeePassLib.csproj | 219 + ModernKeePassLib/ModernKeePassLib.csproj.user | 6 + .../ModernKeePassLib.nuget.targets | 9 + ModernKeePassLib/ModernKeePassLib.nuspec | 18 + ModernKeePassLib/ModernKeePassLib.pfx | Bin 0 -> 1756 bytes ModernKeePassLib/Native/NativeLib.cs | 244 + ModernKeePassLib/Native/NativeMethods.cs | 154 + ModernKeePassLib/Properties/AssemblyInfo.cs | 43 + .../Properties/AssemblyInfo.cs.bak | 42 + ModernKeePassLib/PwCustomIcon.cs | 73 + ModernKeePassLib/PwDatabase.cs | 1770 + ModernKeePassLib/PwDefs.cs | 461 + ModernKeePassLib/PwDeletedObject.cs | 86 + ModernKeePassLib/PwEntry.cs | 881 + ModernKeePassLib/PwEnums.cs | 207 + ModernKeePassLib/PwGroup.cs | 1442 + ModernKeePassLib/PwUuid.cs | 179 + ModernKeePassLib/Resources/KLRes.Generated.cs | 390 + ModernKeePassLib/Resources/KSRes.Generated.cs | 52 + ModernKeePassLib/Security/ProtectedBinary.cs | 249 + ModernKeePassLib/Security/ProtectedString.cs | 264 + ModernKeePassLib/Security/XorredBuffer.cs | 116 + .../Serialization/BinaryReaderEx.cs | 63 + .../Serialization/CryptoStream.cs | 140 + ModernKeePassLib/Serialization/FileLock.cs | 280 + .../Serialization/FileTransactionEx.cs | 148 + .../Serialization/HashedBlockStream.cs | 321 + .../Serialization/IOConnection.cs | 468 + .../Serialization/IOConnectionInfo.cs | 355 + .../Serialization/Kdb4File.Read.Streamed.cs | 862 + .../Serialization/Kdb4File.Read.cs | 408 + .../Serialization/Kdb4File.Write.cs | 866 + ModernKeePassLib/Serialization/Kdb4File.cs | 397 + .../Serialization/OldFormatException.cs | 70 + .../Translation/KPControlCustomization.cs | 406 + .../Translation/KPFormCustomization.cs | 111 + ModernKeePassLib/Translation/KPStringTable.cs | 104 + .../Translation/KPStringTableItem.cs | 51 + ModernKeePassLib/Translation/KPTranslation.cs | 257 + .../Translation/KPTranslationProperties.cs | 105 + ModernKeePassLib/Utility/AppLogEx.cs | 108 + ModernKeePassLib/Utility/MemUtil.cs | 371 + ModernKeePassLib/Utility/MessageService.cs | 427 + ModernKeePassLib/Utility/StrUtil.cs | 1362 + ModernKeePassLib/Utility/TimeUtil.cs | 222 + ModernKeePassLib/Utility/UrlUtil.cs | 599 + ModernKeePassLib/WinRTColor.cs | 49 + .../bin/Debug/ModernKeePassLib.dll | Bin 0 -> 212480 bytes .../bin/Debug/ModernKeePassLib.pdb | Bin 0 -> 593408 bytes .../bin/Debug/System.Net.Requests.dll | Bin 0 -> 27096 bytes .../bin/Debug/System.Net.Requests.xml | 681 + .../bin/Debug/System.Xml.XmlSerializer.dll | Bin 0 -> 32240 bytes .../bin/Debug/System.Xml.XmlSerializer.xml | 910 + ModernKeePassLib/bin/Debug/Windows.winmd | Bin 0 -> 2171904 bytes ModernKeePassLib/bin/Debug/Windows.xml | 75761 ++++++++++++++++ ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 22948 bytes .../KeePassLib.csproj.FileListAbsolute.txt | 11 + ...ssLib.csprojResolveAssemblyReference.cache | Bin 0 -> 204824 bytes ...dernKeePassLib.csproj.FileListAbsolute.txt | 11 + ...ssLib.csprojResolveAssemblyReference.cache | Bin 0 -> 143084 bytes .../obj/Debug/ModernKeePassLib.dll | Bin 0 -> 212480 bytes .../obj/Debug/ModernKeePassLib.pdb | Bin 0 -> 593408 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 ModernKeePassLib/project.json | 11 + ModernKeePassLib/project.lock.json | 2822 + 154 files changed, 102785 insertions(+), 787 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .gitignore create mode 100644 .vs/ModernKeePass/v14/.suo rename ModernKeePass/{ModernKeePass.Shared => }/App.xaml (100%) create mode 100644 ModernKeePass/App.xaml.cs rename ModernKeePass/{ModernKeePass.Windows => }/Assets/Logo.scale-100.png (100%) rename ModernKeePass/{ModernKeePass.Windows => }/Assets/SmallLogo.scale-100.png (100%) rename ModernKeePass/{ModernKeePass.Windows => }/Assets/SplashScreen.scale-100.png (100%) rename ModernKeePass/{ModernKeePass.Windows => }/Assets/StoreLogo.scale-100.png (100%) rename ModernKeePass/{ModernKeePass.Windows => }/MainPage.xaml (100%) rename ModernKeePass/{ModernKeePass.Windows => }/MainPage.xaml.cs (73%) delete mode 100644 ModernKeePass/ModernKeePass.Shared/App.xaml.cs delete mode 100644 ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.projitems delete mode 100644 ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.shproj delete mode 100644 ModernKeePass/ModernKeePass.Windows/Properties/AssemblyInfo.cs delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/Logo.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/SmallLogo.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/SplashScreen.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/Square71x71Logo.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/StoreLogo.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Assets/WideLogo.scale-240.png delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/MainPage.xaml delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/MainPage.xaml.cs delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/ModernKeePass.WindowsPhone.csproj delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Package.appxmanifest delete mode 100644 ModernKeePass/ModernKeePass.WindowsPhone/Properties/AssemblyInfo.cs rename ModernKeePass/{ModernKeePass.Windows/ModernKeePass.Windows.csproj => ModernKeePass.csproj} (87%) create mode 100644 ModernKeePass/ModernKeePass_TemporaryKey.pfx rename ModernKeePass/{ModernKeePass.Windows => }/Package.appxmanifest (74%) create mode 100644 ModernKeePass/Properties/AssemblyInfo.cs create mode 100644 ModernKeePass/obj/Debug/App.g.cs create mode 100644 ModernKeePass/obj/Debug/App.g.i.cs create mode 100644 ModernKeePass/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 ModernKeePass/obj/Debug/MainPage.g.cs create mode 100644 ModernKeePass/obj/Debug/MainPage.g.i.cs create mode 100644 ModernKeePass/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs create mode 100644 ModernKeePass/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs create mode 100644 ModernKeePass/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 ModernKeePass/obj/Debug/XamlSaveStateFile.xml create mode 100644 ModernKeePass/obj/Debug/XamlTypeInfo.g.cs create mode 100644 ModernKeePassLib/Collections/AutoTypeConfig.cs create mode 100644 ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs create mode 100644 ModernKeePassLib/Collections/ProtectedStringDictionary.cs create mode 100644 ModernKeePassLib/Collections/PwObjectList.cs create mode 100644 ModernKeePassLib/Collections/PwObjectPool.cs create mode 100644 ModernKeePassLib/Collections/StringDictionaryEx.cs create mode 100644 ModernKeePassLib/Cryptography/Cipher/CipherPool.cs create mode 100644 ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs create mode 100644 ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs create mode 100644 ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs create mode 100644 ModernKeePassLib/Cryptography/CryptoRandom.cs create mode 100644 ModernKeePassLib/Cryptography/CryptoRandomStream.cs create mode 100644 ModernKeePassLib/Cryptography/HashingStreamEx.cs create mode 100644 ModernKeePassLib/Cryptography/HmacOtp.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs create mode 100644 ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs create mode 100644 ModernKeePassLib/Cryptography/PopularPasswords.cs create mode 100644 ModernKeePassLib/Cryptography/QualityEstimation.cs create mode 100644 ModernKeePassLib/Cryptography/SHA256Managed.cs create mode 100644 ModernKeePassLib/Cryptography/SelfTest.cs create mode 100644 ModernKeePassLib/DebugAssert.cs create mode 100644 ModernKeePassLib/Delegates/Handlers.cs create mode 100644 ModernKeePassLib/Interfaces/IDeepCloneable.cs create mode 100644 ModernKeePassLib/Interfaces/IStatusLogger.cs create mode 100644 ModernKeePassLib/Interfaces/IStructureItem.cs create mode 100644 ModernKeePassLib/Interfaces/ITimeLogger.cs create mode 100644 ModernKeePassLib/Interfaces/IUIOperations.cs create mode 100644 ModernKeePassLib/Interfaces/IXmlSerializerEx.cs create mode 100644 ModernKeePassLib/KeePassLib.2.19.0.26321.nupkg create mode 100644 ModernKeePassLib/KeePassLib.nuget.targets create mode 100644 ModernKeePassLib/Keys/CompositeKey.cs create mode 100644 ModernKeePassLib/Keys/IUserKey.cs create mode 100644 ModernKeePassLib/Keys/KcpCustomKey.cs create mode 100644 ModernKeePassLib/Keys/KcpKeyFile.cs create mode 100644 ModernKeePassLib/Keys/KcpPassword.cs create mode 100644 ModernKeePassLib/Keys/KcpUserAccount.cs create mode 100644 ModernKeePassLib/Keys/KeyProvider.cs create mode 100644 ModernKeePassLib/Keys/KeyProviderPool.cs create mode 100644 ModernKeePassLib/Keys/KeyValidator.cs create mode 100644 ModernKeePassLib/Keys/KeyValidatorPool.cs create mode 100644 ModernKeePassLib/Keys/UserKeyType.cs create mode 100644 ModernKeePassLib/ModernKeePassLib.csproj create mode 100644 ModernKeePassLib/ModernKeePassLib.csproj.user create mode 100644 ModernKeePassLib/ModernKeePassLib.nuget.targets create mode 100644 ModernKeePassLib/ModernKeePassLib.nuspec create mode 100644 ModernKeePassLib/ModernKeePassLib.pfx create mode 100644 ModernKeePassLib/Native/NativeLib.cs create mode 100644 ModernKeePassLib/Native/NativeMethods.cs create mode 100644 ModernKeePassLib/Properties/AssemblyInfo.cs create mode 100644 ModernKeePassLib/Properties/AssemblyInfo.cs.bak create mode 100644 ModernKeePassLib/PwCustomIcon.cs create mode 100644 ModernKeePassLib/PwDatabase.cs create mode 100644 ModernKeePassLib/PwDefs.cs create mode 100644 ModernKeePassLib/PwDeletedObject.cs create mode 100644 ModernKeePassLib/PwEntry.cs create mode 100644 ModernKeePassLib/PwEnums.cs create mode 100644 ModernKeePassLib/PwGroup.cs create mode 100644 ModernKeePassLib/PwUuid.cs create mode 100644 ModernKeePassLib/Resources/KLRes.Generated.cs create mode 100644 ModernKeePassLib/Resources/KSRes.Generated.cs create mode 100644 ModernKeePassLib/Security/ProtectedBinary.cs create mode 100644 ModernKeePassLib/Security/ProtectedString.cs create mode 100644 ModernKeePassLib/Security/XorredBuffer.cs create mode 100644 ModernKeePassLib/Serialization/BinaryReaderEx.cs create mode 100644 ModernKeePassLib/Serialization/CryptoStream.cs create mode 100644 ModernKeePassLib/Serialization/FileLock.cs create mode 100644 ModernKeePassLib/Serialization/FileTransactionEx.cs create mode 100644 ModernKeePassLib/Serialization/HashedBlockStream.cs create mode 100644 ModernKeePassLib/Serialization/IOConnection.cs create mode 100644 ModernKeePassLib/Serialization/IOConnectionInfo.cs create mode 100644 ModernKeePassLib/Serialization/Kdb4File.Read.Streamed.cs create mode 100644 ModernKeePassLib/Serialization/Kdb4File.Read.cs create mode 100644 ModernKeePassLib/Serialization/Kdb4File.Write.cs create mode 100644 ModernKeePassLib/Serialization/Kdb4File.cs create mode 100644 ModernKeePassLib/Serialization/OldFormatException.cs create mode 100644 ModernKeePassLib/Translation/KPControlCustomization.cs create mode 100644 ModernKeePassLib/Translation/KPFormCustomization.cs create mode 100644 ModernKeePassLib/Translation/KPStringTable.cs create mode 100644 ModernKeePassLib/Translation/KPStringTableItem.cs create mode 100644 ModernKeePassLib/Translation/KPTranslation.cs create mode 100644 ModernKeePassLib/Translation/KPTranslationProperties.cs create mode 100644 ModernKeePassLib/Utility/AppLogEx.cs create mode 100644 ModernKeePassLib/Utility/MemUtil.cs create mode 100644 ModernKeePassLib/Utility/MessageService.cs create mode 100644 ModernKeePassLib/Utility/StrUtil.cs create mode 100644 ModernKeePassLib/Utility/TimeUtil.cs create mode 100644 ModernKeePassLib/Utility/UrlUtil.cs create mode 100644 ModernKeePassLib/WinRTColor.cs create mode 100644 ModernKeePassLib/bin/Debug/ModernKeePassLib.dll create mode 100644 ModernKeePassLib/bin/Debug/ModernKeePassLib.pdb create mode 100644 ModernKeePassLib/bin/Debug/System.Net.Requests.dll create mode 100644 ModernKeePassLib/bin/Debug/System.Net.Requests.xml create mode 100644 ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.dll create mode 100644 ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.xml create mode 100644 ModernKeePassLib/bin/Debug/Windows.winmd create mode 100644 ModernKeePassLib/bin/Debug/Windows.xml create mode 100644 ModernKeePassLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 ModernKeePassLib/obj/Debug/KeePassLib.csproj.FileListAbsolute.txt create mode 100644 ModernKeePassLib/obj/Debug/KeePassLib.csprojResolveAssemblyReference.cache create mode 100644 ModernKeePassLib/obj/Debug/ModernKeePassLib.csproj.FileListAbsolute.txt create mode 100644 ModernKeePassLib/obj/Debug/ModernKeePassLib.csprojResolveAssemblyReference.cache create mode 100644 ModernKeePassLib/obj/Debug/ModernKeePassLib.dll create mode 100644 ModernKeePassLib/obj/Debug/ModernKeePassLib.pdb create mode 100644 ModernKeePassLib/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs create mode 100644 ModernKeePassLib/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs create mode 100644 ModernKeePassLib/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 ModernKeePassLib/project.json create mode 100644 ModernKeePassLib/project.lock.json diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 1ff0c42..0000000 --- a/.gitattributes +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1c9a181..0000000 --- a/.gitignore +++ /dev/null @@ -1,242 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -[Xx]64/ -[Xx]86/ -[Bb]uild/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Visual Studio 2015 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# DNX -project.lock.json -artifacts/ - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding add-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml - -# TODO: Un-comment the next line if you do not want to checkin -# your web deploy settings because they may include unencrypted -# passwords -#*.pubxml -*.publishproj - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config -# NuGet v3's project.json files produces more ignoreable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directory -AppPackages/ -BundleArtifacts/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ - -# Others -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ -orleans.codegen.cs - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# LightSwitch generated files -GeneratedArtifacts/ -ModelManifest.xml - -# Paket dependency manager -.paket/paket.exe - -# FAKE - F# Make -.fake/ diff --git a/.vs/ModernKeePass/v14/.suo b/.vs/ModernKeePass/v14/.suo new file mode 100644 index 0000000000000000000000000000000000000000..06f98fe0937a4a98bdf72c45f2402b05606ad3ed GIT binary patch literal 355840 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

2}}8lv*P)Dl$n*Y`y}q%GFYMX zyHCd;B{3)V1@6-p=If1hTS_}~mlLISo2`K}Yu)cA?^R~`;6BYtW^a~mr{+XEDyw*B%*Hv6z*u8~ZW){)Mc$m;30? zKceQ7Ts{`e%HIw8vvlj%Tx+JS%Xy-%EH*1!_t~47>kRGfWo4El?yCj%c6>3T*?pP^ zef*h!*90?)-8kpV6?$CHmTg&A=m^bybv+knH+qe*=JL+%z=h67th9`x_f)X%BYlmN zT=SMai<5iZV&;k}xsp-r5A4UBNba3Z&1$rJXK!_TmGqq{%&2vvZo$4xD&=MEaH9>vV4cB5TR zI%h9b8k_VvPisE2y5T+xmrPxGrVdW`vEub)dNeo73HSB;`pO{6({_Cin&p9e^|5BP zz`CzcJ)RhAC9mKaq+JmYVC#rIz5%4AQru28|b%;KssP7@i=01hO zM^#j{cH+)5?8}0x6)Sg{i6R~J1|`3vpPRTAMnVli=7fIk@-_RqIzKnO`{&E9IP{Fq z&3yE+M_xPXu9fKE7dLnLR*dG@&hYKRHr%VyNWae1ctt%+a8^|RNR;Ho8^R|J<@*?X zjBS19qF3HI`SB^MT#!~TN`oa4_x!MV+JQ{<&h@S(b6DmbYY%n0^vn|U4B~1d(noK6 zmuz4Ag*TBt)DGWX$XVU?Xq##oJ%U>4L%H;LI(@#Sc)>Fl(8r9q>WdfQrc^&yNt818 zr(m4I^OdaIx&5zkd>%)>afb_Du@%WZisjf{v@3dx3j^E_!;kjJ)<_?Re)ao)oTCVb zZHZy9#n7i(pY~>c-KQ@57eZNj@5~h2T{+}eISM@jk*hEd%xNH{g~ulC5Z0qC^ZQ1# zDn~oLMg^R&&h6^`6$!lkdzILsh!#@v-DLgPRp$-i}U2CjvhI= z_mXi(3VpmhFbzi_?)IXy97k4MXfRSw&_f+pe!53y4$g*P=+M)aBM9$y>9Da=bn=&X6kdtAgR)4 zHVUcdrPupQErF<6XBM&E%aEmIfL=!I3ks3JGeeYRQcT_>cI@A@LvwdEMcZp5gL<8XcTvD5O(=DNAVl_jNn#VVwv(mC8pbxcY) z?CH-Hs!Y9ZJ-1_0Pa8Mdx>2J>%^dY1)K836D$Y$)uDEs{rMcSkj-oVIT#{1VYix1K zlv*t5znywe=DqPZdM~H;m0s85MJiik_||bs%GVT;o21Y8IxWZSkxqJeGR0$)Br>^& zwe^BiI9wedG4$>YBT0SQsw--1>gsFGdu&R}DHZrTx2dY4zP_QcrM$7C zs-nE6qO!TXv8AG^yrrV0%GcIbUsc)Ma^AKMH9<=hr4tESiX>$IfT)p}qSDkGiU#5% z4rqG3)M$z;qEr+9!33_o14>kh2T)uSgs5<#MBQC#B{j4ql?pj2mLHWK1q1O|YREy& zDnSyIXeyF$I|)fgOzUT*SCRUZumUC(>)nXH#X)J5V5{y^`kmCLdrGh{0?9ycAfY%Y zhx50@Gp(Lge^S@DZgL`iOl^*O0s50o@L5G);(P07(RsEj03 zaT*uNks&AT<&jb=7nK(L+Z+go`U1&Vd?*$RJ1Cr=mpnlZh$%TPAWH}1oy{SP(;OB~ zX|@~?CFyZcHV>6%MGFpbTpb7oW2vYU0j5NYCOAYjz?N9t$pEF~hr&+y zbBVIE;E<4NK#+qb^V5=SG9fk?XM~hysRUyYD9}Pl#ThZbEVWVzMUzUrKM+(B{?KqF zjM51~7}%=Bm0<^!t>m!^2qu+-WU)lUP^k|+Ed0@1!O zCP*AqyL(HIn%>j^#5X1GL=t_X)W`_NM~0HIfp}nO!-zkzAy8FY7YRfI1CHi0N^YQ? zPL&ewN3C;GOi!0|F>OjgWJr#Hq) zg|WDQXbZ;W4hKvxxsJwBdL2|z_myODLm-||oG_TbxveAvNsL>foUrICq)gpLuh0Mt zZ5gH2p)&9lmz8f8y$;%|>&jNN)`IJD$tkYWq@4|sKrohcVlVJyN!Qg4fy4%wKw-G5 z1R{=<>xq_x}$dRt4^w_?!oYD=k^{VKAGrEI7VU=AF zfu*O^G?ZW0iE3hgN8Ipd#vcHXx6U9oVATBFhet>CIL3 z6%7^jzVem^ES0EfY;7)YXl-uAzlN6Dy1KgR`libBw)NF0{f+h2{pF4QRkh_cb$!+4 zfk0nY|iTD`qq`30`vO&6AM=jG*&kS2bu<#udQsW3=Vg7HZSg2v>~Rn zv^C7>kF>4mS=F;4(6+IAIN8&-VrgRQ*1?XxEj?=oTDMfxZ(Ta4e(Tni^ES_kH`XEk zc^lgo`nnc%w|8vmYM!(3%*s`*tD3_#Rf{46olP5>`nJ|}G!L|PG|j1NNUf->TE4Np zY5B@vZ_A3sTRN+^)-^5<&#P0`hBgc&JGa&?Z*5vT&=+rRSh8wuPg6(dyq1>!jdhL6 z=6Uh@IdeLaD^r`cwD&d*bkruJgB>f@#5S}n+ZwEHA81;!r9CzfYHmR>gctR1t!=1L znj>cpo;kE-;l_dX*5;ghwXBY zZhWIP%%x*)m^&)4$)-8kG;KA_lI<~_i{dl8l5wqJj=jg+F=0(M%gJVGt67$uDX;7? zBT6Cx+cpdhH-~~wrf&A_5MOqUez|hYz30vda_1JNCpJ0hU=fnvmV2X=rF^Y@n43oyI=)+);r|HqFVVX{%{IS87vU zNf?tQ!s>zm|KO0}4pV_xke3X>QNdl9??8lZgskle)f{iHhk_A4lqYQKdVSR@y-r=vPn-iX5V) zlkr%%&{lo$l1`rpA+uqhQ>2DHKEY2m@5$zEt9d_DYFcgBYN#IagkC!q?qjD7FH*xn zWr*u-9LU@UE)VyyUkxN%4PW~UZrCseF(hs02R_-TCmXe`MqP3q9?~22U|(;I>IrEJ zHotLXm9+$4w$bVAYVFH4MQY4DFW|{WJlTkCHR9(>yJsG4#PHM7=Y>*??pmBUwmx{Y z&8=hz&|}FE))%``@AL>J8~J1-x7El?&R=z&o*He_N!#8hy=?~*t9M9~-f`hhHsHwy zY^wp6+|q|U4cNXR*dC*8H~9bUeQ9tc$#q`sL2~b1?k>r-#A7H@CaGBfjT_j5V)X%_ zXMn+t8O-)-x6xgF0DVm#xOP@S)3hwhGELDGO-m$A(X>p_GA+xpf?`k#T0zUUY?1OM z+433k6`>#2FNgkET7O?95>?gR)u^gIs%KP~DRiT&GwWsM``&x`^5x5#_e~GhxpIH2 z48R(I)e%^SF8P%etobs$*(H$-D__c#UAVfQim$@ad{#Ct%HHge&K+#k0hj|YI|B32 zWudYMvkM?UZblo*?eqb}{i`+rZvb9L;2pX^5i59^gc$k23gy&+@NBt2@Y73r;V=se zrxpr(4->H((u1x$0CWK8y8+N#Zqfrsl6r1gSNj;B=8Dr6_eP1r`i90{0eaAN2Y?O$ z?Fi6A?${!rsbO6x=7)*3Wl^SAj;;Py8Gtnat0S-u`CM2W5aHUAemtTdR(Ebh_i8RY zm}&#?2HFtxq*&~X=U=~HUy2tE*Dh-euAop%Tt}vKAAy*i-DB4Tp_P5dixdCz= zA$RD~dQ`QVeo{~^aZtni(X+FkU2S4`^6KUWiY{s;t%^;GjFI-9UJEsy5j3b;1Mmjm zz2m`K@DASPzJPZ?wFck~!0QOS-x{`^gq5R4BkyKE(SvJ8+oD9+^OUxiRRqurpyvpB z|9JSIm#vl?6&JJ9ht`f3&x%C40ADZb2;djM?@ooER%#U8%{9LZQ*Sg4P$9f=g;aZzrm3pnp>ybVZ0hL5uft>^4{uPpS}B(cF4X5!fYy#IyC%wd-?gdZ zbRabbhz$_y2(kZS*yg1GD>jdq5bFZ1kDIZDax0$aq^PKt=xc2OLIZ?4Lg>(WjsQ*_ zq1aY^m`55Cmn!v1zzRE{^`d7Q)w}OV;Ikhv=R0afs|$7dm;)FIWQ zsY)eTs~wfAZgyHe2AHlH#k$p_{i`fMXMj#e=p4EzcwyzHDtKiUYZpfDqW~vNQzo58 zDenRBr~@9Oe$^EqGeD*zWDco6H&qb` z3lJJ0)Dc4e-LUD*e5tNgGs%=zOXQD>1?bK^qJ&Oep62jW{6?{`d0tjO&*8dfO&T|7 z8eqKvh64;c!tl`Lhc{!mkuO)6Z8l#nx!MI2-;S@E3wqBnZAR}PDh+TO;MNgthwjiq zGj8koB91J~W?db_@>qNe#g=6;@8=epG28Dd1H1-!b%fWU%L#ABD^6f(r0R{ThIwt# zg(vu}aU8%RO2$P=?PQy+sL(gvfik<*0xUox-59EZ+l}S52Dfl zw*hV);dZEXZd%hSsY1D=CHGuKM!Yp1MahV%WN&otU}_Dp8(`NFcK_wD`Iec_GmC?d zYKdI3lrCshHy){nmy9ykJiC&a7gUhYzv=>j1^{&g(0?*~0Nrb35znht-304D7S&Kp zmBkjj0B1ky3E&vO(GeW~?XbZyRXwTH%h_tOk~>M%a>t-J(^G4rtlZ$rvb(*(@<3}2kQ^Y{5t4s@xRHFe&pfM@7|&R)CMrir)Z}tg>?3PO z$f$HyDBUA8pHa4WPT9a85@0;QxFd}Jk2?h$R?NEYm-n`|y|m>jBms zVg1h2=c!z>TGQM($)L|8D72{;>Z3j%@IwNO2N-vR@&9wD>GNbA`wL4vyDsfTvp=&Y zDhRUzv+}LGa{3Y$>u-HzT7vNFfn#&cFsdByILiazkgd(eY5$|WOSYqb-SYd$D0Huyl`a45yz2}m( zT)vb=1_Uix)Q(-C^~ohs6v+xuRL>H2qc?W?04okq9H7_{ivPnQg5(4@VWy;2Z(lr=%LGwAV7S!W6X?b7g&DWj5n0?o*O|_bVkiU zY7LMZAlDIc|Lbt;;(R5iRTIcdR7xkS>7-WEO4)qL&FL>sBaM(=Sk-DVSvc7vg)GSP z=LrGC1Bg3<_Y(X^#pxpT(l}XcxGsGcl;D0~iM|zC&SL zE)=wse(VM2(N(NZrStlq$?A!#HLAD4osH7b^V0em^J5p0KVG0LRikYl9|Wviu|t!NkC>USdNim0U7;zcE0EJ~Tk^!Et?)B~vBMNr?% zmoQB>Cd{6o9@Z-{=FPo_x-U-%pdLWo5!8n-ow!L|CL8r~{iLF$%B4&`>jK|zRZ(&a zB_pzA7x~0Z1P!X%0KNfyJHhwQ;O6(>ir$Jo7s9{SLT5iCd~NzA@4bHeh0SuIL2vVi zZ?BZo$Z&F1)0jAPIlp)N_G_W3@SGZ+n;222XD3Fc7Get{^V5;o$n?a-#MIPOcqTkE z_4@56noD}$!PHz601i8TzvmTx{XW?RO+BOkDesMnH@EXU;nj_!(AC9kS;fz_&Fx%l zJBxQ={;94<)Lp)2=Eml8e52mDwz(0CtJT_6YG$1uY?Riw$MNmR@&3`_-0u1|KfIEP z#g7}2csU$j3Dr+GLo1WlPE)(f zGrPs`{%$-RRx1;W>TWo{J{`Xr&&TqM#dr1)a*tPub zt+nvA{qd<(c&@g8P&+#JgM*&>c-XS$ZkCTqJaVVF8V9y0aKyKLS$xcd}MZJK0GoNnpQ{V zrog?SNHi9ko}X6d#}{6=@_E9-acAsyJM~SJ**%x>{Y zJ{w;c8ylNCUWvv}R!ZU1)akWI?uHt8wo@xnwY+vS);Qj{yq3vKMD}Xyi|fhha9WK|FD~V#w3U_2-o*4_ zZhUSmvl`vmSJA5Y{_as!JyDNOw#&(bNO)5{R`;{p+v-esrJN04UC+les2EZyUTAC- zwr5uMPj&Fc3JY5Yn~n8iBq9+fU!PI#xmQsV@=xW1-;!@1!JGT!AHnOL-vcLT!e^C; z@*IYHTd66UQpN9tvZ#cW7+yD(veLk3DcngY8~9zpC;Y|=Ueo&bOUhNeYRa0D#GTIf zmX*A+htk_h9q$Ub>dJ{;o2C@cKOM#MYM_kQFL|P_az@LDvai#2h~K2lN~xqKf)<{j zWp%VEi}y*q&*^kUKq23=U)URU+$*8oN&KBwRK3<1KFQ*HCHy5RCrG~TiSq9HbyKG_ z5Bk`*r+8&QmqA-XS-`sj?r-TWETKP==x2F9rW~JBp91w?_JMki&dK>WohUnJ?O=a% zY^va~GX53LDP0AnKkoyjar9_i@9T`-i-No2I)_w&81^f1qbYIyd&P5#!=U(QeW17< z;)vEHcvl16i`C#gfujeCky@KG;G} z7D3@M=+5drY|u)5`wN~pz?oE=1J-x&d`&qzm(m4%M)}OK7V^Cc${LVu>`^JXkMv$n zpY!Yv%F7=9K2SYu5^V`Bs_D|1Tu}h^Ddpe{gBtD`s7r(T-}Kby-N|En&C=ZGix>%N z5NaPG>o{UZpgD(6syagJ=c6%;_I$&K_H@!Os~CYav<&5RQEvrx3grnktI$G{n+`y~ zA99-(Oikx}VbchkU{kkjYUo|-C=eTxVw%HW^`Xb@B+NEYx~k(>aE$0*wn5lVQJ?6I zpmz)SM+q)RoxMz6UWM&PdyIEzd)4qN>HQ$+{iYB7Ymd-o+mALC_2q;T0-c6kC|fXs z7JSNw76>WP(0j8C;L3hn#SP_=JKm)$9hPaV=l(m4S-f6)gzJMqv}NasCe z>U>@^s$56U(qc3$*nQCbMNf2BfOOi&&SsGA=%f}(nsm$kpz>>;sO-)<=|r^|0i5^J z_BLBoNzgn@`cTZxIqRymwYpW%`};ohvAG|uzJ=aMlI9ulG}`%VKD5*DDipvcQuEW} zvIc4>>B&R14b0Nf>Z6d-rhqnhn;~_F2RmEq24rI4Y>sUBR%ol6y(TeG{p&vTd?ysQ z%1A@@m{D!Ebn|G(ojF%p(>W{y9YFh2a??E8{3JD0qnamR=I;gxee$yYCc(jOVXm^#7ZdqB$<20%+E{F!^uY;nl`dIxCy zwkI09lV|qYnN}+2kn~E>E)rBzUuJ=1u8>IUmVVij^O666=aKKOB|^ez;6=mxw+&i8 z=R>cWah-x*Fx&d#o*efjQ0RvT*vyaC`I!061|&7tdFjEC6pw-8pYowkn^*2s^lRm8 zj%%KORDJ5vPBXvu_hgS&K(Rk|SbHD!MMyXI_78yeAN9ly?(BzVM2WwpRU>=yaZvLe zPtx4sG&d#j!ol3QvYy-7?Fy_CAavsQ1HSA%7ULIKm1Qb~@L7 zX{RuTrK+z4*P$^K<^8z)hyjv%i*t3MY0c|HlCyU}-6wqDY-5HjECsXI{unfQv#Yv8 zTNFLT-pcCp39*vTHE?Pwe$Ln}*>67x8vE%*kn@{Pwx9F$`DZ|_w|R&=Y1)a}R$p1` zdcyaDPCsk_vld{CRP%gEj`}j_`?L>eG3bk*#}SIpBxQ@B%$sk(-3Z%jB(qngvyTPQ zufF)7-EpVk$rUU9IZ*9~pOaLl;0F?GZ;a*?+-Wz5k{t0vpx2+7U$3J*N6`{*y1rMu zO@B!RW5Bf+MoEgbOXGPod&Wl)}?y2kZxhh5@ zjK6B&jC6+>s2Q}=4^LpHdA`{bw1qb8>GLZ&GF&hLJ@Xy2r?=huL%rNToYxKn-%RJ0mXjAKAO4I>RXk56|p8| z=329ddK`2gdcvJMZjgRF^ZL`%c=nGC;MvXg8?}!)ibYE7CqR!kZ+&+t79MW7*G5va z3u=Dchu$%JtwqmCiXH<+-ZY0hUTGe$?K5rBekSu)Q02`l*xjgI0~c|Pm%Bz2iutb< zd{W1b9PWKJX4M;@)7!kzS?{%v*kWHAo_;xJp_~&D^v#i4mq4W-bANOHS$k8iP6+L_ z4*Kpqd)K-@%Za@^iFSIEMb5ZIdghyb8bVLVPbKo-1ZuqPvF;9I?yc|UowQ|8?rm1? zt{?67u=$SJj+A|Sk57GTrpszMIQ0`g2g(QG(d?cJ-U&(vt4p~aScJvMJP2a9iB*?A z3X1%&7dy=u!l0C1H+m)HxKEgxFYNj9~=C)T|f z4NdrRN&x^QM*D^;0J;)atjAx@gprwZXg_iOCQB z?N_npwr1m5xB~k8S#4{NYZZQ2?mU*`PyN6dVIJOD$qU~Pn*CU9lXDNb%G!QL(g1aS zcnHaht+^qV9pr|12^4$tQ@F#Hy-s!J5qt~i{Kf!er9GX^C~DmqFET|4?L@9M@8o+B z^baDY&7OYq9rKLO?1Pmkdo!pV)_5GVu9x(_40^roT=r_cD0pIvJzKt@#kg&%U(@+mrV$s(TbqVXmN4bd-G#N^|sj z0yZtP79QX?TmnnJyEurQRKaEHLaK|q^XDmJlSIA(CS@_b9%d&N2Pb1+FYlkoUyh2qn!BTy5)h+&)ws#wG~GFgKLq9@MPXp zcP*M|gXwlHlJ(0LasQk5FXsqnC=0Ja8g8LZ?)~6Qn%;AIc8mxC>3tLH zg?p%@fJ@}G71D528Ap4($W5^Wg?kW>K$C1GV~_5pR*KvzvUS{#bT_t+YjP#!*7+zh zFO~OpS~Z^RK}upuLwX;Loh$C~M?LTE33Bvqch#!lL!j(gd%Ik=ocTq2J)SqP+nhNo zXj#){sk@e>_9NL^w`|FMXbCgW^m;TH5hUa(=gQ_R+M{|d$UShaSf64}3M>C@pbyx7 zA@P~#jcAgR(Rvq!^&hTlXLLKLpzm)y@<0$KD_Y~%vYxl$T>c#MKoNKCay~im_ ztQoF5=N)BfW;GFOW@5J@E$*}>_otZU^Sj)S(mMZ_wKV$++wIEWcew^&_RLtzWKhNY<>ubEV%)q2oxt~u z73tQRDBtaCa>i>p9f?F*-N7CSw!RlnWv;GHS!r9_O1`08*}5)ran5W~O^Me@p0ska zlm}d|w6~~44iuSJE1_pYNuf`f=bpYS#^)q3`oiL9p0_=Vom9lA^oYEONY80}JA_N_ zU?}QQ;3xQ-yIF{5?r@+klU`1?&mFG|#83`*$|S^kxk6{pV`l!Ot=>5^HS42>yI51T zjz9Oii?tYQR70YrpQzW2%*}izS4P`eFvbXRHZ3%gRoc>CkecQd*kiMJ+AM6X1^k{w z#=;QZ&A}=ffoCDC%;Ort#odK5yqnWYgz(8Yz8OY8PUE}uU`pPil(v&l7q6ePZJniw z(>-2tWQY)JL{#VVE?AD*)jXoy7uqa)tS#<@!_KP->Ww$~COGm4qF>1`5wD6BD? zvL1WRCI?=;kD2v+-~xKu)7p-gjb37(N_{51IPJ47kph8zJDZ~!qt-c(-N`|$*E+JD zqB{6(&J#L~Y^#KoegdQ20uOdAxoA%hsj$}*7q6eQJa>r-tIN7qg7=u8rc(=7A@!Y| zJ0U4;&l{ci*yt;2v}PV*WD@=B_Gjtv$;{DY%;cn=F?P!FJG60HrGemD>YjEv=?vN! znboOnlzC!@ENvsR#oI225$WN4pi_-b^C7XWUg?8rNc>4?f+XZU=it-_8s78W6n@X* zAGH8q_wX)**9rU^2bUyKGOfSTJ1g}8TWK$o%y-Q5M7*i3+fEBf?|_s%#*>95(th4-*2(SWR$Lu4 zY9bGrdEGigYPaK<)G|8PzLe9xweF%ZXrf-R^O%U%*`KvW>gcPZUNOr$Yvd-s#T=x~ zwv^Pn?RKWIjMeu;$!fnRfZwMF$M7Qx>yx}?wAGExe^JylpUCkvx2j#jJP)C0Ny%k((;17G@WxR@B5aS~BPEomZ?gOad{Rg3| z=78Q0K^t4we=ecV**?Ys%>kQSZxk{c(}aABZye7PAx9n z@hxTyV+vfr>|gZwIpN>CEh2;5&*+zn$D7&OdMCe}ukm&tQDj{+?!2Pxq$mDTS3NO& zSQnDAqRT@Odm!Vgxuzoh?kc2U3EvTVQAQU!>96Ci`m1wvfT6$XOB6PWJlU8M*q!!k zjYezcozBm5(i`1riq5@p4VsMcBeVnP?{M3GY72KyaMEICQuHo4h7T`RE;D20Vkw&I zsxPc#vxVFww0VrESjLvhNJ+P2-^%-)>vuBpcTc2LCrii}Q>QjJpgLu>L+D6c_IP(pR$iDovo;rTAy^>g3O@BOq<%tnD$bBF)lqM9%(jkT^H>c!*0@su zEz0zvMZNGF*|)A;?M_-KlmbEoBx#?{gw6 zcS{?`ZL3;&Sk~mE1>NaYYYS+HTB8m}TOtw7x#X)R>FX7*?w{$TSB$xU7eBDISK80N z2EBK%lNB)t8NCIW%@uF=-i%iMwwF}$8BWIdhkA%za$)mIPWL!&SF4kj-EH1&X)9ms zm$}i?F*SR)-Hv9fer@(aUfi1Q#?dN;nxD>@I-}EiyRY8KQ=D+{7y34iqo%ducD`n6 zEc3Y2Q_L9YDm*pj^+tCd=~m0b`jp;K<)mjn+EvdE-#ogxAMN8Cob*njtKP99u2t{5 zl_9N~ueDAmt>U?s?pEuC<}t6u57x6OCBA(mjgxlwa;=jykk)-}qv%)0ABdd*Rb8IC z-}Bol9o#(4Nl!5EviEt)@S&dl!`^n%_E)=VyA{*z$EAB*x3725tuvqHYOIHK-@5ko zI%!@1qpkX72er-zn5U`L=5o>tr#<9g?zC&4HL5**-H*Q8CpzhoyKOB;>N_`{n_k9a z7-K}uKdiZ^I{7eqxe{XZ2KPy%pli||y{zplID7nEJR|Jos;%TXj<~-$XgZDSYhB5{ z;j>)qqfV}49Gpcj{^`h?Wycka#Fp1b&$+{C%tk9mT*A)sJp7X4jK@oeoMOB<5no0O zGj|(^Jc^VGjMun?=p5;1WSo_Zq)Xurqw5%d%v_4B)B0V;I5W$ihR?|dBL0~am2eet zuc-UWDRGMUNAFA;ztiXC7~4@jtD~mZz-Vm4TkW(Li1`dI+R!4_da(05xe7}<+C{E# z2Y}V`wkv@zo=2whJ^SNsp6@a%fVF3&9JikR+Q z<8?CBYU-+2nL;dS-lna!L!$&Ag*GlnVtd zRnM18wb7+yEmu$O6|`qB6>F(-wUFO?_R@}4t>NyAQ==jNd-hVKQK&bn+KVNvQLiQo z&t6(<>=ima>*f2m3>H~b*X8u%D?o%H4)IDv;S=35eHJ=(idyU;{ zBn$caiLBt&@t0&HHtW@VDcfVJ$vnz~_nxuA{d_ZwWRkvz+YXM-=x^XhGW;WK!}_(x zqE;W>Dwhj2V{|7+r|@rla$?-U0EZ?s)0x@K_;`9cl$=byiS@r*uXblMc3js=WSCL? zgH5eo$I#UHmG``GJzq+fkK|_`K6vGoa58m(`wMxkkiPFH?(M(@(Y(&3$?D0g6MY@{ zXI~OMv)FZiz0Bm?^h`26IWwhAPQUyz zN9;l3=YIYQI;f?CE|x8CKVz!ZYC2y^7NqzP@V+0t%AfoB#^#&k-G^VvXG`U(7D?7L z<(_*UhWui&2RoJL7bxl4mFK;Seps&CA1S`f^>p(Y>v39MK9hThKZ?uU%7S%BWcuo1lE6p@;Hk-!&+$o=UrIjA8vU7Ys;rsY-4$hge7&V@ZJ!oXhXG@OBBbNbp zQ?q|Q(*}FPT(*+V^oIRrDYkxtaaJ z8)In-Kzj!C7*bLG?S}+tPm%a^82X4_LaXHiX3~FJeU-vivbIQ;m$t1e?e>-SYv;J< zO>jN)GcbpP$m_se$&CDztIAchg;_R?eBJC}{>1RD&gI+L&#c?&&tv!^FaETvOWd*l z4LkWE<UOx7#L)A~_9^@`lt|M?wVHAB^LoP(oRZC2LZ~n)$eBxi{ck)~E74<3L5N0!F zE=aCYz6j>z&-1V@73DQ#V46T4rg8jM^t?0o$E1Y+(;AsW$M;@|*>o2s@oIXF?fB4-m7k~S~|NfOwi|1@U8y zmbKU3c;k76`8L~+sK}$q9)3V!&dk@)bG_=@=TU2KYZUulxY9?drzyA3G9it^-U;Kg zI&hf7J7z&ObIl;=;C#=2I#k#YD;LtC_I+HqVtb-o0`Arz7cc6U=X*|16x_iq+`t2fa`DK`Xa8M!Sy9ve+$=_as6#vKa1<{ z;Q9)#pTqT4Tz?nW&*S=gxW0z#@8kLfT>k*qFXH-#xPA#2>EspsIO~Ca^Pm&?&|eyy z$%Y^7D;C|!1!3c;(BUGN@f@@_bKTG5Z;_Xh+I}1opPxnXo_e3Jv~y@7Fi$=$o-jT! zYx_>xQfiCdJ(cko-nCXg>2Si8{qGNFoGG{*C-doe0g& z&do^4_R;b34BiUfnnfU0uwURs3Ar+|I?evv?QgpXz!<-Q{a$Zfris zH|mXRn;W6HTCGi`X4d(^MrnO}9N&%{?;jn`?XGY0!z-y+?q=#pRim{P{5cy{Q|ZH7 zi!2a5-rU{@??iKJyT|)8+3>>E?A+pw3A$V)rd!Crmk0Wi$yI{ zTECUOys~}$G^c5c<;&N@v$2g^$+1kPwz!j>pHx#>^va*ybYteGI{-)6zkM`jw-# z$uaYot1)#qo34iEuI}t^t1D|`(P(CWW?nlStIl4&yi(t2+&YTy zso9n3dg)+g{YE(#y>^o=JXwC8QSQM^#r#7L_z&QU_8sqTg_uRgL8^_G8nud+ zf}GAICsXOkacyLNZgy{EYHBh$GQT%BJ~BQxGaj1K=F-X3`0MYmKoMg0to)j1@D8fN zXOr5*Y;tBVG@?yTO^-nL%#F;?q%$MaS~4>^Kc#7tGxI>~IR4)@k0sx?jxc>u%zys~ zF5%0>n;!h!_%8LX_n!gt1DxCU;L?Bc9~lCb{qsKfKN+p>?R?08_P{$H`+)L055Bth zTmQWFtC#*S`>}bRZ7kRqm zJHK^0zd85YFaGi3zk2uA{^VW1)Q)~@#(QH=0c_AS1F}~p`d6W}DKJCpflp2M?hn4wU zyzghiA^tbILM#S6D0pFd)h}FoN}C zt~Sb(Pui_LQlr_$2zWciQP_B2_e8n9{&ljp+R3(%XV4hu`L#d0TY(n`t1&)M&(Yy- zN3lkH0y)I}k9n+Xa+Q5U6p3hG4dB{ zm!3GlnN*ttez*&nx!|QVVH_*Z;$ut&@wEuvWLzCjbx!Md$O|HOeEOVccl1?tM)@ep z_u(2gi6+liyXaI!MURa5O;3F;d$3)Uq5VA>>te52I2z_YZ#`X7oI2U=WJCq)dy4W6 zAKKGNzpUyJDDp&DN^It+p=@OIoj4sv#EdDhGyRd8M4T2jxuqmx>QS&}3da2LhbJW*+Hfpj}tG$Vjfw4BS(>nUkYg63h;ha%FKv#xfh zvobb8QGVZtJ~sEGb^k$cBuVp(cpB~eH6Pk(cohmJdxSIjHBduIPadLeV3v;7vtcA} z(F5phhSVJ%>})OjY&f)VCDk!d{p&vTyjR&{Mm1+pvK@J}j<8 zPA%bP1b+zhe#H|XIn!D64~UFM8^}I30>5wk%sXJ7k4nFl6}!!AUyAZxP&;h8%g(x# z9Ik<8KP+Nx-0%r2)}jLqC}8MJ@K6L)kc8{2u##jc&2J`1JK_MZzAjD65fX+uIGNE?c>lO7_j5kWh$W?rp~F{-`Hz zaA!X>BTD=&ts2>rj4%C;Cu+KrJ!Z^U(d5Lt(b+dThc@}K;@F;Ng(pLkDxG~S z2zd6z|Ll%Cn^%!?pxTcW8B(3nqupe*mf%jxbk3D1+0B-fd(xt*U_G%Xo)vn z-z(mxzoddO;MxnLB(1SUhF0KiAwT3-^BhLT$H~tnPwO1azcn6Oj`=lE=uPkUN&-;}wDX5DyWp`W%($bB zvk9KC#Z_j*C-*iy-5(EwosL-tT18ZQ9dyQY-!aeYF=F`Sm@+TIofok{-BZ`KJ|kwC zpRA@^0Il(@vYj(%ryricPV;=Ty|RTi?18t9bsMgnc#HIN$J6!_wSANpl3^&H^n|tU z=cOX=n2OQncr%Bh9N!Ovs;~P%m3{A-@0dNkV$`j1P9ae5ZQjydpHiOM?GkRCsS2+@ z^R0OEOZ18_FV^(j0q+Oe?P7cAQ(=U91PJGvC`aFl_K$#KKVl!vTx#{LO23L&lQMIy z*+b2pn}?oo=Z+hsAJ4r0^faFRV*_}0v;9WxV~%2xGUy4=*ECtBm4J!SZ`gyvGcUat(x)Nxg#1*>qBnt>k9(3u-Y{mDMMJ@C$m?!zZ zaz77{v5~S5%b?twf56>{+FJzXJ7$YkQh1L~eQT!6YQs47SUv~J2jN@oo(tXyN(Zae zxiVRV?aK2oh;mKOt!{Wf9tA~ySgxJsE@4ng{~!G$as`7k9kb>7D(Lp6sodd-bY8S_ zVWwB2>FuD;k2PswY120097T9mBu!hO$(s!7PI?*^-9_BE01Cf3Kusg%yS)sut_a3K zn-OX zI+(Rbjz9GS=cakcRY~*rgJwV0{p2jD^W3Nb>iqCkk{4UER4nWE66LscEyc{EFM(oj z9us%ive&83e3Neho!=OMthA@I8AaAUWwf8jzaq2~xz@Y_^dRUTM0A}!{pLI78K2o3 zEK&AmP&=%VL1tYq>3tdWdfP+Ood%<3-GXd4m2J*T0^x{pU}Q ZyzkcWe|!6{ZoO;%zMpYj!JqO1{~xH? + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + +#if DEBUG + if (System.Diagnostics.Debugger.IsAttached) + { + this.DebugSettings.EnableFrameRateCounter = true; + } +#endif + + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + // Set the default language + rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/ModernKeePass/ModernKeePass.Windows/Assets/Logo.scale-100.png b/ModernKeePass/Assets/Logo.scale-100.png similarity index 100% rename from ModernKeePass/ModernKeePass.Windows/Assets/Logo.scale-100.png rename to ModernKeePass/Assets/Logo.scale-100.png diff --git a/ModernKeePass/ModernKeePass.Windows/Assets/SmallLogo.scale-100.png b/ModernKeePass/Assets/SmallLogo.scale-100.png similarity index 100% rename from ModernKeePass/ModernKeePass.Windows/Assets/SmallLogo.scale-100.png rename to ModernKeePass/Assets/SmallLogo.scale-100.png diff --git a/ModernKeePass/ModernKeePass.Windows/Assets/SplashScreen.scale-100.png b/ModernKeePass/Assets/SplashScreen.scale-100.png similarity index 100% rename from ModernKeePass/ModernKeePass.Windows/Assets/SplashScreen.scale-100.png rename to ModernKeePass/Assets/SplashScreen.scale-100.png diff --git a/ModernKeePass/ModernKeePass.Windows/Assets/StoreLogo.scale-100.png b/ModernKeePass/Assets/StoreLogo.scale-100.png similarity index 100% rename from ModernKeePass/ModernKeePass.Windows/Assets/StoreLogo.scale-100.png rename to ModernKeePass/Assets/StoreLogo.scale-100.png diff --git a/ModernKeePass/ModernKeePass.Windows/MainPage.xaml b/ModernKeePass/MainPage.xaml similarity index 100% rename from ModernKeePass/ModernKeePass.Windows/MainPage.xaml rename to ModernKeePass/MainPage.xaml diff --git a/ModernKeePass/ModernKeePass.Windows/MainPage.xaml.cs b/ModernKeePass/MainPage.xaml.cs similarity index 73% rename from ModernKeePass/ModernKeePass.Windows/MainPage.xaml.cs rename to ModernKeePass/MainPage.xaml.cs index e297c76..f393f96 100644 --- a/ModernKeePass/ModernKeePass.Windows/MainPage.xaml.cs +++ b/ModernKeePass/MainPage.xaml.cs @@ -13,12 +13,12 @@ using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; -// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238 +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 namespace ModernKeePass { /// - /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame. + /// An empty page that can be used on its own or navigated to within a Frame. /// public sealed partial class MainPage : Page { diff --git a/ModernKeePass/ModernKeePass.Shared/App.xaml.cs b/ModernKeePass/ModernKeePass.Shared/App.xaml.cs deleted file mode 100644 index 763ef39..0000000 --- a/ModernKeePass/ModernKeePass.Shared/App.xaml.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using Windows.ApplicationModel; -using Windows.ApplicationModel.Activation; -using Windows.Foundation; -using Windows.Foundation.Collections; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; -using Windows.UI.Xaml.Media.Animation; -using Windows.UI.Xaml.Navigation; - -// Pour plus d'informations sur le modèle Application vide, consultez la page http://go.microsoft.com/fwlink/?LinkId=234227 - -namespace ModernKeePass -{ - /// - /// Fournit un comportement spécifique à l'application afin de compléter la classe Application par défaut. - /// - public sealed partial class App : Application - { -#if WINDOWS_PHONE_APP - private TransitionCollection transitions; -#endif - - /// - /// Initialise l'objet d'application de singleton. Il s'agit de la première ligne du code créé - /// à être exécutée. Elle correspond donc à l'équivalent logique de main() ou WinMain(). - /// - public App() - { - this.InitializeComponent(); - this.Suspending += this.OnSuspending; - } - - /// - /// Invoqué lorsque l'application est lancée normalement par l'utilisateur final. D'autres points d'entrée - /// sont utilisés lorsque l'application est lancée pour ouvrir un fichier spécifique, pour afficher - /// des résultats de recherche, etc. - /// - /// Détails concernant la requête et le processus de lancement. - protected override void OnLaunched(LaunchActivatedEventArgs e) - { -#if DEBUG - if (System.Diagnostics.Debugger.IsAttached) - { - this.DebugSettings.EnableFrameRateCounter = true; - } -#endif - - Frame rootFrame = Window.Current.Content as Frame; - - // Ne répétez pas l'initialisation de l'application lorsque la fenêtre comporte déjà du contenu, - // assurez-vous juste que la fenêtre est active - if (rootFrame == null) - { - // Créez un Frame utilisable comme contexte de navigation et naviguez jusqu'à la première page - rootFrame = new Frame(); - - // TODO: modifier cette valeur à une taille de cache qui contient à votre application - rootFrame.CacheSize = 1; - - if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - // TODO: chargez l'état de l'application précédemment suspendue - } - - // Placez le frame dans la fenêtre active - Window.Current.Content = rootFrame; - } - - if (rootFrame.Content == null) - { -#if WINDOWS_PHONE_APP - // Supprime la navigation tourniquet pour le démarrage. - if (rootFrame.ContentTransitions != null) - { - this.transitions = new TransitionCollection(); - foreach (var c in rootFrame.ContentTransitions) - { - this.transitions.Add(c); - } - } - - rootFrame.ContentTransitions = null; - rootFrame.Navigated += this.RootFrame_FirstNavigated; -#endif - - // Quand la pile de navigation n'est pas restaurée, accédez à la première page, - // puis configurez la nouvelle page en transmettant les informations requises en tant que - // paramètre - if (!rootFrame.Navigate(typeof(MainPage), e.Arguments)) - { - throw new Exception("Failed to create initial page"); - } - } - - // Vérifiez que la fenêtre actuelle est active - Window.Current.Activate(); - } - -#if WINDOWS_PHONE_APP - /// - /// Restaure les transitions de contenu une fois l'application lancée. - /// - /// Objet où le gestionnaire est attaché. - /// Détails sur l'événement de navigation. - private void RootFrame_FirstNavigated(object sender, NavigationEventArgs e) - { - var rootFrame = sender as Frame; - rootFrame.ContentTransitions = this.transitions ?? new TransitionCollection() { new NavigationThemeTransition() }; - rootFrame.Navigated -= this.RootFrame_FirstNavigated; - } -#endif - - /// - /// Appelé lorsque l'exécution de l'application est suspendue. L'état de l'application est enregistré - /// sans savoir si l'application pourra se fermer ou reprendre sans endommager - /// le contenu de la mémoire. - /// - /// Source de la requête de suspension. - /// Détails de la requête de suspension. - private void OnSuspending(object sender, SuspendingEventArgs e) - { - var deferral = e.SuspendingOperation.GetDeferral(); - - // TODO: enregistrez l'état de l'application et arrêtez toute activité en arrière-plan - deferral.Complete(); - } - } -} \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.projitems b/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.projitems deleted file mode 100644 index d65c5f2..0000000 --- a/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.projitems +++ /dev/null @@ -1,19 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - fde03897-a8b0-4c28-9068-7edbb649e676 - - - ModernKeePass - - - - Designer - - - App.xaml - - - diff --git a/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.shproj b/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.shproj deleted file mode 100644 index 048fae7..0000000 --- a/ModernKeePass/ModernKeePass.Shared/ModernKeePass.Shared.shproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - fde03897-a8b0-4c28-9068-7edbb649e676 - - - - - - - - diff --git a/ModernKeePass/ModernKeePass.Windows/Properties/AssemblyInfo.cs b/ModernKeePass/ModernKeePass.Windows/Properties/AssemblyInfo.cs deleted file mode 100644 index 14834b6..0000000 --- a/ModernKeePass/ModernKeePass.Windows/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Les informations générales relatives à un assembly dépendent de -// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations -// associées à un assembly. -[assembly: AssemblyTitle("ModernKeePass.Windows")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ModernKeePass.Windows")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Les informations de version pour un assembly se composent des quatre valeurs suivantes : -// -// Version principale -// Version secondaire -// Numéro de build -// Révision -// -// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut -// en utilisant '*', comme indiqué ci-dessous : -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.WindowsPhone/Assets/Logo.scale-240.png b/ModernKeePass/ModernKeePass.WindowsPhone/Assets/Logo.scale-240.png deleted file mode 100644 index 76921ca99715449322ce4575b714262598766ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2516 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 aeE1)epL)B$w-u`Z0000SK>Qt}(H-q=T zeudEU=6hk`PezU}l};>garZYtD9vcFZ=F2NRh^bJF*0y(^3N;*4dL=hD~+qyEPc+S ziTDGGnhENpnGPZKil(%rn7$!_qGrTs(s1ZUvT~v)T=x<~is&E0V_!8(pLIQv=CF`t zn=o}`LGC=MOA86HG%>c5vDVrF{&>TzUusrNF7nxi(D$;DzuQai2J@=ssyoN)(|HIj z%^XQOryO9s&r(jr(IJ63O?C$|6I*e+cP3;cF&J+j4-mEDX@fty@YzI+Yi?teqXzn0 zf=-(y2t75|+_3PnvexdMaO@2FaDdXufjo;*HFnVOXKB|;64PuY{b z^(t$GHe@DhFD|R2RY2Mi8QdTXz}eCN6GAB^vo;o6%3T0mj!`^9TVx~Fmqde92$$v| zCZRj&iQk64X{IIpZbCtljea4TjF@}?XR<}cLlW+NeS@eRud&n>__GlwrRQXr+fRFd zH(Gn4IZ_15e+*BkOi>Vyg)VB5EUDpgC<)0c+b$Tr&#%cQp*eEd~payeI)`{s_e#cr%gg@yoJ(7<1)Y2lY9MJQ7T-CJS@KxZe&PE#M z+7ff#2u0JSF6u+0RP=pDdH4$|5B8g-p^KIM#(RJy+9isknxPjO#>1~4HkfM7>G72k z5?=hKx}$+wfgk9?kYCr`Y!7gfo7Rx3$0VLNQWo#W3X`TduuK~N!%~J@Xs4%W^TIKS zjWE_T3T)GfA`l+K9X~I6f?1-iS*F_IM@-b5Sss4XR11s~7_MYgxYv^ucjF&^_cdL7 z%62|r)2EMo{fbh7_Y@0M$yVrUn0uct8?Tp`dYLGdaF(q}t!P;YV$-!ueAu zzS~N3{zZa2_L8F7=A#`(qDC_ZwW$tqnoPA=;cjK@n{8-oGp=|UOGa)+q8dYD6@mdk z3+;R3_`OwRR-b-*)DjAh$yYM*2i)*%8;q@tZC!@i!_s<>W#hEzbCKWdhHQHZ&&I=J zyoHYcFol3!oUY&T3LQM){i_EFV_Vx@%B#el?~#W*vyd{05KOGl)4wCH5tS|HsO=w1 zdtDe3?#DL^F*X!;oehQ83-NX2mcpLPZ_@$J9G}{BUhPxiHET}_uLXAF7U^bweczI7 zSd%~h;w|#y-!h&F4DI}e+!^!}8mfcspo`^8TihLJaZjpx=cb*eVeCcCR5FhJLQ!?!FjqVUANi83Bu zK=42pTUzN7%E=4wWhU%4kTPA?q1Z1aIL*iR=ds_6=%O6G6wjPZ>;vcem?kQbr9G~n zbG6D+u%OA={r}-z)GsCks$0tiJgOj9K{uf1r|C0Na5Wyig$8A-aTxm zKq*d3I3wq?kIdBk=LA{G3=~ujl45#hRN5ZKX2Rx;@#TtT)=uee-(-E-hHutD)E@A%@dUf3VJ zl%wdJ2A20m9xhHj8=;K4z462f-6Po}~faeo3!z zzIDBvOc!$=-+bZ1=`|76_(18fbetxzYO>XBIv4R_u-0%j81n<+PzYm9NC2P8?}$CJ z-RoXooe^D(*GgO!5~zvVp>O|mKuy-r6vz~wz!}P*{`t#CYt``fouCzYN{6-bkN|Tc zNedl8gOQjMQ1rx*UC)UKG}GdxYi@U}4Um>+%?Qx6M5Smguf2C&)lfRjz!MMcMx_;70|WN4MtR?`*sYFVJ~E zf913H8dqiG2s7$#*@ob>HF z0oU7+k!2HS=$8F1xOrIhF%*)Jl1t&)9 zJ(3n!5D64=oktJ&G&%2P5D+T3H1M)CqvCQ;HiJO8JU{S|>T!u7;jhR@gru=$h?$<$ zHe>CjJ!E)eNzj!jenalYs43x*xN;foN3hmsvT)j8jNne0Y` zh;ciM_PS3@?wLwfew5}K9NiiO{Nk_)1i_L><-~qY%Yj>ig_AMxcI~w3@wt^x6UHfk zj6(lJL78t$&ZXbXwxwHsvKVd+fLdG+ZfYMBZob9Fvy?EDZ0_!7^6=iob_W*}-*X_R z49z)JRz1g%qo(peI#f-wi8?`6H^yd7vXun69-f|)Gn!p#+w=v(XM;7ykV}!ZCbWOQ zs=~_z9#|S-tSwJb&dk*-Z{)1(`vDO_rM7Jz0kZ1e4v49jjh( z_nPZW&bqqqZCldbc$si~zb@rew_#r(z$D4a z2}c*?Bgoz^s|Xnz@n|bFhmds96!u?&e%Q2VmxV6DkqWUxiL$J8 zS;1$6MeiBQzEf82Ep|kiz=1mY&0iL?fiBjHCJTqwG11%ArT}B!SycVoW=Eo3(#4Xe z!q~Q&;j_6>&Log6lF+3ooxrL!J@Chwk6&S6ffn}^@4kD#wZxvFQNjgzgdm94LBIH9q|jzzM#jtnseH!n|K^V7=*B_7~V zR{jZqVp0}KH3kJeDFX!S?4VCNJg06ff{wJ>`}*Tsrpnl<6N(w6kf;=%WEGMRm3^dJ z0G7Dv-~OnLvpvYLW@(A~n8qF(uPQw{A2vb=k_E^4(yu}%aa=!a0i9*hkJSwg-Yy9u zf_u{Af#-Zjs?&PBQ=r1kz}*g_K}IJmo~Z+i-V8dlDVHknWsiotrqRU_+vTnS%#70| zw%%l5So!vLf0UctiJ%{v=PXU0=&*Iq)$SlaqIqhd6H|C`L+4`F?u)zU)#IlilUyG3 zU$|a1C<(s{q3di|M3_rj1hVPm4myElz`zipH>wsuS9kMS-?xx{6jYP;k5F763Rn1N z6IvY?apqkE$XP@^_9 zD|k11Th?wQT0|Gq6V}s z@R0vpqH1L0;{sL4QjERsEqb~lr}FwYP`vAGhz3dbDoOs#6b#oSMI_&*<3-80?W9b< zx~EG*(O}bP-tCo&!(19(bQsUPKQA(5CHZ-~1kXgdC6#kfN<#J9soBL7@!1sKkjVy^ zUDOL(h}k9c9#IJ>;bx8ivXUNt5W5e3W*lF+&OyC+{i*q+vJw5uKUpv%$v`Vnbc*-i z(Q~oF*Csx$Z;)Uv!3OS_EDz~7lxSO>8b@bCR&_Q=c`Pze(Y$lR)$S#zco#>#Penqp z<@ZMZWhp(zrNJ`f)$4n_>K(JTR~bu;aJz_}fXtaru(q>78VN&O^ekOMeSjjejwC54 zDTs}>S2Jc1RG=K$Z1t{W$-&oD^k)VPa-cQ!SJtDrf%r#PZqmgvPehNW@Y?3lLM+IV z-HS1HXFEya-nz49hnE4Rf(u<3BvX5IxU|}niD1tA?rW$GBhl^>46luzu7d~1$+*5S z0}!p^XBgYj1*u;o4FsG9&?|{K8Xec`2i9+r2G*MV)#!i}v_%Gh%}fKcGcYc#SGAPW_;xdBe5ewwRa1<49?*enp8f9u!O8tanz*O(hp_^h`SMvM4)07Q`Bfl zLNhA=2;chplau*4`HyNtG897(YUX4(w{!Vs~^qF&$#YG!b+yCruZ7JTl z%ra~TLPzX$1-PrNmbg$^K8wsNnW=^JL6qOGwySUkKW+v1$CznIa+vM@aHB~#`G4?i zU)pK1Baoy*8J5spy?f!E~fb{d9iU%M>YcVl^s zB6xfa+=d$q<@ysnVrkg;dARRqWa#IqbJEL0eM!ip{lw3C9ZWj{ge0Huy&X>B?@kDb zR6B}r)f*tQFw*;Jv$g#cO`H}oCFzm-ZW5Z$*7*ldvoX`QwO*hgMM{y$6Vb)pir}^m z213fz*5aX1?9ff$X$VU@%4Qnn0MWcA-J_KYEkt|V_|YY z^NfZxjp^+3r?R{xfaYBL}8oK5qcv`KOwT&I9<9_}OC;A;W&*-zg+ gV5~u<%>&ppbSls(D;2H23k0DxD+50(=0|+ - - - - - \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.WindowsPhone/MainPage.xaml.cs b/ModernKeePass/ModernKeePass.WindowsPhone/MainPage.xaml.cs deleted file mode 100644 index 8b8378a..0000000 --- a/ModernKeePass/ModernKeePass.WindowsPhone/MainPage.xaml.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices.WindowsRuntime; -using Windows.Foundation; -using Windows.Foundation.Collections; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; -using Windows.UI.Xaml.Media; -using Windows.UI.Xaml.Navigation; - -// Pour en savoir plus sur le modèle d'élément Page vierge, consultez la page http://go.microsoft.com/fwlink/?LinkId=234238 - -namespace ModernKeePass -{ - /// - /// Une page vide peut être utilisée seule ou constituer une page de destination au sein d'un frame. - /// - public sealed partial class MainPage : Page - { - public MainPage() - { - this.InitializeComponent(); - - this.NavigationCacheMode = NavigationCacheMode.Required; - } - - /// - /// Invoqué lorsque cette page est sur le point d'être affichée dans un frame. - /// - /// Données d'événement décrivant la manière dont l'utilisateur a accédé à cette page. - /// Ce paramètre est généralement utilisé pour configurer la page. - protected override void OnNavigatedTo(NavigationEventArgs e) - { - // TODO: préparer la page pour affichage ici. - - // TODO: si votre application comporte plusieurs pages, assurez-vous que vous - // gérez le bouton Retour physique en vous inscrivant à l’événement - // Événement Windows.Phone.UI.Input.HardwareButtons.BackPressed. - // Si vous utilisez le NavigationHelper fourni par certains modèles, - // cet événement est géré automatiquement. - } - } -} diff --git a/ModernKeePass/ModernKeePass.WindowsPhone/ModernKeePass.WindowsPhone.csproj b/ModernKeePass/ModernKeePass.WindowsPhone/ModernKeePass.WindowsPhone.csproj deleted file mode 100644 index df6ef3a..0000000 --- a/ModernKeePass/ModernKeePass.WindowsPhone/ModernKeePass.WindowsPhone.csproj +++ /dev/null @@ -1,125 +0,0 @@ - - - - - Debug - AnyCPU - efa1e888-6dc2-4b02-ba0b-5fc1acf97cf4 - AppContainerExe - Properties - ModernKeePass - ModernKeePass.WindowsPhone - fr-FR - 8.1 - 12 - 512 - {76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE;NETFX_CORE;WINDOWS_PHONE_APP - prompt - 4 - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_PHONE_APP - true - ;2008 - pdbonly - ARM - false - prompt - true - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_PHONE_APP - true - ;2008 - pdbonly - x86 - false - prompt - true - - - - - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - - - MSBuild:Compile - Designer - - - - 12.0 - - - WindowsPhoneApp - - - - - \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.WindowsPhone/Package.appxmanifest b/ModernKeePass/ModernKeePass.WindowsPhone/Package.appxmanifest deleted file mode 100644 index 73dde94..0000000 --- a/ModernKeePass/ModernKeePass.WindowsPhone/Package.appxmanifest +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - ModernKeePass.WindowsPhone - BG45 - Assets\StoreLogo.png - - - - 6.3.1 - 6.3.1 - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.WindowsPhone/Properties/AssemblyInfo.cs b/ModernKeePass/ModernKeePass.WindowsPhone/Properties/AssemblyInfo.cs deleted file mode 100644 index e4df05c..0000000 --- a/ModernKeePass/ModernKeePass.WindowsPhone/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Les informations générales relatives à un assembly dépendent de -// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations -// associées à un assembly. -[assembly: AssemblyTitle("ModernKeePass.WindowsPhone")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ModernKeePass.WindowsPhone")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Les informations de version pour un assembly se composent des quatre valeurs suivantes : -// -// Version principale -// Version secondaire -// Numéro de build -// Révision -// -// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut -// en utilisant '*', comme indiqué ci-dessous : -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/ModernKeePass/ModernKeePass.Windows/ModernKeePass.Windows.csproj b/ModernKeePass/ModernKeePass.csproj similarity index 87% rename from ModernKeePass/ModernKeePass.Windows/ModernKeePass.Windows.csproj rename to ModernKeePass/ModernKeePass.csproj index 84af6ca..dfa27e7 100644 --- a/ModernKeePass/ModernKeePass.Windows/ModernKeePass.Windows.csproj +++ b/ModernKeePass/ModernKeePass.csproj @@ -1,23 +1,22 @@ - + Debug AnyCPU - 0ace72f3-93fe-46aa-9c2f-3c1fd500985d + {a0cfc681-769b-405a-8482-0cdee595a91f} AppContainerExe Properties ModernKeePass - ModernKeePass.Windows - fr-FR + ModernKeePass + en-US 8.1 12 512 - true {BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - ModernKeePass.Windows_TemporaryKey.pfx - + ModernKeePass_TemporaryKey.pfx + AnyCPU @@ -108,6 +107,9 @@ + + App.xaml + MainPage.xaml @@ -117,26 +119,31 @@ Designer - - - + + + - - - - + + + + + + MSBuild:Compile + Designer + MSBuild:Compile Designer + 12.0 - + - \ No newline at end of file + diff --git a/ModernKeePass/ModernKeePass_TemporaryKey.pfx b/ModernKeePass/ModernKeePass_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..bfe0f2512c580772d6ab75dd727d98443e6bb9e1 GIT binary patch literal 2446 zcmZuz2{=@38$M^|%rIkyH1=hv=p)-1g!#nOlthyFBqP~1wuC0jlE@0&ig*^fe}J72E@V$VLhI( zB5_0FEE$vla}k0$gb++n+6YE)U;oR5`vf7lA(Z}rN*`Y8Ur{6?h{;8uA20%ah1KxH zf757kX-IN^D)%PSAoeB(BhdyS(5uA2A8vGfrWQ?7O{|-~q((EUd^zLGN3GzI`=@Tb zQm%AX;RffGX|HOl_C9SY_9+VFSSSdkN^H8~V_)f#9lg!oP->biD^sM0*3QjMUKZ`w zBgF}8A2D?(8_P->7(qg}jJduLHICe#Lj9_3@1R%%p~{W?H}RAgv#UKD(maY7OYM)u z{u!72_VuRWyh6=Uhi5j)Wn$TG{#`}a9;-YH>(mf)ifWUuf3kn1%{c2-3Xv&)_`UBH z2^DJLoo2sD-7^J#U6;SN;}RxJybR`?dYNDPGz!5XJ54fRW8B?&Wzn8*GLTW`N1cIeFu2aRK0bVXBGIYZH~cDEw2<^hYx-@WL=4@H~qXqMyk zwD)vUS^(qGCY1+e`NBzwm32;fQB+7X>=McRaQKN!W*cm0D%nj3l%6w#N(bVXFe`TZ znr#@-u&&}=wVP2M6?A4iX$48z_SE$^#!gYHYTPU;Y8adfQ7z|)%G zj=*g;+%_VO*Ym`;aiGgt?a@=g=8ZY+Y~BNkGHvFQ>3&mQc=2jZ(_Cfb<6~5UUBC#5 zcLrgkKEyottRH<>g!3p%vCL77r90*vsMn20SVi^D8O?6-hFxBU1-;((b=3On>+VX| z)K;6Xq49z|IAJ;kktfVQ*w43I91ho-QcQKrCfn0K091IYhjaY5TN9z#4&2FTH(fHaxNNWb|=W3_H#Sh-O3*w^#`Qz zxEFh^icCU2dsTapgtAV@eyod<@G7ZxF&D*!uobYLYhofV`N@?Qw5bm~SRXiud)6x- z<%TQSHliJ~tSS3jVFLda@6PNj%yS@DsIK}P@UcHGoUbf9*+E{4%PJj7?l^md$aweW zP{FD-~nya2IiZ+}WEedpD6iIn!Khj`=L1Ajek zo$Y?zE5EzrmAkp%g3GF{{P)A1eow(q%O&(`@gzFXA8rVDPO(mq3(n~d>;#|?DHuebF3 zAT5s;huvdPR`yNc1q#+RM4%x}E_JhPM)q;G=ZVZZ5m6$IkSPA%`Z$H2s zpaBLzAYh7$KdPAmCIF0%2B;lInLt#7fdJIY=cku1V2olP^f7@w@dQ0Q2!V*XEJ$;r zIs%)3AT(tp5DrA45(w-8GyxZMTwrzqJ5jV2)nkF(C>M_6NHooEfc-N{6L9+Jw--hJ z=!B6lf;ITH@`Z~5ON9`u3Q8-WviSGzkIh9eBQSy){MGvj3TObP6GAZ0P`(vLz{*@K z2EzFvaX_SrYzy`jE25Ty>|{$RhV7Cj_4p|HVV^16`jb4Cpx~<0Tl#K&tfHa_`si zNgnOVhdL~8bv~KeVlg==6g10sDf2yw`I-+tCv7ho3QNrzoGLimI_6rq#j1~1>_`-Z ztr(3d;5AI0n{JS4%Qa$htOkzAm>&MrGGAM`F)HvIH8E}5h3EU26e!y(zB|}5Vfdw^ z)|&(h@$~Jl&3&9NiDr_JqM{pw9M9MqFQsmI)f0mS0WePoUJjGcDyvgK@NWnM1F*sZ z(q2Fd^_N6977izY#r|GP^z)##1OY`QS73~7<9te1{+3_na+~78eZ0PilMfpmTJDP^ z_fMu~;DcN>dt5mVmU5zL*S712o*N$fU_C>x%rkuW>a{3kdbFvD?;X&qCLXR7u_Nsf3nX?F-J?X_cC{TlcPMkBHRWvHl`w z-B8gF6H?H3{#Spg+sk;uOBl5~7;3_h`}J5e)-JAn135N^C1YP8H>R2y*{VnMb{j4!TKF^i2hRfZR{#J2 literal 0 HcmV?d00001 diff --git a/ModernKeePass/ModernKeePass.Windows/Package.appxmanifest b/ModernKeePass/Package.appxmanifest similarity index 74% rename from ModernKeePass/ModernKeePass.Windows/Package.appxmanifest rename to ModernKeePass/Package.appxmanifest index 189c765..7814d16 100644 --- a/ModernKeePass/ModernKeePass.Windows/Package.appxmanifest +++ b/ModernKeePass/Package.appxmanifest @@ -1,13 +1,13 @@  - - ModernKeePass.Windows - BG45 + ModernKeePass + GBE Assets\StoreLogo.png @@ -23,12 +23,12 @@ + EntryPoint="ModernKeePass.App"> diff --git a/ModernKeePass/Properties/AssemblyInfo.cs b/ModernKeePass/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..72c65d3 --- /dev/null +++ b/ModernKeePass/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ModernKeePass")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ModernKeePass")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/ModernKeePass/obj/Debug/App.g.cs b/ModernKeePass/obj/Debug/App.g.cs new file mode 100644 index 0000000..e69de29 diff --git a/ModernKeePass/obj/Debug/App.g.i.cs b/ModernKeePass/obj/Debug/App.g.i.cs new file mode 100644 index 0000000..4de8f54 --- /dev/null +++ b/ModernKeePass/obj/Debug/App.g.i.cs @@ -0,0 +1,56 @@ + + +#pragma checksum "C:\Users\GBE\Source\Repos\ModernKeePass\ModernKeePass\App.xaml" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "B68578AE122A4023FCD4890B9ACAD34D" +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace ModernKeePass +{ +#if !DISABLE_XAML_GENERATED_MAIN + public static class Program + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + static void Main(string[] args) + { + global::Windows.UI.Xaml.Application.Start((p) => new App()); + } + } +#endif + + partial class App : global::Windows.UI.Xaml.Application + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")] + private bool _contentLoaded; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void InitializeComponent() + { + if (_contentLoaded) + return; + + _contentLoaded = true; +#if DEBUG && !DISABLE_XAML_GENERATED_BINDING_DEBUG_OUTPUT + DebugSettings.BindingFailed += (sender, args) => + { + global::System.Diagnostics.Debug.WriteLine(args.Message); + }; +#endif +#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION + UnhandledException += (sender, e) => + { + if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); + }; +#endif + } + } +} + diff --git a/ModernKeePass/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ModernKeePass/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..c66e947f03cf784f706e5c620acc161fa7165028 GIT binary patch literal 14069 zcmeI3Z+8>N6^A7-8w4Rmv;_i9sx)Z}sk5~L2182|uw-z+#*qZ3L5>-%M)Kg@88NeK zTk-LWev*EIoPNaicXwBkC2Z0I8XaC(9F4{PnP={uJF|E0+|6V&naqFjp}+L`@ED5b zlJK-Lsuj9Vg^8G74Wp(|?z{>DB^OKO>B3X4jZpGV@wz)h|E3G`ksn5y-;q2DHS?zn zD^bH2-b3E4sZB2LG-j@~W?MH~#bR@IhFxPP2sw8M>0TuKCh-z9^|Kx%7fKxQb6+JHG#}f)6=OIMU3L(A*1^7TlceG()DVoM~@kg@qgD zY5f({Xo#dbr+HhLPRe(xg zqNa~@?`W(R=a_TcaWa|XD34{cSqEQ~nPdMxQSF+L2QW|cuNRWRx%au`T6pdwDC z`SUkif)VkQ`4L}XLcjRBe`z(;Lbj(1f$@~~MPo3={{JC%^Cp}1W^WX4UAxX_=5DP` zzo{MXX;W?JVQsu>eb1}QW{*tNh86Wkla0#XbDJ9T06H>I8#Z)gpyPUQu4Ty&&K*Z_ zDmO(xPf!7OAd~w51^%3*B1gq3Do&#~<$Q=TwRap?k<;W z^KcfYx30UhZgINjeWspfd1uf02$hKW+w~^~u4n!Jy>h*(BJJ^dg?E&xFDbaB@*#&C zVMhO_8ZYZ5-iX>L4IIuIoT3Uh%HQgHzylA+^_aK8bHAd7pG9$@-?pBQpS01*M@l~x0I`Uli}88xrITg`Bb%|_MJoXe4B|L)zJOZ z^17YYj`JyMZbBjOxZ7BG72jg!P~IJ zyYH(8^Tki`^cK_p3Yx9yW$`hEX*(KGIn1UpZU(qDOTqz1{Z$0Q))ewc$X7AsYd|(F z$q_@!J3YN6BkLM~wyYust}sOAeLVk2hu1-~Wfd{)`-tl(BA>Fa{=wJ<<9gt z%lqfP`v6)Sv1uPe(_+}!eE_PhC_+!nVd{4#b$l0r-nHD(!|0KD<2y9K+Pra~#-9a= zGfClDTRuup>j&8MBVcXCZ4SXcS#+PVRO%(*ZOvj;jyRkMyW}THPjpzK=w%>nd7kOC zHSj1N17>TfKLjg99iQ*S)8z`7wn8XF%)T@K{iLLX*IV#EW-QJ7!?Y2XW))ytRuqG= zhZ*@yj|M89fjjnnoHSlt+t8f#Rr^nnYz5{9q#84uiL>^D&93ZAmhgt6G0!I>D0YGq zN52l9Ek{3nP{$*24IEoxpPuvaBN(<;^Tg;!1lIwwHIEUf0?X%m6_5S2mtFv9>tRSh zOr9g|GXv4q%t^#&CFNm}kZvzFEXxOCPsCKC9*BqS)TVY@cqou5fFy>&p0ueaxz9;b zairrYS$#Q4b*}g9eVZ~ErYKY7D8K0_ziF(QyyH#}jPq{RG0z0%#JUkb@ssOYNlHJ? z{Aa4acl>&W^HKUTz07cErnL>bA9v@EIhphM+R2l-CT6|fCr^2D^m>QGQLK#HGtN^6 zUR-?(Kc*J&Rz{Yx@o3^5YDbpR^Ikier+hv7BRtgV_*^EX3u$v +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ModernKeePass +{ + partial class MainPage : global::Windows.UI.Xaml.Controls.Page + { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")] + private bool _contentLoaded; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void InitializeComponent() + { + if (_contentLoaded) + return; + + _contentLoaded = true; + global::Windows.UI.Xaml.Application.LoadComponent(this, new global::System.Uri("ms-appx:///MainPage.xaml"), global::Windows.UI.Xaml.Controls.Primitives.ComponentResourceLocation.Application); + + } + } +} + + + diff --git a/ModernKeePass/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/ModernKeePass/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs new file mode 100644 index 0000000..e69de29 diff --git a/ModernKeePass/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/ModernKeePass/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs new file mode 100644 index 0000000..e69de29 diff --git a/ModernKeePass/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/ModernKeePass/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs new file mode 100644 index 0000000..e69de29 diff --git a/ModernKeePass/obj/Debug/XamlSaveStateFile.xml b/ModernKeePass/obj/Debug/XamlSaveStateFile.xml new file mode 100644 index 0000000..1f7227f --- /dev/null +++ b/ModernKeePass/obj/Debug/XamlSaveStateFile.xml @@ -0,0 +1,4 @@ + + + + diff --git a/ModernKeePass/obj/Debug/XamlTypeInfo.g.cs b/ModernKeePass/obj/Debug/XamlTypeInfo.g.cs new file mode 100644 index 0000000..e69de29 diff --git a/ModernKeePassLib/Collections/AutoTypeConfig.cs b/ModernKeePassLib/Collections/AutoTypeConfig.cs new file mode 100644 index 0000000..6f45952 --- /dev/null +++ b/ModernKeePassLib/Collections/AutoTypeConfig.cs @@ -0,0 +1,220 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; + +namespace ModernKeePassLib.Collections +{ + [Flags] + public enum AutoTypeObfuscationOptions + { + None = 0, + UseClipboard = 1 + } + + public sealed class AutoTypeAssociation : IEquatable, + IDeepCloneable + { + private string m_strWindow = string.Empty; + public string WindowName + { + get { return m_strWindow; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strWindow = value; + } + } + + private string m_strSequence = string.Empty; + public string Sequence + { + get { return m_strSequence; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strSequence = value; + } + } + + public AutoTypeAssociation() { } + + public AutoTypeAssociation(string strWindow, string strSeq) + { + if(strWindow == null) throw new ArgumentNullException("strWindow"); + if(strSeq == null) throw new ArgumentNullException("strSeq"); + + m_strWindow = strWindow; + m_strSequence = strSeq; + } + + public bool Equals(AutoTypeAssociation other) + { + if(other == null) return false; + + if(m_strWindow != other.m_strWindow) return false; + if(m_strSequence != other.m_strSequence) return false; + + return true; + } + + public AutoTypeAssociation CloneDeep() + { + return (AutoTypeAssociation)this.MemberwiseClone(); + } + } + + /// + /// A list of auto-type associations. + /// + public sealed class AutoTypeConfig : IEquatable, + IDeepCloneable + { + private bool m_bEnabled = true; + private AutoTypeObfuscationOptions m_atooObfuscation = + AutoTypeObfuscationOptions.None; + private string m_strDefaultSequence = string.Empty; + private List m_lWindowAssocs = + new List(); + + /// + /// Specify whether auto-type is enabled or not. + /// + public bool Enabled + { + get { return m_bEnabled; } + set { m_bEnabled = value; } + } + + /// + /// Specify whether the typing should be obfuscated. + /// + public AutoTypeObfuscationOptions ObfuscationOptions + { + get { return m_atooObfuscation; } + set { m_atooObfuscation = value; } + } + + /// + /// The default keystroke sequence that is auto-typed if + /// no matching window is found in the Associations + /// container. + /// + public string DefaultSequence + { + get { return m_strDefaultSequence; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strDefaultSequence = value; + } + } + + /// + /// Get all auto-type window/keystroke sequence pairs. + /// + public IEnumerable Associations + { + get { return m_lWindowAssocs; } + } + + public int AssociationsCount + { + get { return m_lWindowAssocs.Count; } + } + + /// + /// Construct a new auto-type associations list. + /// + public AutoTypeConfig() + { + } + + /// + /// Remove all associations. + /// + public void Clear() + { + m_lWindowAssocs.Clear(); + } + + /// + /// Clone the auto-type associations list. + /// + /// New, cloned object. + public AutoTypeConfig CloneDeep() + { + AutoTypeConfig newCfg = new AutoTypeConfig(); + + newCfg.m_bEnabled = m_bEnabled; + newCfg.m_atooObfuscation = m_atooObfuscation; + newCfg.m_strDefaultSequence = m_strDefaultSequence; + + foreach(AutoTypeAssociation a in m_lWindowAssocs) + newCfg.Add(a.CloneDeep()); + + return newCfg; + } + + public bool Equals(AutoTypeConfig other) + { + if(other == null) { Debug.Assert(false); return false; } + + if(m_bEnabled != other.m_bEnabled) return false; + if(m_atooObfuscation != other.m_atooObfuscation) return false; + if(m_strDefaultSequence != other.m_strDefaultSequence) return false; + + if(m_lWindowAssocs.Count != other.m_lWindowAssocs.Count) return false; + for(int i = 0; i < m_lWindowAssocs.Count; ++i) + { + if(!m_lWindowAssocs[i].Equals(other.m_lWindowAssocs[i])) + return false; + } + + return true; + } + + public void Add(AutoTypeAssociation a) + { + Debug.Assert(a != null); if(a == null) throw new ArgumentNullException("a"); + + m_lWindowAssocs.Add(a); + } + + public AutoTypeAssociation GetAt(int iIndex) + { + if((iIndex < 0) || (iIndex >= m_lWindowAssocs.Count)) + throw new ArgumentOutOfRangeException("iIndex"); + + return m_lWindowAssocs[iIndex]; + } + + public void RemoveAt(int iIndex) + { + if((iIndex < 0) || (iIndex >= m_lWindowAssocs.Count)) + throw new ArgumentOutOfRangeException("iIndex"); + + m_lWindowAssocs.RemoveAt(iIndex); + } + } +} diff --git a/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs b/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs new file mode 100644 index 0000000..6261682 --- /dev/null +++ b/ModernKeePassLib/Collections/ProtectedBinaryDictionary.cs @@ -0,0 +1,173 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Collections +{ + /// + /// A list of ProtectedBinary objects (dictionary). + /// + public sealed class ProtectedBinaryDictionary : + IDeepCloneable, + IEnumerable> + { + private SortedDictionary m_vBinaries = + new SortedDictionary(); + + /// + /// Get the number of binaries in this entry. + /// + public uint UCount + { + get { return (uint)m_vBinaries.Count; } + } + + /// + /// Construct a new list of protected binaries. + /// + public ProtectedBinaryDictionary() + { + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vBinaries.GetEnumerator(); + } + + public IEnumerator> GetEnumerator() + { + return m_vBinaries.GetEnumerator(); + } + + public void Clear() + { + m_vBinaries.Clear(); + } + + /// + /// Clone the current ProtectedBinaryList object, including all + /// stored protected strings. + /// + /// New ProtectedBinaryList object. + public ProtectedBinaryDictionary CloneDeep() + { + ProtectedBinaryDictionary plNew = new ProtectedBinaryDictionary(); + + foreach(KeyValuePair kvpBin in m_vBinaries) + { + // ProtectedBinary objects are immutable + plNew.Set(kvpBin.Key, kvpBin.Value); + } + + return plNew; + } + + public bool EqualsDictionary(ProtectedBinaryDictionary dict) + { + if(dict == null) { Debug.Assert(false); return false; } + + if(m_vBinaries.Count != dict.m_vBinaries.Count) return false; + + foreach(KeyValuePair kvp in m_vBinaries) + { + ProtectedBinary pb = dict.Get(kvp.Key); + if(pb == null) return false; + if(!pb.Equals(kvp.Value)) return false; + } + + return true; + } + + /// + /// Get one of the stored binaries. + /// + /// Binary identifier. + /// Protected binary. If the binary identified by + /// cannot be found, the function + /// returns null. + /// Thrown if the input + /// parameter is null. + public ProtectedBinary Get(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + ProtectedBinary pb; + if(m_vBinaries.TryGetValue(strName, out pb)) return pb; + + return null; + } + + /// + /// Set a binary object. + /// + /// Identifier of the binary field to modify. + /// New value. This parameter must not be null. + /// Thrown if any of the input + /// parameters is null. + public void Set(string strField, ProtectedBinary pbNewValue) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + Debug.Assert(pbNewValue != null); if(pbNewValue == null) throw new ArgumentNullException("pbNewValue"); + + m_vBinaries[strField] = pbNewValue; + } + + /// + /// Remove a binary object. + /// + /// Identifier of the binary field to remove. + /// Returns true if the object has been successfully + /// removed, otherwise false. + /// Thrown if the input parameter + /// is null. + public bool Remove(string strField) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + + return m_vBinaries.Remove(strField); + } + + public string KeysToString() + { + if(m_vBinaries.Count == 0) return string.Empty; + + StringBuilder sb = new StringBuilder(); + foreach(KeyValuePair kvp in m_vBinaries) + { + if(sb.Length > 0) sb.Append(", "); + sb.Append(kvp.Key); + } + + return sb.ToString(); + } + } +} diff --git a/ModernKeePassLib/Collections/ProtectedStringDictionary.cs b/ModernKeePassLib/Collections/ProtectedStringDictionary.cs new file mode 100644 index 0000000..e663f7e --- /dev/null +++ b/ModernKeePassLib/Collections/ProtectedStringDictionary.cs @@ -0,0 +1,306 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Collections +{ + /// + /// A list of ProtectedString objects (dictionary). + /// + public sealed class ProtectedStringDictionary : + IDeepCloneable, + IEnumerable> + { + private SortedDictionary m_vStrings = + new SortedDictionary(); + + /// + /// Get the number of strings in this entry. + /// + public uint UCount + { + get { return (uint)m_vStrings.Count; } + } + + /// + /// Construct a new list of protected strings. + /// + public ProtectedStringDictionary() + { + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vStrings.GetEnumerator(); + } + + public IEnumerator> GetEnumerator() + { + return m_vStrings.GetEnumerator(); + } + + public void Clear() + { + m_vStrings.Clear(); + } + + /// + /// Clone the current ProtectedStringList object, including all + /// stored protected strings. + /// + /// New ProtectedStringList object. + public ProtectedStringDictionary CloneDeep() + { + ProtectedStringDictionary plNew = new ProtectedStringDictionary(); + + foreach(KeyValuePair kvpStr in m_vStrings) + { + // ProtectedString objects are immutable + plNew.Set(kvpStr.Key, kvpStr.Value); + } + + return plNew; + } + + [Obsolete] + public bool EqualsDictionary(ProtectedStringDictionary dict) + { + return EqualsDictionary(dict, PwCompareOptions.None, MemProtCmpMode.None); + } + + [Obsolete] + public bool EqualsDictionary(ProtectedStringDictionary dict, + MemProtCmpMode mpCompare) + { + return EqualsDictionary(dict, PwCompareOptions.None, mpCompare); + } + + public bool EqualsDictionary(ProtectedStringDictionary dict, + PwCompareOptions pwOpt, MemProtCmpMode mpCompare) + { + if(dict == null) { Debug.Assert(false); return false; } + + bool bNeEqStd = ((pwOpt & PwCompareOptions.NullEmptyEquivStd) != + PwCompareOptions.None); + if(!bNeEqStd) + { + if(m_vStrings.Count != dict.m_vStrings.Count) return false; + } + + foreach(KeyValuePair kvp in m_vStrings) + { + bool bStdField = PwDefs.IsStandardField(kvp.Key); + ProtectedString ps = dict.Get(kvp.Key); + + if(bNeEqStd && (ps == null) && bStdField) + ps = ProtectedString.Empty; + + if(ps == null) return false; + + if(mpCompare == MemProtCmpMode.Full) + { + if(ps.IsProtected != kvp.Value.IsProtected) return false; + } + else if(mpCompare == MemProtCmpMode.CustomOnly) + { + if(!bStdField && (ps.IsProtected != kvp.Value.IsProtected)) + return false; + } + + if(ps.ReadString() != kvp.Value.ReadString()) return false; + } + + if(bNeEqStd) + { + foreach(KeyValuePair kvp in dict.m_vStrings) + { + ProtectedString ps = Get(kvp.Key); + + if(ps != null) continue; // Compared previously + if(!PwDefs.IsStandardField(kvp.Key)) return false; + if(!kvp.Value.IsEmpty) return false; + } + } + + return true; + } + + /// + /// Get one of the protected strings. + /// + /// String identifier. + /// Protected string. If the string identified by + /// cannot be found, the function + /// returns null. + /// Thrown if the input parameter + /// is null. + public ProtectedString Get(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + ProtectedString ps; + if(m_vStrings.TryGetValue(strName, out ps)) return ps; + + return null; + } + + /// + /// Get one of the protected strings. The return value is never null. + /// If the requested string cannot be found, an empty protected string + /// object is returned. + /// + /// String identifier. + /// Returns a protected string object. If the standard string + /// has not been set yet, the return value is an empty string (""). + /// Thrown if the input + /// parameter is null. + public ProtectedString GetSafe(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + ProtectedString ps; + if(m_vStrings.TryGetValue(strName, out ps)) return ps; + + return ProtectedString.Empty; + } + + /// + /// Test if a named string exists. + /// + /// Name of the string to try. + /// Returns true if the string exists, otherwise false. + /// Thrown if + /// is null. + public bool Exists(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + return m_vStrings.ContainsKey(strName); + } + + /// + /// Get one of the protected strings. If the string doesn't exist, the + /// return value is an empty string (""). + /// + /// Name of the requested string. + /// Requested string value or an empty string, if the named + /// string doesn't exist. + /// Thrown if the input + /// parameter is null. + public string ReadSafe(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + ProtectedString ps; + if(m_vStrings.TryGetValue(strName, out ps)) + return ps.ReadString(); + + return string.Empty; + } + + /// + /// Get one of the entry strings. If the string doesn't exist, the + /// return value is an empty string (""). If the string is + /// in-memory protected, the return value is PwDefs.HiddenPassword. + /// + /// Name of the requested string. + /// Returns the requested string in plain-text or + /// PwDefs.HiddenPassword if the string cannot be found. + /// Thrown if the input + /// parameter is null. + public string ReadSafeEx(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + ProtectedString ps; + if(m_vStrings.TryGetValue(strName, out ps)) + { + if(ps.IsProtected) return PwDefs.HiddenPassword; + return ps.ReadString(); + } + + return string.Empty; + } + + /// + /// Set a string. + /// + /// Identifier of the string field to modify. + /// New value. This parameter must not be null. + /// Thrown if one of the input + /// parameters is null. + public void Set(string strField, ProtectedString psNewValue) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + Debug.Assert(psNewValue != null); if(psNewValue == null) throw new ArgumentNullException("psNewValue"); + + m_vStrings[strField] = psNewValue; + } + + /// + /// Delete a string. + /// + /// Name of the string field to delete. + /// Returns true if the field has been successfully + /// removed, otherwise the return value is false. + /// Thrown if the input + /// parameter is null. + public bool Remove(string strField) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + + return m_vStrings.Remove(strField); + } + + public List GetKeys() + { + List v = new List(); + + foreach(string strKey in m_vStrings.Keys) v.Add(strKey); + + return v; + } + + public void EnableProtection(string strField, bool bProtect) + { + ProtectedString ps = Get(strField); + if(ps == null) return; // Nothing to do, no assert + + if(ps.IsProtected != bProtect) + { + byte[] pbData = ps.ReadUtf8(); + Set(strField, new ProtectedString(bProtect, pbData)); + MemUtil.ZeroByteArray(pbData); + } + } + } +} diff --git a/ModernKeePassLib/Collections/PwObjectList.cs b/ModernKeePassLib/Collections/PwObjectList.cs new file mode 100644 index 0000000..823e59e --- /dev/null +++ b/ModernKeePassLib/Collections/PwObjectList.cs @@ -0,0 +1,303 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; + +namespace ModernKeePassLib.Collections +{ + /// + /// List of objects that implement IDeepCloneable, + /// and cannot be null. + /// + /// Type specifier. + public sealed class PwObjectList : IEnumerable + where T : class, IDeepCloneable + { + private List m_vObjects = new List(); + + /// + /// Get number of objects in this list. + /// + public uint UCount + { + get { return (uint)m_vObjects.Count; } + } + + /// + /// Construct a new list of objects. + /// + public PwObjectList() + { + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vObjects.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_vObjects.GetEnumerator(); + } + + public void Clear() + { + // Do not destroy contained objects! + m_vObjects.Clear(); + } + + /// + /// Clone the current PwObjectList, including all + /// stored objects (deep copy). + /// + /// New PwObjectList. + public PwObjectList CloneDeep() + { + PwObjectList pl = new PwObjectList(); + + foreach(T po in m_vObjects) + pl.Add(po.CloneDeep()); + + return pl; + } + + public PwObjectList CloneShallow() + { + PwObjectList tNew = new PwObjectList(); + + foreach(T po in m_vObjects) tNew.Add(po); + + return tNew; + } + + public List CloneShallowToList() + { + PwObjectList tNew = CloneShallow(); + return tNew.m_vObjects; + } + + /// + /// Add an object to this list. + /// + /// Object to be added. + /// Thrown if the input + /// parameter is null. + public void Add(T pwObject) + { + Debug.Assert(pwObject != null); + if(pwObject == null) throw new ArgumentNullException("pwObject"); + + m_vObjects.Add(pwObject); + } + + public void Add(PwObjectList vObjects) + { + Debug.Assert(vObjects != null); + if(vObjects == null) throw new ArgumentNullException("vObjects"); + + foreach(T po in vObjects) + { + m_vObjects.Add(po); + } + } + + public void Add(List vObjects) + { + Debug.Assert(vObjects != null); + if(vObjects == null) throw new ArgumentNullException("vObjects"); + + foreach(T po in vObjects) + { + m_vObjects.Add(po); + } + } + + /// + /// Get an object of the list. + /// + /// Index of the object to get. Must be valid, otherwise an + /// exception is thrown. + /// Reference to an existing T object. Is never null. + public T GetAt(uint uIndex) + { + Debug.Assert(uIndex < m_vObjects.Count); + if(uIndex >= m_vObjects.Count) throw new ArgumentOutOfRangeException("uIndex"); + + return m_vObjects[(int)uIndex]; + } + + public void SetAt(uint uIndex, T pwObject) + { + Debug.Assert(pwObject != null); + if(pwObject == null) throw new ArgumentNullException("pwObject"); + if(uIndex >= (uint)m_vObjects.Count) + throw new ArgumentOutOfRangeException("uIndex"); + + m_vObjects[(int)uIndex] = pwObject; + } + + /// + /// Get a range of objects. + /// + /// Index of the first object to be + /// returned (inclusive). + /// Index of the last object to be + /// returned (inclusive). + /// + public List GetRange(uint uStartIndexIncl, uint uEndIndexIncl) + { + if(uStartIndexIncl >= (uint)m_vObjects.Count) + throw new ArgumentOutOfRangeException("uStartIndexIncl"); + if(uEndIndexIncl >= (uint)m_vObjects.Count) + throw new ArgumentOutOfRangeException("uEndIndexIncl"); + if(uStartIndexIncl > uEndIndexIncl) + throw new ArgumentException(); + + List list = new List((int)(uEndIndexIncl - uStartIndexIncl) + 1); + for(uint u = uStartIndexIncl; u <= uEndIndexIncl; ++u) + { + list.Add(m_vObjects[(int)u]); + } + + return list; + } + + public int IndexOf(T pwReference) + { + Debug.Assert(pwReference != null); if(pwReference == null) throw new ArgumentNullException("pwReference"); + + return m_vObjects.IndexOf(pwReference); + } + + /// + /// Delete an object of this list. The object to be deleted is identified + /// by a reference handle. + /// + /// Reference of the object to be deleted. + /// Returns true if the object was deleted, false if + /// the object wasn't found in this list. + /// Thrown if the input + /// parameter is null. + public bool Remove(T pwReference) + { + Debug.Assert(pwReference != null); if(pwReference == null) throw new ArgumentNullException("pwReference"); + + return m_vObjects.Remove(pwReference); + } + + public void RemoveAt(uint uIndex) + { + m_vObjects.RemoveAt((int)uIndex); + } + + /// + /// Move an object up or down. + /// + /// The object to be moved. + /// Move one up. If false, move one down. + public void MoveOne(T tObject, bool bUp) + { + Debug.Assert(tObject != null); + if(tObject == null) throw new ArgumentNullException("tObject"); + + int nCount = m_vObjects.Count; + if(nCount <= 1) return; + + int nIndex = m_vObjects.IndexOf(tObject); + Debug.Assert(nIndex >= 0); + + if(bUp && (nIndex > 0)) // No assert for top item + { + T tTemp = m_vObjects[nIndex - 1]; + m_vObjects[nIndex - 1] = m_vObjects[nIndex]; + m_vObjects[nIndex] = tTemp; + } + else if(!bUp && (nIndex != (nCount - 1))) // No assert for bottom item + { + T tTemp = m_vObjects[nIndex + 1]; + m_vObjects[nIndex + 1] = m_vObjects[nIndex]; + m_vObjects[nIndex] = tTemp; + } + } + + /// + /// Move some of the objects in this list to the top/bottom. + /// + /// List of objects to be moved. + /// Move to top. If false, move to bottom. + public void MoveTopBottom(T[] vObjects, bool bTop) + { + Debug.Assert(vObjects != null); + if(vObjects == null) throw new ArgumentNullException("vObjects"); + + if(vObjects.Length == 0) return; + + int nCount = m_vObjects.Count; + foreach(T t in vObjects) m_vObjects.Remove(t); + + if(bTop) + { + int nPos = 0; + foreach(T t in vObjects) + { + m_vObjects.Insert(nPos, t); + ++nPos; + } + } + else // Move to bottom + { + foreach(T t in vObjects) m_vObjects.Add(t); + } + + Debug.Assert(nCount == m_vObjects.Count); + if(nCount != m_vObjects.Count) + throw new ArgumentException("At least one of the T objects in the vObjects list doesn't exist!"); + } + + public void Sort(IComparer tComparer) + { + if(tComparer == null) throw new ArgumentNullException("tComparer"); + + m_vObjects.Sort(tComparer); + } + + public static PwObjectList FromArray(T[] tArray) + { + if(tArray == null) throw new ArgumentNullException("tArray"); + + PwObjectList l = new PwObjectList(); + foreach(T t in tArray) { l.Add(t); } + return l; + } + + public static PwObjectList FromList(List tList) + { + if(tList == null) throw new ArgumentNullException("tList"); + + PwObjectList l = new PwObjectList(); + l.Add(tList); + return l; + } + } +} diff --git a/ModernKeePassLib/Collections/PwObjectPool.cs b/ModernKeePassLib/Collections/PwObjectPool.cs new file mode 100644 index 0000000..e67564f --- /dev/null +++ b/ModernKeePassLib/Collections/PwObjectPool.cs @@ -0,0 +1,80 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Delegates; +using ModernKeePassLib.Interfaces; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Collections +{ + public sealed class PwObjectPool + { + private SortedDictionary m_dict = + new SortedDictionary(); + + public static PwObjectPool FromGroupRecursive(PwGroup pgRoot, bool bEntries) + { + if(pgRoot == null) throw new ArgumentNullException("pgRoot"); + + PwObjectPool p = new PwObjectPool(); + + if(!bEntries) p.m_dict[new PwUuidComparable(pgRoot.Uuid)] = pgRoot; + GroupHandler gh = delegate(PwGroup pg) + { + p.m_dict[new PwUuidComparable(pg.Uuid)] = pg; + return true; + }; + + EntryHandler eh = delegate(PwEntry pe) + { + p.m_dict[new PwUuidComparable(pe.Uuid)] = pe; + return true; + }; + + pgRoot.TraverseTree(TraversalMethod.PreOrder, bEntries ? null : gh, + bEntries ? eh : null); + return p; + } + + public IStructureItem Get(PwUuid pwUuid) + { + IStructureItem pItem; + m_dict.TryGetValue(new PwUuidComparable(pwUuid), out pItem); + return pItem; + } + + public bool ContainsOnlyType(Type t) + { + foreach(KeyValuePair kvp in m_dict) + { + if(kvp.Value.GetType() != t) return false; + } + + return true; + } + } +} diff --git a/ModernKeePassLib/Collections/StringDictionaryEx.cs b/ModernKeePassLib/Collections/StringDictionaryEx.cs new file mode 100644 index 0000000..a0223fc --- /dev/null +++ b/ModernKeePassLib/Collections/StringDictionaryEx.cs @@ -0,0 +1,116 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Collections +{ + public sealed class StringDictionaryEx : IDeepCloneable, + IEnumerable> + { + private SortedDictionary m_vDict = + new SortedDictionary(); + + public int Count + { + get { return m_vDict.Count; } + } + + public StringDictionaryEx() + { + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vDict.GetEnumerator(); + } + + public IEnumerator> GetEnumerator() + { + return m_vDict.GetEnumerator(); + } + + public StringDictionaryEx CloneDeep() + { + StringDictionaryEx plNew = new StringDictionaryEx(); + + foreach(KeyValuePair kvpStr in m_vDict) + plNew.Set(kvpStr.Key, kvpStr.Value); + + return plNew; + } + + public string Get(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + string s; + if(m_vDict.TryGetValue(strName, out s)) return s; + + return null; + } + + public bool Exists(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + return m_vDict.ContainsKey(strName); + } + + /// + /// Set a string. + /// + /// Identifier of the string field to modify. + /// New value. This parameter must not be null. + /// Thrown if one of the input + /// parameters is null. + public void Set(string strField, string strNewValue) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + Debug.Assert(strNewValue != null); if(strNewValue == null) throw new ArgumentNullException("strNewValue"); + + m_vDict[strField] = strNewValue; + } + + /// + /// Delete a string. + /// + /// Name of the string field to delete. + /// Returns true if the field has been successfully + /// removed, otherwise the return value is false. + /// Thrown if the input + /// parameter is null. + public bool Remove(string strField) + { + Debug.Assert(strField != null); if(strField == null) throw new ArgumentNullException("strField"); + + return m_vDict.Remove(strField); + } + } +} diff --git a/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs b/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs new file mode 100644 index 0000000..caef3f3 --- /dev/null +++ b/ModernKeePassLib/Cryptography/Cipher/CipherPool.cs @@ -0,0 +1,157 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; + +namespace ModernKeePassLib.Cryptography.Cipher +{ + /// + /// Pool of encryption/decryption algorithms (ciphers). + /// + public sealed class CipherPool + { + private List m_vCiphers = new List(); + private static CipherPool m_poolGlobal = null; + + /// + /// Reference to the global cipher pool. + /// + public static CipherPool GlobalPool + { + get + { + if(m_poolGlobal != null) return m_poolGlobal; + + m_poolGlobal = new CipherPool(); + m_poolGlobal.AddCipher(new StandardAesEngine()); + + return m_poolGlobal; + } + } + + /// + /// Remove all cipher engines from the current pool. + /// + public void Clear() + { + m_vCiphers.Clear(); + } + + /// + /// Add a cipher engine to the pool. + /// + /// Cipher engine to add. Must not be null. + public void AddCipher(ICipherEngine csEngine) + { + Debug.Assert(csEngine != null); + if(csEngine == null) throw new ArgumentNullException("csEngine"); + + // Return if a cipher with that ID is registered already. + for(int i = 0; i < m_vCiphers.Count; ++i) + if(m_vCiphers[i].CipherUuid.EqualsValue(csEngine.CipherUuid)) + return; + + m_vCiphers.Add(csEngine); + } + + /// + /// Get a cipher identified by its UUID. + /// + /// UUID of the cipher to return. + /// Reference to the requested cipher. If the cipher is + /// not found, null is returned. + public ICipherEngine GetCipher(PwUuid uuidCipher) + { + foreach(ICipherEngine iEngine in m_vCiphers) + { + if(iEngine.CipherUuid.EqualsValue(uuidCipher)) + return iEngine; + } + + return null; + } + + /// + /// Get the index of a cipher. This index is temporary and should + /// not be stored or used to identify a cipher. + /// + /// UUID of the cipher. + /// Index of the requested cipher. Returns -1 if + /// the specified cipher is not found. + public int GetCipherIndex(PwUuid uuidCipher) + { + for(int i = 0; i < m_vCiphers.Count; ++i) + { + if(m_vCiphers[i].CipherUuid.EqualsValue(uuidCipher)) + return i; + } + + Debug.Assert(false); + return -1; + } + + /// + /// Get the index of a cipher. This index is temporary and should + /// not be stored or used to identify a cipher. + /// + /// Name of the cipher. Note that + /// multiple ciphers can have the same name. In this case, the + /// first matching cipher is returned. + /// Cipher with the specified name or -1 if + /// no cipher with that name is found. + public int GetCipherIndex(string strDisplayName) + { + for(int i = 0; i < m_vCiphers.Count; ++i) + if(m_vCiphers[i].DisplayName == strDisplayName) + return i; + + Debug.Assert(false); + return -1; + } + + /// + /// Get the number of cipher engines in this pool. + /// + public int EngineCount + { + get { return m_vCiphers.Count; } + } + + /// + /// Get the cipher engine at the specified position. Throws + /// an exception if the index is invalid. You can use this + /// to iterate over all ciphers, but do not use it to + /// identify ciphers. + /// + /// Index of the requested cipher engine. + /// Reference to the cipher engine at the specified + /// position. + public ICipherEngine this[int nIndex] + { + get + { + if((nIndex < 0) || (nIndex >= m_vCiphers.Count)) + throw new ArgumentOutOfRangeException("nIndex"); + + return m_vCiphers[nIndex]; + } + } + } +} diff --git a/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs b/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs new file mode 100644 index 0000000..b26029a --- /dev/null +++ b/ModernKeePassLib/Cryptography/Cipher/ICipherEngine.cs @@ -0,0 +1,66 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.IO; + +namespace ModernKeePassLib.Cryptography.Cipher +{ + /// + /// Interface of an encryption/decryption class. + /// + public interface ICipherEngine + { + /// + /// UUID of the engine. If you want to write an engine/plugin, + /// please contact the KeePass team to obtain a new UUID. + /// + PwUuid CipherUuid + { + get; + } + + /// + /// String displayed in the list of available encryption/decryption + /// engines in the GUI. + /// + string DisplayName + { + get; + } + + /// + /// Encrypt a stream. + /// + /// Stream to read the plain-text from. + /// Key to use. + /// Initialization vector. + /// Stream, from which the encrypted data can be read. + Stream EncryptStream(Stream sPlainText, byte[] pbKey, byte[] pbIV); + + /// + /// Decrypt a stream. + /// + /// Stream to read the encrypted data from. + /// Key to use. + /// Initialization vector. + /// Stream, from which the decrypted data can be read. + Stream DecryptStream(Stream sEncrypted, byte[] pbKey, byte[] pbIV); + } +} diff --git a/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs b/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs new file mode 100644 index 0000000..99b93b3 --- /dev/null +++ b/ModernKeePassLib/Cryptography/Cipher/Salsa20Cipher.cs @@ -0,0 +1,188 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// Implementation of the Salsa20 cipher, based on the eSTREAM submission. + +using System; +using System.Diagnostics; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Cryptography.Cipher +{ + public sealed class Salsa20Cipher + { + private uint[] m_state = new uint[16]; + private uint[] m_x = new uint[16]; // Working buffer + + private byte[] m_output = new byte[64]; + private int m_outputPos = 64; + + private static readonly uint[] m_sigma = new uint[4]{ + 0x61707865, 0x3320646E, 0x79622D32, 0x6B206574 + }; + + public Salsa20Cipher(byte[] pbKey32, byte[] pbIV8) + { + KeySetup(pbKey32); + IvSetup(pbIV8); + } + + ~Salsa20Cipher() + { + // Clear sensitive data + Array.Clear(m_state, 0, m_state.Length); + Array.Clear(m_x, 0, m_x.Length); + } + + private void NextOutput() + { + uint[] x = m_x; // Local alias for working buffer + + // Compiler/runtime might remove array bound checks after this + if(x.Length < 16) throw new InvalidOperationException(); + + Array.Copy(m_state, x, 16); + + unchecked + { + for(int i = 0; i < 10; ++i) // (int i = 20; i > 0; i -= 2) + { + x[ 4] ^= Rotl32(x[ 0] + x[12], 7); + x[ 8] ^= Rotl32(x[ 4] + x[ 0], 9); + x[12] ^= Rotl32(x[ 8] + x[ 4], 13); + x[ 0] ^= Rotl32(x[12] + x[ 8], 18); + x[ 9] ^= Rotl32(x[ 5] + x[ 1], 7); + x[13] ^= Rotl32(x[ 9] + x[ 5], 9); + x[ 1] ^= Rotl32(x[13] + x[ 9], 13); + x[ 5] ^= Rotl32(x[ 1] + x[13], 18); + x[14] ^= Rotl32(x[10] + x[ 6], 7); + x[ 2] ^= Rotl32(x[14] + x[10], 9); + x[ 6] ^= Rotl32(x[ 2] + x[14], 13); + x[10] ^= Rotl32(x[ 6] + x[ 2], 18); + x[ 3] ^= Rotl32(x[15] + x[11], 7); + x[ 7] ^= Rotl32(x[ 3] + x[15], 9); + x[11] ^= Rotl32(x[ 7] + x[ 3], 13); + x[15] ^= Rotl32(x[11] + x[ 7], 18); + x[ 1] ^= Rotl32(x[ 0] + x[ 3], 7); + x[ 2] ^= Rotl32(x[ 1] + x[ 0], 9); + x[ 3] ^= Rotl32(x[ 2] + x[ 1], 13); + x[ 0] ^= Rotl32(x[ 3] + x[ 2], 18); + x[ 6] ^= Rotl32(x[ 5] + x[ 4], 7); + x[ 7] ^= Rotl32(x[ 6] + x[ 5], 9); + x[ 4] ^= Rotl32(x[ 7] + x[ 6], 13); + x[ 5] ^= Rotl32(x[ 4] + x[ 7], 18); + x[11] ^= Rotl32(x[10] + x[ 9], 7); + x[ 8] ^= Rotl32(x[11] + x[10], 9); + x[ 9] ^= Rotl32(x[ 8] + x[11], 13); + x[10] ^= Rotl32(x[ 9] + x[ 8], 18); + x[12] ^= Rotl32(x[15] + x[14], 7); + x[13] ^= Rotl32(x[12] + x[15], 9); + x[14] ^= Rotl32(x[13] + x[12], 13); + x[15] ^= Rotl32(x[14] + x[13], 18); + } + + for(int i = 0; i < 16; ++i) + x[i] += m_state[i]; + + for(int i = 0; i < 16; ++i) + { + m_output[i << 2] = (byte)x[i]; + m_output[(i << 2) + 1] = (byte)(x[i] >> 8); + m_output[(i << 2) + 2] = (byte)(x[i] >> 16); + m_output[(i << 2) + 3] = (byte)(x[i] >> 24); + } + + m_outputPos = 0; + ++m_state[8]; + if(m_state[8] == 0) ++m_state[9]; + } + } + + private static uint Rotl32(uint x, int b) + { + unchecked + { + return ((x << b) | (x >> (32 - b))); + } + } + + private static uint U8To32Little(byte[] pb, int iOffset) + { + unchecked + { + return ((uint)pb[iOffset] | ((uint)pb[iOffset + 1] << 8) | + ((uint)pb[iOffset + 2] << 16) | ((uint)pb[iOffset + 3] << 24)); + } + } + + private void KeySetup(byte[] k) + { + if(k == null) throw new ArgumentNullException("k"); + if(k.Length != 32) throw new ArgumentException(); + + m_state[1] = U8To32Little(k, 0); + m_state[2] = U8To32Little(k, 4); + m_state[3] = U8To32Little(k, 8); + m_state[4] = U8To32Little(k, 12); + m_state[11] = U8To32Little(k, 16); + m_state[12] = U8To32Little(k, 20); + m_state[13] = U8To32Little(k, 24); + m_state[14] = U8To32Little(k, 28); + m_state[0] = m_sigma[0]; + m_state[5] = m_sigma[1]; + m_state[10] = m_sigma[2]; + m_state[15] = m_sigma[3]; + } + + private void IvSetup(byte[] pbIV) + { + if(pbIV == null) throw new ArgumentNullException("pbIV"); + if(pbIV.Length != 8) throw new ArgumentException(); + + m_state[6] = U8To32Little(pbIV, 0); + m_state[7] = U8To32Little(pbIV, 4); + m_state[8] = 0; + m_state[9] = 0; + } + + public void Encrypt(byte[] m, int nByteCount, bool bXor) + { + if(m == null) throw new ArgumentNullException("m"); + if(nByteCount > m.Length) throw new ArgumentException(); + + int nBytesRem = nByteCount, nOffset = 0; + while(nBytesRem > 0) + { + Debug.Assert((m_outputPos >= 0) && (m_outputPos <= 64)); + if(m_outputPos == 64) NextOutput(); + Debug.Assert(m_outputPos < 64); + + int nCopy = Math.Min(64 - m_outputPos, nBytesRem); + + if(bXor) MemUtil.XorArray(m_output, m_outputPos, m, nOffset, nCopy); + else Array.Copy(m_output, m_outputPos, m, nOffset, nCopy); + + m_outputPos += nCopy; + nBytesRem -= nCopy; + nOffset += nCopy; + } + } + } +} diff --git a/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs b/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs new file mode 100644 index 0000000..ce41e3d --- /dev/null +++ b/ModernKeePassLib/Cryptography/Cipher/StandardAesEngine.cs @@ -0,0 +1,146 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +using System; +using System.IO; + +using ModernKeePassLib.Resources; +using ModernKeePassLib.Serialization; + +namespace ModernKeePassLib.Cryptography.Cipher +{ + /// + /// Standard AES cipher implementation. + /// + public sealed class StandardAesEngine : ICipherEngine + { + // private const CipherMode m_rCipherMode = CipherMode.CBC; + // private const PaddingMode m_rCipherPadding = PaddingMode.PKCS7; + + private static PwUuid m_uuidAes = null; + + /// + /// UUID of the cipher engine. This ID uniquely identifies the + /// AES engine. Must not be used by other ciphers. + /// + public static PwUuid AesUuid + { + get + { + if(m_uuidAes == null) + { + m_uuidAes = new PwUuid(new byte[]{ + 0x31, 0xC1, 0xF2, 0xE6, 0xBF, 0x71, 0x43, 0x50, + 0xBE, 0x58, 0x05, 0x21, 0x6A, 0xFC, 0x5A, 0xFF }); + } + + return m_uuidAes; + } + } + + /// + /// Get the UUID of this cipher engine as PwUuid object. + /// + public PwUuid CipherUuid + { + get { return StandardAesEngine.AesUuid; } + } + + /// + /// Get a displayable name describing this cipher engine. + /// + public string DisplayName { get { return KLRes.EncAlgorithmAes; } } + + private static void ValidateArguments(Stream stream, bool bEncrypt, byte[] pbKey, byte[] pbIV) + { + Debug.Assert(stream != null); if(stream == null) throw new ArgumentNullException("stream"); + + Debug.Assert(pbKey != null); if(pbKey == null) throw new ArgumentNullException("pbKey"); + Debug.Assert(pbKey.Length == 32); + if(pbKey.Length != 32) throw new ArgumentException("Key must be 256 bits wide!"); + + Debug.Assert(pbIV != null); if(pbIV == null) throw new ArgumentNullException("pbIV"); + Debug.Assert(pbIV.Length == 16); + if(pbIV.Length != 16) throw new ArgumentException("Initialization vector must be 128 bits wide!"); + + if(bEncrypt) + { + Debug.Assert(stream.CanWrite); + if(stream.CanWrite == false) throw new ArgumentException("Stream must be writable!"); + } + else // Decrypt + { + Debug.Assert(stream.CanRead); + if(stream.CanRead == false) throw new ArgumentException("Encrypted stream must be readable!"); + } + } + + private static Stream CreateStream(Stream s, bool bEncrypt, byte[] pbKey, byte[] pbIV) + { + StandardAesEngine.ValidateArguments(s, bEncrypt, pbKey, pbIV); + + return new CryptoStream( s, "AES_CBC_PKCS7", bEncrypt, pbKey, pbIV); + + } +#if false + + RijndaelManaged r = new RijndaelManaged(); + + if(r.BlockSize != 128) // AES block size + { + Debug.Assert(false); + r.BlockSize = 128; + } + + byte[] pbLocalIV = new byte[16]; + Array.Copy(pbIV, pbLocalIV, 16); + r.IV = pbLocalIV; + + byte[] pbLocalKey = new byte[32]; + Array.Copy(pbKey, pbLocalKey, 32); + r.KeySize = 256; + r.Key = pbLocalKey; + + r.Mode = m_rCipherMode; + r.Padding = m_rCipherPadding; + + ICryptoTransform iTransform = (bEncrypt ? r.CreateEncryptor() : r.CreateDecryptor()); + Debug.Assert(iTransform != null); + if(iTransform == null) throw new SecurityException("Unable to create Rijndael transform!"); + + return new CryptoStream(s, iTransform, bEncrypt ? CryptoStreamMode.Write : + CryptoStreamMode.Read); + } +#endif + + + public Stream EncryptStream(Stream sPlainText, byte[] pbKey, byte[] pbIV) + { + return StandardAesEngine.CreateStream(sPlainText, true, pbKey, pbIV); + } + + public Stream DecryptStream(Stream sEncrypted, byte[] pbKey, byte[] pbIV) + { + return StandardAesEngine.CreateStream(sEncrypted, false, pbKey, pbIV); + } + + + } +} diff --git a/ModernKeePassLib/Cryptography/CryptoRandom.cs b/ModernKeePassLib/Cryptography/CryptoRandom.cs new file mode 100644 index 0000000..12fa42d --- /dev/null +++ b/ModernKeePassLib/Cryptography/CryptoRandom.cs @@ -0,0 +1,331 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using Windows.Security.Cryptography; +//using System.Windows.Forms; +//using System.Drawing; + + +namespace ModernKeePassLib.Cryptography +{ + /// + /// Cryptographically strong random number generator. The returned values + /// are unpredictable and cannot be reproduced. + /// CryptoRandom is a singleton class. + /// + public sealed class CryptoRandom + { + //private byte[] m_pbEntropyPool = new byte[64]; + //private uint m_uCounter; + //private RNGCryptoServiceProvider m_rng = new RNGCryptoServiceProvider(); + //private ulong m_uGeneratedBytesCount = 0; + + // private object m_oSyncRoot = new object(); + + private static CryptoRandom m_pInstance = null; + public static CryptoRandom Instance + { + get + { + if(m_pInstance != null) return m_pInstance; + + m_pInstance = new CryptoRandom(); + return m_pInstance; + } + } + +#if KeePassWinRT + private CryptoRandom() + { + } + + /// + /// Update the internal seed of the random number generator based + /// on entropy data. + /// This method is thread-safe. + /// + /// Entropy bytes. + public void AddEntropy(byte[] pbEntropy) + { + // Not used in WinRT version + } + + + /// + /// Get a number of cryptographically strong random bytes. + /// This method is thread-safe. + /// + /// Number of requested random bytes. + /// A byte array consisting of + /// random bytes. + public byte[] GetRandomBytes(uint uRequestedBytes) + { + if (uRequestedBytes == 0) return new byte[0]; // Allow zero-length array + + byte[] pbRes; + + Windows.Storage.Streams.IBuffer buffer = CryptographicBuffer.GenerateRandom(uRequestedBytes); + CryptographicBuffer.CopyToByteArray(buffer, out pbRes); + return pbRes; + + } + +#else + /// + /// Get the number of random bytes that this instance generated so far. + /// Note that this number can be higher than the number of random bytes + /// actually requested using the GetRandomBytes method. + /// + public ulong GeneratedBytesCount + { + get + { + ulong u; + lock(m_oSyncRoot) { u = m_uGeneratedBytesCount; } + return u; + } + } + + /// + /// Event that is triggered whenever the internal GenerateRandom256 + /// method is called to generate random bytes. + /// + public event EventHandler GenerateRandom256Pre; + + private CryptoRandom() + { + Random r = new Random(); + m_uCounter = (uint)r.Next(); + + AddEntropy(GetSystemData(r)); + AddEntropy(GetCspData()); + } + + /// + /// Update the internal seed of the random number generator based + /// on entropy data. + /// This method is thread-safe. + /// + /// Entropy bytes. + public void AddEntropy(byte[] pbEntropy) + { + + if(pbEntropy == null) { Debug.Assert(false); return; } + if(pbEntropy.Length == 0) { Debug.Assert(false); return; } + + byte[] pbNewData = pbEntropy; + if(pbEntropy.Length >= 64) + { +#if !KeePassLibSD + SHA512Managed shaNew = new SHA512Managed(); +#else + SHA256Managed shaNew = new SHA256Managed(); +#endif + pbNewData = shaNew.ComputeHash(pbEntropy); + } + + MemoryStream ms = new MemoryStream(); + lock(m_oSyncRoot) + { + ms.Write(m_pbEntropyPool, 0, m_pbEntropyPool.Length); + ms.Write(pbNewData, 0, pbNewData.Length); + + byte[] pbFinal = ms.ToArray(); +#if !KeePassLibSD + Debug.Assert(pbFinal.Length == (64 + pbNewData.Length)); + SHA512Managed shaPool = new SHA512Managed(); +#else + SHA256Managed shaPool = new SHA256Managed(); +#endif + m_pbEntropyPool = shaPool.ComputeHash(pbFinal); + } + ms.Close(); + + } + + + + private static byte[] GetSystemData(Random rWeak) + { + + MemoryStream ms = new MemoryStream(); + byte[] pb; + + pb = MemUtil.UInt32ToBytes((uint)Environment.TickCount); + ms.Write(pb, 0, pb.Length); + + pb = TimeUtil.PackTime(DateTime.Now); + ms.Write(pb, 0, pb.Length); + +#if !KeePassLibSD + Point pt = Cursor.Position; + pb = MemUtil.UInt32ToBytes((uint)pt.X); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt32ToBytes((uint)pt.Y); + ms.Write(pb, 0, pb.Length); +#endif + + pb = MemUtil.UInt32ToBytes((uint)rWeak.Next()); + ms.Write(pb, 0, pb.Length); + + pb = MemUtil.UInt32ToBytes((uint)NativeLib.GetPlatformID()); + ms.Write(pb, 0, pb.Length); + +#if !KeePassLibSD + try + { + pb = MemUtil.UInt32ToBytes((uint)Environment.ProcessorCount); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)Environment.WorkingSet); + ms.Write(pb, 0, pb.Length); + + Version v = Environment.OSVersion.Version; + int nv = (v.Major << 28) + (v.MajorRevision << 24) + + (v.Minor << 20) + (v.MinorRevision << 16) + + (v.Revision << 12) + v.Build; + pb = MemUtil.UInt32ToBytes((uint)nv); + ms.Write(pb, 0, pb.Length); + + Process p = Process.GetCurrentProcess(); + pb = MemUtil.UInt64ToBytes((ulong)p.Handle.ToInt64()); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt32ToBytes((uint)p.HandleCount); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt32ToBytes((uint)p.Id); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.NonpagedSystemMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PagedMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PagedSystemMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PeakPagedMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PeakVirtualMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PeakWorkingSet64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.PrivateMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.StartTime.ToBinary()); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.VirtualMemorySize64); + ms.Write(pb, 0, pb.Length); + pb = MemUtil.UInt64ToBytes((ulong)p.WorkingSet64); + ms.Write(pb, 0, pb.Length); + + // Not supported in Mono 1.2.6: + // pb = MemUtil.UInt32ToBytes((uint)p.SessionId); + // ms.Write(pb, 0, pb.Length); + } + catch(Exception) { } +#endif + + pb = Guid.NewGuid().ToByteArray(); + ms.Write(pb, 0, pb.Length); + + byte[] pbAll = ms.ToArray(); + ms.Close(); + return pbAll; + + } + + + private byte[] GetCspData() + { + uint length = 32; + byte[] pbCspRandom = new byte[length]; + + Windows.Storage.Streams.IBuffer buffer = CryptographicBuffer.GenerateRandom(length); + + CryptographicBuffer.CopyToByteArray(buffer, pbCspRandom); + //m_rng.GetBytes(pbCspRandom); + return pbCspRandom; + } + + private byte[] GenerateRandom256() + { + + if(this.GenerateRandom256Pre != null) + this.GenerateRandom256Pre(this, EventArgs.Empty); + + byte[] pbFinal; + lock(m_oSyncRoot) + { + unchecked { m_uCounter += 386047; } // Prime number + byte[] pbCounter = MemUtil.UInt32ToBytes(m_uCounter); + + byte[] pbCspRandom = GetCspData(); + + MemoryStream ms = new MemoryStream(); + ms.Write(m_pbEntropyPool, 0, m_pbEntropyPool.Length); + ms.Write(pbCounter, 0, pbCounter.Length); + ms.Write(pbCspRandom, 0, pbCspRandom.Length); + pbFinal = ms.ToArray(); + Debug.Assert(pbFinal.Length == (m_pbEntropyPool.Length + + pbCounter.Length + pbCspRandom.Length)); + ms.Close(); + + m_uGeneratedBytesCount += 32; + } + + SHA256Managed sha256 = new SHA256Managed(); + return sha256.ComputeHash(pbFinal); + } + + + /// + /// Get a number of cryptographically strong random bytes. + /// This method is thread-safe. + /// + /// Number of requested random bytes. + /// A byte array consisting of + /// random bytes. + public byte[] GetRandomBytes(uint uRequestedBytes) + { + if(uRequestedBytes == 0) return new byte[0]; // Allow zero-length array + + byte[] pbRes = new byte[uRequestedBytes]; + long lPos = 0; + + while(uRequestedBytes != 0) + { + byte[] pbRandom256 = GenerateRandom256(); + Debug.Assert(pbRandom256.Length == 32); + + long lCopy = (long)((uRequestedBytes < 32) ? uRequestedBytes : 32); + +#if !KeePassLibSD + Array.Copy(pbRandom256, 0, pbRes, lPos, lCopy); +#else + Array.Copy(pbRandom256, 0, pbRes, (int)lPos, (int)lCopy); +#endif + + lPos += lCopy; + uRequestedBytes -= (uint)lCopy; + } + + Debug.Assert((int)lPos == pbRes.Length); + return pbRes; + } + +#endif // !KeePassWinRT + + } +} diff --git a/ModernKeePassLib/Cryptography/CryptoRandomStream.cs b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs new file mode 100644 index 0000000..8d585d4 --- /dev/null +++ b/ModernKeePassLib/Cryptography/CryptoRandomStream.cs @@ -0,0 +1,208 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +using ModernKeePassLib.Cryptography.Cipher; + +namespace ModernKeePassLib.Cryptography +{ + /// + /// Algorithms supported by CryptoRandomStream. + /// + public enum CrsAlgorithm + { + /// + /// Not supported. + /// + Null = 0, + + /// + /// A variant of the ARCFour algorithm (RC4 incompatible). + /// + ArcFourVariant = 1, + + /// + /// Salsa20 stream cipher algorithm. + /// + Salsa20 = 2, + + Count = 3 + } + + /// + /// A random stream class. The class is initialized using random + /// bytes provided by the caller. The produced stream has random + /// properties, but for the same seed always the same stream + /// is produced, i.e. this class can be used as stream cipher. + /// + public sealed class CryptoRandomStream + { + private CrsAlgorithm m_crsAlgorithm; + + private byte[] m_pbState = null; + private byte m_i = 0; + private byte m_j = 0; + + private Salsa20Cipher m_salsa20 = null; + + /// + /// Construct a new cryptographically secure random stream object. + /// + /// Algorithm to use. + /// Initialization key. Must not be null and + /// must contain at least 1 byte. + /// Thrown if the + /// parameter is null. + /// Thrown if the + /// parameter contains no bytes or the + /// algorithm is unknown. + public CryptoRandomStream(CrsAlgorithm genAlgorithm, byte[] pbKey) + { + m_crsAlgorithm = genAlgorithm; + + Debug.Assert(pbKey != null); if(pbKey == null) throw new ArgumentNullException("pbKey"); + + uint uKeyLen = (uint)pbKey.Length; + Debug.Assert(uKeyLen != 0); if(uKeyLen == 0) throw new ArgumentException(); + + if(genAlgorithm == CrsAlgorithm.ArcFourVariant) + { + // Fill the state linearly + m_pbState = new byte[256]; + for(uint w = 0; w < 256; ++w) m_pbState[w] = (byte)w; + + unchecked + { + byte j = 0, t; + uint inxKey = 0; + for(uint w = 0; w < 256; ++w) // Key setup + { + j += (byte)(m_pbState[w] + pbKey[inxKey]); + + t = m_pbState[0]; // Swap entries + m_pbState[0] = m_pbState[j]; + m_pbState[j] = t; + + ++inxKey; + if(inxKey >= uKeyLen) inxKey = 0; + } + } + + GetRandomBytes(512); // Increases security, see cryptanalysis + } + else if(genAlgorithm == CrsAlgorithm.Salsa20) + { + byte[] pbKey32 = SHA256Managed.Instance.ComputeHash(pbKey); + + byte[] pbIV = new byte[]{ 0xE8, 0x30, 0x09, 0x4B, + 0x97, 0x20, 0x5D, 0x2A }; // Unique constant + + m_salsa20 = new Salsa20Cipher(pbKey32, pbIV); + + } + else // Unknown algorithm + { + Debug.Assert(false); + throw new ArgumentException(); + } + } + + /// + /// Get random bytes. + /// + /// Number of random bytes to retrieve. + /// Returns random bytes. + public byte[] GetRandomBytes(uint uRequestedCount) + { + if(uRequestedCount == 0) return new byte[0]; + + byte[] pbRet = new byte[uRequestedCount]; + + if(m_crsAlgorithm == CrsAlgorithm.ArcFourVariant) + { + unchecked + { + for(uint w = 0; w < uRequestedCount; ++w) + { + ++m_i; + m_j += m_pbState[m_i]; + + byte t = m_pbState[m_i]; // Swap entries + m_pbState[m_i] = m_pbState[m_j]; + m_pbState[m_j] = t; + + t = (byte)(m_pbState[m_i] + m_pbState[m_j]); + pbRet[w] = m_pbState[t]; + } + } + } + else if(m_crsAlgorithm == CrsAlgorithm.Salsa20) + m_salsa20.Encrypt(pbRet, pbRet.Length, false); + else { Debug.Assert(false); } + + return pbRet; + } + + public ulong GetRandomUInt64() + { + byte[] pb = GetRandomBytes(8); + + unchecked + { + return ((ulong)pb[0]) | ((ulong)pb[1] << 8) | + ((ulong)pb[2] << 16) | ((ulong)pb[3] << 24) | + ((ulong)pb[4] << 32) | ((ulong)pb[5] << 40) | + ((ulong)pb[6] << 48) | ((ulong)pb[7] << 56); + } + } + +#if CRSBENCHMARK + public static string Benchmark() + { + int nRounds = 2000000; + + string str = "ArcFour small: " + BenchTime(CrsAlgorithm.ArcFourVariant, + nRounds, 16).ToString() + "\r\n"; + str += "ArcFour big: " + BenchTime(CrsAlgorithm.ArcFourVariant, + 32, 2 * 1024 * 1024).ToString() + "\r\n"; + str += "Salsa20 small: " + BenchTime(CrsAlgorithm.Salsa20, + nRounds, 16).ToString() + "\r\n"; + str += "Salsa20 big: " + BenchTime(CrsAlgorithm.Salsa20, + 32, 2 * 1024 * 1024).ToString(); + return str; + } + + private static int BenchTime(CrsAlgorithm cra, int nRounds, int nDataSize) + { + byte[] pbKey = new byte[4] { 0x00, 0x01, 0x02, 0x03 }; + + int nStart = Environment.TickCount; + for(int i = 0; i < nRounds; ++i) + { + CryptoRandomStream c = new CryptoRandomStream(cra, pbKey); + c.GetRandomBytes((uint)nDataSize); + } + int nEnd = Environment.TickCount; + + return (nEnd - nStart); + } +#endif + } +} diff --git a/ModernKeePassLib/Cryptography/HashingStreamEx.cs b/ModernKeePassLib/Cryptography/HashingStreamEx.cs new file mode 100644 index 0000000..7ee615e --- /dev/null +++ b/ModernKeePassLib/Cryptography/HashingStreamEx.cs @@ -0,0 +1,207 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using Windows.Security.Cryptography.Core; + +namespace ModernKeePassLib.Cryptography +{ + public sealed class HashingStreamEx : Stream + { + private Stream m_sBaseStream; + private bool m_bWriting; + private Queue m_DataToHash; + + public byte[] Hash + { + get + { + int len = 0; + foreach (byte[] block in m_DataToHash) + { + len += block.Length; + } + byte[] dataToHash = new byte[len]; + int pos = 0; + while(m_DataToHash.Count > 0) + { + byte[] block = m_DataToHash.Dequeue(); + Array.Copy(block, 0, dataToHash, pos, block.Length); + pos += block.Length; + } + + byte[] hash = SHA256Managed.Instance.ComputeHash(dataToHash); + return hash; + } + } + + public override bool CanRead + { + get { return !m_bWriting; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return m_bWriting; } + } + + public override long Length + { + get { return m_sBaseStream.Length; } + } + + public override long Position + { + get { return m_sBaseStream.Position; } + set { throw new NotSupportedException(); } + } + + public HashingStreamEx(Stream sBaseStream, bool bWriting, CryptographicHash hashAlgorithm) + { + if (sBaseStream == null) throw new ArgumentNullException("sBaseStream"); + + m_sBaseStream = sBaseStream; + m_bWriting = bWriting; + +#if KeePassWinRT + + m_DataToHash = new Queue(); + + +#else +#if !KeePassLibSD + m_hash = (hashAlgorithm ?? new SHA256Managed()); +#else // KeePassLibSD + m_hash = null; + + try { m_hash = HashAlgorithm.Create("SHA256"); } + catch(Exception) { } + try { if(m_hash == null) m_hash = HashAlgorithm.Create(); } + catch(Exception) { } +#endif +#endif // KeePassWinRT + + +#if TODO + // Bert TODO: For the time being, only built-in Hash algorithm are supported. + if (m_hash == null) { Debug.Assert(false); return; } + // Validate hash algorithm + if((!m_hash.CanReuseTransform) || (!m_hash.CanTransformMultipleBlocks) || + (m_hash.InputBlockSize != 1) || (m_hash.OutputBlockSize != 1)) + { +#if DEBUG + MessageService.ShowWarning("Broken HashAlgorithm object in HashingStreamEx."); +#endif + m_hash = null; + } +#endif + } + + public override void Flush() + { + m_sBaseStream.Flush(); + } + +#if TODO + public override void Close() + { + + if(m_hash != null) + { + try + { + m_hash.TransformFinalBlock(new byte[0], 0, 0); + + m_pbFinalHash = m_hash.Hash; + } + catch(Exception) { Debug.Assert(false); } + + m_hash = null; + } + + m_sBaseStream.Close(); + + } +#endif + + public override long Seek(long lOffset, SeekOrigin soOrigin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long lValue) + { + throw new NotSupportedException(); + } + + public override int Read(byte[] pbBuffer, int nOffset, int nCount) + { + + if (m_bWriting) throw new InvalidOperationException(); + + int nRead = m_sBaseStream.Read(pbBuffer, nOffset, nCount); + + // Mono bug workaround (LaunchPad 798910) + int nPartialRead = nRead; + while ((nRead < nCount) && (nPartialRead != 0)) + { + nPartialRead = m_sBaseStream.Read(pbBuffer, nOffset + nRead, + nCount - nRead); + nRead += nPartialRead; + } + + byte[] pbOrg = new byte[nRead]; + Array.Copy(pbBuffer, pbOrg, nRead); + m_DataToHash.Enqueue(pbOrg); + + return nRead; + } + + public override void Write(byte[] pbBuffer, int nOffset, int nCount) + { + // BERT TODO: Not implemented. + Debug.Assert(false); +#if TODO + if(!m_bWriting) throw new InvalidOperationException(); + +#if DEBUG + byte[] pbOrg = new byte[pbBuffer.Length]; + Array.Copy(pbBuffer, pbOrg, pbBuffer.Length); +#endif + + if((m_hash != null) && (nCount > 0)) + m_hash.TransformBlock(pbBuffer, nOffset, nCount, pbBuffer, nOffset); + +#if DEBUG + Debug.Assert(MemUtil.ArraysEqual(pbBuffer, pbOrg)); +#endif + + m_sBaseStream.Write(pbBuffer, nOffset, nCount); + +#endif // TODO + } + } +} diff --git a/ModernKeePassLib/Cryptography/HmacOtp.cs b/ModernKeePassLib/Cryptography/HmacOtp.cs new file mode 100644 index 0000000..3b7458a --- /dev/null +++ b/ModernKeePassLib/Cryptography/HmacOtp.cs @@ -0,0 +1,89 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + + +#if !KeePassLibSD +namespace ModernKeePassLib.Cryptography +{ + /// + /// Generate HMAC-based one-time passwords as specified in RFC 4226. + /// + public static class HmacOtp + { + private static readonly uint[] vDigitsPower = new uint[]{ 1, 10, 100, + 1000, 10000, 100000, 1000000, 10000000, 100000000 }; + + public static string Generate(byte[] pbSecret, ulong uFactor, + uint uCodeDigits, bool bAddChecksum, int iTruncationOffset) + { + Debug.Assert(false, "Not yet implemented"); + return null; +#if TODO + byte[] pbText = MemUtil.UInt64ToBytes(uFactor); + Array.Reverse(pbText); // Big-Endian + + HMACSHA1 hsha1 = new HMACSHA1(pbSecret); + byte[] pbHash = hsha1.ComputeHash(pbText); + + uint uOffset = (uint)(pbHash[pbHash.Length - 1] & 0xF); + if((iTruncationOffset >= 0) && (iTruncationOffset < (pbHash.Length - 4))) + uOffset = (uint)iTruncationOffset; + + uint uBinary = (uint)(((pbHash[uOffset] & 0x7F) << 24) | + ((pbHash[uOffset + 1] & 0xFF) << 16) | + ((pbHash[uOffset + 2] & 0xFF) << 8) | + (pbHash[uOffset + 3] & 0xFF)); + + uint uOtp = (uBinary % vDigitsPower[uCodeDigits]); + if(bAddChecksum) + uOtp = ((uOtp * 10) + CalculateChecksum(uOtp, uCodeDigits)); + + uint uDigits = (bAddChecksum ? (uCodeDigits + 1) : uCodeDigits); + return uOtp.ToString().PadLeft((int)uDigits, '0'); +#endif + } + + private static readonly uint[] vDoubleDigits = new uint[]{ 0, 2, 4, 6, 8, + 1, 3, 5, 7, 9 }; + + private static uint CalculateChecksum(uint uNum, uint uDigits) + { + bool bDoubleDigit = true; + uint uTotal = 0; + + while(0 < uDigits--) + { + uint uDigit = (uNum % 10); + uNum /= 10; + + if(bDoubleDigit) uDigit = vDoubleDigits[uDigit]; + + uTotal += uDigit; + bDoubleDigit = !bDoubleDigit; + } + + uint uResult = (uTotal % 10); + if(uResult != 0) uResult = 10 - uResult; + + return uResult; + } + } +} +#endif diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs new file mode 100644 index 0000000..7c8f93b --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CharSetBasedGenerator.cs @@ -0,0 +1,65 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + internal static class CharSetBasedGenerator + { + internal static PwgError Generate(out ProtectedString psOut, + PwProfile pwProfile, CryptoRandomStream crsRandomSource) + { + psOut = ProtectedString.Empty; + if(pwProfile.Length == 0) return PwgError.Success; + + PwCharSet pcs = new PwCharSet(pwProfile.CharSet.ToString()); + char[] vGenerated = new char[pwProfile.Length]; + + PwGenerator.PrepareCharSet(pcs, pwProfile); + + for(int nIndex = 0; nIndex < (int)pwProfile.Length; ++nIndex) + { + char ch = PwGenerator.GenerateCharacter(pwProfile, pcs, + crsRandomSource); + + if(ch == char.MinValue) + { + Array.Clear(vGenerated, 0, vGenerated.Length); + return PwgError.TooFewCharacters; + } + + vGenerated[nIndex] = ch; + } + + byte[] pbUtf8 = StrUtil.Utf8.GetBytes(vGenerated); + psOut = new ProtectedString(true, pbUtf8); + MemUtil.ZeroByteArray(pbUtf8); + Array.Clear(vGenerated, 0, vGenerated.Length); + + return PwgError.Success; + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs new file mode 100644 index 0000000..bc8fd6e --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGenerator.cs @@ -0,0 +1,66 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +using ModernKeePassLib; +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + public abstract class CustomPwGenerator + { + /// + /// Each custom password generation algorithm must have + /// its own unique UUID. + /// + public abstract PwUuid Uuid { get; } + + /// + /// Displayable name of the password generation algorithm. + /// + public abstract string Name { get; } + + public virtual bool SupportsOptions + { + get { return false; } + } + + /// + /// Password generation function. + /// + /// Password generation options chosen + /// by the user. This may be null, if the default + /// options should be used. + /// Source that the algorithm + /// can use to generate random numbers. + /// Generated password or null in case + /// of failure. If returning null, the caller assumes + /// that an error message has already been shown to the user. + public abstract ProtectedString Generate(PwProfile prf, + CryptoRandomStream crsRandomSource); + + public virtual string GetOptions(string strCurrentOptions) + { + return string.Empty; + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs new file mode 100644 index 0000000..b026c28 --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/CustomPwGeneratorPool.cs @@ -0,0 +1,110 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + public sealed class CustomPwGeneratorPool : IEnumerable + { + private List m_vGens = new List(); + + public int Count + { + get { return m_vGens.Count; } + } + + public CustomPwGeneratorPool() + { + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vGens.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_vGens.GetEnumerator(); + } + + public void Add(CustomPwGenerator pwg) + { + if(pwg == null) throw new ArgumentNullException("pwg"); + + PwUuid uuid = pwg.Uuid; + if(uuid == null) throw new ArgumentException(); + + int nIndex = FindIndex(uuid); + + if(nIndex >= 0) m_vGens[nIndex] = pwg; // Replace + else m_vGens.Add(pwg); + } + + public CustomPwGenerator Find(PwUuid uuid) + { + if(uuid == null) throw new ArgumentNullException("uuid"); + + foreach(CustomPwGenerator pwg in m_vGens) + { + if(uuid.EqualsValue(pwg.Uuid)) return pwg; + } + + return null; + } + + public CustomPwGenerator Find(string strName) + { + if(strName == null) throw new ArgumentNullException("strName"); + + foreach(CustomPwGenerator pwg in m_vGens) + { + if(pwg.Name == strName) return pwg; + } + + return null; + } + + private int FindIndex(PwUuid uuid) + { + if(uuid == null) throw new ArgumentNullException("uuid"); + + for(int i = 0; i < m_vGens.Count; ++i) + { + if(uuid.EqualsValue(m_vGens[i].Uuid)) return i; + } + + return -1; + } + + public bool Remove(PwUuid uuid) + { + if(uuid == null) throw new ArgumentNullException("uuid"); + + int nIndex = FindIndex(uuid); + if(nIndex < 0) return false; + + m_vGens.RemoveAt(nIndex); + return true; + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs new file mode 100644 index 0000000..cdd1598 --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PatternBasedGenerator.cs @@ -0,0 +1,173 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + internal static class PatternBasedGenerator + { + internal static PwgError Generate(out ProtectedString psOut, + PwProfile pwProfile, CryptoRandomStream crsRandomSource) + { + psOut = ProtectedString.Empty; + LinkedList vGenerated = new LinkedList(); + PwCharSet pcsCurrent = new PwCharSet(); + PwCharSet pcsCustom = new PwCharSet(); + PwCharSet pcsUsed = new PwCharSet(); + bool bInCharSetDef = false; + + string strPattern = ExpandPattern(pwProfile.Pattern); + if(strPattern.Length == 0) return PwgError.Success; + + CharStream csStream = new CharStream(strPattern); + char ch = csStream.ReadChar(); + + while(ch != char.MinValue) + { + pcsCurrent.Clear(); + + bool bGenerateChar = false; + + if(ch == '\\') + { + ch = csStream.ReadChar(); + if(ch == char.MinValue) // Backslash at the end + { + vGenerated.AddLast('\\'); + break; + } + + if(bInCharSetDef) pcsCustom.Add(ch); + else + { + vGenerated.AddLast(ch); + pcsUsed.Add(ch); + } + } + else if(ch == '[') + { + pcsCustom.Clear(); + bInCharSetDef = true; + } + else if(ch == ']') + { + pcsCurrent.Add(pcsCustom.ToString()); + + bInCharSetDef = false; + bGenerateChar = true; + } + else if(bInCharSetDef) + { + if(pcsCustom.AddCharSet(ch) == false) + pcsCustom.Add(ch); + } + else if(pcsCurrent.AddCharSet(ch) == false) + { + vGenerated.AddLast(ch); + pcsUsed.Add(ch); + } + else bGenerateChar = true; + + if(bGenerateChar) + { + PwGenerator.PrepareCharSet(pcsCurrent, pwProfile); + + if(pwProfile.NoRepeatingCharacters) + pcsCurrent.Remove(pcsUsed.ToString()); + + char chGen = PwGenerator.GenerateCharacter(pwProfile, + pcsCurrent, crsRandomSource); + + if(chGen == char.MinValue) return PwgError.TooFewCharacters; + + vGenerated.AddLast(chGen); + pcsUsed.Add(chGen); + } + + ch = csStream.ReadChar(); + } + + if(vGenerated.Count == 0) return PwgError.Success; + + char[] vArray = new char[vGenerated.Count]; + vGenerated.CopyTo(vArray, 0); + + if(pwProfile.PatternPermutePassword) + PwGenerator.ShufflePassword(vArray, crsRandomSource); + + byte[] pbUtf8 = StrUtil.Utf8.GetBytes(vArray); + psOut = new ProtectedString(true, pbUtf8); + MemUtil.ZeroByteArray(pbUtf8); + Array.Clear(vArray, 0, vArray.Length); + vGenerated.Clear(); + + return PwgError.Success; + } + + private static string ExpandPattern(string strPattern) + { + Debug.Assert(strPattern != null); if(strPattern == null) return string.Empty; + string str = strPattern; + + while(true) + { + int nOpen = FindFirstUnescapedChar(str, '{'); + int nClose = FindFirstUnescapedChar(str, '}'); + + if((nOpen >= 0) && (nOpen < nClose)) + { + string strCount = str.Substring(nOpen + 1, nClose - nOpen - 1); + str = str.Remove(nOpen, nClose - nOpen + 1); + + uint uRepeat; + if(StrUtil.TryParseUInt(strCount, out uRepeat) && (nOpen >= 1)) + { + if(uRepeat == 0) + str = str.Remove(nOpen - 1, 1); + else + str = str.Insert(nOpen, new string(str[nOpen - 1], (int)uRepeat - 1)); + } + } + else break; + } + + return str; + } + + private static int FindFirstUnescapedChar(string str, char ch) + { + for(int i = 0; i < str.Length; ++i) + { + char chCur = str[i]; + + if(chCur == '\\') ++i; // Next is escaped, skip it + else if(chCur == ch) return i; + } + + return -1; + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs new file mode 100644 index 0000000..a1273ef --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs @@ -0,0 +1,318 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + public sealed class PwCharSet + { + public const string UpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + public const string LowerCase = "abcdefghijklmnopqrstuvwxyz"; + public const string Digits = "0123456789"; + + public const string UpperConsonants = "BCDFGHJKLMNPQRSTVWXYZ"; + public const string LowerConsonants = "bcdfghjklmnpqrstvwxyz"; + public const string UpperVowels = "AEIOU"; + public const string LowerVowels = "aeiou"; + + public const string Punctuation = @",.;:"; + public const string Brackets = @"[]{}()<>"; + + public const string PrintableAsciiSpecial = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + + public const string UpperHex = "0123456789ABCDEF"; + public const string LowerHex = "0123456789abcdef"; + + public const string Invalid = "\t\r\n"; + public const string LookAlike = @"O0l1I|"; + + private const int CharTabSize = (0x10000 / 8); + + private List m_vChars = new List(); + private byte[] m_vTab = new byte[CharTabSize]; + + private string m_strHighAnsi = string.Empty; + private string m_strSpecial = string.Empty; + + /// + /// Create a new, empty character set collection object. + /// + public PwCharSet() + { + this.Initialize(true); + } + + public PwCharSet(string strCharSet) + { + this.Initialize(true); + this.Add(strCharSet); + } + + private PwCharSet(bool bFullInitialize) + { + this.Initialize(bFullInitialize); + } + + private void Initialize(bool bFullInitialize) + { + this.Clear(); + + if(bFullInitialize == false) return; + + StringBuilder sbHighAnsi = new StringBuilder(); + for(char ch = '~'; ch < 255; ++ch) + sbHighAnsi.Append(ch); + m_strHighAnsi = sbHighAnsi.ToString(); + + PwCharSet pcs = new PwCharSet(false); + pcs.AddRange('!', '/'); + pcs.AddRange(':', '@'); + pcs.AddRange('[', '`'); + pcs.Remove(@"-_ "); + pcs.Remove(PwCharSet.Brackets); + m_strSpecial = pcs.ToString(); + } + + /// + /// Number of characters in this set. + /// + public uint Size + { + get { return (uint)m_vChars.Count; } + } + + /// + /// Get a character of the set using an index. + /// + /// Index of the character to get. + /// Character at the specified position. If the index is invalid, + /// an ArgumentOutOfRangeException is thrown. + public char this[uint uPos] + { + get + { + if(uPos >= (uint)m_vChars.Count) + throw new ArgumentOutOfRangeException("uPos"); + + return m_vChars[(int)uPos]; + } + } + + public string SpecialChars { get { return m_strSpecial; } } + public string HighAnsiChars { get { return m_strHighAnsi; } } + + /// + /// Remove all characters from this set. + /// + public void Clear() + { + m_vChars.Clear(); + Array.Clear(m_vTab, 0, m_vTab.Length); + } + + public bool Contains(char ch) + { + return (((m_vTab[ch / 8] >> (ch % 8)) & 1) != char.MinValue); + } + + public bool Contains(string strCharacters) + { + Debug.Assert(strCharacters != null); + if(strCharacters == null) throw new ArgumentNullException("strCharacters"); + + foreach(char ch in strCharacters) + { + if(this.Contains(ch) == false) return false; + } + + return true; + } + + /// + /// Add characters to the set. + /// + /// Character to add. + public void Add(char ch) + { + if(ch == char.MinValue) { Debug.Assert(false); return; } + + if(this.Contains(ch) == false) + { + m_vChars.Add(ch); + m_vTab[ch / 8] |= (byte)(1 << (ch % 8)); + } + } + + /// + /// Add characters to the set. + /// + /// String containing characters to add. + public void Add(string strCharSet) + { + Debug.Assert(strCharSet != null); + if(strCharSet == null) throw new ArgumentNullException("strCharSet"); + + m_vChars.Capacity = m_vChars.Count + strCharSet.Length; + + foreach(char ch in strCharSet) + this.Add(ch); + } + + public void Add(string strCharSet1, string strCharSet2) + { + this.Add(strCharSet1); + this.Add(strCharSet2); + } + + public void Add(string strCharSet1, string strCharSet2, string strCharSet3) + { + this.Add(strCharSet1); + this.Add(strCharSet2); + this.Add(strCharSet3); + } + + public void AddRange(char chMin, char chMax) + { + m_vChars.Capacity = m_vChars.Count + (chMax - chMin) + 1; + + for(char ch = chMin; ch < chMax; ++ch) + this.Add(ch); + + this.Add(chMax); + } + + public bool AddCharSet(char chCharSetIdentifier) + { + bool bResult = true; + + switch(chCharSetIdentifier) + { + case 'a': this.Add(PwCharSet.LowerCase, PwCharSet.Digits); break; + case 'A': this.Add(PwCharSet.LowerCase, PwCharSet.UpperCase, + PwCharSet.Digits); break; + case 'U': this.Add(PwCharSet.UpperCase, PwCharSet.Digits); break; + case 'c': this.Add(PwCharSet.LowerConsonants); break; + case 'C': this.Add(PwCharSet.LowerConsonants, + PwCharSet.UpperConsonants); break; + case 'z': this.Add(PwCharSet.UpperConsonants); break; + case 'd': this.Add(PwCharSet.Digits); break; // Digit + case 'h': this.Add(PwCharSet.LowerHex); break; + case 'H': this.Add(PwCharSet.UpperHex); break; + case 'l': this.Add(PwCharSet.LowerCase); break; + case 'L': this.Add(PwCharSet.LowerCase, PwCharSet.UpperCase); break; + case 'u': this.Add(PwCharSet.UpperCase); break; + case 'p': this.Add(PwCharSet.Punctuation); break; + case 'b': this.Add(PwCharSet.Brackets); break; + case 's': this.Add(PwCharSet.PrintableAsciiSpecial); break; + case 'S': this.Add(PwCharSet.UpperCase, PwCharSet.LowerCase); + this.Add(PwCharSet.Digits, PwCharSet.PrintableAsciiSpecial); break; + case 'v': this.Add(PwCharSet.LowerVowels); break; + case 'V': this.Add(PwCharSet.LowerVowels, PwCharSet.UpperVowels); break; + case 'Z': this.Add(PwCharSet.UpperVowels); break; + case 'x': this.Add(m_strHighAnsi); break; + default: bResult = false; break; + } + + return bResult; + } + + public bool Remove(char ch) + { + m_vTab[ch / 8] &= (byte)~(1 << (ch % 8)); + return m_vChars.Remove(ch); + } + + public bool Remove(string strCharacters) + { + Debug.Assert(strCharacters != null); + if(strCharacters == null) throw new ArgumentNullException("strCharacters"); + + bool bResult = true; + foreach(char ch in strCharacters) + { + if(!Remove(ch)) bResult = false; + } + + return bResult; + } + + public bool RemoveIfAllExist(string strCharacters) + { + Debug.Assert(strCharacters != null); + if(strCharacters == null) throw new ArgumentNullException("strCharacters"); + + if(this.Contains(strCharacters) == false) + return false; + + return this.Remove(strCharacters); + } + + /// + /// Convert the character set to a string containing all its characters. + /// + /// String containing all character set characters. + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + foreach(char ch in m_vChars) + sb.Append(ch); + + return sb.ToString(); + } + + public string PackAndRemoveCharRanges() + { + StringBuilder sb = new StringBuilder(); + + sb.Append(this.RemoveIfAllExist(PwCharSet.UpperCase) ? 'U' : '_'); + sb.Append(this.RemoveIfAllExist(PwCharSet.LowerCase) ? 'L' : '_'); + sb.Append(this.RemoveIfAllExist(PwCharSet.Digits) ? 'D' : '_'); + sb.Append(this.RemoveIfAllExist(m_strSpecial) ? 'S' : '_'); + sb.Append(this.RemoveIfAllExist(PwCharSet.Punctuation) ? 'P' : '_'); + sb.Append(this.RemoveIfAllExist(@"-") ? 'm' : '_'); + sb.Append(this.RemoveIfAllExist(@"_") ? 'u' : '_'); + sb.Append(this.RemoveIfAllExist(@" ") ? 's' : '_'); + sb.Append(this.RemoveIfAllExist(PwCharSet.Brackets) ? 'B' : '_'); + sb.Append(this.RemoveIfAllExist(m_strHighAnsi) ? 'H' : '_'); + + return sb.ToString(); + } + + public void UnpackCharRanges(string strRanges) + { + if(strRanges == null) { Debug.Assert(false); return; } + if(strRanges.Length < 10) { Debug.Assert(false); return; } + + if(strRanges[0] != '_') this.Add(PwCharSet.UpperCase); + if(strRanges[1] != '_') this.Add(PwCharSet.LowerCase); + if(strRanges[2] != '_') this.Add(PwCharSet.Digits); + if(strRanges[3] != '_') this.Add(m_strSpecial); + if(strRanges[4] != '_') this.Add(PwCharSet.Punctuation); + if(strRanges[5] != '_') this.Add('-'); + if(strRanges[6] != '_') this.Add('_'); + if(strRanges[7] != '_') this.Add(' '); + if(strRanges[8] != '_') this.Add(PwCharSet.Brackets); + if(strRanges[9] != '_') this.Add(m_strHighAnsi); + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs new file mode 100644 index 0000000..dfcb0fd --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwGenerator.cs @@ -0,0 +1,146 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + public enum PwgError + { + Success = 0, + Unknown = 1, + TooFewCharacters = 2, + UnknownAlgorithm = 3 + } + + /// + /// Utility functions for generating random passwords. + /// + public static class PwGenerator + { + public static PwgError Generate(out ProtectedString psOut, + PwProfile pwProfile, byte[] pbUserEntropy, + CustomPwGeneratorPool pwAlgorithmPool) + { + Debug.Assert(pwProfile != null); + if(pwProfile == null) throw new ArgumentNullException("pwProfile"); + + CryptoRandomStream crs = CreateCryptoStream(pbUserEntropy); + PwgError e = PwgError.Unknown; + + if(pwProfile.GeneratorType == PasswordGeneratorType.CharSet) + e = CharSetBasedGenerator.Generate(out psOut, pwProfile, crs); + else if(pwProfile.GeneratorType == PasswordGeneratorType.Pattern) + e = PatternBasedGenerator.Generate(out psOut, pwProfile, crs); + else if(pwProfile.GeneratorType == PasswordGeneratorType.Custom) + e = GenerateCustom(out psOut, pwProfile, crs, pwAlgorithmPool); + else { Debug.Assert(false); psOut = ProtectedString.Empty; } + + return e; + } + + private static CryptoRandomStream CreateCryptoStream(byte[] pbAdditionalEntropy) + { + byte[] pbKey = CryptoRandom.Instance.GetRandomBytes(256); + + // Mix in additional entropy + if((pbAdditionalEntropy != null) && (pbAdditionalEntropy.Length > 0)) + { + for(int nKeyPos = 0; nKeyPos < pbKey.Length; ++nKeyPos) + pbKey[nKeyPos] ^= pbAdditionalEntropy[nKeyPos % pbAdditionalEntropy.Length]; + } + + return new CryptoRandomStream(CrsAlgorithm.Salsa20, pbKey); + } + + internal static char GenerateCharacter(PwProfile pwProfile, + PwCharSet pwCharSet, CryptoRandomStream crsRandomSource) + { + if(pwCharSet.Size == 0) return char.MinValue; + + ulong uIndex = crsRandomSource.GetRandomUInt64(); + uIndex %= (ulong)pwCharSet.Size; + + char ch = pwCharSet[(uint)uIndex]; + + if(pwProfile.NoRepeatingCharacters) + pwCharSet.Remove(ch); + + return ch; + } + + internal static void PrepareCharSet(PwCharSet pwCharSet, PwProfile pwProfile) + { + pwCharSet.Remove(PwCharSet.Invalid); + + if(pwProfile.ExcludeLookAlike) pwCharSet.Remove(PwCharSet.LookAlike); + + if(pwProfile.ExcludeCharacters.Length > 0) + pwCharSet.Remove(pwProfile.ExcludeCharacters); + } + + internal static void ShufflePassword(char[] pPassword, + CryptoRandomStream crsRandomSource) + { + Debug.Assert(pPassword != null); if(pPassword == null) return; + Debug.Assert(crsRandomSource != null); if(crsRandomSource == null) return; + + if(pPassword.Length <= 1) return; // Nothing to shuffle + + for(int nSelect = 0; nSelect < pPassword.Length; ++nSelect) + { + ulong uRandomIndex = crsRandomSource.GetRandomUInt64(); + uRandomIndex %= (ulong)(pPassword.Length - nSelect); + + char chTemp = pPassword[nSelect]; + pPassword[nSelect] = pPassword[nSelect + (int)uRandomIndex]; + pPassword[nSelect + (int)uRandomIndex] = chTemp; + } + } + + private static PwgError GenerateCustom(out ProtectedString psOut, + PwProfile pwProfile, CryptoRandomStream crs, + CustomPwGeneratorPool pwAlgorithmPool) + { + psOut = ProtectedString.Empty; + + Debug.Assert(pwProfile.GeneratorType == PasswordGeneratorType.Custom); + if(pwAlgorithmPool == null) return PwgError.UnknownAlgorithm; + + string strID = pwProfile.CustomAlgorithmUuid; + if(string.IsNullOrEmpty(strID)) { Debug.Assert(false); return PwgError.UnknownAlgorithm; } + + byte[] pbUuid = Convert.FromBase64String(strID); + PwUuid uuid = new PwUuid(pbUuid); + CustomPwGenerator pwg = pwAlgorithmPool.Find(uuid); + if(pwg == null) { Debug.Assert(false); return PwgError.UnknownAlgorithm; } + + ProtectedString pwd = pwg.Generate(pwProfile.CloneDeep(), crs); + if(pwd == null) return PwgError.Unknown; + + psOut = pwd; + return PwgError.Success; + } + } +} diff --git a/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs b/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs new file mode 100644 index 0000000..69e736b --- /dev/null +++ b/ModernKeePassLib/Cryptography/PasswordGenerator/PwProfile.cs @@ -0,0 +1,274 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.ComponentModel; +using System.Xml.Serialization; + +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Cryptography.PasswordGenerator +{ + /// + /// Type of the password generator. Different types like generators + /// based on given patterns, based on character sets, etc. are + /// available. + /// + public enum PasswordGeneratorType + { + /// + /// Generator based on character spaces/sets, i.e. groups + /// of characters like lower-case, upper-case or numeric characters. + /// + CharSet = 0, + + /// + /// Password generation based on a pattern. The user has provided + /// a pattern, which describes how the generated password has to + /// look like. + /// + Pattern = 1, + + Custom = 2 + } + + public sealed class PwProfile : IDeepCloneable + { + private string m_strName = string.Empty; + [DefaultValue("")] + public string Name + { + get { return m_strName; } + set { m_strName = value; } + } + + private PasswordGeneratorType m_type = PasswordGeneratorType.CharSet; + public PasswordGeneratorType GeneratorType + { + get { return m_type; } + set { m_type = value; } + } + + private bool m_bUserEntropy = false; + [DefaultValue(false)] + public bool CollectUserEntropy + { + get { return m_bUserEntropy; } + set { m_bUserEntropy = value; } + } + + private uint m_uLength = 20; + public uint Length + { + get { return m_uLength; } + set { m_uLength = value; } + } + + private PwCharSet m_pwCharSet = new PwCharSet(PwCharSet.UpperCase + + PwCharSet.LowerCase + PwCharSet.Digits); + [XmlIgnore] + public PwCharSet CharSet + { + get { return m_pwCharSet; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_pwCharSet = value; + } + } + + private string m_strCharSetRanges = string.Empty; + [DefaultValue("")] + public string CharSetRanges + { + get { this.UpdateCharSet(true); return m_strCharSetRanges; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strCharSetRanges = value; + this.UpdateCharSet(false); + } + } + + private string m_strCharSetAdditional = string.Empty; + [DefaultValue("")] + public string CharSetAdditional + { + get { this.UpdateCharSet(true); return m_strCharSetAdditional; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strCharSetAdditional = value; + this.UpdateCharSet(false); + } + } + + private string m_strPattern = string.Empty; + [DefaultValue("")] + public string Pattern + { + get { return m_strPattern; } + set { m_strPattern = value; } + } + + private bool m_bPatternPermute = false; + [DefaultValue(false)] + public bool PatternPermutePassword + { + get { return m_bPatternPermute; } + set { m_bPatternPermute = value; } + } + + private bool m_bNoLookAlike = false; + [DefaultValue(false)] + public bool ExcludeLookAlike + { + get { return m_bNoLookAlike; } + set { m_bNoLookAlike = value; } + } + + private bool m_bNoRepeat = false; + [DefaultValue(false)] + public bool NoRepeatingCharacters + { + get { return m_bNoRepeat; } + set { m_bNoRepeat = value; } + } + + private string m_strExclude = string.Empty; + [DefaultValue("")] + public string ExcludeCharacters + { + get { return m_strExclude; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strExclude = value; + } + } + + private string m_strCustomID = string.Empty; + [DefaultValue("")] + public string CustomAlgorithmUuid + { + get { return m_strCustomID; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strCustomID = value; + } + } + + private string m_strCustomOpt = string.Empty; + [DefaultValue("")] + public string CustomAlgorithmOptions + { + get { return m_strCustomOpt; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strCustomOpt = value; + } + } + + public PwProfile() + { + } + + public PwProfile CloneDeep() + { + PwProfile p = new PwProfile(); + + p.m_strName = m_strName; + p.m_type = m_type; + p.m_bUserEntropy = m_bUserEntropy; + p.m_uLength = m_uLength; + p.m_pwCharSet = new PwCharSet(m_pwCharSet.ToString()); + p.m_strCharSetRanges = m_strCharSetRanges; + p.m_strCharSetAdditional = m_strCharSetAdditional; + p.m_strPattern = m_strPattern; + p.m_bPatternPermute = m_bPatternPermute; + p.m_bNoLookAlike = m_bNoLookAlike; + p.m_bNoRepeat = m_bNoRepeat; + p.m_strExclude = m_strExclude; + p.m_strCustomID = m_strCustomID; + p.m_strCustomOpt = m_strCustomOpt; + + return p; + } + + private void UpdateCharSet(bool bSetXml) + { + if(bSetXml) + { + PwCharSet pcs = new PwCharSet(m_pwCharSet.ToString()); + m_strCharSetRanges = pcs.PackAndRemoveCharRanges(); + m_strCharSetAdditional = pcs.ToString(); + } + else + { + PwCharSet pcs = new PwCharSet(m_strCharSetAdditional); + pcs.UnpackCharRanges(m_strCharSetRanges); + m_pwCharSet = pcs; + } + } + + public static PwProfile DeriveFromPassword(ProtectedString psPassword) + { + PwProfile pp = new PwProfile(); + Debug.Assert(psPassword != null); if(psPassword == null) return pp; + + byte[] pbUtf8 = psPassword.ReadUtf8(); + char[] vChars = StrUtil.Utf8.GetChars(pbUtf8); + + pp.GeneratorType = PasswordGeneratorType.CharSet; + pp.Length = (uint)vChars.Length; + + PwCharSet pcs = pp.CharSet; + pcs.Clear(); + + foreach(char ch in vChars) + { + if((ch >= 'A') && (ch <= 'Z')) pcs.Add(PwCharSet.UpperCase); + else if((ch >= 'a') && (ch <= 'z')) pcs.Add(PwCharSet.LowerCase); + else if((ch >= '0') && (ch <= '9')) pcs.Add(PwCharSet.Digits); + else if((@"!#$%&'*+,./:;=?@^").IndexOf(ch) >= 0) pcs.Add(pcs.SpecialChars); + else if(ch == ' ') pcs.Add(' '); + else if(ch == '-') pcs.Add('-'); + else if(ch == '_') pcs.Add('_'); + else if(ch == '\"') pcs.Add(pcs.SpecialChars); + else if(ch == '\\') pcs.Add(pcs.SpecialChars); + else if((@"()[]{}<>").IndexOf(ch) >= 0) pcs.Add(PwCharSet.Brackets); + else if((ch >= '~') && (ch <= 255)) pcs.Add(pcs.HighAnsiChars); + else pcs.Add(ch); + } + + Array.Clear(vChars, 0, vChars.Length); + MemUtil.ZeroByteArray(pbUtf8); + return pp; + } + + public bool HasSecurityReducingOption() + { + return (m_bNoLookAlike || m_bNoRepeat || (m_strExclude.Length > 0)); + } + } +} diff --git a/ModernKeePassLib/Cryptography/PopularPasswords.cs b/ModernKeePassLib/Cryptography/PopularPasswords.cs new file mode 100644 index 0000000..bb58461 --- /dev/null +++ b/ModernKeePassLib/Cryptography/PopularPasswords.cs @@ -0,0 +1,539 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +using ModernKeePassLib.Utility; + +#if !KeePassLibSD +namespace ModernKeePassLib.Cryptography +{ + /// + /// Bloom filter-based popular password checking. + /// + public static class PopularPasswords + { + private const int PpcTableSize = 8192 * 8; // Bits, multiple of 64 + + // Bits set: 32433 of 65536 + // Hash functions: 32 + // Phi (bits unset ratio) estimation: 0.505455388896019 + // Exact Phi: 0.505111694335938 + // False positives ratio: 1.67583063859565E-10 + private static readonly ulong[] PpcTable = { + 0x60383D3A85560B9BUL, 0x2578CE9D37C6AEB7UL, 0xF509A5743FD03228UL, + 0x19B7455E8933EE56UL, 0x5EA419ADCFD9C20EUL, 0xEA618EFC0B37A162UL, + 0xE0FD4D1FFF1CE415UL, 0x7A649E0301BB6060UL, 0x80D9CD9F9EEB603DUL, + 0x47D6010D0D6E6CDEUL, 0x2552708C589EB554UL, 0x073F1A3DB3267502UL, + 0x3313FEC2A2FEA475UL, 0x4593665C44934FEBUL, 0x410A301A23660395UL, + 0x6AD06DA533FF5659UL, 0x423DAF86F3E41F4AUL, 0x82F035A971C6FD18UL, + 0xB5E9139F28C93223UL, 0x1D07C3F4160585CAUL, 0x24B01EDB6B23E2C5UL, + 0xD52F25B724F936C9UL, 0x8018392517836928UL, 0x3AA4C0F8E181EDA2UL, + 0x8D93683EF7D52529UL, 0x6164BB6208114460UL, 0x737A04D8FEF3D88FUL, + 0x3400097098D5C2CBUL, 0x3C2B9ABE5C455B2EUL, 0x3A3819973AB32DA2UL, + 0x38ACB428510AF40BUL, 0x83320D5114B74771UL, 0xC25BEC333B90DCD1UL, + 0x0E9F412FBA3813D1UL, 0x047E31E3098EB2B8UL, 0xBB686AC643F1741FUL, + 0x0BE22E9C0EF0E8F2UL, 0x65AA9504E5F40D31UL, 0xE018DF5D64C62AC7UL, + 0x17020E9A7EFA12EDUL, 0xFC12A7C16006DE82UL, 0x8DE4747E3745346DUL, + 0x31D8C051A43CECAFUL, 0xBE9AFBEF127C1B12UL, 0xAEE94B4B808BBEE2UL, + 0x3A0099CA32835B41UL, 0x59EB3173468D8C49UL, 0x6F89DB1E6DAAE9E1UL, + 0x4C1ADAA837E968E4UL, 0x6E3593A56C682769UL, 0x022AD591689B5B82UL, + 0x4AC33861ED978032UL, 0xF6F476E4E6A1318DUL, 0x2DA690A11AA05A23UL, + 0x916FC56378C29D77UL, 0xAB3238BE22294659UL, 0x2D73A29019B28C77UL, + 0xAAF26C12EC9C3C42UL, 0x058A278A24B334F9UL, 0x033BD18FB8D9BACDUL, + 0x8B3833596008B07CUL, 0x280B6D093333E5E5UL, 0x2128DBE126CA3E1EUL, + 0xCCF09769382472D8UL, 0x0CB6E495BD90CED6UL, 0x1303A37577C01C5AUL, + 0xC8BBF4734FC34C53UL, 0x1B38B72B10F86CD5UL, 0x5098E2D6C1892E51UL, + 0x2DD8065B79DB5380UL, 0x5B9A1A6D6A2292B7UL, 0xC70F751604D0497CUL, + 0x911E08D7363B5213UL, 0x9F2E245273308D2EUL, 0x64D354827957F50EUL, + 0x09856750F560342CUL, 0xDE091F26603F0E70UL, 0xDDE6B4E76173E3B1UL, + 0xC1584AE1B26FA08EUL, 0x1EA29887837838D2UL, 0x6D7643FC67B15C54UL, + 0x921E60571ED103EAUL, 0x63EB1EB33E7AFFF1UL, 0x80BA4D1F95BFD615UL, + 0xEC8A1D4FC1A6B8E0UL, 0x2C46861B6DB17D1AUL, 0x01F05D06927E443BUL, + 0x6172EC2EABEAD454UL, 0x21B8726C6F7C4102UL, 0x3C016CD9945C72ECUL, + 0x708F77B2C0E8B665UL, 0xFC35BE2BB88974DAUL, 0x805897A33702BD61UL, + 0x9A93367A6041226CUL, 0xFDAB188B6158F6BEUL, 0x5F21014A065E918CUL, + 0xF4381DD77772D19CUL, 0xC664B6358AA85011UL, 0xF2639D7B3E2307E6UL, + 0x3FA000D4A5A9C37AUL, 0x8F45D116ED8DC70FUL, 0x8CB8758E45C140D0UL, + 0x49832B46D716236DUL, 0xCC8E4961A93065B8UL, 0x8A996533EDACEB0EUL, + 0x15B35155EC56FAC1UL, 0xE7E0C6C05A9F1885UL, 0x05914F9A1D1C79F9UL, + 0x730000A30B6725F0UL, 0xC95E671F8E543780UL, 0x47D68382400AF94EUL, + 0x1A27F2734FE2249AUL, 0x828079C332D9C0ABUL, 0x2E9BC798EA09170EUL, + 0x6B7CDAC829018C91UL, 0x7B89604901736993UL, 0xABE4EB26F47608F0UL, + 0x70D5FDC88A0FF1B1UL, 0x5A1F0BAB9AB8A158UL, 0xDC89AE0A735C51A4UL, + 0x36C1EA01E9C89B84UL, 0x3A9757AF204096DBUL, 0x1D56C8328540F963UL, + 0x910A8694692472FAUL, 0x697192C9DF145604UL, 0xB20F7A4438712AA2UL, + 0xE8C99185243F4896UL, 0xFBC8970EDBC39CA7UL, 0x33485403868C3761UL, + 0xAFA97DDEDB1D6AD8UL, 0x54A1A6F24476A3BBUL, 0xFE4E078B184BDB7FUL, + 0x5ED1543919754CD8UL, 0x86F8C775160FC08CUL, 0x9B4098F57019040DUL, + 0x039518BBE841327BUL, 0x111D0D420A3F5F6AUL, 0x0666067346AF34ACUL, + 0xD43F1D14EB239B9BUL, 0xA6BB91FEB5618F5BUL, 0xA2B5218B202409ADUL, + 0xC004FA688C3AC25EUL, 0xF0E2D9EA2935E1DCUL, 0x380B31CFA2F2AF43UL, + 0x50E050AE426250EAUL, 0x628ED94D1AA8F55BUL, 0xF8EB0654F0166311UL, + 0x1F8858D26DDA5CC5UL, 0x931425D11CB1EFEBUL, 0xF661D461DC1A05D3UL, + 0x7B75ED7EC6936DA8UL, 0x8713C59690985202UL, 0xF61D6F93F07C0E85UL, + 0xFD1771F6711D6F4FUL, 0x5835A67E1B11419FUL, 0x33EF08ABD56A1050UL, + 0x55B5D0043FA2C01CUL, 0x53316ED963B92D9DUL, 0x6A8C93744E521EDBUL, + 0x083E948062EB9543UL, 0x1C15289B3189AFB1UL, 0xA6A0A5053AE2212DUL, + 0x6573AF7F01FAFF3BUL, 0x58B6F034CFCFE843UL, 0xEB2837CA5AEA6AEDUL, + 0x633E7897097AC328UL, 0x7FA91789B6CCEE82UL, 0xBEE2402F4E7D65EEUL, + 0x616A103EC8FB0DBEUL, 0x65991F9FB25E13FCUL, 0x54EA8A3FADEC1F4BUL, + 0x6D497C5ACDEA0E7AUL, 0x5865045E8CA18527UL, 0xA406C09215ABD61FUL, + 0x68F81F5745FC9875UL, 0xE496D850CEFF3FA9UL, 0xD225C88D63212CB1UL, + 0x37676390525116D2UL, 0x415614AB14188A7DUL, 0xABE58EBC1F6DDC63UL, + 0xDE10312B2C25D28CUL, 0x86C86D7A0B847635UL, 0x408B511D584DC3DCUL, + 0x6711FCC14B303FEDUL, 0x1284DF9CC6972023UL, 0xC3CE0B33141BFA8FUL, + 0x0F3F58367D4A1819UL, 0x9313F83058FBE6D0UL, 0x6FCA5EF39B8E2F47UL, + 0xA90F5C95D887756DUL, 0x96C4E2AD85D5AF6EUL, 0x0ED68A81F526F0A0UL, + 0x53E4472DB4255A35UL, 0xAC581015134D58A6UL, 0x12C000D85C644FC7UL, + 0x124D489B2C0FE6E4UL, 0x8FF83531C6F5D61AUL, 0x132BD6488304F73BUL, + 0x110E99BC59604CB9UL, 0xC28186ACBC940C9BUL, 0x2094C07F48141230UL, + 0x65FB9881A5053589UL, 0x940A3E6D72F09D69UL, 0x972A922CB14BA66EUL, + 0x8D07E59C6DDD4327UL, 0xCB67F993F820157CUL, 0x65B7A54E5FB2ED6CUL, + 0xC235828849576653UL, 0xA695F85479467538UL, 0x9E2BA885E63C4243UL, + 0xDE64A6A5EF84C222UL, 0xC2AB9AF302080621UL, 0x88DBA09B87FA0734UL, + 0xDF002765B44D02E1UL, 0xD50D8D90587CD820UL, 0x1B68B70ED179EFE1UL, + 0xD6E77F8EC26AE95CUL, 0xEE57EB7C45051872UL, 0x4D2B445F36A7F9FDUL, + 0x5502ABB8BB14D7F1UL, 0xAF2C0DF0406FA901UL, 0x6522833444BF4A83UL, + 0xD7CB2E3FC691BE8DUL, 0x4F36F70D2E80D19AUL, 0xF6945FE911D4923BUL, + 0xE3C6FE1EA47399C1UL, 0xF09EA1B2F837702CUL, 0x5122537CF97B5CB5UL, + 0x0C8202B70E9BF154UL, 0x68B554AB58EB5E68UL, 0x7BF9B8052C9BEADEUL, + 0x33612BFCD303810DUL, 0x03E38CF67B37DC53UL, 0x2BFDFF8691F37D5CUL, + 0x4AB483D1CB1D07F6UL, 0xF071A58640639A5CUL, 0x9D6B98169B745CE1UL, + 0x5F42D3E870FDCD93UL, 0x4EDF04404F258238UL, 0x2EAB6E10D65C9BB3UL, + 0x5BB71411EF78DAD2UL, 0x0DE8128636A5D689UL, 0x18FDD1F484DC9365UL, + 0x9896B8896941DA5BUL, 0x8BEF8E3BA4448E5FUL, 0x963A1E977CB1D2CAUL, + 0x02BCF5F068D52851UL, 0x0CD783F09BFBE381UL, 0x350DA833D8C5DB47UL, + 0x8D444C914D795C43UL, 0x8A00B4DFC44D9476UL, 0x4B36CBEC089E55FDUL, + 0xD9D2FA1B0AC66211UL, 0x6C7FC30FA31A8B60UL, 0x9EF4504CC985AD6BUL, + 0x8F2E7E5E0C00EE73UL, 0x819131CFEEBEA069UL, 0xB1E406A863E7A1B4UL, + 0x501F072FF1F2AB67UL, 0xDE578BFC5ADBC264UL, 0xCDD66A09C8E13881UL, + 0x4D443460CE52957FUL, 0x3B198C267976ECFAUL, 0x6B98323D8BD26522UL, + 0x80161F6A489E4BF8UL, 0xE03A8AFCC7AE6872UL, 0x2484BD95A305AB27UL, + 0x6ADDAA46BF25DD0EUL, 0xA429D8B00100477CUL, 0x55AEDB88A074BF2CUL, + 0x63D9F9021AB8F5F3UL, 0x37858538A10C265CUL, 0xEF54C2CE9D063149UL, + 0xFA5CE5AF33E2C136UL, 0xE601A559D0C391D7UL, 0x7C4ED29BBF57DC7EUL, + 0x8FD0D4146DE9E900UL, 0xB58ABFA6CE6C0733UL, 0xF8D7F7743B33EAFFUL, + 0x453FA782F454643CUL, 0xD01752C21AF21E66UL, 0xA50BB7913EAF05DFUL, + 0x966D5B140B2F4189UL, 0x956F5638AFF3D148UL, 0x93FAA838420E8AB3UL, + 0x715E26043071EABDUL, 0x01E7B458B5FD3A41UL, 0x5CFA99C4CC0492AAUL, + 0x761FD391C3623044UL, 0xD39E44E9DB96B5BCUL, 0x8806C544F0534A07UL, + 0x9B225CAFE97EAAC1UL, 0xEAE5E18583492767UL, 0x6B4E51E4C297F096UL, + 0xFC512662EF47E41DUL, 0xB6AC60427DB46F8BUL, 0x8F137F3DB4429C9DUL, + 0x04C65FBEAE9FD8D0UL, 0xEB72305958AE5022UL, 0xAA93AA14BCA2961EUL, + 0x6C7547F9456CA37AUL, 0xEE6094871615BA34UL, 0x489BC8EDE0940402UL, + 0x1108AEFAAD892229UL, 0x673B8B1CF6BED23EUL, 0xFDB781A75FD94DEAUL, + 0x11D9E0F5D914A7BEUL, 0x02830D07F018143DUL, 0x9B3163B8188FD2BAUL, + 0x32C1BEC97D06117EUL, 0x697268B761240CFFUL, 0xBD89CE3037C2E7A9UL, + 0xF21C158125B19600UL, 0x632CB1931601B70AUL, 0x7BB3FB131338085CUL, + 0xA9C06689B8138384UL, 0x161CCBF83EBDC2A1UL, 0x2CF83C01A80B7935UL, + 0x9E51FE393B8E2FF0UL, 0xFE96E52B1606C1A7UL, 0x5E20DFB87F81ACCEUL, + 0xF95DB9602CDAE467UL, 0xDEA155CD35555FEBUL, 0xF0669B810F70CDC6UL, + 0xD36C2FBEB6A449ACUL, 0xCE500C6621C0A445UL, 0x41308909E366460AUL, + 0xAC4D8178DA0CEC24UL, 0xC69049179ED09F7DUL, 0x36B608A0BA2FD848UL, + 0xDF511894DD9568B4UL, 0xB3BFDF78EC861A6CUL, 0xCD50F39D19848153UL, + 0xD2C1BC57E78A408CUL, 0x1E6613EFBB11B5EBUL, 0xF58E30D2D90F73D3UL, + 0xCCB5E2F5E168D742UL, 0xEE97259469BDB672UL, 0x6784D35AF65935A8UL, + 0x71032765ADED1FE8UL, 0x4BBF2FE54D9B72E3UL, 0x5A1BB7831E876A05UL, + 0x12A8FC949EE91686UL, 0x8296F8FA83BD112CUL, 0xAAA7E3BFF64D34D5UL, + 0x0301655E1794EE4BUL, 0x1E547C011BBF30E1UL, 0x39D74FEC536F31D6UL, + 0x3C31A7478B1815BAUL, 0x525C774F82D5836EUL, 0xECF7186DC612FD8CUL, + 0x96B7C4EDD1F3536FUL, 0x7E8C21F19C08541CUL, 0xEE92DB0CF91E4B09UL, + 0xF666190D1591AE5DUL, 0x5E9B45102C895361UL, 0x9A95597AAE5C905DUL, + 0x6E1272E5BB93F93FUL, 0x0E39E612402BFCF8UL, 0x576C9E8CA2A3B35EUL, + 0x7E2E629996D0C35FUL, 0xC95DFF54E3524FCCUL, 0x260F9DEBDEB0E5CBUL, + 0x577B6C6640BAF1ABUL, 0xCA76677779CA358EUL, 0x9E2714BEBCFDB144UL, + 0xD660595CE30FD3EEUL, 0x72DE172D55A5706EUL, 0xB4C84D564489D420UL, + 0x160AA2B9399D5A9DUL, 0x2906ECE619DAC4D2UL, 0x12CE8E8E68A4C317UL, + 0x6BE2DFE89901CAA1UL, 0xEE1D68158102EB77UL, 0x64EB75E45BDA1AC5UL, + 0xEFECF9F98720B55DUL, 0x41CDF813931315BFUL, 0x5F1E4F50CF98FFD4UL, + 0xE69E09EED12E173BUL, 0x89A3707F0396FF65UL, 0x81E36B9DF4FFB492UL, + 0x58C32E883D4DE6DDUL, 0x2D4725C2A5F0B469UL, 0x6B2B9C27CC421CACUL, + 0x3C30F2AD966800C7UL, 0xFF74938BB76B8A7CUL, 0x52B5C99114FD93FAUL, + 0x51647EDCA6C104DAUL, 0xEB47684CF796DF4EUL, 0x376D74A5AB14BD71UL, + 0xF0871FEF8E9DAA3EUL, 0x1D65B134B2E045B6UL, 0x9DC8C0D8623BBA48UL, + 0xAD6FC3C59DBDADF4UL, 0x66F6EBA55488B569UL, 0xB00D53E0E2D38F0AUL, + 0x43A4212CEAD34593UL, 0x44724185FF7019FFUL, 0x50F46061432B3635UL, + 0x880AA4C24E6B320BUL, 0xCAFCB3409A0DB43FUL, 0xA7F1A13DEF47514BUL, + 0x3DC8A385A698220CUL, 0xFA17F82E30B85580UL, 0x430E7F0E88655F47UL, + 0x45A1566013837B47UL, 0x84B2306D2292804EUL, 0xE7A3AF21D074E419UL, + 0x09D08E2C5E569D4DUL, 0x84228F8908383FA2UL, 0xC34079610C8D3E82UL, + 0x66C96426C54A5453UL, 0xD41F164117D32C93UL, 0x7829A66BF1FEC186UL, + 0x4BB6846694BDFC18UL, 0x857D1C1C01352C01UL, 0xAB8E68BA85402A45UL, + 0x74B3C4F101FE76C8UL, 0x6CF482CFAFB29FFEUL, 0x28B174A18F4DC3D1UL, + 0x833C3425B2AA3755UL, 0x8AA58A32747F4432UL, 0xFE7B9FB4BCE3CD58UL, + 0xB0836B2C16FA5553UL, 0x1D08EE6861BF3F23UL, 0x0FAE41E914562DF3UL, + 0xB10A2E041937FC57UL, 0xDA60BB363415BF4CUL, 0xEEC67DBAB4CF4F0AUL, + 0x9A6ED59FCC923B5CUL, 0x9A913C01A8EC7A83UL, 0xAD4779F2F9C7721FUL, + 0x2BF0B7D105BE7459UL, 0x189EFA9AD5195EC6UL, 0xB5C9A2DD64B2A903UL, + 0x5BCD642B2C2FD32CUL, 0xFED3FBF78CB0891FUL, 0x1ED958EE3C36DD3FUL, + 0x030F5DE9CA65E97CUL, 0xBB5BCF8C931B85FEUL, 0xFD128759EA1D8061UL, + 0x2C0238AC416BE6BCUL, 0xBB018584EEACFA27UL, 0xCEA7288C1964DE15UL, + 0x7EA5C3840F29AA4DUL, 0x5DA841BA609E4A50UL, 0xE53AF84845985EB1UL, + 0x93264DA9487183E4UL, 0xC3A4E367AF6D8D15UL, 0xDD4EB6450577BAF8UL, + 0x2AA3093EE2C658ACUL, 0x3D036EC45055C580UL, 0xDDEDB34341C5B7DFUL, + 0x524FFBDC4A1FAC90UL, 0x1B9D63DE13D82907UL, 0x69F9BAF0E868B640UL, + 0xFC1A453A9253013CUL, 0x08B900DECAA77377UL, 0xFF24C72324153C59UL, + 0x6182C1285C507A9BUL, 0x4E6680A54A03CCC8UL, 0x7165680200B67F1FUL, + 0xC3290B26A07DCE5BUL, 0x2AD16584AA5BECE9UL, 0x5F10DF677C91B05EUL, + 0x4BE1B0E2334B198AUL, 0xEA2466E4F4E4406DUL, 0x6ECAA92FF91E6F1DUL, + 0x0267738EFA75CADDUL, 0x4282ED10A0EBFCF2UL, 0xD3F84CE8E1685271UL, + 0xB667ED35716CA215UL, 0x97B4623D70DB7FA8UL, 0xB7BA3AA5E6C2E7CBUL, + 0x8942B2F97118255BUL, 0x009050F842FB52ADUL, 0x114F5511999F5BD5UL, + 0x70C1CAAF1E83F00AUL, 0xAC8EE25D462BB1AAUL, 0x63EEF42AD4E1BED9UL, + 0x58DFBB3D22D3D1A5UL, 0x82B0027C0C63D816UL, 0x48D038F08F3D848BUL, + 0xCE262D5F9A12610EUL, 0xA54BF51C21BD0167UL, 0xF3645F6FB948397DUL, + 0x9188AE58532DA501UL, 0xEC90B0E1479DB767UL, 0x37F4886B83724F80UL, + 0x232B8FF20ACD95AFUL, 0x88A228285D6BCDF0UL, 0x321FB91600259AEEUL, + 0xA1F875F161D18E5EUL, 0x5B6087CDA21AEA0CUL, 0x0156923ED1A3D5F1UL, + 0xC2892C8A6133B5D3UL, 0x015CA4DF0EA6354DUL, 0x5E25EB261B69A7D4UL, + 0xAAA8CF0C012EFBA7UL, 0xCF3466248C37868BUL, 0x0D744514BD1D82C0UL, + 0xB00FF1431EDDF490UL, 0xC79B86A0E3A8AB08UL, 0xFC361529BC9F1252UL, + 0x869285653FB82865UL, 0x9F1C7A17546339ABUL, 0xE31AA66DBD5C4760UL, + 0x51B9D2A765E0FC31UL, 0x31F39528C4CD13D8UL, 0x16C6C35B0D3A341DUL, + 0x90296B1B0F28E2CDUL, 0x36338472A8DB5830UL, 0xA648E6D44DF14F87UL, + 0x93E231E65EB1823FUL, 0x95AA7B9D08E2B627UL, 0x7932D149374700C7UL, + 0x09EFE0A8BF245193UL, 0x742AA63BCEAFD6D8UL, 0x82D4BC5FEDF158B7UL, + 0x02CDEA673CFF150DUL, 0xD8D7B5813B602D15UL, 0xA5A7B670EF15A5EDUL, + 0x4C08E580A1D46AF2UL, 0xC3CA9B905D035647UL, 0x6A39ABB02F6F1B83UL, + 0xD2EC2169F4D02436UL, 0x8E6AEA4DF8515AF2UL, 0x7B3DD4A8693CA2DAUL, + 0xC2ABF17A50AEC383UL, 0xD4FB84F8B6D4F709UL, 0x2839A3EAA2E4C8A7UL, + 0x5D5FD278FE10E1E9UL, 0x5610DDF74125D5A7UL, 0xA484B0B83461DCEAUL, + 0xA511920C0A502369UL, 0xC53F30C6A5394CA4UL, 0x528799285D304DD4UL, + 0xF6D7914CB252BB48UL, 0x892129CB52E65D15UL, 0x15A81B70519ACE6FUL, + 0x5CFBFFD7A2A1C630UL, 0x3B900509C82DF46DUL, 0x19C3CE05D66D5FFCUL, + 0x937D521A4A4799A0UL, 0xD0AE34A6EAD7207DUL, 0x3258A69F1D1A1B38UL, + 0xB173E3255723CC02UL, 0xD7E48FEF7F414F1BUL, 0xDCEBA75F5C761ABEUL, + 0x6DA10C618DEA0D17UL, 0x423FA8B05954FBD1UL, 0x7E73C2E7D923F3C9UL, + 0xC22E21C927C684D1UL, 0x756BAA758764685FUL, 0x8C90B4C4E741D880UL, + 0x1B658C9F4B41D846UL, 0x5D80C14094366707UL, 0xB55FED3E03C00F2DUL, + 0x9B69EB7964C69C83UL, 0x356ED81C9494DADDUL, 0x7599AFF0B2A339D6UL, + 0xA5EBFD25C9B5816BUL, 0xA481DC1C8995E1EFUL, 0xE42C63DF0D402397UL, + 0x3B497B4C30873BAAUL, 0xA950B78BA8772C96UL, 0xD46308D4C76F115DUL, + 0x73714A4ACA76A857UL, 0x0DA86B958FF8CB7DUL, 0xEB61F617B90E0A75UL, + 0xD6106C9B39F51F55UL, 0xB179F73A6BD23B59UL, 0xE7F056E50104A460UL, + 0xBC5B5387634A8642UL, 0xE1678D8752996AF4UL, 0xB508F3D394664A4BUL, + 0xC88536DC4A219B0FUL, 0x39964CBB8CE367B1UL, 0xD51E211D5E9E1417UL, + 0x6821B97B496870F2UL, 0xA596257350CA0A99UL, 0x6D051EE2C49D4D1DUL, + 0xCB426AD61AA8D9B5UL, 0x5FFD3A4062B06D22UL, 0xDAD37BF2A4C594EBUL, + 0x6B9CC848E2B0C686UL, 0x19B4232F3BC622AEUL, 0x70C13C7E5950B702UL, + 0x383318CA622101ACUL, 0xD9647C028CD1C4DFUL, 0x006D123BC553B93CUL, + 0x2CA9D7D896EAE722UL, 0xF19872AC8A0BD5A8UL, 0x59838578EB9E8E5CUL, + 0xB948621EE99B27D4UL, 0x2B470E6036E0E387UL, 0xD0A7E8F0C8A32A84UL, + 0xCBF869271A8E0914UL, 0x705F76A5EA4437CFUL, 0xBAD2BF4933215152UL, + 0xE52EDE847038EA23UL, 0xB8A3EFD3D58D7607UL, 0x748472F5AD330239UL, + 0xCC079CFD428690F6UL, 0x3687450CB7534DACUL, 0x0FEF82D5CC8ACE2AUL, + 0x214653D5C552CA9AUL, 0x9FCA4E87BF6A04FDUL, 0x78D4B114D234A0D7UL, + 0x22840422BD6A5BB5UL, 0x5B9ABE0DE1B4410FUL, 0xB3B50007963FDD6BUL, + 0x53A8A46793B68E35UL, 0x8CDD8E8D188B6033UL, 0x5DD22B6E3ED49572UL, + 0xE561F5D27F5302D6UL, 0xDF89CEC3322E56CDUL, 0x87167F503D600F90UL, + 0x1698BB71C8201862UL, 0xF7BF5DFDB023108EUL, 0xA17FB15B66ACFB5FUL, + 0x2DD771987768073BUL, 0x19299D2D86E0EB29UL, 0x8B537B7F206EED29UL, + 0xE536DA153325ABFCUL, 0x30A69976796DB3B9UL, 0x8E65A2C94E2D4981UL, + 0xC301D53553BD6514UL, 0x46DF3639B9E43790UL, 0x3004CD0E5AFD0463UL, + 0x46E460B0F6ACA1A0UL, 0xCBA210E7372D9BD5UL, 0x45064274A74CA582UL, + 0xFDD57EA43CE631AEUL, 0xF2BA08FFA4A683D0UL, 0x8DA658C4DAD42999UL, + 0x7418042943E88040UL, 0x96000F72E9371FEFUL, 0xE9F1212DC8F47302UL, + 0x2AFB565ECC3553EDUL, 0xCD3D55137EFF7FD6UL, 0xD36F11059388E442UL, + 0xC4B47515DB5709DDUL, 0x5C363EFBF0BAAB67UL, 0x28C63B5A31650BBBUL, + 0x6AE54E5068061C81UL, 0xDEE62000F4E0AA21UL, 0xE8238672FE088A8BUL, + 0x9869CB6370F075B9UL, 0xBA376E2FC7DB330FUL, 0xB0F73E208487CDEEUL, + 0x359D5017BE37FE97UL, 0x684D828C7F95E2DCUL, 0x9985ECA20E46AE1FUL, + 0x8030A5137D1A21C4UL, 0xF78CDC00FC37AC39UL, 0x41CDDC8E61D9C644UL, + 0xB6F3CD1D833BAD1DUL, 0x301D0D858A23DE22UL, 0xA51FCA12AD849BC8UL, + 0x9F55E615986AB10EUL, 0x904AAA59854F2215UL, 0x12ECEA4AB40F51A7UL, + 0xB4EDF5807735E23BUL, 0x6190200F1C589478UL, 0xA3CA57F321909A5AUL, + 0x0BFAEE04B7325B63UL, 0x10C393E7FBCF826DUL, 0x4050A2CA53FDA708UL, + 0xF31114A9B462B680UL, 0x6FB9A6F121BA2006UL, 0x04550CF09389D602UL, + 0xB8C7D6D8CA8942F7UL, 0x71BB430C6436E9D1UL, 0xD9070DD5FAA0A10AUL, + 0x8FD6827757D07E5BUL, 0xD04E6C313F8FD974UL, 0x2CFDEA1187909B9AUL, + 0xC7A8E758C115F593UL, 0xA79A17663009ACC2UL, 0x8091A6B5372B141DUL, + 0xEB33B08767F5BA73UL, 0xDAC1F6823B6111C7UL, 0x697DF90C3515611BUL, + 0xCC1005F198761F48UL, 0x5067E4F5303B45A1UL, 0x04816D292A2D9AC2UL, + 0x2949C7A0874DD5E9UL, 0x25DB2547804CEE5EUL, 0x7EDC3A8946D6F229UL, + 0x00B586F67FD0C622UL, 0x3CAE5798E40324E0UL, 0x0A4F1437DE637164UL, + 0x5F59B2B715871981UL, 0x5D68FF31051E48FBUL, 0x0F2C369D73A2AA46UL, + 0xB009C6B53DD23399UL, 0xC366A81277084988UL, 0x5AF0E0CA0711E730UL, + 0x7AD831A9E9E854BAUL, 0x1DD5EDB0CA4E85AEUL, 0x54651209D259E9DDUL, + 0x3EBB1D9DAB237EADUL, 0xDA96989317AC464CUL, 0xBFCB0F8FBC52C74EUL, + 0x9597ACB9E27B692EUL, 0x6F436B1643C95B23UL, 0xB81A1253E1C3CD9DUL, + 0x7B35F37E905EC67EUL, 0x29CE62666EDA76DDUL, 0xFF2490DC1EC4014DUL, + 0x2D4FF9124DD6B5C4UL, 0xB9510FEC23E0E9D1UL, 0x8BCDBC56541ED071UL, + 0x5414E097C1B0CCB2UL, 0x82BEF8213076F5C7UL, 0xE9FC9A71BD512615UL, + 0xCF15ECC39490DF5AUL, 0x49FA9328D8EE97DBUL, 0x5F80FF0153BC2145UL, + 0xF63BA156B55BCB02UL, 0x0E3B9113109FDF36UL, 0x8FCD6528F54EDE69UL, + 0x5D6AE9C000054763UL, 0x326D873633431FBBUL, 0x380E07FFCEF7A978UL, + 0xDCAA09874A1DF230UL, 0x601494F49F6D261EUL, 0x856159486C9B60E3UL, + 0x85C7F822D07089A5UL, 0xAFFB99CF5AB836C2UL, 0x241AD414FBBB956BUL, + 0x0CFC042822831692UL, 0x382B16D049727FF2UL, 0x784F9997633C819AUL, + 0x5C40ED725F6C390AUL, 0x2CE78B7A3331BA9CUL, 0x9C80636639963B41UL, + 0x1B2D41C968355018UL, 0xD189B57691FB60E4UL, 0x3BD599A9DD85CE31UL, + 0x46FC8E2EF0B9A77CUL, 0x1A389E07D0075EA4UL, 0x1622CA52401DF2ACUL, + 0x528F3FF9B7993BFAUL, 0xF16C176CCA292DDBUL, 0x6C154010961EF542UL, + 0x04B78E92BF6C82DFUL, 0x7D9AFEA6ABB46072UL, 0x3BC573291CBFFC2EUL, + 0x277FFF096D567AF3UL, 0x1CBEB86841A6F757UL, 0xD0BCD49E76CA20A7UL, + 0x25B6024756B1FE90UL, 0xE685C04EF84881FBUL, 0xDCAB14B352FC442EUL, + 0x4FF80A521719953DUL, 0xD10425E411DBE94BUL, 0x60998D0507D6E38DUL, + 0x146AA432C981BD5EUL, 0x1729A596282AAA41UL, 0x152BE1A263BAF963UL, + 0x15278DF497D254CAUL, 0xE4B5E9891E88A5DAUL, 0x087FA3472067D0ACUL, + 0xD99C2899A0AD9158UL, 0x5040F234DC531236UL, 0x9D7E1531259EEE90UL, + 0x29AFB8B49391036EUL, 0x84B619599642D68EUL, 0xE838AAE0F249545CUL, + 0x42D524BA8BB96959UL, 0x9A5B3E817A20EE59UL, 0x584F0530EC4C566BUL, + 0xD6544FD14B47F945UL, 0x3613FB3B553A7CDEUL, 0x284E92B56831AA56UL, + 0xCEE89BA10E951A22UL, 0x476806FA1A8A44E0UL, 0xC84CEF151885C1DFUL, + 0x3DB1D5C1B0B73936UL, 0x45D2D90FDF452388UL, 0x038A7DD71BC5DD21UL, + 0x2AC90C7422C56819UL, 0x4742046638ECE0FBUL, 0x553B44360FC8495DUL, + 0xC8DBA1CF3F9A6E97UL, 0xF85919F494CAB021UL, 0x1479455C2FF236AFUL, + 0x29BCAD159F7D018DUL, 0x016DFF51CBA3BCC5UL, 0x234BF8A77F6B1CF5UL, + 0x20564C6F44F9E641UL, 0x063A550C5AA50FA8UL, 0xB063D0AAAA96DFECUL, + 0x3EC659DF42C092F8UL, 0x29D4A76A5A5F7E09UL, 0x65EFF3EE6E691D1EUL, + 0xBD1634F5721CF799UL, 0xE85BD016723B43FFUL, 0x5233E9E7AEA11022UL, + 0x8C68852EA9039B4CUL, 0x2C978ADBE885BC15UL, 0x726615ED9D497550UL, + 0x7C1E145EB8D2BD96UL, 0xC2FEFB25935A5D71UL, 0x9EE9C3E1C3DE416FUL, + 0xFFD568A03E20E0B3UL, 0xF53649AD90156F2AUL, 0x0331B91DCE54E7EDUL, + 0x67CED5A86E99392FUL, 0x16FC0A5815500B05UL, 0x030392E8D24A7C00UL, + 0x232E5E31DF32A7B5UL, 0xCC8BF22B1947DF21UL, 0x4EC2C72D9C1EEABDUL, + 0x0B1B79F45220E668UL, 0xCC3CF0EE9C4A899BUL, 0xFC260A60592EBC80UL, + 0xC1989A0382CB03EDUL, 0x35FE679A6CD800B2UL, 0x8A6B1ADE4FBB162FUL, + 0xB0FD284563625295UL, 0xCDCC1C7B2181D024UL, 0x5B8BA0C895C0BB23UL, + 0xA681FEA9ADCD43DBUL, 0x0FE30FB6876DE718UL, 0x6DDD1E27B769C494UL, + 0x83A1E58460FFE8BBUL, 0x8FAD6FD2DC90FF65UL, 0x41BB28B81201CB24UL, + 0xA148CE79B2597204UL, 0x7CB87DF97BB477A6UL, 0x9F79E6DED87DC688UL, + 0xE044D84A6C758171UL, 0x1A29E750D9EC4097UL, 0x8445FC2B80C4A0F5UL, + 0x5EFD9784AFED4ED2UL, 0x344C252BD90EB0E4UL, 0xEAD18D2E4418E5B5UL, + 0x207EF4FFC260BD24UL, 0xD2E5C3AE534EC538UL, 0x2F5A59BF3D10E7E1UL, + 0x9528E29266C2924CUL, 0x0121B6BDAB45D138UL, 0xADD0256ACBC771DDUL, + 0x7301769600C6C50DUL, 0x3E7404EA8231D497UL, 0xB39B3840B8D03117UL, + 0x56EFCEDDEF5B6634UL, 0xE6BE2C0D73B72098UL, 0x5A2841A21A5E4959UL, + 0xCFEB3586156DF6E0UL, 0xD84F58901E2D65B8UL, 0x79796786CCC59703UL, + 0x13BFA9A94DD07696UL, 0x7B63116A6B5458B6UL, 0x1406628176C932E0UL, + 0xDD7ACC4E97F91B1AUL, 0xC82B8F84A56BDBE8UL, 0x325D87D08ED8B0B0UL, + 0x3F7847B1E82002DDUL, 0x4662900D2ADAF6BFUL, 0x12AE9F58561DB1D7UL, + 0xA896E956A95CC074UL, 0xAA4FA3A2F8BA4084UL, 0x1D577E35F5DCA67FUL, + 0x796FF2D75469DEC2UL, 0xBD3F3F87E4DE894EUL, 0x3666B2262DEBFB6BUL, + 0x1E26D7AEEF976C2EUL, 0x6BC3854F867AC4A0UL, 0x743DBF8C2E95A821UL, + 0xA62A76B9AE2E645AUL, 0xB4D76561F40187C1UL, 0xD3E5F23F9FA5DB25UL, + 0x34B1F6B39E6A87E2UL, 0x7DA5C3DFF7BE72CFUL, 0xFDF46B1BE80AD4F9UL, + 0x0B21121CA9653B8AUL, 0x1199CA9D0A90F21AUL, 0x6021EA302D01E0BAUL, + 0x8101D063C05CF5D4UL, 0xE2652410DFE78F23UL, 0x84095ACF47C21A25UL, + 0xD7E29A4DB2FD3A99UL, 0x7793C0CB57959F93UL, 0x94C605308B9E5AA7UL, + 0x943DB1AC54165B8FUL, 0xC1391A544C07447CUL, 0x3FEF1A61F785D97BUL, + 0x6DFCC3152478BDE4UL, 0x312AFB0E1982933AUL, 0xB8069C2605631ED3UL, + 0x5A6076423430BED2UL, 0x34E379F09E2D4F42UL, 0x9167F5E4019573E3UL, + 0x18F81157828D2A49UL, 0xF4A8723B4955EAB8UL, 0x0BE6C0ABFEA9E8A6UL, + 0xC63ADCF2CEF25556UL, 0xC5EBD3BEAE9F364FUL, 0xA301D60CF5B6F2FCUL, + 0x8C606CA881D27A00UL, 0x826FEE13B554C18AUL, 0x8DF251716F10B776UL, + 0xB2573A33AC7D94FFUL, 0xC0E771248CB7ABB9UL, 0x753DD605DB38F4EAUL, + 0x21901664C3D92114UL, 0xA408FCB7A1892612UL, 0x3084FC64A03D6722UL, + 0xC8C9D9569AD42A34UL, 0x1FBFBAFC1694B383UL, 0x1894280CC3F94ABEUL, + 0xE14C38A7BBB54651UL, 0x23A48CC84A6EB704UL, 0xD034ADC45AABEDBDUL, + 0xC93F2C21C973C766UL, 0x66A8AEC11D743CC6UL, 0xB4F72AA52E37C145UL, + 0xB02834DF0D9266B4UL, 0xDB8E724EA1FF402FUL, 0x531E9C058112E352UL, + 0xC2F692531DB317D2UL, 0xEFC9586498D263A7UL, 0x84F2C524D2F3ADB9UL, + 0xAFAF02C27CF25D08UL, 0x385873595F9CFC09UL, 0x36DDA10D1A152B7AUL, + 0x9F9B997A0DACFB55UL, 0x10AB5EB5C4714882UL, 0x7BA4E8703E22B7EEUL, + 0x0A2BFD558607BCC8UL, 0x201D3706F74F8BA1UL, 0x3DBD573B1358F02EUL, + 0x5B37645FA93BCEBCUL, 0xC0166864BC1A7544UL, 0x45C7AA5559FC65D7UL, + 0xEFEA04AA83349B78UL, 0x607859194F9E9FD8UL, 0xA6B9AE5B53CF7710UL, + 0x73B9142ACBC50821UL, 0x8B7D67495887E65CUL, 0x39B6C4FB2B232E56UL, + 0xD212DB10E31D2A68UL, 0x629AC0A3D263DC6EUL, 0x6BC2E7FF912050BAUL, + 0xE0AD5A8FDB183F62UL, 0xF05648134F0C6F0FUL, 0x31E146F4AF980FDAUL, + 0x7FAF0078D84D62CCUL, 0xE13F044C2830D21EUL, 0x49A047AD204B4C4BUL, + 0xF3AFBE2237351A74UL, 0x32826C9217BB07EDUL, 0xD4C3AEB099319B5CUL, + 0x49CE5BD05B2B0F61UL, 0x75DD36984DCBD0A2UL, 0x84EC5D7C2F0AAC6CUL, + 0x8E59CC9B9942EDDFUL, 0x89FF85DCDF9AE895UL, 0x6F9EE0D8D9E8D414UL, + 0x10E01A59058D3904UL, 0x1DFAF567BFF55D2EUL, 0x8DD6A18C03382CD4UL, + 0xE12FD89A0CF58553UL, 0xE245DA902C0C4F5CUL, 0x8BE7566B9987520DUL, + 0x4CA1C0A4B38A3098UL, 0x81E45015BE618A72UL, 0xA80E0344FF27EFDFUL, + 0xC98DAEC6DC5005BAUL, 0xF56873F3A958AE5EUL, 0xDB88604670C794ACUL, + 0x4F68E448DDF6535FUL, 0x3443DBF1CA6031A8UL, 0x73DFA5DEEF409A41UL, + 0xA7C556941F6643B2UL, 0x424BC40D8C83D962UL, 0x6F292A325B99B726UL, + 0x6EECB1009717D65EUL, 0x899BE4CE7BB2D8EEUL, 0x25285FED3E59781DUL, + 0x14C5AEDD76E092D3UL, 0x9BB5EE10567640AEUL, 0xCD62A1D43558FD06UL, + 0x70A7B09FC5F39447UL, 0xF10064AE92EFFB99UL, 0xD55FA1A918A23082UL, + 0xD03F28AD25C73A78UL, 0x76CFFFEE094D8B0EUL, 0x4FD5A46AD5A4B4CFUL, + 0x8F3A36F9D7BF87E3UL, 0x64224315210625BEUL, 0x749A131B71B64350UL, + 0x9034FF9DAC089F48UL, 0xB58D3017E7321217UL, 0x549D818937D5CE90UL, + 0x903CE1452419E99CUL, 0xFD052F0388DB2E76UL, 0x7390051E3972480EUL, + 0x5E5F6EC3F27B3679UL, 0x3E3637D4D4EE917DUL, 0x4FE04068CA2A4309UL, + 0x98C9C17454AAE42DUL, 0x659AE0BDB113BC21UL, 0x4C0BDECB1511AF4CUL, + 0x17048BFAEAC0006DUL, 0x68F106AADAA64912UL, 0x2286234ECEB7EAF0UL, + 0x350CD42CAF697E51UL, 0x8DCDE6D1FAC19A9FUL, 0xF97E55A245A8A8A2UL, + 0xAAE86B2092DA90A3UL, 0x5123E878AA8AEF76UL, 0x022B88B9694A55F6UL, + 0xC4C1A9B1C0221985UL, 0x20056D91DD5E0FFEUL, 0xF5BF61EC225C9843UL, + 0x1A315A05BDCF4A31UL, 0x5710A21A8DF4F15FUL, 0x99BD1A0AF97AD027UL, + 0x7602C5997AD4E12CUL + }; + + public static bool IsPopularPassword(char[] vPassword) + { + Debug.Assert(PpcTable.Length == (PpcTableSize / 64)); + + if(vPassword == null) throw new ArgumentNullException("vPassword"); + if(vPassword.Length == 0) return false; + + foreach(char ch in vPassword) + { + if(!IsPopularChar(ch)) return false; + } + + byte[] pbUtf8 = StrUtil.Utf8.GetBytes(vPassword); + + int[] vIndices = GetTableIndices(pbUtf8, PpcTableSize); + Array.Clear(pbUtf8, 0, pbUtf8.Length); + + foreach(int iIndex in vIndices) + { + if(!GetTableBit(PpcTable, iIndex)) return false; + } + + return true; + } + + private static bool IsPopularChar(char ch) + { + return (((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z')) || + ((ch >= '0') && (ch <= '9')) || (ch == '_') || (ch == '!')); + } + + private static int[] GetTableIndices(byte[] pbPasswordUtf8, int nTableSize) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + Debug.Assert((nTableSize >= 2) && (nTableSize <= 0x10000)); + Debug.Assert((nTableSize % 64) == 0); + + SHA512Managed sha = new SHA512Managed(); + byte[] pbHash = sha.ComputeHash(pbPasswordUtf8); + + int[] vIndices = new int[pbHash.Length / 2]; + for(int i = 0; i < vIndices.Length; ++i) + vIndices[i] = ((((int)pbHash[i * 2] << 8) | + (int)pbHash[i * 2 + 1]) % nTableSize); + + return vIndices; +#endif + } + + private static bool GetTableBit(ulong[] vTable, int iBit) + { + return ((vTable[iBit >> 6] & (1UL << (iBit & 0x3F))) != 0UL); + } + +#if (DEBUG && !KeePassLibSD && TODO) + private static bool SetTableBit(ulong[] vTable, int iBit) + { + if(GetTableBit(vTable, iBit)) return false; + + vTable[iBit >> 6] = (vTable[iBit >> 6] | (1UL << (iBit & 0x3F))); + return true; + } + + public static void MakeList() + { + + string strData = File.ReadAllText("MostPopularPasswords.txt", StrUtil.Utf8); + strData += " "; + CharStream cs = new CharStream(strData); + + List vPasswords = new List(); + StringBuilder sbPassword = new StringBuilder(); + while(true) + { + char ch = cs.ReadChar(); + if(ch == char.MinValue) break; + + if(char.IsWhiteSpace(ch)) + { + string strPassword = sbPassword.ToString(); + strPassword = strPassword.ToLower(); + + if(strPassword.Length > 3) + { + if(vPasswords.IndexOf(strPassword) < 0) + vPasswords.Add(strPassword); + } + + sbPassword = new StringBuilder(); + } + else + { + Debug.Assert(!char.IsControl(ch) && !char.IsHighSurrogate(ch) && + !char.IsLowSurrogate(ch) && !char.IsSurrogate(ch)); + Debug.Assert(IsPopularChar(ch)); + sbPassword.Append(ch); + } + } + + ulong[] vTable = new ulong[PpcTableSize / 64]; + Array.Clear(vTable, 0, vTable.Length); + + long lBitsInTable = 0; + foreach(string strPassword in vPasswords) + { + byte[] pbUtf8 = StrUtil.Utf8.GetBytes(strPassword); + int[] vIndices = GetTableIndices(pbUtf8, PpcTableSize); + + foreach(int i in vIndices) + { + if(SetTableBit(vTable, i)) ++lBitsInTable; + } + } + + StringBuilder sb = new StringBuilder(); + sb.Append("\t\t\t"); + for(int i = 0; i < vTable.Length; ++i) + { + if(i > 0) + { + if((i % 3) == 0) + { + sb.AppendLine(","); + sb.Append("\t\t\t"); + } + else sb.Append(", "); + } + + sb.Append("0x"); + sb.Append(vTable[i].ToString("X16")); + sb.Append("UL"); + } + + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine("Bits set: " + lBitsInTable.ToString() + " of " + + PpcTableSize.ToString()); + int cHashFn = GetTableIndices(StrUtil.Utf8.GetBytes("Dummy"), PpcTableSize).Length; + sb.AppendLine("Hash functions: " + cHashFn.ToString()); + double dblPhi = Math.Pow(1.0 - ((double)cHashFn / PpcTableSize), + (double)vPasswords.Count); + sb.AppendLine("Phi (bits unset ratio) estimation: " + + dblPhi.ToString(CultureInfo.InvariantCulture)); + dblPhi = ((double)(PpcTableSize - lBitsInTable) / (double)PpcTableSize); + sb.AppendLine("Exact Phi: " + dblPhi.ToString(CultureInfo.InvariantCulture)); + sb.AppendLine("False positives ratio: " + Math.Pow(1.0 - dblPhi, + (double)cHashFn).ToString(CultureInfo.InvariantCulture)); + + File.WriteAllText("Table.txt", sb.ToString()); + } +#endif + } +} +#endif diff --git a/ModernKeePassLib/Cryptography/QualityEstimation.cs b/ModernKeePassLib/Cryptography/QualityEstimation.cs new file mode 100644 index 0000000..b39b1af --- /dev/null +++ b/ModernKeePassLib/Cryptography/QualityEstimation.cs @@ -0,0 +1,145 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Cryptography +{ + /// + /// A class that offers static functions to estimate the quality of + /// passwords. + /// + public static class QualityEstimation + { + private enum CharSpaceBits : uint + { + Control = 32, + Alpha = 26, + Number = 10, + Special = 33, + High = 112 + } + + /// + /// Estimate the quality of a password. + /// + /// Password to check. + /// Estimated bit-strength of the password. + /// Thrown if the input + /// parameter is null. + public static uint EstimatePasswordBits(char[] vPasswordChars) + { + Debug.Assert(vPasswordChars != null); + if(vPasswordChars == null) throw new ArgumentNullException("vPasswordChars"); + + bool bChLower = false, bChUpper = false, bChNumber = false; + bool bChSpecial = false, bChHigh = false, bChControl = false; + Dictionary vCharCounts = new Dictionary(); + Dictionary vDifferences = new Dictionary(); + double dblEffectiveLength = 0.0; + + for(int i = 0; i < vPasswordChars.Length; ++i) // Get character types + { + char tch = vPasswordChars[i]; + + if(tch < ' ') bChControl = true; + else if((tch >= 'A') && (tch <= 'Z')) bChUpper = true; + else if((tch >= 'a') && (tch <= 'z')) bChLower = true; + else if((tch >= '0') && (tch <= '9')) bChNumber = true; + else if((tch >= ' ') && (tch <= '/')) bChSpecial = true; + else if((tch >= ':') && (tch <= '@')) bChSpecial = true; + else if((tch >= '[') && (tch <= '`')) bChSpecial = true; + else if((tch >= '{') && (tch <= '~')) bChSpecial = true; + else if(tch > '~') bChHigh = true; + + double dblDiffFactor = 1.0; + if(i >= 1) + { + int iDiff = (int)tch - (int)vPasswordChars[i - 1]; + + uint uDiffCount; + if(vDifferences.TryGetValue(iDiff, out uDiffCount)) + { + ++uDiffCount; + vDifferences[iDiff] = uDiffCount; + dblDiffFactor /= (double)uDiffCount; + } + else vDifferences.Add(iDiff, 1); + } + + uint uCharCount; + if(vCharCounts.TryGetValue(tch, out uCharCount)) + { + ++uCharCount; + vCharCounts[tch] = uCharCount; + dblEffectiveLength += dblDiffFactor * (1.0 / (double)uCharCount); + } + else + { + vCharCounts.Add(tch, 1); + dblEffectiveLength += dblDiffFactor; + } + } + + uint uCharSpace = 0; + if(bChControl) uCharSpace += (uint)CharSpaceBits.Control; + if(bChUpper) uCharSpace += (uint)CharSpaceBits.Alpha; + if(bChLower) uCharSpace += (uint)CharSpaceBits.Alpha; + if(bChNumber) uCharSpace += (uint)CharSpaceBits.Number; + if(bChSpecial) uCharSpace += (uint)CharSpaceBits.Special; + if(bChHigh) uCharSpace += (uint)CharSpaceBits.High; + + if(uCharSpace == 0) return 0; + + double dblBitsPerChar = Math.Log((double)uCharSpace) / Math.Log(2.0); + double dblRating = dblBitsPerChar * dblEffectiveLength; + +#if !KeePassLibSD + char[] vLowerCopy = new char[vPasswordChars.Length]; + for(int ilc = 0; ilc < vLowerCopy.Length; ++ilc) + vLowerCopy[ilc] = char.ToLower(vPasswordChars[ilc]); + if(PopularPasswords.IsPopularPassword(vLowerCopy)) dblRating /= 8.0; + Array.Clear(vLowerCopy, 0, vLowerCopy.Length); +#endif + + return (uint)Math.Ceiling(dblRating); + } + + /// + /// Estimate the quality of a password. + /// + /// Password to check, UTF-8 encoded. + /// Estimated bit-strength of the password. + public static uint EstimatePasswordBits(byte[] pbUnprotectedUtf8) + { + if(pbUnprotectedUtf8 == null) { Debug.Assert(false); return 0; } + + char[] vChars = StrUtil.Utf8.GetChars(pbUnprotectedUtf8); + uint uResult = EstimatePasswordBits(vChars); + Array.Clear(vChars, 0, vChars.Length); + + return uResult; + } + } +} diff --git a/ModernKeePassLib/Cryptography/SHA256Managed.cs b/ModernKeePassLib/Cryptography/SHA256Managed.cs new file mode 100644 index 0000000..4503da8 --- /dev/null +++ b/ModernKeePassLib/Cryptography/SHA256Managed.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Security.Cryptography; +using Windows.Security.Cryptography.Core; +using Windows.Storage.Streams; + +namespace ModernKeePassLib.Cryptography +{ + // Singleton adaptor that provides a part of the .net SHA256Managed class + + class SHA256Managed + { + private static SHA256Managed instance; + private static HashAlgorithmProvider m_AlgProv; + + private SHA256Managed() + { + String strAlgName = "SHA256"; + m_AlgProv = HashAlgorithmProvider.OpenAlgorithm(strAlgName); + m_AlgProv.CreateHash(); + } + + public static SHA256Managed Instance + { + get + { + if (instance == null) + { + instance = new SHA256Managed(); + } + return instance; + } + } + + public byte[] ComputeHash(byte[] buffer ) + { + IBuffer input = CryptographicBuffer.CreateFromByteArray( buffer); + IBuffer hashBuffer = m_AlgProv.HashData(input); + byte[] hash; + CryptographicBuffer.CopyToByteArray(hashBuffer, out hash); + return hash; + } + + } +} diff --git a/ModernKeePassLib/Cryptography/SelfTest.cs b/ModernKeePassLib/Cryptography/SelfTest.cs new file mode 100644 index 0000000..b076a62 --- /dev/null +++ b/ModernKeePassLib/Cryptography/SelfTest.cs @@ -0,0 +1,425 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Security; +using Windows.Security.Cryptography.Core; + +using ModernKeePassLib.Cryptography.Cipher; +using ModernKeePassLib.Utility; +using ModernKeePassLib.Resources; +using Windows.Storage.Streams; +using Windows.Security.Cryptography; + +namespace ModernKeePassLib.Cryptography +{ + /* #pragma warning disable 1591 + /// + /// Return values of the SelfTest.Perform method. + /// + public enum SelfTestResult + { + Success = 0, + RijndaelEcbError = 1, + Salsa20Error = 2, + NativeKeyTransformationError = 3 + } + #pragma warning restore 1591 */ + + /// + /// Class containing self-test methods. + /// + public static class SelfTest + { + /// + /// Perform a self-test. + /// + public static void Perform() + { + TestFipsComplianceProblems(); // Must be the first test + + TestRijndael(); + TestSalsa20(); + + TestNativeKeyTransform(); + + TestHmacOtp(); + + TestProtectedObjects(); + TestMemUtil(); + TestStrUtil(); + TestUrlUtil(); + + Debug.Assert((int)PwIcon.World == 1); + Debug.Assert((int)PwIcon.Warning == 2); + Debug.Assert((int)PwIcon.BlackBerry == 68); + } + + internal static void TestFipsComplianceProblems() + { +#if !KeePassWinRT + try { new RijndaelManaged(); } + catch(Exception exAes) + { + throw new SecurityException("AES/Rijndael: " + exAes.Message); + } + + try { new SHA256Managed(); } + catch(Exception exSha256) + { + throw new SecurityException("SHA-256: " + exSha256.Message); + } +#endif + } + + private static void TestRijndael() + { + + // Test vector (official ECB test vector #356) + byte[] pbIV = new byte[16]; + byte[] pbTestKey = new byte[32]; + byte[] pbTestData = new byte[16]; + byte[] pbReferenceCT = new byte[16] { + 0x75, 0xD1, 0x1B, 0x0E, 0x3A, 0x68, 0xC4, 0x22, + 0x3D, 0x88, 0xDB, 0xF0, 0x17, 0x97, 0x7D, 0xD7 }; + int i; + + for(i = 0; i < 16; ++i) pbIV[i] = 0; + for(i = 0; i < 32; ++i) pbTestKey[i] = 0; + for(i = 0; i < 16; ++i) pbTestData[i] = 0; + pbTestData[0] = 0x04; + + String strAlgName = "AES_ECB"; // Algorithm name + + IBuffer iv = null; // no IV used in ECB. + IBuffer buffMsg = CryptographicBuffer.CreateFromByteArray(pbTestData); + IBuffer keyMaterial = CryptographicBuffer.CreateFromByteArray(pbTestKey); + SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName); + CryptographicKey key = objAlg.CreateSymmetricKey(keyMaterial); + + // Encrypt the data and return. + IBuffer buffEncrypt = CryptographicEngine.Encrypt(key, buffMsg, iv); + CryptographicBuffer.CopyToByteArray(buffEncrypt, out pbTestData); + + if (!MemUtil.ArraysEqual(pbTestData, pbReferenceCT)) + throw new SecurityException(KLRes.EncAlgorithmAes + "."); + + +#if false + + RijndaelManaged r = new RijndaelManaged(); + + if(r.BlockSize != 128) // AES block size + { + Debug.Assert(false); + r.BlockSize = 128; + } + + r.IV = pbIV; + r.KeySize = 256; + r.Key = pbTestKey; + r.Mode = CipherMode.ECB; + ICryptoTransform iCrypt = r.CreateEncryptor(); + + iCrypt.TransformBlock(pbTestData, 0, 16, pbTestData, 0); + + if(!MemUtil.ArraysEqual(pbTestData, pbReferenceCT)) + throw new SecurityException(KLRes.EncAlgorithmAes + "."); + +#endif + } + + private static void TestSalsa20() + { + // Test values from official set 6, vector 3 + byte[] pbKey= new byte[32] { + 0x0F, 0x62, 0xB5, 0x08, 0x5B, 0xAE, 0x01, 0x54, + 0xA7, 0xFA, 0x4D, 0xA0, 0xF3, 0x46, 0x99, 0xEC, + 0x3F, 0x92, 0xE5, 0x38, 0x8B, 0xDE, 0x31, 0x84, + 0xD7, 0x2A, 0x7D, 0xD0, 0x23, 0x76, 0xC9, 0x1C + }; + byte[] pbIV = new byte[8] { 0x28, 0x8F, 0xF6, 0x5D, + 0xC4, 0x2B, 0x92, 0xF9 }; + byte[] pbExpected = new byte[16] { + 0x5E, 0x5E, 0x71, 0xF9, 0x01, 0x99, 0x34, 0x03, + 0x04, 0xAB, 0xB2, 0x2A, 0x37, 0xB6, 0x62, 0x5B + }; + + byte[] pb = new byte[16]; + Salsa20Cipher c = new Salsa20Cipher(pbKey, pbIV); + c.Encrypt(pb, pb.Length, false); + if(!MemUtil.ArraysEqual(pb, pbExpected)) + throw new SecurityException("Salsa20."); + +#if DEBUG + // Extended test in debug mode + byte[] pbExpected2 = new byte[16] { + 0xAB, 0xF3, 0x9A, 0x21, 0x0E, 0xEE, 0x89, 0x59, + 0x8B, 0x71, 0x33, 0x37, 0x70, 0x56, 0xC2, 0xFE + }; + byte[] pbExpected3 = new byte[16] { + 0x1B, 0xA8, 0x9D, 0xBD, 0x3F, 0x98, 0x83, 0x97, + 0x28, 0xF5, 0x67, 0x91, 0xD5, 0xB7, 0xCE, 0x23 + }; + + Random r = new Random(); + int nPos = Salsa20ToPos(c, r, pb.Length, 65536); + c.Encrypt(pb, pb.Length, false); + if(!MemUtil.ArraysEqual(pb, pbExpected2)) + throw new SecurityException("Salsa20-2."); + + nPos = Salsa20ToPos(c, r, nPos + pb.Length, 131008); + Array.Clear(pb, 0, pb.Length); + c.Encrypt(pb, pb.Length, true); + if(!MemUtil.ArraysEqual(pb, pbExpected3)) + throw new SecurityException("Salsa20-3."); +#endif + } + +#if DEBUG + private static int Salsa20ToPos(Salsa20Cipher c, Random r, int nPos, + int nTargetPos) + { + byte[] pb = new byte[512]; + + while(nPos < nTargetPos) + { + int x = r.Next(1, 513); + int nGen = Math.Min(nTargetPos - nPos, x); + c.Encrypt(pb, nGen, r.Next(0, 2) == 0); + nPos += nGen; + } + + return nTargetPos; + } +#endif + + private static void TestNativeKeyTransform() + { +#if DEBUG && TODO + byte[] pbOrgKey = CryptoRandom.Instance.GetRandomBytes(32); + byte[] pbSeed = CryptoRandom.Instance.GetRandomBytes(32); + ulong uRounds = (ulong)((new Random()).Next(1, 0x3FFF)); + + byte[] pbManaged = new byte[32]; + Array.Copy(pbOrgKey, pbManaged, 32); + if(CompositeKey.TransformKeyManaged(pbManaged, pbSeed, uRounds) == false) + throw new SecurityException("Managed transform."); + + byte[] pbNative = new byte[32]; + Array.Copy(pbOrgKey, pbNative, 32); + if(NativeLib.TransformKey256(pbNative, pbSeed, uRounds) == false) + return; // Native library not available ("success") + + if(!MemUtil.ArraysEqual(pbManaged, pbNative)) + throw new SecurityException("Native transform."); +#endif + } + + private static void TestMemUtil() + { +#if DEBUG && !KeePassWinRT + Random r = new Random(); + byte[] pb = CryptoRandom.Instance.GetRandomBytes((uint)r.Next( + 0, 0x2FFFF)); + + byte[] pbCompressed = MemUtil.Compress(pb); + if(!MemUtil.ArraysEqual(MemUtil.Decompress(pbCompressed), pb)) + throw new InvalidOperationException("GZip"); + + pb = Encoding.ASCII.GetBytes("012345678901234567890a"); + byte[] pbN = Encoding.ASCII.GetBytes("9012"); + if(MemUtil.IndexOf(pb, pbN) != 9) + throw new InvalidOperationException("MemUtil-1"); + pbN = Encoding.ASCII.GetBytes("01234567890123"); + if(MemUtil.IndexOf(pb, pbN) != 0) + throw new InvalidOperationException("MemUtil-2"); + pbN = Encoding.ASCII.GetBytes("a"); + if(MemUtil.IndexOf(pb, pbN) != 21) + throw new InvalidOperationException("MemUtil-3"); + pbN = Encoding.ASCII.GetBytes("0a"); + if(MemUtil.IndexOf(pb, pbN) != 20) + throw new InvalidOperationException("MemUtil-4"); + pbN = Encoding.ASCII.GetBytes("1"); + if(MemUtil.IndexOf(pb, pbN) != 1) + throw new InvalidOperationException("MemUtil-5"); + pbN = Encoding.ASCII.GetBytes("b"); + if(MemUtil.IndexOf(pb, pbN) >= 0) + throw new InvalidOperationException("MemUtil-6"); + pbN = Encoding.ASCII.GetBytes("012b"); + if(MemUtil.IndexOf(pb, pbN) >= 0) + throw new InvalidOperationException("MemUtil-7"); +#endif + } + + private static void TestHmacOtp() + { +#if (DEBUG && !KeePassLibSD && TODO) + byte[] pbSecret = Encoding.ASCII.GetBytes("12345678901234567890"); + string[] vExp = new string[]{ "755224", "287082", "359152", + "969429", "338314", "254676", "287922", "162583", "399871", + "520489" }; + + for(int i = 0; i < vExp.Length; ++i) + { + if(HmacOtp.Generate(pbSecret, (ulong)i, 6, false, -1) != vExp[i]) + throw new InvalidOperationException("HmacOtp"); + } +#endif + } + + private static void TestProtectedObjects() + { + +#if TODO +#if DEBUG + byte[] pbData = Encoding.UTF8.GetBytes("Test Test Test Test"); + ProtectedBinary pb = new ProtectedBinary(true, pbData); + if(!pb.IsProtected) throw new SecurityException("ProtectedBinary-1"); + + byte[] pbDec = pb.ReadData(); + if(!MemUtil.ArraysEqual(pbData, pbDec)) + throw new SecurityException("ProtectedBinary-2"); + if(!pb.IsProtected) throw new SecurityException("ProtectedBinary-3"); + + byte[] pbData2 = Encoding.UTF8.GetBytes("Test Test Test Test"); + byte[] pbData3 = Encoding.UTF8.GetBytes("Test Test Test Test Test"); + ProtectedBinary pb2 = new ProtectedBinary(true, pbData2); + ProtectedBinary pb3 = new ProtectedBinary(true, pbData3); + if(!pb.Equals(pb2)) throw new SecurityException("ProtectedBinary-4"); + if(pb.Equals(pb3)) throw new SecurityException("ProtectedBinary-5"); + if(pb2.Equals(pb3)) throw new SecurityException("ProtectedBinary-6"); + + if(pb.GetHashCode() != pb2.GetHashCode()) + throw new SecurityException("ProtectedBinary-7"); + if(!((object)pb).Equals((object)pb2)) + throw new SecurityException("ProtectedBinary-8"); + if(((object)pb).Equals((object)pb3)) + throw new SecurityException("ProtectedBinary-9"); + if(((object)pb2).Equals((object)pb3)) + throw new SecurityException("ProtectedBinary-10"); + + ProtectedString ps = new ProtectedString(); + if(ps.Length != 0) throw new SecurityException("ProtectedString-1"); + if(!ps.IsEmpty) throw new SecurityException("ProtectedString-2"); + if(ps.ReadString().Length != 0) + throw new SecurityException("ProtectedString-3"); + + ps = new ProtectedString(true, "Test"); + ProtectedString ps2 = new ProtectedString(true, + StrUtil.Utf8.GetBytes("Test")); + if(ps.IsEmpty) throw new SecurityException("ProtectedString-4"); + pbData = ps.ReadUtf8(); + pbData2 = ps2.ReadUtf8(); + if(!MemUtil.ArraysEqual(pbData, pbData2)) + throw new SecurityException("ProtectedString-5"); + if(pbData.Length != 4) + throw new SecurityException("ProtectedString-6"); + if(ps.ReadString() != ps2.ReadString()) + throw new SecurityException("ProtectedString-7"); + pbData = ps.ReadUtf8(); + pbData2 = ps2.ReadUtf8(); + if(!MemUtil.ArraysEqual(pbData, pbData2)) + throw new SecurityException("ProtectedString-8"); + if(!ps.IsProtected) throw new SecurityException("ProtectedString-9"); + if(!ps2.IsProtected) throw new SecurityException("ProtectedString-10"); +#endif +#endif + } + + private static void TestStrUtil() + { +#if DEBUG + string[] vSeps = new string[]{ "ax", "b", "c" }; + const string str1 = "axbqrstcdeax"; + List v1 = StrUtil.SplitWithSep(str1, vSeps, true); + + if(v1.Count != 9) throw new InvalidOperationException("StrUtil-1"); + if(v1[0].Length > 0) throw new InvalidOperationException("StrUtil-2"); + if(!v1[1].Equals("ax")) throw new InvalidOperationException("StrUtil-3"); + if(v1[2].Length > 0) throw new InvalidOperationException("StrUtil-4"); + if(!v1[3].Equals("b")) throw new InvalidOperationException("StrUtil-5"); + if(!v1[4].Equals("qrst")) throw new InvalidOperationException("StrUtil-6"); + if(!v1[5].Equals("c")) throw new InvalidOperationException("StrUtil-7"); + if(!v1[6].Equals("de")) throw new InvalidOperationException("StrUtil-8"); + if(!v1[7].Equals("ax")) throw new InvalidOperationException("StrUtil-9"); + if(v1[8].Length > 0) throw new InvalidOperationException("StrUtil-10"); + + const string str2 = "12ab56"; + List v2 = StrUtil.SplitWithSep(str2, new string[]{ "AB" }, false); + if(v2.Count != 3) throw new InvalidOperationException("StrUtil-11"); + if(!v2[0].Equals("12")) throw new InvalidOperationException("StrUtil-12"); + if(!v2[1].Equals("AB")) throw new InvalidOperationException("StrUtil-13"); + if(!v2[2].Equals("56")) throw new InvalidOperationException("StrUtil-14"); + + List v3 = StrUtil.SplitWithSep("pqrs", vSeps, false); + if(v3.Count != 1) throw new InvalidOperationException("StrUtil-15"); + if(!v3[0].Equals("pqrs")) throw new InvalidOperationException("StrUtil-16"); + + if(StrUtil.VersionToString(0x000F000E000D000CUL) != "15.14.13.12") + throw new InvalidOperationException("StrUtil-V1"); + if(StrUtil.VersionToString(0x00FF000E00010000UL) != "255.14.1") + throw new InvalidOperationException("StrUtil-V2"); + if(StrUtil.VersionToString(0x000F00FF00000000UL) != "15.255") + throw new InvalidOperationException("StrUtil-V3"); + if(StrUtil.VersionToString(0x00FF000000000000UL) != "255") + throw new InvalidOperationException("StrUtil-V4"); + if(StrUtil.VersionToString(0x00FF000000000000UL, true) != "255.0") + throw new InvalidOperationException("StrUtil-V5"); + if(StrUtil.VersionToString(0x0000000000070000UL, true) != "0.0.7") + throw new InvalidOperationException("StrUtil-V6"); +#endif + } + + private static void TestUrlUtil() + { +#if DEBUG && TODO + if(UrlUtil.GetHost(@"scheme://domain:port/path?query_string#fragment_id") != + "domain") + throw new InvalidOperationException("UrlUtil-H1"); + if(UrlUtil.GetHost(@"http://example.org:80") != "example.org") + throw new InvalidOperationException("UrlUtil-H2"); + if(UrlUtil.GetHost(@"mailto:bob@example.com") != "example.com") + throw new InvalidOperationException("UrlUtil-H3"); + if(UrlUtil.GetHost(@"ftp://asmith@ftp.example.org") != "ftp.example.org") + throw new InvalidOperationException("UrlUtil-H4"); + if(UrlUtil.GetHost(@"scheme://username:password@domain:port/path?query_string#fragment_id") != + "domain") + throw new InvalidOperationException("UrlUtil-H5"); + if(UrlUtil.GetHost(@"bob@example.com") != "example.com") + throw new InvalidOperationException("UrlUtil-H6"); + if(UrlUtil.GetHost(@"s://u:p@d.tld:p/p?q#f") != "d.tld") + throw new InvalidOperationException("UrlUtil-H7"); + + if(NativeLib.IsUnix()) return; + + string strBase = "\\\\HOMESERVER\\Apps\\KeePass\\KeePass.exe"; + string strDoc = "\\\\HOMESERVER\\Documents\\KeePass\\NewDatabase.kdbx"; + string strRel = "..\\..\\Documents\\KeePass\\NewDatabase.kdbx"; + + string str = UrlUtil.MakeRelativePath(strBase, strDoc); + if(!str.Equals(strRel)) throw new InvalidOperationException("UrlUtil-R1"); + + str = UrlUtil.MakeAbsolutePath(strBase, strRel); + if(!str.Equals(strDoc)) throw new InvalidOperationException("UrlUtil-R2"); +#endif + } + } +} diff --git a/ModernKeePassLib/DebugAssert.cs b/ModernKeePassLib/DebugAssert.cs new file mode 100644 index 0000000..caaf213 --- /dev/null +++ b/ModernKeePassLib/DebugAssert.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ModernKeePassLib +{ + public class Debug + { + [Conditional("DEBUG")] + public static void Assert(bool condition, string why) + { + if (!condition) + System.Diagnostics.Debugger.Break(); + + } + + [Conditional("DEBUG")] + public static void Assert(bool condition) + { + if (!condition) + System.Diagnostics.Debugger.Break(); + + } + + } + +} diff --git a/ModernKeePassLib/Delegates/Handlers.cs b/ModernKeePassLib/Delegates/Handlers.cs new file mode 100644 index 0000000..1ad7df6 --- /dev/null +++ b/ModernKeePassLib/Delegates/Handlers.cs @@ -0,0 +1,49 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +namespace ModernKeePassLib.Delegates +{ + /// + /// Function definition of a method that performs an action on a group. + /// When traversing the internal tree, this function will be invoked + /// for all visited groups. + /// + /// Currently visited group. + /// You must return true if you want to continue the + /// traversal. If you want to immediately stop the whole traversal, + /// return false. + public delegate bool GroupHandler(PwGroup pg); + + /// + /// Function definition of a method that performs an action on an entry. + /// When traversing the internal tree, this function will be invoked + /// for all visited entries. + /// + /// Currently visited entry. + /// You must return true if you want to continue the + /// traversal. If you want to immediately stop the whole traversal, + /// return false. + public delegate bool EntryHandler(PwEntry pe); + + public delegate void VoidDelegate(); + + public delegate string StrPwEntryDelegate(string str, PwEntry pe); +} diff --git a/ModernKeePassLib/Interfaces/IDeepCloneable.cs b/ModernKeePassLib/Interfaces/IDeepCloneable.cs new file mode 100644 index 0000000..b77011a --- /dev/null +++ b/ModernKeePassLib/Interfaces/IDeepCloneable.cs @@ -0,0 +1,37 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; + +namespace ModernKeePassLib.Interfaces +{ + /// + /// Interface for objects that are deeply cloneable. + /// + /// Reference type. + public interface IDeepCloneable where T : class + { + /// + /// Deeply clone the object. + /// + /// Cloned object. + T CloneDeep(); + } +} diff --git a/ModernKeePassLib/Interfaces/IStatusLogger.cs b/ModernKeePassLib/Interfaces/IStatusLogger.cs new file mode 100644 index 0000000..3234533 --- /dev/null +++ b/ModernKeePassLib/Interfaces/IStatusLogger.cs @@ -0,0 +1,105 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; + +namespace ModernKeePassLib.Interfaces +{ + /// + /// Status message types. + /// + public enum LogStatusType + { + /// + /// Default type: simple information type. + /// + Info = 0, + + /// + /// Warning message. + /// + Warning, + + /// + /// Error message. + /// + Error, + + /// + /// Additional information. Depends on lines above. + /// + AdditionalInfo + } + + /// + /// Status logging interface. + /// + public interface IStatusLogger + { + /// + /// Function which needs to be called when logging is started. + /// + /// This string should roughly describe + /// the operation, of which the status is logged. + /// Specifies whether the + /// operation is written to the log or not. + void StartLogging(string strOperation, bool bWriteOperationToLog); + + /// + /// Function which needs to be called when logging is ended + /// (i.e. when no more messages will be logged and when the + /// percent value won't change any more). + /// + void EndLogging(); + + /// + /// Set the current progress in percent. + /// + /// Percent of work finished. + /// Returns true if the caller should continue + /// the current work. + bool SetProgress(uint uPercent); + + /// + /// Set the current status text. + /// + /// Status text. + /// Type of the message. + /// Returns true if the caller should continue + /// the current work. + bool SetText(string strNewText, LogStatusType lsType); + + /// + /// Check if the user cancelled the current work. + /// + /// Returns true if the caller should continue + /// the current work. + bool ContinueWork(); + } + + public sealed class NullStatusLogger : IStatusLogger + { + public void StartLogging(string strOperation, bool bWriteOperationToLog) { } + public void EndLogging() { } + public bool SetProgress(uint uPercent) { return true; } + public bool SetText(string strNewText, LogStatusType lsType) { return true; } + public bool ContinueWork() { return true; } + } +} diff --git a/ModernKeePassLib/Interfaces/IStructureItem.cs b/ModernKeePassLib/Interfaces/IStructureItem.cs new file mode 100644 index 0000000..915cef3 --- /dev/null +++ b/ModernKeePassLib/Interfaces/IStructureItem.cs @@ -0,0 +1,37 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +namespace ModernKeePassLib.Interfaces +{ + public interface IStructureItem : ITimeLogger // Provides LocationChanged + { + PwUuid Uuid + { + get; + set; + } + + PwGroup ParentGroup + { + get; + } + } +} diff --git a/ModernKeePassLib/Interfaces/ITimeLogger.cs b/ModernKeePassLib/Interfaces/ITimeLogger.cs new file mode 100644 index 0000000..114ced4 --- /dev/null +++ b/ModernKeePassLib/Interfaces/ITimeLogger.cs @@ -0,0 +1,105 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +namespace ModernKeePassLib.Interfaces +{ + /// + /// Interface for objects that support various times (creation time, last + /// access time, last modification time and expiry time). Offers + /// several helper functions (for example a function to touch the current + /// object). + /// + public interface ITimeLogger + { + /// + /// The date/time when the object was created. + /// + DateTime CreationTime + { + get; + set; + } + + /// + /// The date/time when the object was last accessed. + /// + DateTime LastAccessTime + { + get; + set; + } + + /// + /// The date/time when the object was last modified. + /// + DateTime LastModificationTime + { + get; + set; + } + + /// + /// The date/time when the object expires. + /// + DateTime ExpiryTime + { + get; + set; + } + + /// + /// Flag that determines if the object does expire. + /// + bool Expires + { + get; + set; + } + + /// + /// Get or set the usage count of the object. To increase the usage + /// count by one, use the Touch function. + /// + ulong UsageCount + { + get; + set; + } + + /// + /// The date/time when the location of the object was last changed. + /// + DateTime LocationChanged + { + get; + set; + } + + /// + /// Touch the object. This function updates the internal last access + /// time. If the parameter is true, + /// the last modification time gets updated, too. Each time you call + /// Touch, the usage count of the object is increased by one. + /// + /// Update last modification time. + void Touch(bool bModified); + } +} diff --git a/ModernKeePassLib/Interfaces/IUIOperations.cs b/ModernKeePassLib/Interfaces/IUIOperations.cs new file mode 100644 index 0000000..eb063fc --- /dev/null +++ b/ModernKeePassLib/Interfaces/IUIOperations.cs @@ -0,0 +1,37 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace ModernKeePassLib.Interfaces +{ + public interface IUIOperations + { + /// + /// Let the user interface save the current database. + /// + /// If true, the UI will not ask for + /// whether to synchronize or overwrite, it'll simply overwrite the + /// file. + /// Returns true if the file has been saved. + bool UIFileSave(bool bForceSave); + } +} diff --git a/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs b/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs new file mode 100644 index 0000000..7e42c9f --- /dev/null +++ b/ModernKeePassLib/Interfaces/IXmlSerializerEx.cs @@ -0,0 +1,33 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; + +namespace ModernKeePassLib.Interfaces +{ + public interface IXmlSerializerEx + { + void Serialize(XmlWriter xmlWriter, object o); + object Deserialize(Stream s); + } +} diff --git a/ModernKeePassLib/KeePassLib.2.19.0.26321.nupkg b/ModernKeePassLib/KeePassLib.2.19.0.26321.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..197666a7593157fae51d1d2e4a0988c6ca71dba5 GIT binary patch literal 97123 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 R68Lv($lYD&@w_8={|AGphZ_I@ literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/KeePassLib.nuget.targets b/ModernKeePassLib/KeePassLib.nuget.targets new file mode 100644 index 0000000..8930d73 --- /dev/null +++ b/ModernKeePassLib/KeePassLib.nuget.targets @@ -0,0 +1,9 @@ + + + + $(UserProfile)\.nuget\packages\ + + + + + \ No newline at end of file diff --git a/ModernKeePassLib/Keys/CompositeKey.cs b/ModernKeePassLib/Keys/CompositeKey.cs new file mode 100644 index 0000000..6e2cdce --- /dev/null +++ b/ModernKeePassLib/Keys/CompositeKey.cs @@ -0,0 +1,410 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Text; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using Windows.Security.Cryptography.Core; + +using ModernKeePassLib.Native; +using ModernKeePassLib.Resources; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; +using System.Threading.Tasks; +using Windows.Security.Cryptography; +using Windows.Storage.Streams; +using ModernKeePassLib.Cryptography; + +namespace ModernKeePassLib.Keys +{ + /// + /// Represents a key. A key can be build up using several user key data sources + /// like a password, a key file, the currently logged on user credentials, + /// the current computer ID, etc. + /// + public sealed class CompositeKey + { + private List m_vUserKeys = new List(); + + /// + /// List of all user keys contained in the current composite key. + /// + public IEnumerable UserKeys + { + get { return m_vUserKeys; } + } + + public uint UserKeyCount + { + get { return (uint)m_vUserKeys.Count; } + } + + /// + /// Construct a new, empty key object. + /// + public CompositeKey() + { + } + + // /// + // /// Deconstructor, clears up the key. + // /// + // ~CompositeKey() + // { + // Clear(); + // } + + // /// + // /// Clears the key. This function also erases all previously stored + // /// user key data objects. + // /// + // public void Clear() + // { + // foreach(IUserKey pKey in m_vUserKeys) + // pKey.Clear(); + // m_vUserKeys.Clear(); + // } + + /// + /// Add a user key. + /// + /// User key to add. + public void AddUserKey(IUserKey pKey) + { + Debug.Assert(pKey != null); if(pKey == null) throw new ArgumentNullException("pKey"); + + m_vUserKeys.Add(pKey); + } + + /// + /// Remove a user key. + /// + /// User key to remove. + /// Returns true if the key was removed successfully. + public bool RemoveUserKey(IUserKey pKey) + { + Debug.Assert(pKey != null); if(pKey == null) throw new ArgumentNullException("pKey"); + + Debug.Assert(m_vUserKeys.IndexOf(pKey) >= 0); + return m_vUserKeys.Remove(pKey); + } + + /// + /// Test whether the composite key contains a specific type of + /// user keys (password, key file, ...). If at least one user + /// key of that type is present, the function returns true. + /// + /// User key type. + /// Returns true, if the composite key contains + /// a user key of the specified type. + public bool ContainsType(Type tUserKeyType) + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + Debug.Assert(tUserKeyType != null); + if(tUserKeyType == null) throw new ArgumentNullException("tUserKeyType"); + + foreach(IUserKey pKey in m_vUserKeys) + { + if(tUserKeyType.IsInstanceOfType(pKey)) + return true; + } + + return false; +#endif + } + + /// + /// Get the first user key of a specified type. + /// + /// Type of the user key to get. + /// Returns the first user key of the specified type + /// or null if no key of that type is found. + public IUserKey GetUserKey(Type tUserKeyType) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + + Debug.Assert(tUserKeyType != null); + if(tUserKeyType == null) throw new ArgumentNullException("tUserKeyType"); + + foreach(IUserKey pKey in m_vUserKeys) + { + if(tUserKeyType.IsInstanceOfType(pKey)) + return pKey; + } + + return null; +#endif + } + + /// + /// Creates the composite key from the supplied user key sources (password, + /// key file, user account, computer ID, etc.). + /// + private async Task CreateRawCompositeKey32() + { + ValidateUserKeys(); + + // Concatenate user key data + MemoryStream ms = new MemoryStream(); + foreach(IUserKey pKey in m_vUserKeys) + { + ProtectedBinary b = pKey.KeyData; + if(b != null) + { + byte[] pbKeyData = b.ReadData(); + ms.Write(pbKeyData, 0, pbKeyData.Length); + MemUtil.ZeroByteArray(pbKeyData); + } + } + + byte[] pbHash = SHA256Managed.Instance.ComputeHash(ms.ToArray()); + + return pbHash; + + } + + public async Task EqualsValue(CompositeKey ckOther) + { + if(ckOther == null) throw new ArgumentNullException("ckOther"); + + byte[] pbThis = await CreateRawCompositeKey32(); + byte[] pbOther = await ckOther.CreateRawCompositeKey32(); + bool bResult = MemUtil.ArraysEqual(pbThis, pbOther); + Array.Clear(pbOther, 0, pbOther.Length); + Array.Clear(pbThis, 0, pbThis.Length); + + return bResult; + } + + /// + /// Generate a 32-bit wide key out of the composite key. + /// + /// Seed used in the key transformation + /// rounds. Must be a byte array containing exactly 32 bytes; must + /// not be null. + /// Number of key transformation rounds. + /// Returns a protected binary object that contains the + /// resulting 32-bit wide key. + public async Task GenerateKey32(byte[] pbKeySeed32, ulong uNumRounds) + { + Debug.Assert(pbKeySeed32 != null); + if(pbKeySeed32 == null) throw new ArgumentNullException("pbKeySeed32"); + Debug.Assert(pbKeySeed32.Length == 32); + if(pbKeySeed32.Length != 32) throw new ArgumentException("pbKeySeed32"); + + byte[] pbRaw32 = await CreateRawCompositeKey32(); + if((pbRaw32 == null) || (pbRaw32.Length != 32)) + { Debug.Assert(false); return null; } + + byte[] pbTrf32 = TransformKey(pbRaw32, pbKeySeed32, uNumRounds); + if((pbTrf32 == null) || (pbTrf32.Length != 32)) + { Debug.Assert(false); return null; } + + ProtectedBinary pbRet = new ProtectedBinary(true, pbTrf32); + MemUtil.ZeroByteArray(pbTrf32); + MemUtil.ZeroByteArray(pbRaw32); + + return pbRet; + } + + private void ValidateUserKeys() + { + int nAccounts = 0; + + foreach(IUserKey uKey in m_vUserKeys) + { + if(uKey is KcpUserAccount) + ++nAccounts; + } + + if(nAccounts >= 2) + { + Debug.Assert(false); + throw new InvalidOperationException(); + } + } + + /// + /// Transform the current key uNumRounds times. + /// + /// The original key which will be transformed. + /// This parameter won't be modified. + /// Seed used for key transformations. Must not + /// be null. This parameter won't be modified. + /// Transformation count. + /// 256-bit transformed key. + private static byte[] TransformKey(byte[] pbOriginalKey32, byte[] pbKeySeed32, + ulong uNumRounds) + { + + Debug.Assert((pbOriginalKey32 != null) && (pbOriginalKey32.Length == 32)); + if(pbOriginalKey32 == null) throw new ArgumentNullException("pbOriginalKey32"); + if(pbOriginalKey32.Length != 32) throw new ArgumentException(); + + Debug.Assert((pbKeySeed32 != null) && (pbKeySeed32.Length == 32)); + if(pbKeySeed32 == null) throw new ArgumentNullException("pbKeySeed32"); + if(pbKeySeed32.Length != 32) throw new ArgumentException(); + + byte[] pbNewKey = new byte[32]; + Array.Copy(pbOriginalKey32, pbNewKey, pbNewKey.Length); + + if(TransformKeyManaged(pbNewKey, pbKeySeed32, uNumRounds) == false) + return null; + + byte[] transformedKey = SHA256Managed.Instance.ComputeHash(pbNewKey); + return (transformedKey); + } + + public static bool TransformKeyManaged(byte[] pbNewKey32, byte[] pbKeySeed32, + ulong uNumRounds) + { + + byte[] pbIV = new byte[16]; + Array.Clear(pbIV, 0, pbIV.Length); + + String strAlgName = "AES_ECB"; // Algorithm name + + IBuffer iv = null; // no IV used in ECB. + IBuffer buffMsg = CryptographicBuffer.CreateFromByteArray(pbNewKey32); + IBuffer keyMaterial = CryptographicBuffer.CreateFromByteArray(pbKeySeed32); + SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName); + CryptographicKey key = objAlg.CreateSymmetricKey(keyMaterial); + + for (ulong i = 0; i < uNumRounds; ++i) + { + buffMsg = CryptographicEngine.Encrypt(key, buffMsg, iv); + } + byte[] newKey32; + CryptographicBuffer.CopyToByteArray(buffMsg, out newKey32); + newKey32.CopyTo(pbNewKey32,0); + + return true; + } + + /// + /// Benchmark the TransformKey method. Within + /// ms, random keys will be transformed + /// and the number of performed transformations are returned. + /// + /// Test duration in ms. + /// Stepping. + /// should be a prime number. For fast processors + /// (PCs) a value of 3001 is recommended, for slower processors (PocketPC) + /// a value of 401 is recommended. + /// Number of transformations performed in the specified + /// amount of time. Maximum value is uint.MaxValue. + public static ulong TransformKeyBenchmark(uint uMilliseconds, ulong uStep) + { + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + ulong uRounds; + + // Try native method + if(NativeLib.TransformKeyBenchmark256(uMilliseconds, out uRounds)) + return uRounds; + + byte[] pbIV = new byte[16]; + Array.Clear(pbIV, 0, pbIV.Length); + + byte[] pbKey = new byte[32]; + byte[] pbNewKey = new byte[32]; + for(int i = 0; i < pbKey.Length; ++i) + { + pbKey[i] = (byte)i; + pbNewKey[i] = (byte)i; + } + + RijndaelManaged r = new RijndaelManaged(); + if(r.BlockSize != 128) // AES block size + { + Debug.Assert(false); + r.BlockSize = 128; + } + + r.IV = pbIV; + r.Mode = CipherMode.ECB; + r.KeySize = 256; + r.Key = pbKey; + ICryptoTransform iCrypt = r.CreateEncryptor(); + + // !iCrypt.CanReuseTransform -- doesn't work with Mono + if((iCrypt == null) || (iCrypt.InputBlockSize != 16) || + (iCrypt.OutputBlockSize != 16)) + { + Debug.Assert(false, "Invalid ICryptoTransform."); + Debug.Assert(iCrypt.InputBlockSize == 16, "Invalid input block size!"); + Debug.Assert(iCrypt.OutputBlockSize == 16, "Invalid output block size!"); + return PwDefs.DefaultKeyEncryptionRounds; + } + + DateTime dtStart = DateTime.Now; + TimeSpan ts; + double dblReqMillis = uMilliseconds; + + uRounds = 0; + while(true) + { + for(ulong j = 0; j < uStep; ++j) + { + iCrypt.TransformBlock(pbNewKey, 0, 16, pbNewKey, 0); + iCrypt.TransformBlock(pbNewKey, 16, 16, pbNewKey, 16); + } + + uRounds += uStep; + if(uRounds < uStep) // Overflow check + { + uRounds = ulong.MaxValue; + break; + } + + ts = DateTime.Now - dtStart; + if(ts.TotalMilliseconds > dblReqMillis) break; + } + + return uRounds; +#endif + } + } + + public sealed class InvalidCompositeKeyException : Exception + { + + public override string Message + { + get + { + return "The composite key is invalid!" + Environment.NewLine + "Make sure the composite key is correct and try again."; // No translation needed here, the message will not be shown in the UI. + } + } + + /// + /// Construct a new invalid composite key exception. + /// + public InvalidCompositeKeyException() + { + } + } +} diff --git a/ModernKeePassLib/Keys/IUserKey.cs b/ModernKeePassLib/Keys/IUserKey.cs new file mode 100644 index 0000000..81fa416 --- /dev/null +++ b/ModernKeePassLib/Keys/IUserKey.cs @@ -0,0 +1,46 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Keys +{ + /// + /// Interface to a user key, like a password, key file data, etc. + /// + public interface IUserKey + { + /// + /// Get key data. Querying this property is fast (it returns a + /// reference to a cached ProtectedBinary object). + /// If no key data is available, null is returned. + /// + ProtectedBinary KeyData + { + get; + } + + // /// + // /// Clear the key and securely erase all security-critical information. + // /// + // void Clear(); + } +} diff --git a/ModernKeePassLib/Keys/KcpCustomKey.cs b/ModernKeePassLib/Keys/KcpCustomKey.cs new file mode 100644 index 0000000..c87083b --- /dev/null +++ b/ModernKeePassLib/Keys/KcpCustomKey.cs @@ -0,0 +1,69 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Keys +{ + public sealed class KcpCustomKey : IUserKey + { + private readonly string m_strName; + private ProtectedBinary m_pbKey; + + /// + /// Name of the provider that generated the custom key. + /// + public string Name + { + get { return m_strName; } + } + + public ProtectedBinary KeyData + { + get { return m_pbKey; } + } + + public KcpCustomKey(string strName, byte[] pbKeyData, bool bPerformHash) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + Debug.Assert(pbKeyData != null); if(pbKeyData == null) throw new ArgumentNullException("pbKeyData"); + + m_strName = strName; + + if(bPerformHash) + { + SHA256Managed sha256 = new SHA256Managed(); + byte[] pbRaw = sha256.ComputeHash(pbKeyData); + m_pbKey = new ProtectedBinary(true, pbRaw); + } + else m_pbKey = new ProtectedBinary(true, pbKeyData); +#endif + } + + // public void Clear() + // { + // m_pbKey = null; + // } + } +} diff --git a/ModernKeePassLib/Keys/KcpKeyFile.cs b/ModernKeePassLib/Keys/KcpKeyFile.cs new file mode 100644 index 0000000..124e499 --- /dev/null +++ b/ModernKeePassLib/Keys/KcpKeyFile.cs @@ -0,0 +1,287 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +using ModernKeePassLib.Security; +using ModernKeePassLib.Serialization; + +namespace ModernKeePassLib.Keys +{ + /// + /// Key files as provided by the user. + /// + public sealed class KcpKeyFile : IUserKey + { + private string m_strPath; + private ProtectedBinary m_pbKeyData; + + /// + /// Path to the key file. + /// + public string Path + { + get { return m_strPath; } + } + + /// + /// Get key data. Querying this property is fast (it returns a + /// reference to a cached ProtectedBinary object). + /// If no key data is available, null is returned. + /// + public ProtectedBinary KeyData + { + get { return m_pbKeyData; } + } + + public KcpKeyFile(string strKeyFile) + { + Construct(IOConnectionInfo.FromPath(strKeyFile)); + } + + public KcpKeyFile(IOConnectionInfo iocKeyFile) + { + Construct(iocKeyFile); + } + + private void Construct(IOConnectionInfo iocFile) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + byte[] pbFileData = IOConnection.ReadFile(iocFile); + if(pbFileData == null) throw new FileNotFoundException(); + + byte[] pbKey = LoadXmlKeyFile(pbFileData); + if(pbKey == null) pbKey = LoadKeyFile(pbFileData); + + if(pbKey == null) throw new InvalidOperationException(); + + m_strPath = iocFile.Path; + m_pbKeyData = new ProtectedBinary(true, pbKey); + + MemUtil.ZeroByteArray(pbKey); +#endif + } + + // public void Clear() + // { + // m_strPath = string.Empty; + // m_pbKeyData = null; + // } + + private static byte[] LoadKeyFile(byte[] pbFileData) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(pbFileData == null) { Debug.Assert(false); return null; } + + int iLength = pbFileData.Length; + + byte[] pbKey = null; + if(iLength == 32) pbKey = LoadBinaryKey32(pbFileData); + else if(iLength == 64) pbKey = LoadHexKey32(pbFileData); + + if(pbKey == null) + { + SHA256Managed sha256 = new SHA256Managed(); + pbKey = sha256.ComputeHash(pbFileData); + } + + return pbKey; +#endif + } + + private static byte[] LoadBinaryKey32(byte[] pbFileData) + { + if(pbFileData == null) { Debug.Assert(false); return null; } + if(pbFileData.Length != 32) { Debug.Assert(false); return null; } + + return pbFileData; + } + + private static byte[] LoadHexKey32(byte[] pbFileData) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(pbFileData == null) { Debug.Assert(false); return null; } + if(pbFileData.Length != 64) { Debug.Assert(false); return null; } + + try + { + string strHex = Encoding.ASCII.GetString(pbFileData, 0, 64); + if(!StrUtil.IsHexString(strHex, true)) return null; + + byte[] pbKey = MemUtil.HexStringToByteArray(strHex); + if((pbKey == null) || (pbKey.Length != 32)) + return null; + + return pbKey; + } + catch(Exception) { Debug.Assert(false); } + + return null; +#endif + } + + /// + /// Create a new, random key-file. + /// + /// Path where the key-file should be saved to. + /// If the file exists already, it will be overwritten. + /// Additional entropy used to generate + /// the random key. May be null (in this case only the KeePass-internal + /// random number generator is used). + /// Returns a FileSaveResult error code. + public static void Create(string strFilePath, byte[] pbAdditionalEntropy) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + byte[] pbKey32 = CryptoRandom.Instance.GetRandomBytes(32); + if(pbKey32 == null) throw new SecurityException(); + + byte[] pbFinalKey32; + if((pbAdditionalEntropy == null) || (pbAdditionalEntropy.Length == 0)) + pbFinalKey32 = pbKey32; + else + { + MemoryStream ms = new MemoryStream(); + ms.Write(pbAdditionalEntropy, 0, pbAdditionalEntropy.Length); + ms.Write(pbKey32, 0, 32); + + SHA256Managed sha256 = new SHA256Managed(); + pbFinalKey32 = sha256.ComputeHash(ms.ToArray()); + ms.Close(); + } + + CreateXmlKeyFile(strFilePath, pbFinalKey32); +#endif + } + + // ================================================================ + // XML Key Files + // ================================================================ + + // Sample XML file: + // + // + // + // 1.00 + // + // + // ySFoKuCcJblw8ie6RkMBdVCnAf4EedSch7ItujK6bmI= + // + // + + private const string RootElementName = "KeyFile"; + private const string MetaElementName = "Meta"; + private const string VersionElementName = "Version"; + private const string KeyElementName = "Key"; + private const string KeyDataElementName = "Data"; + + private static byte[] LoadXmlKeyFile(byte[] pbFileData) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(pbFileData == null) { Debug.Assert(false); return null; } + + MemoryStream ms = new MemoryStream(pbFileData, false); + byte[] pbKeyData = null; + + try + { + XmlDocument doc = new XmlDocument(); + doc.Load(ms); + + XmlElement el = doc.DocumentElement; + if((el == null) || !el.Name.Equals(RootElementName)) return null; + if(el.ChildNodes.Count < 2) return null; + + foreach(XmlNode xmlChild in el.ChildNodes) + { + if(xmlChild.Name.Equals(MetaElementName)) { } // Ignore Meta + else if(xmlChild.Name == KeyElementName) + { + foreach(XmlNode xmlKeyChild in xmlChild.ChildNodes) + { + if(xmlKeyChild.Name == KeyDataElementName) + { + if(pbKeyData == null) + pbKeyData = Convert.FromBase64String(xmlKeyChild.InnerText); + } + } + } + } + } + catch(Exception) { pbKeyData = null; } + finally { ms.Close(); } + + return pbKeyData; +#endif + } + + private static void CreateXmlKeyFile(string strFile, byte[] pbKeyData) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + + Debug.Assert(strFile != null); + if(strFile == null) throw new ArgumentNullException("strFile"); + Debug.Assert(pbKeyData != null); + if(pbKeyData == null) throw new ArgumentNullException("pbKeyData"); + + XmlTextWriter xtw = new XmlTextWriter(strFile, StrUtil.Utf8); + + xtw.WriteStartDocument(); + xtw.WriteWhitespace("\r\n"); + xtw.WriteStartElement(RootElementName); // KeyFile + xtw.WriteWhitespace("\r\n\t"); + + xtw.WriteStartElement(MetaElementName); // Meta + xtw.WriteWhitespace("\r\n\t\t"); + xtw.WriteStartElement(VersionElementName); // Version + xtw.WriteString("1.00"); + xtw.WriteEndElement(); // End Version + xtw.WriteWhitespace("\r\n\t"); + xtw.WriteEndElement(); // End Meta + xtw.WriteWhitespace("\r\n\t"); + + xtw.WriteStartElement(KeyElementName); // Key + xtw.WriteWhitespace("\r\n\t\t"); + + xtw.WriteStartElement(KeyDataElementName); // Data + xtw.WriteString(Convert.ToBase64String(pbKeyData)); + xtw.WriteEndElement(); // End Data + xtw.WriteWhitespace("\r\n\t"); + + xtw.WriteEndElement(); // End Key + xtw.WriteWhitespace("\r\n"); + + xtw.WriteEndElement(); // RootElementName + xtw.WriteWhitespace("\r\n"); + xtw.WriteEndDocument(); // End KeyFile + xtw.Close(); +#endif + } + } +} diff --git a/ModernKeePassLib/Keys/KcpPassword.cs b/ModernKeePassLib/Keys/KcpPassword.cs new file mode 100644 index 0000000..323a4ca --- /dev/null +++ b/ModernKeePassLib/Keys/KcpPassword.cs @@ -0,0 +1,82 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; +using ModernKeePassLib.Cryptography; + +namespace ModernKeePassLib.Keys +{ + /// + /// Master password / passphrase as provided by the user. + /// + public sealed class KcpPassword : IUserKey + { + private ProtectedString m_psPassword; + private ProtectedBinary m_pbKeyData; + + /// + /// Get the password as protected string. + /// + public ProtectedString Password + { + get { return m_psPassword; } + } + + /// + /// Get key data. Querying this property is fast (it returns a + /// reference to a cached ProtectedBinary object). + /// If no key data is available, null is returned. + /// + public ProtectedBinary KeyData + { + get { return m_pbKeyData; } + } + + public KcpPassword(byte[] pbPasswordUtf8) + { + SetKey(pbPasswordUtf8); + } + + public KcpPassword(string strPassword) + { + SetKey(StrUtil.Utf8.GetBytes(strPassword)); + } + + private void SetKey(byte[] pbPasswordUtf8) + { + Debug.Assert(pbPasswordUtf8 != null); + if(pbPasswordUtf8 == null) throw new ArgumentNullException("pbPasswordUtf8"); + + byte[] pbRaw = SHA256Managed.Instance.ComputeHash(pbPasswordUtf8); + + m_psPassword = new ProtectedString(true, pbPasswordUtf8); + m_pbKeyData = new ProtectedBinary(true, pbRaw); + + } + + // public void Clear() + // { + // m_psPassword = null; + // m_pbKeyData = null; + // } + } +} diff --git a/ModernKeePassLib/Keys/KcpUserAccount.cs b/ModernKeePassLib/Keys/KcpUserAccount.cs new file mode 100644 index 0000000..ffd5914 --- /dev/null +++ b/ModernKeePassLib/Keys/KcpUserAccount.cs @@ -0,0 +1,150 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + + +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Keys +{ + /// + /// A user key depending on the currently logged on Windows user account. + /// + public sealed class KcpUserAccount : IUserKey + { + private ProtectedBinary m_pbKeyData = null; + + // Constant initialization vector (unique for KeePass) + private static readonly byte[] m_pbEntropy = new byte[]{ + 0xDE, 0x13, 0x5B, 0x5F, 0x18, 0xA3, 0x46, 0x70, + 0xB2, 0x57, 0x24, 0x29, 0x69, 0x88, 0x98, 0xE6 + }; + + private const string UserKeyFileName = "ProtectedUserKey.bin"; + + /// + /// Get key data. Querying this property is fast (it returns a + /// reference to a cached ProtectedBinary object). + /// If no key data is available, null is returned. + /// + public ProtectedBinary KeyData + { + get { return m_pbKeyData; } + } + + /// + /// Construct a user account key. + /// + public KcpUserAccount() + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + // Test if ProtectedData is supported -- throws an exception + // when running on an old system (Windows 98 / ME). + byte[] pbDummyData = new byte[128]; + ProtectedData.Protect(pbDummyData, m_pbEntropy, + DataProtectionScope.CurrentUser); + + byte[] pbKey = LoadUserKey(false); + if(pbKey == null) pbKey = CreateUserKey(); + if(pbKey == null) throw new SecurityException(KLRes.UserAccountKeyError); + + m_pbKeyData = new ProtectedBinary(true, pbKey); + Array.Clear(pbKey, 0, pbKey.Length); +#endif + } + + // public void Clear() + // { + // m_pbKeyData = null; + // } + + private static string GetUserKeyFilePath(bool bCreate) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + + string strUserDir = Environment.GetFolderPath( + Environment.SpecialFolder.ApplicationData); + + strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); + strUserDir += PwDefs.ShortProductName; + + if(bCreate && !Directory.Exists(strUserDir)) + Directory.CreateDirectory(strUserDir); + + strUserDir = UrlUtil.EnsureTerminatingSeparator(strUserDir, false); + return strUserDir + UserKeyFileName; +#endif + } + + private static byte[] LoadUserKey(bool bShowWarning) + { + byte[] pbKey = null; + +#if !KeePassLibSD && TODO + try + { + string strFilePath = GetUserKeyFilePath(false); + byte[] pbProtectedKey = File.ReadAllBytes(strFilePath); + + pbKey = ProtectedData.Unprotect(pbProtectedKey, m_pbEntropy, + DataProtectionScope.CurrentUser); + + Array.Clear(pbProtectedKey, 0, pbProtectedKey.Length); + } + catch(Exception exLoad) + { + if(bShowWarning) MessageService.ShowWarning(exLoad); + + pbKey = null; + } +#endif + + return pbKey; + } + + private static byte[] CreateUserKey() + { + byte[] pbKey = null; + +#if !KeePassLibSD && TODO + try + { + string strFilePath = GetUserKeyFilePath(true); + + byte[] pbRandomKey = CryptoRandom.Instance.GetRandomBytes(64); + byte[] pbProtectedKey = ProtectedData.Protect(pbRandomKey, + m_pbEntropy, DataProtectionScope.CurrentUser); + + File.WriteAllBytes(strFilePath, pbProtectedKey); + + Array.Clear(pbProtectedKey, 0, pbProtectedKey.Length); + Array.Clear(pbRandomKey, 0, pbRandomKey.Length); + + pbKey = LoadUserKey(true); + } + catch(Exception) { pbKey = null; } +#endif + + return pbKey; + } + } +} diff --git a/ModernKeePassLib/Keys/KeyProvider.cs b/ModernKeePassLib/Keys/KeyProvider.cs new file mode 100644 index 0000000..631126f --- /dev/null +++ b/ModernKeePassLib/Keys/KeyProvider.cs @@ -0,0 +1,152 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +using ModernKeePassLib.Serialization; + +namespace ModernKeePassLib.Keys +{ + public sealed class KeyProviderQueryContext + { + private IOConnectionInfo m_ioInfo; + public IOConnectionInfo DatabaseIOInfo + { + get { return m_ioInfo; } + } + + public string DatabasePath + { + get { return m_ioInfo.Path; } + } + + private bool m_bCreatingNewKey; + public bool CreatingNewKey + { + get { return m_bCreatingNewKey; } + } + + private bool m_bSecDesktop; + public bool IsOnSecureDesktop + { + get { return m_bSecDesktop; } + } + + public KeyProviderQueryContext(IOConnectionInfo ioInfo, bool bCreatingNewKey, + bool bOnSecDesktop) + { + if(ioInfo == null) throw new ArgumentNullException("ioInfo"); + + m_ioInfo = ioInfo.CloneDeep(); + m_bCreatingNewKey = bCreatingNewKey; + m_bSecDesktop = bOnSecDesktop; + } + } + + public abstract class KeyProvider + { + /// + /// Name of your key provider (should be unique). + /// + public abstract string Name + { + get; + } + + /// + /// Property indicating whether the provider is exclusive. + /// If the provider is exclusive, KeePass doesn't allow other + /// key sources (master password, Windows user account, ...) + /// to be combined with the provider. + /// Key providers typically should return false + /// (to allow non-exclusive use), i.e. don't override this + /// property. + /// + public virtual bool Exclusive + { + get { return false; } + } + + /// + /// Property that specifies whether the returned key data + /// gets hashed by KeePass first or is written directly to + /// the user key data stream. + /// Standard key provider plugins should return false + /// (i.e. don't overwrite this property). Returning true + /// may cause severe security problems and is highly + /// discouraged. + /// + public virtual bool DirectKey + { + get { return false; } + } + + // public virtual PwIcon ImageIndex + // { + // get { return PwIcon.UserKey; } + // } + + /// + /// This property specifies whether the GetKey method might + /// show a form or dialog. If there is any chance that the method shows + /// one, this property must return true. Only if it's guaranteed + /// that the GetKey method doesn't show any form or dialog, this + /// property should return false. + /// + public virtual bool GetKeyMightShowGui + { + get { return true; } + } + + /// + /// This property specifies whether the key provider is compatible + /// with the secure desktop mode. This almost never is the case, + /// so you usually won't override this property. + /// + public virtual bool SecureDesktopCompatible + { + get { return false; } + } + + public abstract byte[] GetKey(KeyProviderQueryContext ctx); + } + +#if DEBUG + public sealed class SampleKeyProvider : KeyProvider + { + public override string Name + { + get { return "Built-In Sample Key Provider"; } + } + + // Do not just copy this to your own key provider class! See above. + public override bool GetKeyMightShowGui + { + get { return false; } + } + + public override byte[] GetKey(KeyProviderQueryContext ctx) + { + return new byte[]{ 2, 3, 5, 7, 11, 13 }; + } + } +#endif +} diff --git a/ModernKeePassLib/Keys/KeyProviderPool.cs b/ModernKeePassLib/Keys/KeyProviderPool.cs new file mode 100644 index 0000000..83dc45d --- /dev/null +++ b/ModernKeePassLib/Keys/KeyProviderPool.cs @@ -0,0 +1,105 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +namespace ModernKeePassLib.Keys +{ + public sealed class KeyProviderPool : IEnumerable + { + private List m_vProviders = new List(); + + public int Count + { + get { return m_vProviders.Count; } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vProviders.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_vProviders.GetEnumerator(); + } + + public void Add(KeyProvider prov) + { + Debug.Assert(prov != null); if(prov == null) throw new ArgumentNullException("prov"); + + m_vProviders.Add(prov); + } + + public bool Remove(KeyProvider prov) + { + Debug.Assert(prov != null); if(prov == null) throw new ArgumentNullException("prov"); + + return m_vProviders.Remove(prov); + } + + public KeyProvider Get(string strProviderName) + { + if(strProviderName == null) throw new ArgumentNullException("strProviderName"); + + foreach(KeyProvider prov in m_vProviders) + { + if(prov.Name == strProviderName) return prov; + } + + return null; + } + + public bool IsKeyProvider(string strName) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + foreach(KeyProvider prov in m_vProviders) + { + if(prov.Name == strName) return true; + } + + return false; + } + + internal byte[] GetKey(string strProviderName, KeyProviderQueryContext ctx, + out bool bPerformHash) + { + Debug.Assert(strProviderName != null); if(strProviderName == null) throw new ArgumentNullException("strProviderName"); + + bPerformHash = true; + + foreach(KeyProvider prov in m_vProviders) + { + if(prov.Name == strProviderName) + { + bPerformHash = !prov.DirectKey; + return prov.GetKey(ctx); + } + } + + Debug.Assert(false); + return null; + } + } +} diff --git a/ModernKeePassLib/Keys/KeyValidator.cs b/ModernKeePassLib/Keys/KeyValidator.cs new file mode 100644 index 0000000..3c7390a --- /dev/null +++ b/ModernKeePassLib/Keys/KeyValidator.cs @@ -0,0 +1,51 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace ModernKeePassLib.Keys +{ + public enum KeyValidationType + { + MasterPassword = 0 + } + + public abstract class KeyValidator + { + /// + /// Name of your key validator (should be unique). + /// + public abstract string Name + { + get; + } + + /// + /// Validate a key. + /// + /// Key to validate. + /// Type of the validation to perform. + /// Returns null, if the validation is successful. + /// If there's a problem with the key, the returned string describes + /// the problem. + public abstract string Validate(string strKey, KeyValidationType t); + } +} diff --git a/ModernKeePassLib/Keys/KeyValidatorPool.cs b/ModernKeePassLib/Keys/KeyValidatorPool.cs new file mode 100644 index 0000000..631afb4 --- /dev/null +++ b/ModernKeePassLib/Keys/KeyValidatorPool.cs @@ -0,0 +1,86 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Keys +{ + public sealed class KeyValidatorPool : IEnumerable + { + private List m_vValidators = new List(); + + public int Count + { + get { return m_vValidators.Count; } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return m_vValidators.GetEnumerator(); + } + + public IEnumerator GetEnumerator() + { + return m_vValidators.GetEnumerator(); + } + + public void Add(KeyValidator v) + { + Debug.Assert(v != null); if(v == null) throw new ArgumentNullException("v"); + + m_vValidators.Add(v); + } + + public bool Remove(KeyValidator v) + { + Debug.Assert(v != null); if(v == null) throw new ArgumentNullException("v"); + + return m_vValidators.Remove(v); + } + + public string Validate(string strKey, KeyValidationType t) + { + Debug.Assert(strKey != null); if(strKey == null) throw new ArgumentNullException("strKey"); + + foreach(KeyValidator v in m_vValidators) + { + string strResult = v.Validate(strKey, t); + if(strResult != null) return strResult; + } + + return null; + } + + public string Validate(byte[] pbKeyUtf8, KeyValidationType t) + { + Debug.Assert(pbKeyUtf8 != null); if(pbKeyUtf8 == null) throw new ArgumentNullException("pbKeyUtf8"); + + if(m_vValidators.Count == 0) return null; + + string strKey = StrUtil.Utf8.GetString(pbKeyUtf8, 0, pbKeyUtf8.Length); + return Validate(strKey, t); + } + } +} diff --git a/ModernKeePassLib/Keys/UserKeyType.cs b/ModernKeePassLib/Keys/UserKeyType.cs new file mode 100644 index 0000000..2179813 --- /dev/null +++ b/ModernKeePassLib/Keys/UserKeyType.cs @@ -0,0 +1,33 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +namespace ModernKeePassLib.Keys +{ + [Flags] + public enum UserKeyType + { + None = 0, + Other = 1, + Password = 2, + KeyFile = 4, + UserAccount = 8 + } +} diff --git a/ModernKeePassLib/ModernKeePassLib.csproj b/ModernKeePassLib/ModernKeePassLib.csproj new file mode 100644 index 0000000..92492b6 --- /dev/null +++ b/ModernKeePassLib/ModernKeePassLib.csproj @@ -0,0 +1,219 @@ + + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {A207789D-9020-401B-9D0A-D0D2CFF721BD} + Library + Properties + ModernKeePassLib + ModernKeePassLib + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 14.0 + v5.0 + + + + + true + full + false + bin\Debug\ + TRACE;DEBUG;NETFX_CORE, KeePassWinRT + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE;NETFX_CORE, KeePassWinRT + prompt + 4 + + + true + bin\ARM\Debug\ + DEBUG;TRACE + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE + true + ;2008 + pdbonly + ARM + false + prompt + true + + + true + bin\x64\Debug\ + DEBUG;TRACE + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE + true + ;2008 + pdbonly + x64 + false + prompt + true + + + true + bin\x86\Debug\ + DEBUG;TRACE + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE + true + ;2008 + pdbonly + x86 + false + prompt + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5.1\System.Net.Requests.dll + + + ..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5.1\System.Xml.XmlSerializer.dll + + + ..\..\..\..\..\..\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd + + + + 12.0 + + + + \ No newline at end of file diff --git a/ModernKeePassLib/ModernKeePassLib.csproj.user b/ModernKeePassLib/ModernKeePassLib.csproj.user new file mode 100644 index 0000000..ca1d04b --- /dev/null +++ b/ModernKeePassLib/ModernKeePassLib.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file diff --git a/ModernKeePassLib/ModernKeePassLib.nuget.targets b/ModernKeePassLib/ModernKeePassLib.nuget.targets new file mode 100644 index 0000000..8930d73 --- /dev/null +++ b/ModernKeePassLib/ModernKeePassLib.nuget.targets @@ -0,0 +1,9 @@ + + + + $(UserProfile)\.nuget\packages\ + + + + + \ No newline at end of file diff --git a/ModernKeePassLib/ModernKeePassLib.nuspec b/ModernKeePassLib/ModernKeePassLib.nuspec new file mode 100644 index 0000000..13d5f6a --- /dev/null +++ b/ModernKeePassLib/ModernKeePassLib.nuspec @@ -0,0 +1,18 @@ + + + + $id$ + $version$ + $title$ + $author$ + $author$ + http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE + http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE + http://ICON_URL_HERE_OR_DELETE_THIS_LINE + false + $description$ + Summary of changes made in this release of the package. + Copyright 2017 + Tag1 Tag2 + + \ No newline at end of file diff --git a/ModernKeePassLib/ModernKeePassLib.pfx b/ModernKeePassLib/ModernKeePassLib.pfx new file mode 100644 index 0000000000000000000000000000000000000000..19b0155f5b910f8d44dddd6910a2524028c1638e GIT binary patch literal 1756 zcmY*Yc~sL^7XD>13!sMxCsBnV1IaGSK2 zO+?uuNkz5!+lLi2x9S{e{&g%H|8 z5JH;>MhK1n)8OMf;HYa3?q6GTq@GYHau_azUT(IyfktIji=M?;oa|T3?s|N<`(T~( zy*;KwIU{=?`Gu5M#P17Eg^FamMrV#D+zu$BrGNJ;uSXrCzUI?p?q~S4k3;fV&lAu6 z0kQa|XNKUh==tS+=4{D>MDO*dal2D4Lwin z&k)Mn193B#Nq@^yyBznHjZ*QGxm2u8LzBv2MUxvlS)9Jwk>~E98vn7|#O9d&nI5PK zH==7}zgZ46+D`f-BphG#2TwPBs^Bv@Dukxz3s6f2Suu2%jBW*P<1WtV@ z`>nJ{=c~$lHlp^YUZmQwxF}}glHIcuasQl^imon8a!GiFvU~3D!*avXGog`(%h0Nb zh81Mm2xh@GAgp*kAWk(f`Ev%}u~%fn^)c$}Vm*&)yf-I4pdP~Wa-uXL=5vZ^b4yap|#qFQpW#^Uth^ zZN9r6uI1@9_h1+58*knI{_75Wf z;&6o;Hu>JXD0rOGW#YU@TIk=NX{0rSJWKOkE(b9kPJ3CqYNCUnC58p zcB=B~qFqpN@7SiS*^oUII-~b+%&VGmVJPF&DgnPKwmadnRPCJ`z{Q;^n`gom>+F9! z#opU`twR(%CFuOI=4d@40uF}&06+-&lhh@88#94SzzrY(48Q@P10;Y9R$CAe0S_>2 zK}-TwD%jD%N&qNdR63|Tf;s~XN5Bbi2ZI1)6T%Q^JOToT2q_o{(bw1;I0D1~kw7w# z0HlC<65s+jz#lw6GpB(l5HY|$9Y_SZ1P~_!Y_O01GKB+tzue=2hy$Del0heS{qcJw z0yL)-r0Ss%04!C1Dv-a}74g}w|FOlsZNn@?ezt3l5Sqq44;x=wf>bCV9|i4U>>5>s z!$!JR-utCHu*wq~q2ZDYf7CY}=Z|R*=&=fdE$v76Tb;x!zs!&@%( z8ge=4jMA)jQ-YO-+tTz6ey%rNxl?9Z%CniZqO2ijbrq={U%j?KJu90Z|B%&Y5}$iC zSRU^wYmiNcIg1}qUwX_2&arOnUpI56i3|%7t)siojcX=b9zf&nMy>pEqjobAo7Ev_3)6P~`4X5l;SX*ZXrE1>2D|hOLum^SaS83^O z-Fp-C@@=r;#@n0()2gCOdPJwv(enk51!JxIp31har^S&p{vHouK1zMx_ z@{%PfMV;$PiDvJZY1Ca0a6y`LLz|uu-Ew^9^&flfK65A~b(O>^K5}K)?cs}9mf39& z{*w*%-vP(gbcRDaWB*6YE;6?@#@nL1lz43j!{h7)b= zsjjF*OM`zc(v~|yo>a(Dw2rfA(@-iS$f0@TTn#kI=m z8#Z-uhAI=iB;@z2q1r23h*wR)WXFrgk*ut5rJIpM^SEytM!3Wpf-}K{fJAJ=?|?xK z;JW# + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Diagnostics; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Native +{ + /// + /// Interface to native library (library containing fast versions of + /// several cryptographic functions). + /// + public static class NativeLib + { + private static bool m_bAllowNative = true; + + /// + /// If this property is set to true, the native library is used. + /// If it is false, all calls to functions in this class will fail. + /// + public static bool AllowNative + { + get { return m_bAllowNative; } + set { m_bAllowNative = value; } + } + + /// + /// Determine if the native library is installed. + /// + /// Returns true, if the native library is installed. + public static bool IsLibraryInstalled() + { + byte[] pDummy0 = new byte[32]; + byte[] pDummy1 = new byte[32]; + + // Save the native state + bool bCachedNativeState = m_bAllowNative; + + // Temporarily allow native functions and try to load the library + m_bAllowNative = true; + bool bResult = TransformKey256(pDummy0, pDummy1, 16); + + // Pop native state and return result + m_bAllowNative = bCachedNativeState; + return bResult; + } + + private static bool? m_bIsUnix = null; + public static bool IsUnix() + { + if(m_bIsUnix.HasValue) return m_bIsUnix.Value; + +#if KeePassWinRT + return false; +#else + + PlatformID p = GetPlatformID(); + + // Mono defines Unix as 128 in early .NET versions +#if !KeePassLibSD + m_bIsUnix = ((p == PlatformID.Unix) || (p == PlatformID.MacOSX) || + ((int)p == 128)); +#else + m_bIsUnix = (((int)p == 4) || ((int)p == 6) || ((int)p == 128)); +#endif + return m_bIsUnix.Value; +#endif //KeePassWinRT + } + + // TODO Bert : Not supported for the time being. +#if !KeePassWinRT + private static PlatformID? m_platID = null; + public static PlatformID GetPlatformID() + { + if(m_platID.HasValue) return m_platID.Value; + + m_platID = Environment.OSVersion.Platform; + +#if !KeePassLibSD + // Mono returns PlatformID.Unix on Mac OS X, workaround this + if(m_platID.Value == PlatformID.Unix) + { + if((RunConsoleApp("uname", null) ?? string.Empty).Trim().Equals( + "Darwin", StrUtil.CaseIgnoreCmp)) + m_platID = PlatformID.MacOSX; + } +#endif + + return m_platID.Value; + } +#endif + + + // BERT Todo: Not supported for the moment. +#if !KeePassLibSD && TODO + public static string RunConsoleApp(string strAppPath, string strParams) + { + return RunConsoleApp(strAppPath, strParams, null); + } + + public static string RunConsoleApp(string strAppPath, string strParams, + string strStdInput) + { + if(strAppPath == null) throw new ArgumentNullException("strAppPath"); + if(strAppPath.Length == 0) throw new ArgumentException("strAppPath"); + + try + { + ProcessStartInfo psi = new ProcessStartInfo(); + + psi.CreateNoWindow = true; + psi.FileName = strAppPath; + psi.WindowStyle = ProcessWindowStyle.Hidden; + psi.UseShellExecute = false; + psi.RedirectStandardOutput = true; + + if(strStdInput != null) psi.RedirectStandardInput = true; + + if(!string.IsNullOrEmpty(strParams)) psi.Arguments = strParams; + + Process p = Process.Start(psi); + + if(strStdInput != null) + { + p.StandardInput.Write(strStdInput); + p.StandardInput.Close(); + } + + string strOutput = p.StandardOutput.ReadToEnd(); + p.WaitForExit(); + + return strOutput; + } + catch(Exception) { Debug.Assert(false); } + + return null; + } +#endif + + /// + /// Transform a key. + /// + /// Source and destination buffer. + /// Key to use in the transformation. + /// Number of transformation rounds. + /// Returns true, if the key was transformed successfully. + public static bool TransformKey256(byte[] pBuf256, byte[] pKey256, + ulong uRounds) + { + if(m_bAllowNative == false) return false; + + KeyValuePair kvp = PrepareArrays256(pBuf256, pKey256); + bool bResult = false; + + try + { + bResult = NativeMethods.TransformKey(kvp.Key, kvp.Value, uRounds); + } + catch(Exception) { bResult = false; } + + if(bResult) GetBuffers256(kvp, pBuf256, pKey256); + + NativeLib.FreeArrays(kvp); + return bResult; + } + + /// + /// Benchmark key transformation. + /// + /// Number of seconds to perform the benchmark. + /// Number of transformations done. + /// Returns true, if the benchmark was successful. + public static bool TransformKeyBenchmark256(uint uTimeMs, out ulong puRounds) + { + puRounds = 0; + + if(m_bAllowNative == false) return false; + + try { puRounds = NativeMethods.TransformKeyBenchmark(uTimeMs); } + catch(Exception) { return false; } + + return true; + } + + private static KeyValuePair PrepareArrays256(byte[] pBuf256, + byte[] pKey256) + { + Debug.Assert((pBuf256 != null) && (pBuf256.Length == 32)); + if(pBuf256 == null) throw new ArgumentNullException("pBuf256"); + if(pBuf256.Length != 32) throw new ArgumentException(); + + Debug.Assert((pKey256 != null) && (pKey256.Length == 32)); + if(pKey256 == null) throw new ArgumentNullException("pKey256"); + if(pKey256.Length != 32) throw new ArgumentException(); + + IntPtr hBuf = Marshal.AllocHGlobal(pBuf256.Length); + Marshal.Copy(pBuf256, 0, hBuf, pBuf256.Length); + + IntPtr hKey = Marshal.AllocHGlobal(pKey256.Length); + Marshal.Copy(pKey256, 0, hKey, pKey256.Length); + + return new KeyValuePair(hBuf, hKey); + } + + private static void GetBuffers256(KeyValuePair kvpSource, + byte[] pbDestBuf, byte[] pbDestKey) + { + if(kvpSource.Key != IntPtr.Zero) + Marshal.Copy(kvpSource.Key, pbDestBuf, 0, pbDestBuf.Length); + + if(kvpSource.Value != IntPtr.Zero) + Marshal.Copy(kvpSource.Value, pbDestKey, 0, pbDestKey.Length); + } + + private static void FreeArrays(KeyValuePair kvpPointers) + { + if(kvpPointers.Key != IntPtr.Zero) + Marshal.FreeHGlobal(kvpPointers.Key); + + if(kvpPointers.Value != IntPtr.Zero) + Marshal.FreeHGlobal(kvpPointers.Value); + } + } +} diff --git a/ModernKeePassLib/Native/NativeMethods.cs b/ModernKeePassLib/Native/NativeMethods.cs new file mode 100644 index 0000000..3378e01 --- /dev/null +++ b/ModernKeePassLib/Native/NativeMethods.cs @@ -0,0 +1,154 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Text; +using System.Security; +using System.Runtime.InteropServices; + +namespace ModernKeePassLib.Native +{ + internal static class NativeMethods + { + internal const int MAX_PATH = 260; + + /* [DllImport("KeePassNtv32.dll", EntryPoint = "TransformKey")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKey32(IntPtr pBuf256, + IntPtr pKey256, UInt64 uRounds); + + [DllImport("KeePassNtv64.dll", EntryPoint = "TransformKey")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKey64(IntPtr pBuf256, + IntPtr pKey256, UInt64 uRounds); + + internal static bool TransformKey(IntPtr pBuf256, IntPtr pKey256, + UInt64 uRounds) + { + if(Marshal.SizeOf(typeof(IntPtr)) == 8) + return TransformKey64(pBuf256, pKey256, uRounds); + else + return TransformKey32(pBuf256, pKey256, uRounds); + } + + [DllImport("KeePassNtv32.dll", EntryPoint = "TransformKeyTimed")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKeyTimed32(IntPtr pBuf256, + IntPtr pKey256, ref UInt64 puRounds, UInt32 uSeconds); + + [DllImport("KeePassNtv64.dll", EntryPoint = "TransformKeyTimed")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKeyTimed64(IntPtr pBuf256, + IntPtr pKey256, ref UInt64 puRounds, UInt32 uSeconds); + + internal static bool TransformKeyTimed(IntPtr pBuf256, IntPtr pKey256, + ref UInt64 puRounds, UInt32 uSeconds) + { + if(Marshal.SizeOf(typeof(IntPtr)) == 8) + return TransformKeyTimed64(pBuf256, pKey256, ref puRounds, uSeconds); + else + return TransformKeyTimed32(pBuf256, pKey256, ref puRounds, uSeconds); + } */ + + [DllImport("KeePassLibC32.dll", EntryPoint = "TransformKey256")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKey32(IntPtr pBuf256, + IntPtr pKey256, UInt64 uRounds); + + [DllImport("KeePassLibC64.dll", EntryPoint = "TransformKey256")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool TransformKey64(IntPtr pBuf256, + IntPtr pKey256, UInt64 uRounds); + + internal static bool TransformKey(IntPtr pBuf256, IntPtr pKey256, + UInt64 uRounds) + { + if(Marshal.SizeOf(typeof(IntPtr)) == 8) + return TransformKey64(pBuf256, pKey256, uRounds); + else + return TransformKey32(pBuf256, pKey256, uRounds); + } + + [DllImport("KeePassLibC32.dll", EntryPoint = "TransformKeyBenchmark256")] + private static extern UInt64 TransformKeyBenchmark32(UInt32 uTimeMs); + + [DllImport("KeePassLibC64.dll", EntryPoint = "TransformKeyBenchmark256")] + private static extern UInt64 TransformKeyBenchmark64(UInt32 uTimeMs); + + internal static UInt64 TransformKeyBenchmark(UInt32 uTimeMs) + { + if(Marshal.SizeOf(typeof(IntPtr)) == 8) + return TransformKeyBenchmark64(uTimeMs); + else + return TransformKeyBenchmark32(uTimeMs); + } + +#if !KeePassLibSD && TODO + [DllImport("ShlWApi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)] + internal static extern int StrCmpLogicalW(string x, string y); + + [DllImport("ShlWApi.dll", CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool PathRelativePathTo([Out] StringBuilder pszPath, + [In] string pszFrom, [In] uint dwAttrFrom, [In] string pszTo, + [In] uint dwAttrTo); +#endif + + private static bool? m_bSupportsLogicalCmp = null; + + private static void TestNaturalComparisonsSupport() + { +#if KeePassLibSD || !TODO +#warning No native natural comparisons supported. + m_bSupportsLogicalCmp = false; +#else + try + { + StrCmpLogicalW("0", "0"); // Throws exception if unsupported + m_bSupportsLogicalCmp = true; + } + catch(Exception) { m_bSupportsLogicalCmp = false; } +#endif + } + + internal static bool SupportsStrCmpNaturally + { + get + { + if(m_bSupportsLogicalCmp.HasValue == false) + TestNaturalComparisonsSupport(); + + return m_bSupportsLogicalCmp.Value; + } + } + + internal static int StrCmpNaturally(string x, string y) + { + if(m_bSupportsLogicalCmp.HasValue == false) TestNaturalComparisonsSupport(); + if(m_bSupportsLogicalCmp.Value == false) return 0; + +#if KeePassLibSD || !TODO +#warning No native natural comparisons supported. + return x.CompareTo(y); +#else + return StrCmpLogicalW(x, y); +#endif + } + } +} diff --git a/ModernKeePassLib/Properties/AssemblyInfo.cs b/ModernKeePassLib/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0b2c71f --- /dev/null +++ b/ModernKeePassLib/Properties/AssemblyInfo.cs @@ -0,0 +1,43 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General assembly properties +[assembly: AssemblyTitle("ModernKeePassLib")] +[assembly: AssemblyDescription("Portable KeePass Password Management Library")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Geoffroy Bonneville")] +[assembly: AssemblyProduct("ModernKeePassLib")] +[assembly: AssemblyCopyright("Copyright © 2017 Geoffroy Bonneville")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// COM settings +[assembly: ComVisible(false)] + +// Assembly GUID +//Bert TODO: Disabled Guid +//[assembly: Guid("395f6eec-a1e0-4438-aa82-b75099348134")] + +// Assembly version information +[assembly: AssemblyVersion("2.19.0.*")] +[assembly: AssemblyFileVersion("2.19.0.0")] diff --git a/ModernKeePassLib/Properties/AssemblyInfo.cs.bak b/ModernKeePassLib/Properties/AssemblyInfo.cs.bak new file mode 100644 index 0000000..fa77aab --- /dev/null +++ b/ModernKeePassLib/Properties/AssemblyInfo.cs.bak @@ -0,0 +1,42 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General assembly properties +[assembly: AssemblyTitle("KeePassLib")] +[assembly: AssemblyDescription("KeePass Password Management Library")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Dominik Reichl")] +[assembly: AssemblyProduct("KeePassLib")] +[assembly: AssemblyCopyright("Copyright © 2003-2012 Dominik Reichl")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// COM settings +[assembly: ComVisible(false)] + +// Assembly GUID +[assembly: Guid("395f6eec-a1e0-4438-aa82-b75099348134")] + +// Assembly version information +[assembly: AssemblyVersion("2.19.0.*")] +[assembly: AssemblyFileVersion("2.19.0.0")] diff --git a/ModernKeePassLib/PwCustomIcon.cs b/ModernKeePassLib/PwCustomIcon.cs new file mode 100644 index 0000000..397b186 --- /dev/null +++ b/ModernKeePassLib/PwCustomIcon.cs @@ -0,0 +1,73 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +//using System.Drawing; +using Windows.UI.Xaml.Media.Imaging; + +// Bert TODO: http://blog.tallcomponents.com/2012/06/windows-8-release-preview-back-to-earth.html +namespace ModernKeePassLib +{ + /// + /// Custom icon. PwCustomIcon objects are immutable. + /// + public sealed class PwCustomIcon + { + private PwUuid m_pwUuid; + private byte[] m_pbImageDataPng; + private BitmapImage m_pCachedImage; + + public PwUuid Uuid + { + get { return m_pwUuid; } + } + + public byte[] ImageDataPng + { + get { return m_pbImageDataPng; } + } + + public BitmapImage Image + { + get { return m_pCachedImage; } + } + + public PwCustomIcon(PwUuid pwUuid, byte[] pbImageDataPng) + { + Debug.Assert(pwUuid != null); + if(pwUuid == null) throw new ArgumentNullException("pwUuid"); + Debug.Assert(pwUuid != PwUuid.Zero); + if(pwUuid == PwUuid.Zero) throw new ArgumentException("pwUuid == 0"); + + Debug.Assert(pbImageDataPng != null); + if(pbImageDataPng == null) throw new ArgumentNullException("pbImageDataPng"); + + m_pwUuid = pwUuid; + m_pbImageDataPng = pbImageDataPng; + +#if !KeePassLibSD && false + MemoryStream ms = new MemoryStream(m_pbImageDataPng, false); + m_pCachedImage = Image.FromStream(ms); + ms.Close(); +#else + m_pCachedImage = null; +#endif + } + } +} diff --git a/ModernKeePassLib/PwDatabase.cs b/ModernKeePassLib/PwDatabase.cs new file mode 100644 index 0000000..b5429f6 --- /dev/null +++ b/ModernKeePassLib/PwDatabase.cs @@ -0,0 +1,1770 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.IO; +//using System.Drawing; + +using ModernKeePassLib.WinRTAdaptors; +using ModernKeePassLib.Collections; +using ModernKeePassLib.Cryptography.Cipher; +using ModernKeePassLib.Delegates; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Keys; +using ModernKeePassLib.Serialization; +using ModernKeePassLib.Utility; +using Windows.UI.Xaml.Media.Imaging; +using System.Threading.Tasks; + +namespace ModernKeePassLib +{ + /// + /// The core password manager class. It contains a number of groups, which + /// contain the actual entries. + /// + public sealed class PwDatabase + { + internal const int DefaultHistoryMaxItems = 10; // -1 = unlimited + internal const long DefaultHistoryMaxSize = 6 * 1024 * 1024; // -1 = unlimited + + private static bool m_bPrimaryCreated = false; + + // Initializations see Clear() + private PwGroup m_pgRootGroup = null; + private PwObjectList m_vDeletedObjects = new PwObjectList(); + + private PwUuid m_uuidDataCipher = StandardAesEngine.AesUuid; + private PwCompressionAlgorithm m_caCompression = PwCompressionAlgorithm.GZip; + private ulong m_uKeyEncryptionRounds = PwDefs.DefaultKeyEncryptionRounds; + + private CompositeKey m_pwUserKey = null; + private MemoryProtectionConfig m_memProtConfig = new MemoryProtectionConfig(); + + private List m_vCustomIcons = new List(); + private bool m_bUINeedsIconUpdate = true; + + private string m_strName = string.Empty; + private DateTime m_dtNameChanged = PwDefs.DtDefaultNow; + private string m_strDesc = string.Empty; + private DateTime m_dtDescChanged = PwDefs.DtDefaultNow; + private string m_strDefaultUserName = string.Empty; + private DateTime m_dtDefaultUserChanged = PwDefs.DtDefaultNow; + private uint m_uMntncHistoryDays = 365; + private Color m_clr = Color.Empty; + + private DateTime m_dtKeyLastChanged = PwDefs.DtDefaultNow; + private long m_lKeyChangeRecDays = -1; + private long m_lKeyChangeForceDays = -1; + + private IOConnectionInfo m_ioSource = new IOConnectionInfo(); + private bool m_bDatabaseOpened = false; + private bool m_bModified = false; + + private PwUuid m_pwLastSelectedGroup = PwUuid.Zero; + private PwUuid m_pwLastTopVisibleGroup = PwUuid.Zero; + + private bool m_bUseRecycleBin = true; + private PwUuid m_pwRecycleBin = PwUuid.Zero; + private DateTime m_dtRecycleBinChanged = PwDefs.DtDefaultNow; + private PwUuid m_pwEntryTemplatesGroup = PwUuid.Zero; + private DateTime m_dtEntryTemplatesChanged = PwDefs.DtDefaultNow; + + private int m_nHistoryMaxItems = DefaultHistoryMaxItems; + private long m_lHistoryMaxSize = DefaultHistoryMaxSize; // In bytes + + private StringDictionaryEx m_vCustomData = new StringDictionaryEx(); + + private byte[] m_pbHashOfFileOnDisk = null; + private byte[] m_pbHashOfLastIO = null; + + private bool m_bUseFileTransactions = false; + private bool m_bUseFileLocks = false; + + private IStatusLogger m_slStatus = null; + + private static string m_strLocalizedAppName = string.Empty; + + // private const string StrBackupExtension = ".bak"; + + /// + /// Get the root group that contains all groups and entries stored in the + /// database. + /// + /// Root group. The return value is null, if no database + /// has been opened. + public PwGroup RootGroup + { + get { return m_pgRootGroup; } + set + { + Debug.Assert(value != null); + if(value == null) throw new ArgumentNullException("value"); + + m_pgRootGroup = value; + } + } + + /// + /// IOConnection of the currently opened database file. + /// Is never null. + /// + public IOConnectionInfo IOConnectionInfo + { + get { return m_ioSource; } + } + + /// + /// If this is true, a database is currently open. + /// + public bool IsOpen + { + get { return m_bDatabaseOpened; } + } + + /// + /// Modification flag. If true, the class has been modified and the + /// user interface should prompt the user to save the changes before + /// closing the database for example. + /// + public bool Modified + { + get { return m_bModified; } + set { m_bModified = value; } + } + + /// + /// The user key used for database encryption. This key must be created + /// and set before using any of the database load/save functions. + /// + public CompositeKey MasterKey + { + get { return m_pwUserKey; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_pwUserKey = value; + } + } + + /// + /// Name of the database. + /// + public string Name + { + get { return m_strName; } + set + { + Debug.Assert(value != null); + if(value != null) m_strName = value; + } + } + + public DateTime NameChanged + { + get { return m_dtNameChanged; } + set { m_dtNameChanged = value; } + } + + /// + /// Database description. + /// + public string Description + { + get { return m_strDesc; } + set + { + Debug.Assert(value != null); + if(value != null) m_strDesc = value; + } + } + + public DateTime DescriptionChanged + { + get { return m_dtDescChanged; } + set { m_dtDescChanged = value; } + } + + /// + /// Default user name used for new entries. + /// + public string DefaultUserName + { + get { return m_strDefaultUserName; } + set + { + Debug.Assert(value != null); + if(value != null) m_strDefaultUserName = value; + } + } + + public DateTime DefaultUserNameChanged + { + get { return m_dtDefaultUserChanged; } + set { m_dtDefaultUserChanged = value; } + } + + /// + /// Number of days until history entries are being deleted + /// in a database maintenance operation. + /// + public uint MaintenanceHistoryDays + { + get { return m_uMntncHistoryDays; } + set { m_uMntncHistoryDays = value; } + } + + public Color Color + { + get { return m_clr; } + set { m_clr = value; } + } + + public DateTime MasterKeyChanged + { + get { return m_dtKeyLastChanged; } + set { m_dtKeyLastChanged = value; } + } + + public long MasterKeyChangeRec + { + get { return m_lKeyChangeRecDays; } + set { m_lKeyChangeRecDays = value; } + } + + public long MasterKeyChangeForce + { + get { return m_lKeyChangeForceDays; } + set { m_lKeyChangeForceDays = value; } + } + + /// + /// The encryption algorithm used to encrypt the data part of the database. + /// + public PwUuid DataCipherUuid + { + get { return m_uuidDataCipher; } + set + { + Debug.Assert(value != null); + if(value != null) m_uuidDataCipher = value; + } + } + + /// + /// Compression algorithm used to encrypt the data part of the database. + /// + public PwCompressionAlgorithm Compression + { + get { return m_caCompression; } + set { m_caCompression = value; } + } + + /// + /// Number of key transformation rounds (in order to make dictionary + /// attacks harder). + /// + public ulong KeyEncryptionRounds + { + get { return m_uKeyEncryptionRounds; } + set { m_uKeyEncryptionRounds = value; } + } + + /// + /// Memory protection configuration (for default fields). + /// + public MemoryProtectionConfig MemoryProtection + { + get { return m_memProtConfig; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_memProtConfig = value; + } + } + + /// + /// Get a list of all deleted objects. + /// + public PwObjectList DeletedObjects + { + get { return m_vDeletedObjects; } + } + + /// + /// Get all custom icons stored in this database. + /// + public List CustomIcons + { + get { return m_vCustomIcons; } + } + + /// + /// This is a dirty-flag for the UI. It is used to indicate when an + /// icon list update is required. + /// + public bool UINeedsIconUpdate + { + get { return m_bUINeedsIconUpdate; } + set { m_bUINeedsIconUpdate = value; } + } + + public PwUuid LastSelectedGroup + { + get { return m_pwLastSelectedGroup; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwLastSelectedGroup = value; + } + } + + public PwUuid LastTopVisibleGroup + { + get { return m_pwLastTopVisibleGroup; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwLastTopVisibleGroup = value; + } + } + + public bool RecycleBinEnabled + { + get { return m_bUseRecycleBin; } + set { m_bUseRecycleBin = value; } + } + + public PwUuid RecycleBinUuid + { + get { return m_pwRecycleBin; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwRecycleBin = value; + } + } + + public DateTime RecycleBinChanged + { + get { return m_dtRecycleBinChanged; } + set { m_dtRecycleBinChanged = value; } + } + + /// + /// UUID of the group containing template entries. May be + /// PwUuid.Zero, if no entry templates group has been specified. + /// + public PwUuid EntryTemplatesGroup + { + get { return m_pwEntryTemplatesGroup; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwEntryTemplatesGroup = value; + } + } + + public DateTime EntryTemplatesGroupChanged + { + get { return m_dtEntryTemplatesChanged; } + set { m_dtEntryTemplatesChanged = value; } + } + + public int HistoryMaxItems + { + get { return m_nHistoryMaxItems; } + set { m_nHistoryMaxItems = value; } + } + + public long HistoryMaxSize + { + get { return m_lHistoryMaxSize; } + set { m_lHistoryMaxSize = value; } + } + + /// + /// Custom data container that can be used by plugins to store + /// own data in KeePass databases. + /// + public StringDictionaryEx CustomData + { + get { return m_vCustomData; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_vCustomData = value; + } + } + + /// + /// Hash value of the primary file on disk (last read or last write). + /// A call to SaveAs without making the saved file primary will + /// not change this hash. May be null. + /// + public byte[] HashOfFileOnDisk + { + get { return m_pbHashOfFileOnDisk; } + } + + public byte[] HashOfLastIO + { + get { return m_pbHashOfLastIO; } + } + + public bool UseFileTransactions + { + get { return m_bUseFileTransactions; } + set { m_bUseFileTransactions = value; } + } + + public bool UseFileLocks + { + get { return m_bUseFileLocks; } + set { m_bUseFileLocks = value; } + } + + private string m_strDetachBins = null; + /// + /// Detach binaries when opening a file. If this isn't null, + /// all binaries are saved to the specified path and are removed + /// from the database. + /// + public string DetachBinaries + { + get { return m_strDetachBins; } + set { m_strDetachBins = value; } + } + + /// + /// Localized application name. + /// + public static string LocalizedAppName + { + get { return m_strLocalizedAppName; } + set { Debug.Assert(value != null); m_strLocalizedAppName = value; } + } + + /// + /// Constructs an empty password manager object. + /// + public PwDatabase() + { + if(m_bPrimaryCreated == false) m_bPrimaryCreated = true; + + Clear(); + } + + private void Clear() + { + m_pgRootGroup = null; + m_vDeletedObjects = new PwObjectList(); + + m_uuidDataCipher = StandardAesEngine.AesUuid; + m_caCompression = PwCompressionAlgorithm.GZip; + m_uKeyEncryptionRounds = PwDefs.DefaultKeyEncryptionRounds; + + m_pwUserKey = null; + m_memProtConfig = new MemoryProtectionConfig(); + + m_vCustomIcons = new List(); + m_bUINeedsIconUpdate = true; + + DateTime dtNow = DateTime.Now; + + m_strName = string.Empty; + m_dtNameChanged = dtNow; + m_strDesc = string.Empty; + m_dtDescChanged = dtNow; + m_strDefaultUserName = string.Empty; + m_dtDefaultUserChanged = dtNow; + m_uMntncHistoryDays = 365; + m_clr = Color.Empty; + + m_dtKeyLastChanged = dtNow; + m_lKeyChangeRecDays = -1; + m_lKeyChangeForceDays = -1; + + m_ioSource = new IOConnectionInfo(); + m_bDatabaseOpened = false; + m_bModified = false; + + m_pwLastSelectedGroup = PwUuid.Zero; + m_pwLastTopVisibleGroup = PwUuid.Zero; + + m_bUseRecycleBin = true; + m_pwRecycleBin = PwUuid.Zero; + m_dtRecycleBinChanged = dtNow; + m_pwEntryTemplatesGroup = PwUuid.Zero; + m_dtEntryTemplatesChanged = dtNow; + + m_nHistoryMaxItems = DefaultHistoryMaxItems; + m_lHistoryMaxSize = DefaultHistoryMaxSize; + + m_vCustomData = new StringDictionaryEx(); + + m_pbHashOfFileOnDisk = null; + m_pbHashOfLastIO = null; + + m_bUseFileTransactions = false; + m_bUseFileLocks = false; + } + + /// + /// Initialize the class for managing a new database. Previously loaded + /// data is deleted. + /// + /// IO connection of the new database. + /// Key to open the database. + public void New(IOConnectionInfo ioConnection, CompositeKey pwKey) + { + Debug.Assert(ioConnection != null); + if(ioConnection == null) throw new ArgumentNullException("ioConnection"); + Debug.Assert(pwKey != null); + if(pwKey == null) throw new ArgumentNullException("pwKey"); + + Close(); + + m_ioSource = ioConnection; + m_pwUserKey = pwKey; + + m_bDatabaseOpened = true; + m_bModified = true; + + m_pgRootGroup = new PwGroup(true, true, + UrlUtil.StripExtension(UrlUtil.GetFileName(ioConnection.Path)), + PwIcon.FolderOpen); + m_pgRootGroup.IsExpanded = true; + } + + /// + /// Open a database. The URL may point to any supported data source. + /// + /// IO connection to load the database from. + /// Key used to open the specified database. + /// Logger, which gets all status messages. + public async Task Open(IOConnectionInfo ioSource, CompositeKey pwKey, + IStatusLogger slLogger) + { + + Debug.Assert(ioSource != null); + if(ioSource == null) throw new ArgumentNullException("ioSource"); + Debug.Assert(pwKey != null); + if(pwKey == null) throw new ArgumentNullException("pwKey"); + + Close(); + + try + { + m_pgRootGroup = new PwGroup(true, true, UrlUtil.StripExtension( + UrlUtil.GetFileName(ioSource.Path)), PwIcon.FolderOpen); + m_pgRootGroup.IsExpanded = true; + + m_pwUserKey = pwKey; + + m_bModified = false; + + Kdb4File kdb4 = new Kdb4File(this); + kdb4.DetachBinaries = m_strDetachBins; + + IOConnection ioc = new IOConnection(); + Stream s = await ioc.OpenRead(ioSource); + await kdb4.Load(s, Kdb4Format.Default, slLogger); + + s.Dispose(); + + m_pbHashOfLastIO = kdb4.HashOfFileOnDisk; + m_pbHashOfFileOnDisk = kdb4.HashOfFileOnDisk; + Debug.Assert(m_pbHashOfFileOnDisk != null); + + m_bDatabaseOpened = true; + m_ioSource = ioSource; + } + catch(Exception) + { + Clear(); + throw; + } + } + + /// + /// Save the currently opened database. The file is written to the location + /// it has been opened from. + /// + /// Logger that recieves status information. + public void Save(IStatusLogger slLogger) + { + Debug.Assert(ValidateUuidUniqueness()); + + FileLock fl = null; + if(m_bUseFileLocks) fl = new FileLock(m_ioSource); + try + { + FileTransactionEx ft = new FileTransactionEx(m_ioSource, + m_bUseFileTransactions); + Stream s = ft.OpenWrite(); + + Kdb4File kdb = new Kdb4File(this); + kdb.Save(s, null, Kdb4Format.Default, slLogger); + + ft.CommitWrite(); + + m_pbHashOfLastIO = kdb.HashOfFileOnDisk; + m_pbHashOfFileOnDisk = kdb.HashOfFileOnDisk; + Debug.Assert(m_pbHashOfFileOnDisk != null); + } + finally { if(fl != null) fl.Dispose(); } + + m_bModified = false; + } + + /// + /// Save the currently opened database to a different location. If + /// is true, the specified + /// location is made the default location for future saves + /// using SaveDatabase. + /// + /// New location to serialize the database to. + /// If true, the new location is made the + /// standard location for the database. If false, a copy of the currently + /// opened database is saved to the specified location, but it isn't + /// made the default location (i.e. no lock files will be moved for + /// example). + /// Logger that recieves status information. + public void SaveAs(IOConnectionInfo ioConnection, bool bIsPrimaryNow, + IStatusLogger slLogger) + { + Debug.Assert(ioConnection != null); + if(ioConnection == null) throw new ArgumentNullException("ioConnection"); + + IOConnectionInfo ioCurrent = m_ioSource; // Remember current + m_ioSource = ioConnection; + + byte[] pbHashCopy = m_pbHashOfFileOnDisk; + + try { this.Save(slLogger); } + catch(Exception) + { + m_ioSource = ioCurrent; // Restore + m_pbHashOfFileOnDisk = pbHashCopy; + + m_pbHashOfLastIO = null; + throw; + } + + if(!bIsPrimaryNow) + { + m_ioSource = ioCurrent; // Restore + m_pbHashOfFileOnDisk = pbHashCopy; + } + } + + /// + /// Closes the currently opened database. No confirmation message is shown + /// before closing. Unsaved changes will be lost. + /// + public void Close() + { + Clear(); + } + + public void MergeIn(PwDatabase pwSource, PwMergeMethod mm) + { + MergeIn(pwSource, mm, null); + } + + /// + /// Synchronize the current database with another one. + /// + /// Input database to synchronize with. This input + /// database is used to update the current one, but is not modified! You + /// must copy the current object if you want a second instance of the + /// synchronized database. The input database must not be seen as valid + /// database any more after calling Synchronize. + /// Merge method. + /// Logger to report status messages to. + /// May be null. + public void MergeIn(PwDatabase pwSource, PwMergeMethod mm, + IStatusLogger slStatus) + { + if(pwSource == null) throw new ArgumentNullException("pwSource"); + + PwGroup pgOrgStructure = m_pgRootGroup.CloneStructure(); + PwGroup pgSrcStructure = pwSource.m_pgRootGroup.CloneStructure(); + + if(mm == PwMergeMethod.CreateNewUuids) + pwSource.RootGroup.CreateNewItemUuids(true, true, true); + + GroupHandler gh = delegate(PwGroup pg) + { + if(pg == pwSource.m_pgRootGroup) return true; + + PwGroup pgLocal = m_pgRootGroup.FindGroup(pg.Uuid, true); + if(pgLocal == null) + { + PwGroup pgSourceParent = pg.ParentGroup; + PwGroup pgLocalContainer; + if(pgSourceParent == pwSource.m_pgRootGroup) + pgLocalContainer = m_pgRootGroup; + else + pgLocalContainer = m_pgRootGroup.FindGroup(pgSourceParent.Uuid, true); + Debug.Assert(pgLocalContainer != null); + if(pgLocalContainer == null) pgLocalContainer = m_pgRootGroup; + + PwGroup pgNew = new PwGroup(false, false); + pgNew.Uuid = pg.Uuid; + pgNew.AssignProperties(pg, false, true); + pgLocalContainer.AddGroup(pgNew, true); + } + else // pgLocal != null + { + Debug.Assert(mm != PwMergeMethod.CreateNewUuids); + + if(mm == PwMergeMethod.OverwriteExisting) + pgLocal.AssignProperties(pg, false, false); + else if((mm == PwMergeMethod.OverwriteIfNewer) || + (mm == PwMergeMethod.Synchronize)) + { + pgLocal.AssignProperties(pg, true, false); + } + // else if(mm == PwMergeMethod.KeepExisting) ... + } + + return ((slStatus != null) ? slStatus.ContinueWork() : true); + }; + + EntryHandler eh = delegate(PwEntry pe) + { + PwEntry peLocal = m_pgRootGroup.FindEntry(pe.Uuid, true); + if(peLocal == null) + { + PwGroup pgSourceParent = pe.ParentGroup; + PwGroup pgLocalContainer; + if(pgSourceParent == pwSource.m_pgRootGroup) + pgLocalContainer = m_pgRootGroup; + else + pgLocalContainer = m_pgRootGroup.FindGroup(pgSourceParent.Uuid, true); + Debug.Assert(pgLocalContainer != null); + if(pgLocalContainer == null) pgLocalContainer = m_pgRootGroup; + + PwEntry peNew = new PwEntry(false, false); + peNew.Uuid = pe.Uuid; + peNew.AssignProperties(pe, false, true, true); + pgLocalContainer.AddEntry(peNew, true); + } + else // peLocal != null + { + Debug.Assert(mm != PwMergeMethod.CreateNewUuids); + + const PwCompareOptions cmpOpt = (PwCompareOptions.IgnoreParentGroup | + PwCompareOptions.IgnoreLastAccess | PwCompareOptions.IgnoreHistory | + PwCompareOptions.NullEmptyEquivStd); + bool bEquals = peLocal.EqualsEntry(pe, cmpOpt, MemProtCmpMode.None); + + bool bOrgBackup = !bEquals; + if(mm != PwMergeMethod.OverwriteExisting) + bOrgBackup &= (pe.LastModificationTime > peLocal.LastModificationTime); + bOrgBackup &= !pe.HasBackupOfData(peLocal, false, true); + if(bOrgBackup) peLocal.CreateBackup(null); // Maintain at end + + bool bSrcBackup = !bEquals && (mm != PwMergeMethod.OverwriteExisting); + bSrcBackup &= (peLocal.LastModificationTime > pe.LastModificationTime); + bSrcBackup &= !peLocal.HasBackupOfData(pe, false, true); + if(bSrcBackup) pe.CreateBackup(null); // Maintain at end + + if(mm == PwMergeMethod.OverwriteExisting) + peLocal.AssignProperties(pe, false, false, false); + else if((mm == PwMergeMethod.OverwriteIfNewer) || + (mm == PwMergeMethod.Synchronize)) + { + peLocal.AssignProperties(pe, true, false, false); + } + // else if(mm == PwMergeMethod.KeepExisting) ... + + MergeEntryHistory(peLocal, pe, mm); + } + + return ((slStatus != null) ? slStatus.ContinueWork() : true); + }; + + if(!pwSource.RootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh)) + throw new InvalidOperationException(); + + IStatusLogger slPrevStatus = m_slStatus; + m_slStatus = slStatus; + + if(mm == PwMergeMethod.Synchronize) + { + ApplyDeletions(pwSource.m_vDeletedObjects, true); + ApplyDeletions(m_vDeletedObjects, false); + + PwObjectPool ppOrgGroups = PwObjectPool.FromGroupRecursive( + pgOrgStructure, false); + PwObjectPool ppSrcGroups = PwObjectPool.FromGroupRecursive( + pgSrcStructure, false); + PwObjectPool ppOrgEntries = PwObjectPool.FromGroupRecursive( + pgOrgStructure, true); + PwObjectPool ppSrcEntries = PwObjectPool.FromGroupRecursive( + pgSrcStructure, true); + + RelocateGroups(ppOrgGroups, ppSrcGroups); + ReorderGroups(ppOrgGroups, ppSrcGroups); + RelocateEntries(ppOrgEntries, ppSrcEntries); + ReorderEntries(ppOrgEntries, ppSrcEntries); + Debug.Assert(ValidateUuidUniqueness()); + } + + // Must be called *after* merging groups, because group UUIDs + // are required for recycle bin and entry template UUIDs + MergeInDbProperties(pwSource, mm); + + MergeInCustomIcons(pwSource); + + MaintainBackups(); + + m_slStatus = slPrevStatus; + } + + private void MergeInCustomIcons(PwDatabase pwSource) + { + foreach(PwCustomIcon pwci in pwSource.CustomIcons) + { + if(GetCustomIconIndex(pwci.Uuid) >= 0) continue; + + m_vCustomIcons.Add(pwci); // PwCustomIcon is immutable + m_bUINeedsIconUpdate = true; + } + } + + /// + /// Apply a list of deleted objects. + /// + /// List of deleted objects. + private void ApplyDeletions(PwObjectList listDelObjects, + bool bCopyDeletionInfoToLocal) + { + Debug.Assert(listDelObjects != null); if(listDelObjects == null) throw new ArgumentNullException("listDelObjects"); + + LinkedList listGroupsToDelete = new LinkedList(); + LinkedList listEntriesToDelete = new LinkedList(); + + GroupHandler gh = delegate(PwGroup pg) + { + if(pg == m_pgRootGroup) return true; + + foreach(PwDeletedObject pdo in listDelObjects) + { + if(pg.Uuid.EqualsValue(pdo.Uuid)) + if(pg.LastModificationTime < pdo.DeletionTime) + listGroupsToDelete.AddLast(pg); + } + + return ((m_slStatus != null) ? m_slStatus.ContinueWork() : true); + }; + + EntryHandler eh = delegate(PwEntry pe) + { + foreach(PwDeletedObject pdo in listDelObjects) + { + if(pe.Uuid.EqualsValue(pdo.Uuid)) + if(pe.LastModificationTime < pdo.DeletionTime) + listEntriesToDelete.AddLast(pe); + } + + return ((m_slStatus != null) ? m_slStatus.ContinueWork() : true); + }; + + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh); + + foreach(PwGroup pg in listGroupsToDelete) + pg.ParentGroup.Groups.Remove(pg); + foreach(PwEntry pe in listEntriesToDelete) + pe.ParentGroup.Entries.Remove(pe); + + if(bCopyDeletionInfoToLocal) + { + foreach(PwDeletedObject pdoNew in listDelObjects) + { + bool bCopy = true; + + foreach(PwDeletedObject pdoLocal in m_vDeletedObjects) + { + if(pdoNew.Uuid.EqualsValue(pdoLocal.Uuid)) + { + bCopy = false; + + if(pdoNew.DeletionTime > pdoLocal.DeletionTime) + pdoLocal.DeletionTime = pdoNew.DeletionTime; + + break; + } + } + + if(bCopy) m_vDeletedObjects.Add(pdoNew); + } + } + } + + private void RelocateGroups(PwObjectPool ppOrgStructure, + PwObjectPool ppSrcStructure) + { + PwObjectList vGroups = m_pgRootGroup.GetGroups(true); + + foreach(PwGroup pg in vGroups) + { + if((m_slStatus != null) && !m_slStatus.ContinueWork()) break; + + // PwGroup pgOrg = pgOrgStructure.FindGroup(pg.Uuid, true); + IStructureItem ptOrg = ppOrgStructure.Get(pg.Uuid); + if(ptOrg == null) continue; + // PwGroup pgSrc = pgSrcStructure.FindGroup(pg.Uuid, true); + IStructureItem ptSrc = ppSrcStructure.Get(pg.Uuid); + if(ptSrc == null) continue; + + PwGroup pgOrgParent = ptOrg.ParentGroup; + PwGroup pgSrcParent = ptSrc.ParentGroup; + if(pgOrgParent.Uuid.EqualsValue(pgSrcParent.Uuid)) + { + pg.LocationChanged = ((ptSrc.LocationChanged > ptOrg.LocationChanged) ? + ptSrc.LocationChanged : ptOrg.LocationChanged); + continue; + } + + if(ptSrc.LocationChanged > ptOrg.LocationChanged) + { + PwGroup pgLocal = m_pgRootGroup.FindGroup(pgSrcParent.Uuid, true); + if(pgLocal == null) { Debug.Assert(false); continue; } + + if(pgLocal.IsContainedIn(pg)) continue; + + pg.ParentGroup.Groups.Remove(pg); + pgLocal.AddGroup(pg, true); + pg.LocationChanged = ptSrc.LocationChanged; + } + else + { + Debug.Assert(pg.ParentGroup.Uuid.EqualsValue(pgOrgParent.Uuid)); + Debug.Assert(pg.LocationChanged == ptOrg.LocationChanged); + } + } + + Debug.Assert(m_pgRootGroup.GetGroups(true).UCount == vGroups.UCount); + } + + private void RelocateEntries(PwObjectPool ppOrgStructure, + PwObjectPool ppSrcStructure) + { + PwObjectList vEntries = m_pgRootGroup.GetEntries(true); + + foreach(PwEntry pe in vEntries) + { + if((m_slStatus != null) && !m_slStatus.ContinueWork()) break; + + // PwEntry peOrg = pgOrgStructure.FindEntry(pe.Uuid, true); + IStructureItem ptOrg = ppOrgStructure.Get(pe.Uuid); + if(ptOrg == null) continue; + // PwEntry peSrc = pgSrcStructure.FindEntry(pe.Uuid, true); + IStructureItem ptSrc = ppSrcStructure.Get(pe.Uuid); + if(ptSrc == null) continue; + + PwGroup pgOrg = ptOrg.ParentGroup; + PwGroup pgSrc = ptSrc.ParentGroup; + if(pgOrg.Uuid.EqualsValue(pgSrc.Uuid)) + { + pe.LocationChanged = ((ptSrc.LocationChanged > ptOrg.LocationChanged) ? + ptSrc.LocationChanged : ptOrg.LocationChanged); + continue; + } + + if(ptSrc.LocationChanged > ptOrg.LocationChanged) + { + PwGroup pgLocal = m_pgRootGroup.FindGroup(pgSrc.Uuid, true); + if(pgLocal == null) { Debug.Assert(false); continue; } + + pe.ParentGroup.Entries.Remove(pe); + pgLocal.AddEntry(pe, true); + pe.LocationChanged = ptSrc.LocationChanged; + } + else + { + Debug.Assert(pe.ParentGroup.Uuid.EqualsValue(pgOrg.Uuid)); + Debug.Assert(pe.LocationChanged == ptOrg.LocationChanged); + } + } + + Debug.Assert(m_pgRootGroup.GetEntries(true).UCount == vEntries.UCount); + } + + private void ReorderGroups(PwObjectPool ppOrgStructure, + PwObjectPool ppSrcStructure) + { + GroupHandler gh = delegate(PwGroup pg) + { + ReorderObjectList(pg.Groups, ppOrgStructure, + ppSrcStructure, false); + return true; + }; + + ReorderObjectList(m_pgRootGroup.Groups, ppOrgStructure, + ppSrcStructure, false); + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, null); + } + + private void ReorderEntries(PwObjectPool ppOrgStructure, + PwObjectPool ppSrcStructure) + { + GroupHandler gh = delegate(PwGroup pg) + { + ReorderObjectList(pg.Entries, ppOrgStructure, + ppSrcStructure, true); + return true; + }; + + ReorderObjectList(m_pgRootGroup.Entries, ppOrgStructure, + ppSrcStructure, true); + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, null); + } + + private void ReorderObjectList(PwObjectList vItems, + PwObjectPool ppOrgStructure, PwObjectPool ppSrcStructure, bool bEntries) + where T : class, IStructureItem, IDeepCloneable + { + if(!ObjectListRequiresReorder(vItems, ppOrgStructure, ppSrcStructure, + bEntries)) return; + +#if DEBUG + PwObjectList vOrgListItems = vItems.CloneShallow(); +#endif + + Queue> qToDo = new Queue>(); + qToDo.Enqueue(new KeyValuePair(0, vItems.UCount - 1)); + + while(qToDo.Count > 0) + { + if((m_slStatus != null) && !m_slStatus.ContinueWork()) break; + + KeyValuePair kvp = qToDo.Dequeue(); + if(kvp.Value <= kvp.Key) { Debug.Assert(false); continue; } + + Queue qRelBefore = new Queue(); + Queue qRelAfter = new Queue(); + uint uPivot = FindLocationChangedPivot(vItems, kvp, ppOrgStructure, + ppSrcStructure, qRelBefore, qRelAfter, bEntries); + T ptPivot = vItems.GetAt(uPivot); + + List vToSort = vItems.GetRange(kvp.Key, kvp.Value); + Queue qBefore = new Queue(); + Queue qAfter = new Queue(); + bool bBefore = true; + + foreach(T pt in vToSort) + { + if(pt == ptPivot) { bBefore = false; continue; } + + bool bAdded = false; + foreach(PwUuid puBefore in qRelBefore) + { + if(puBefore.EqualsValue(pt.Uuid)) + { + qBefore.Enqueue(pt); + bAdded = true; + break; + } + } + if(bAdded) continue; + + foreach(PwUuid puAfter in qRelAfter) + { + if(puAfter.EqualsValue(pt.Uuid)) + { + qAfter.Enqueue(pt); + bAdded = true; + break; + } + } + if(bAdded) continue; + + if(bBefore) qBefore.Enqueue(pt); + else qAfter.Enqueue(pt); + } + Debug.Assert(bBefore == false); + + uint uPos = kvp.Key; + while(qBefore.Count > 0) vItems.SetAt(uPos++, qBefore.Dequeue()); + vItems.SetAt(uPos++, ptPivot); + while(qAfter.Count > 0) vItems.SetAt(uPos++, qAfter.Dequeue()); + Debug.Assert(uPos == (kvp.Value + 1)); + + int iNewPivot = vItems.IndexOf(ptPivot); + if((iNewPivot < (int)kvp.Key) || (iNewPivot > (int)kvp.Value)) + { + Debug.Assert(false); + continue; + } + + if((iNewPivot - 1) > (int)kvp.Key) + qToDo.Enqueue(new KeyValuePair(kvp.Key, + (uint)(iNewPivot - 1))); + + if((iNewPivot + 1) < (int)kvp.Value) + qToDo.Enqueue(new KeyValuePair((uint)(iNewPivot + 1), + kvp.Value)); + } + +#if DEBUG + foreach(T ptItem in vOrgListItems) + { + Debug.Assert(vItems.IndexOf(ptItem) >= 0); + } +#endif + } + + private static uint FindLocationChangedPivot(PwObjectList vItems, + KeyValuePair kvpRange, PwObjectPool ppOrgStructure, + PwObjectPool ppSrcStructure, Queue qBefore, Queue qAfter, + bool bEntries) + where T : class, IStructureItem, IDeepCloneable + { + uint uPosMax = kvpRange.Key; + DateTime dtMax = DateTime.MinValue; + List vNeighborSrc = null; + + for(uint u = kvpRange.Key; u <= kvpRange.Value; ++u) + { + T pt = vItems.GetAt(u); + + // IStructureItem ptOrg = pgOrgStructure.FindObject(pt.Uuid, true, bEntries); + IStructureItem ptOrg = ppOrgStructure.Get(pt.Uuid); + if((ptOrg != null) && (ptOrg.LocationChanged > dtMax)) + { + uPosMax = u; + dtMax = ptOrg.LocationChanged; // No 'continue' + vNeighborSrc = ptOrg.ParentGroup.GetObjects(false, bEntries); + } + + // IStructureItem ptSrc = pgSrcStructure.FindObject(pt.Uuid, true, bEntries); + IStructureItem ptSrc = ppSrcStructure.Get(pt.Uuid); + if((ptSrc != null) && (ptSrc.LocationChanged > dtMax)) + { + uPosMax = u; + dtMax = ptSrc.LocationChanged; // No 'continue' + vNeighborSrc = ptSrc.ParentGroup.GetObjects(false, bEntries); + } + } + + GetNeighborItems(vNeighborSrc, vItems.GetAt(uPosMax).Uuid, qBefore, qAfter); + return uPosMax; + } + + private static void GetNeighborItems(List vItems, + PwUuid pwPivot, Queue qBefore, Queue qAfter) + { + qBefore.Clear(); + qAfter.Clear(); + + // Checks after clearing the queues + if(vItems == null) { Debug.Assert(false); return; } // No throw + + bool bBefore = true; + for(int i = 0; i < vItems.Count; ++i) + { + PwUuid pw = vItems[i].Uuid; + + if(pw.EqualsValue(pwPivot)) bBefore = false; + else if(bBefore) qBefore.Enqueue(pw); + else qAfter.Enqueue(pw); + } + Debug.Assert(bBefore == false); + } + + /// + /// Method to check whether a reordering is required. This fast test + /// allows to skip the reordering routine, resulting in a large + /// performance increase. + /// + private bool ObjectListRequiresReorder(PwObjectList vItems, + PwObjectPool ppOrgStructure, PwObjectPool ppSrcStructure, bool bEntries) + where T : class, IStructureItem, IDeepCloneable + { + Debug.Assert(ppOrgStructure.ContainsOnlyType(bEntries ? typeof(PwEntry) : typeof(PwGroup))); + Debug.Assert(ppSrcStructure.ContainsOnlyType(bEntries ? typeof(PwEntry) : typeof(PwGroup))); + if(vItems.UCount <= 1) return false; + + if((m_slStatus != null) && !m_slStatus.ContinueWork()) return false; + + T ptFirst = vItems.GetAt(0); + // IStructureItem ptOrg = pgOrgStructure.FindObject(ptFirst.Uuid, true, bEntries); + IStructureItem ptOrg = ppOrgStructure.Get(ptFirst.Uuid); + if(ptOrg == null) return true; + // IStructureItem ptSrc = pgSrcStructure.FindObject(ptFirst.Uuid, true, bEntries); + IStructureItem ptSrc = ppSrcStructure.Get(ptFirst.Uuid); + if(ptSrc == null) return true; + + if(ptFirst.ParentGroup == null) { Debug.Assert(false); return true; } + PwGroup pgOrgParent = ptOrg.ParentGroup; + if(pgOrgParent == null) return true; // Root might be in tree + PwGroup pgSrcParent = ptSrc.ParentGroup; + if(pgSrcParent == null) return true; // Root might be in tree + + if(!ptFirst.ParentGroup.Uuid.EqualsValue(pgOrgParent.Uuid)) return true; + if(!pgOrgParent.Uuid.EqualsValue(pgSrcParent.Uuid)) return true; + + List lOrg = pgOrgParent.GetObjects(false, bEntries); + List lSrc = pgSrcParent.GetObjects(false, bEntries); + if(vItems.UCount != (uint)lOrg.Count) return true; + if(lOrg.Count != lSrc.Count) return true; + + for(uint u = 0; u < vItems.UCount; ++u) + { + IStructureItem pt = vItems.GetAt(u); + Debug.Assert(pt.ParentGroup == ptFirst.ParentGroup); + + if(!pt.Uuid.EqualsValue(lOrg[(int)u].Uuid)) return true; + if(!pt.Uuid.EqualsValue(lSrc[(int)u].Uuid)) return true; + if(pt.LocationChanged != lOrg[(int)u].LocationChanged) return true; + if(pt.LocationChanged != lSrc[(int)u].LocationChanged) return true; + } + + return false; + } + + private void MergeInDbProperties(PwDatabase pwSource, PwMergeMethod mm) + { + if(pwSource == null) { Debug.Assert(false); return; } + if((mm == PwMergeMethod.KeepExisting) || (mm == PwMergeMethod.None)) + return; + + bool bForce = (mm == PwMergeMethod.OverwriteExisting); + + if(bForce || (pwSource.m_dtNameChanged > m_dtNameChanged)) + { + m_strName = pwSource.m_strName; + m_dtNameChanged = pwSource.m_dtNameChanged; + } + + if(bForce || (pwSource.m_dtDescChanged > m_dtDescChanged)) + { + m_strDesc = pwSource.m_strDesc; + m_dtDescChanged = pwSource.m_dtDescChanged; + } + + if(bForce || (pwSource.m_dtDefaultUserChanged > m_dtDefaultUserChanged)) + { + m_strDefaultUserName = pwSource.m_strDefaultUserName; + m_dtDefaultUserChanged = pwSource.m_dtDefaultUserChanged; + } + + if(bForce) m_clr = pwSource.m_clr; + + PwUuid pwPrefBin = m_pwRecycleBin, pwAltBin = pwSource.m_pwRecycleBin; + if(bForce || (pwSource.m_dtRecycleBinChanged > m_dtRecycleBinChanged)) + { + pwPrefBin = pwSource.m_pwRecycleBin; + pwAltBin = m_pwRecycleBin; + m_bUseRecycleBin = pwSource.m_bUseRecycleBin; + m_dtRecycleBinChanged = pwSource.m_dtRecycleBinChanged; + } + if(m_pgRootGroup.FindGroup(pwPrefBin, true) != null) + m_pwRecycleBin = pwPrefBin; + else if(m_pgRootGroup.FindGroup(pwAltBin, true) != null) + m_pwRecycleBin = pwAltBin; + else m_pwRecycleBin = PwUuid.Zero; // Debug.Assert(false); + + PwUuid pwPrefTmp = m_pwEntryTemplatesGroup, pwAltTmp = pwSource.m_pwEntryTemplatesGroup; + if(bForce || (pwSource.m_dtEntryTemplatesChanged > m_dtEntryTemplatesChanged)) + { + pwPrefTmp = pwSource.m_pwEntryTemplatesGroup; + pwAltTmp = m_pwEntryTemplatesGroup; + m_dtEntryTemplatesChanged = pwSource.m_dtEntryTemplatesChanged; + } + if(m_pgRootGroup.FindGroup(pwPrefTmp, true) != null) + m_pwEntryTemplatesGroup = pwPrefTmp; + else if(m_pgRootGroup.FindGroup(pwAltTmp, true) != null) + m_pwEntryTemplatesGroup = pwAltTmp; + else m_pwEntryTemplatesGroup = PwUuid.Zero; // Debug.Assert(false); + } + + private void MergeEntryHistory(PwEntry pe, PwEntry peSource, + PwMergeMethod mm) + { + Debug.Assert(false, "not yet implemented"); + return ; +#if TODO + if(!pe.Uuid.EqualsValue(peSource.Uuid)) { Debug.Assert(false); return; } + + if(pe.History.UCount == peSource.History.UCount) + { + bool bEqual = true; + for(uint uEnum = 0; uEnum < pe.History.UCount; ++uEnum) + { + if(pe.History.GetAt(uEnum).LastModificationTime != + peSource.History.GetAt(uEnum).LastModificationTime) + { + bEqual = false; + break; + } + } + + if(bEqual) return; + } + + if((m_slStatus != null) && !m_slStatus.ContinueWork()) return; + + SortedList list = new SortedList(); + foreach(PwEntry peOrg in pe.History) + { + list[peOrg.LastModificationTime] = peOrg; + } + + foreach(PwEntry peSrc in peSource.History) + { + DateTime dt = peSrc.LastModificationTime; + if(list.ContainsKey(dt)) + { + if(mm == PwMergeMethod.OverwriteExisting) + list[dt] = peSrc.CloneDeep(); + } + else list[dt] = peSrc.CloneDeep(); + } + + pe.History.Clear(); + foreach(KeyValuePair kvpCur in list) + { + Debug.Assert(kvpCur.Value.Uuid.EqualsValue(pe.Uuid)); + Debug.Assert(kvpCur.Value.History.UCount == 0); + pe.History.Add(kvpCur.Value); + } +#endif + } + + public bool MaintainBackups() + { + if(m_pgRootGroup == null) { Debug.Assert(false); return false; } + + bool bDeleted = false; + EntryHandler eh = delegate(PwEntry pe) + { + if(pe.MaintainBackups(this)) bDeleted = true; + return true; + }; + + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, null, eh); + return bDeleted; + } + + /* /// + /// Synchronize current database with another one. + /// + /// Source file. + public void Synchronize(string strFile) + { + PwDatabase pwSource = new PwDatabase(); + + IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile); + pwSource.Open(ioc, m_pwUserKey, null); + + MergeIn(pwSource, PwMergeMethod.Synchronize); + } */ + + /// + /// Get the index of a custom icon. + /// + /// ID of the icon. + /// Index of the icon. + public int GetCustomIconIndex(PwUuid pwIconId) + { + int nIndex = 0; + + foreach(PwCustomIcon pwci in m_vCustomIcons) + { + if(pwci.Uuid.EqualsValue(pwIconId)) + return nIndex; + + ++nIndex; + } + + // Debug.Assert(false); // Do not assert + return -1; + } + + /// + /// Get a custom icon. This function can return null, if + /// no cached image of the icon is available. + /// + /// ID of the icon. + /// Image data. + public BitmapImage GetCustomIcon(PwUuid pwIconId) + { + int nIndex = GetCustomIconIndex(pwIconId); + + if(nIndex >= 0) return m_vCustomIcons[nIndex].Image; + else { Debug.Assert(false); return null; } + } + + public bool DeleteCustomIcons(List vUuidsToDelete) + { + Debug.Assert(vUuidsToDelete != null); + if(vUuidsToDelete == null) throw new ArgumentNullException("vUuidsToDelete"); + if(vUuidsToDelete.Count <= 0) return true; + + GroupHandler gh = delegate(PwGroup pg) + { + PwUuid uuidThis = pg.CustomIconUuid; + if(uuidThis.EqualsValue(PwUuid.Zero)) return true; + + foreach(PwUuid uuidDelete in vUuidsToDelete) + { + if(uuidThis.EqualsValue(uuidDelete)) + { + pg.CustomIconUuid = PwUuid.Zero; + break; + } + } + + return true; + }; + + EntryHandler eh = delegate(PwEntry pe) + { + RemoveCustomIconUuid(pe, vUuidsToDelete); + return true; + }; + + gh(m_pgRootGroup); + if(!m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh)) + { + Debug.Assert(false); + return false; + } + + foreach(PwUuid pwUuid in vUuidsToDelete) + { + int nIndex = GetCustomIconIndex(pwUuid); + if(nIndex >= 0) m_vCustomIcons.RemoveAt(nIndex); + } + + return true; + } + + private static void RemoveCustomIconUuid(PwEntry pe, List vToDelete) + { + PwUuid uuidThis = pe.CustomIconUuid; + if(uuidThis.EqualsValue(PwUuid.Zero)) return; + + foreach(PwUuid uuidDelete in vToDelete) + { + if(uuidThis.EqualsValue(uuidDelete)) + { + pe.CustomIconUuid = PwUuid.Zero; + break; + } + } + + foreach(PwEntry peHistory in pe.History) + RemoveCustomIconUuid(peHistory, vToDelete); + } + + private bool ValidateUuidUniqueness() + { +#if DEBUG + List l = new List(); + bool bAllUnique = true; + + GroupHandler gh = delegate(PwGroup pg) + { + foreach(PwUuid u in l) + bAllUnique &= !pg.Uuid.EqualsValue(u); + l.Add(pg.Uuid); + return bAllUnique; + }; + + EntryHandler eh = delegate(PwEntry pe) + { + foreach(PwUuid u in l) + bAllUnique &= !pe.Uuid.EqualsValue(u); + l.Add(pe.Uuid); + return bAllUnique; + }; + + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh); + return bAllUnique; +#else + return true; +#endif + } + + /* public void CreateBackupFile(IStatusLogger sl) + { + if(sl != null) sl.SetText(KLRes.CreatingBackupFile, LogStatusType.Info); + + IOConnectionInfo iocBk = m_ioSource.CloneDeep(); + iocBk.Path += StrBackupExtension; + + bool bMadeUnhidden = UrlUtil.UnhideFile(iocBk.Path); + + bool bFastCopySuccess = false; + if(m_ioSource.IsLocalFile() && (m_ioSource.UserName.Length == 0) && + (m_ioSource.Password.Length == 0)) + { + try + { + string strFile = m_ioSource.Path + StrBackupExtension; + File.Copy(m_ioSource.Path, strFile, true); + bFastCopySuccess = true; + } + catch(Exception) { Debug.Assert(false); } + } + + if(bFastCopySuccess == false) + { + using(Stream sIn = IOConnection.OpenRead(m_ioSource)) + { + using(Stream sOut = IOConnection.OpenWrite(iocBk)) + { + MemUtil.CopyStream(sIn, sOut); + sOut.Close(); + } + + sIn.Close(); + } + } + + if(bMadeUnhidden) UrlUtil.HideFile(iocBk.Path, true); // Hide again + } */ + + /* private static void RemoveData(PwGroup pg) + { + EntryHandler eh = delegate(PwEntry pe) + { + pe.AutoType.Clear(); + pe.Binaries.Clear(); + pe.History.Clear(); + pe.Strings.Clear(); + return true; + }; + + pg.TraverseTree(TraversalMethod.PreOrder, null, eh); + } */ + + public uint DeleteDuplicateEntries(IStatusLogger sl) + { + uint uDeleted = 0; + + PwGroup pgRecycleBin = null; + if(m_bUseRecycleBin) + pgRecycleBin = m_pgRootGroup.FindGroup(m_pwRecycleBin, true); + + DateTime dtNow = DateTime.Now; + PwObjectList l = m_pgRootGroup.GetEntries(true); + int i = 0; + while(true) + { + if(i >= ((int)l.UCount - 1)) break; + + if(sl != null) + { + long lCnt = (long)l.UCount, li = (long)i; + long nArTotal = (lCnt * lCnt) / 2L; + long nArCur = li * lCnt - ((li * li) / 2L); + long nArPct = (nArCur * 100L) / nArTotal; + if(nArPct < 0) nArPct = 0; + if(nArPct > 100) nArPct = 100; + if(!sl.SetProgress((uint)nArPct)) break; + } + + PwEntry peA = l.GetAt((uint)i); + + for(uint j = (uint)i + 1; j < l.UCount; ++j) + { + PwEntry peB = l.GetAt(j); + if(!DupEntriesEqual(peA, peB)) continue; + + bool bDeleteA = (peA.LastModificationTime <= peB.LastModificationTime); + if(pgRecycleBin != null) + { + bool bAInBin = peA.IsContainedIn(pgRecycleBin); + bool bBInBin = peB.IsContainedIn(pgRecycleBin); + + if(bAInBin && !bBInBin) bDeleteA = true; + else if(bBInBin && !bAInBin) bDeleteA = false; + } + + if(bDeleteA) + { + peA.ParentGroup.Entries.Remove(peA); + m_vDeletedObjects.Add(new PwDeletedObject(peA.Uuid, dtNow)); + + l.RemoveAt((uint)i); + --i; + } + else + { + peB.ParentGroup.Entries.Remove(peB); + m_vDeletedObjects.Add(new PwDeletedObject(peB.Uuid, dtNow)); + + l.RemoveAt(j); + } + + ++uDeleted; + break; + } + + ++i; + } + + return uDeleted; + } + + private static List m_lStdFields = null; + private static bool DupEntriesEqual(PwEntry a, PwEntry b) + { + + Debug.Assert(false, "not yet implemented"); + return true; +#if TODO + if(m_lStdFields == null) m_lStdFields = PwDefs.GetStandardFields(); + + foreach(string strStdKey in m_lStdFields) + { + string strA = a.Strings.ReadSafe(strStdKey); + string strB = b.Strings.ReadSafe(strStdKey); + if(!strA.Equals(strB)) return false; + } + + foreach(KeyValuePair kvpA in a.Strings) + { + if(PwDefs.IsStandardField(kvpA.Key)) continue; + + ProtectedString psB = b.Strings.Get(kvpA.Key); + if(psB == null) return false; + + // Ignore protection setting, compare values only + if(!kvpA.Value.ReadString().Equals(psB.ReadString())) return false; + } + + foreach(KeyValuePair kvpB in b.Strings) + { + if(PwDefs.IsStandardField(kvpB.Key)) continue; + + ProtectedString psA = a.Strings.Get(kvpB.Key); + if(psA == null) return false; + + // Must be equal by logic + Debug.Assert(kvpB.Value.ReadString().Equals(psA.ReadString())); + } + + if(a.Binaries.UCount != b.Binaries.UCount) return false; + foreach(KeyValuePair kvpBin in a.Binaries) + { + ProtectedBinary pbB = b.Binaries.Get(kvpBin.Key); + if(pbB == null) return false; + + // Ignore protection setting, compare values only + byte[] pbDataA = kvpBin.Value.ReadData(); + byte[] pbDataB = pbB.ReadData(); + bool bBinEq = MemUtil.ArraysEqual(pbDataA, pbDataB); + MemUtil.ZeroByteArray(pbDataA); + MemUtil.ZeroByteArray(pbDataB); + if(!bBinEq) return false; + } + + return true; +#endif + } + + public uint DeleteEmptyGroups() + { + uint uDeleted = 0; + + PwObjectList l = m_pgRootGroup.GetGroups(true); + int iStart = (int)l.UCount - 1; + for(int i = iStart; i >= 0; --i) + { + PwGroup pg = l.GetAt((uint)i); + if((pg.Groups.UCount > 0) || (pg.Entries.UCount > 0)) continue; + + pg.ParentGroup.Groups.Remove(pg); + m_vDeletedObjects.Add(new PwDeletedObject(pg.Uuid, DateTime.Now)); + + ++uDeleted; + } + + return uDeleted; + } + + public uint DeleteUnusedCustomIcons() + { + List lToDelete = new List(); + foreach(PwCustomIcon pwci in m_vCustomIcons) + lToDelete.Add(pwci.Uuid); + + GroupHandler gh = delegate(PwGroup pg) + { + PwUuid pwUuid = pg.CustomIconUuid; + if((pwUuid == null) || pwUuid.EqualsValue(PwUuid.Zero)) return true; + + for(int i = 0; i < lToDelete.Count; ++i) + { + if(lToDelete[i].EqualsValue(pwUuid)) + { + lToDelete.RemoveAt(i); + break; + } + } + + return true; + }; + + EntryHandler eh = delegate(PwEntry pe) + { + PwUuid pwUuid = pe.CustomIconUuid; + if((pwUuid == null) || pwUuid.EqualsValue(PwUuid.Zero)) return true; + + for(int i = 0; i < lToDelete.Count; ++i) + { + if(lToDelete[i].EqualsValue(pwUuid)) + { + lToDelete.RemoveAt(i); + break; + } + } + + return true; + }; + + gh(m_pgRootGroup); + m_pgRootGroup.TraverseTree(TraversalMethod.PreOrder, gh, eh); + + uint uDeleted = 0; + foreach(PwUuid pwDel in lToDelete) + { + int nIndex = GetCustomIconIndex(pwDel); + if(nIndex < 0) { Debug.Assert(false); continue; } + + m_vCustomIcons.RemoveAt(nIndex); + ++uDeleted; + } + + if(uDeleted > 0) m_bUINeedsIconUpdate = true; + return uDeleted; + } + } +} diff --git a/ModernKeePassLib/PwDefs.cs b/ModernKeePassLib/PwDefs.cs new file mode 100644 index 0000000..caffb94 --- /dev/null +++ b/ModernKeePassLib/PwDefs.cs @@ -0,0 +1,461 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using System.ComponentModel; +using System.Diagnostics; + +using ModernKeePassLib.Delegates; +using ModernKeePassLib.Interfaces; + +namespace ModernKeePassLib +{ + /// + /// Contains KeePassLib-global definitions and enums. + /// + public static class PwDefs + { + /// + /// The product name. + /// + public const string ProductName = "KeePass Password Safe"; + + /// + /// A short, simple string representing the product name. The string + /// should contain no spaces, directory separator characters, etc. + /// + public const string ShortProductName = "KeePass"; + + /// + /// Version, encoded as 32-bit unsigned integer. + /// 2.00 = 0x02000000, 2.01 = 0x02000100, ..., 2.18 = 0x02010800. + /// As of 2.19, the version is encoded component-wise per byte, + /// e.g. 2.19 = 0x02130000. + /// It is highly recommended to use FileVersion64 instead. + /// + public const uint Version32 = 0x02130000; + + /// + /// Version, encoded as 64-bit unsigned integer + /// (component-wise, 16 bits per component). + /// + public const ulong FileVersion64 = 0x0002001300000000UL; + + /// + /// Version, encoded as string. + /// + public const string VersionString = "2.19"; + + public const string Copyright = @"Copyright © 2003-2012 Dominik Reichl"; + + /// + /// Product website URL. Terminated by a forward slash. + /// + public const string HomepageUrl = "http://keepass.info/"; + + /// + /// Product donations URL. + /// + public const string DonationsUrl = "http://keepass.info/donate.html"; + + /// + /// URL to the online plugins page. + /// + public const string PluginsUrl = "http://keepass.info/plugins.html"; + + /// + /// URL to the online translations page. + /// + public const string TranslationsUrl = "http://keepass.info/translations.html"; + + /// + /// URL to a TXT file (eventually compressed) that contains information + /// about the latest KeePass version available on the website. + /// + public const string VersionUrl = "http://keepass.info/update/version2x.txt.gz"; + + /// + /// URL to the root path of the online KeePass help. Terminated by + /// a forward slash. + /// + public const string HelpUrl = "http://keepass.info/help/"; + + /// + /// A DateTime object that represents the time when the assembly + /// was loaded. + /// + public static readonly DateTime DtDefaultNow = DateTime.Now; + + /// + /// Default number of master key encryption/transformation rounds (making dictionary attacks harder). + /// + public const ulong DefaultKeyEncryptionRounds = 6000; + + /// + /// Default identifier string for the title field. Should not contain + /// spaces, tabs or other whitespace. + /// + public const string TitleField = "Title"; + + /// + /// Default identifier string for the user name field. Should not contain + /// spaces, tabs or other whitespace. + /// + public const string UserNameField = "UserName"; + + /// + /// Default identifier string for the password field. Should not contain + /// spaces, tabs or other whitespace. + /// + public const string PasswordField = "Password"; + + /// + /// Default identifier string for the URL field. Should not contain + /// spaces, tabs or other whitespace. + /// + public const string UrlField = "URL"; + + /// + /// Default identifier string for the notes field. Should not contain + /// spaces, tabs or other whitespace. + /// + public const string NotesField = "Notes"; + + /// + /// Default identifier string for the field which will contain TAN indices. + /// + public const string TanIndexField = UserNameField; + + /// + /// Default title of an entry that is really a TAN entry. + /// + public const string TanTitle = @""; + + /// + /// Prefix of a custom auto-type string field. + /// + public const string AutoTypeStringPrefix = "S:"; + + /// + /// Default string representing a hidden password. + /// + public const string HiddenPassword = "********"; + + /// + /// Default auto-type keystroke sequence. If no custom sequence is + /// specified, this sequence is used. + /// + public const string DefaultAutoTypeSequence = @"{USERNAME}{TAB}{PASSWORD}{ENTER}"; + + /// + /// Default auto-type keystroke sequence for TAN entries. If no custom + /// sequence is specified, this sequence is used. + /// + public const string DefaultAutoTypeSequenceTan = @"{PASSWORD}"; + + /// + /// Check if a name is a standard field name. + /// + /// Input field name. + /// Returns true, if the field name is a standard + /// field name (title, user name, password, ...), otherwise false. + public static bool IsStandardField(string strFieldName) + { + Debug.Assert(strFieldName != null); if(strFieldName == null) return false; + + if(strFieldName.Equals(TitleField)) return true; + if(strFieldName.Equals(UserNameField)) return true; + if(strFieldName.Equals(PasswordField)) return true; + if(strFieldName.Equals(UrlField)) return true; + if(strFieldName.Equals(NotesField)) return true; + + return false; + } + + public static List GetStandardFields() + { + List l = new List(); + + l.Add(TitleField); + l.Add(UserNameField); + l.Add(PasswordField); + l.Add(UrlField); + l.Add(NotesField); + + return l; + } + + /// + /// Check if an entry is a TAN. + /// + /// Password entry. + /// Returns true if the entry is a TAN. + public static bool IsTanEntry(PwEntry pe) + { + Debug.Assert(pe != null); if(pe == null) return false; + + return (pe.Strings.ReadSafe(PwDefs.TitleField) == TanTitle); + } + } + + #pragma warning disable 1591 // Missing XML comments warning + /// + /// Search parameters for group and entry searches. + /// + public sealed class SearchParameters + { + private string m_strText = string.Empty; + [DefaultValue("")] + public string SearchString + { + get { return m_strText; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strText = value; + } + } + + private bool m_bRegex = false; + [DefaultValue(false)] + public bool RegularExpression + { + get { return m_bRegex; } + set { m_bRegex = value; } + } + + private bool m_bSearchInTitles = true; + [DefaultValue(true)] + public bool SearchInTitles + { + get { return m_bSearchInTitles; } + set { m_bSearchInTitles = value; } + } + + private bool m_bSearchInUserNames = true; + [DefaultValue(true)] + public bool SearchInUserNames + { + get { return m_bSearchInUserNames; } + set { m_bSearchInUserNames = value; } + } + + private bool m_bSearchInPasswords = false; + [DefaultValue(false)] + public bool SearchInPasswords + { + get { return m_bSearchInPasswords; } + set { m_bSearchInPasswords = value; } + } + + private bool m_bSearchInUrls = true; + [DefaultValue(true)] + public bool SearchInUrls + { + get { return m_bSearchInUrls; } + set { m_bSearchInUrls = value; } + } + + private bool m_bSearchInNotes = true; + [DefaultValue(true)] + public bool SearchInNotes + { + get { return m_bSearchInNotes; } + set { m_bSearchInNotes = value; } + } + + private bool m_bSearchInOther = true; + [DefaultValue(true)] + public bool SearchInOther + { + get { return m_bSearchInOther; } + set { m_bSearchInOther = value; } + } + + private bool m_bSearchInUuids = false; + [DefaultValue(false)] + public bool SearchInUuids + { + get { return m_bSearchInUuids; } + set { m_bSearchInUuids = value; } + } + + private bool m_bSearchInGroupNames = false; + [DefaultValue(false)] + public bool SearchInGroupNames + { + get { return m_bSearchInGroupNames; } + set { m_bSearchInGroupNames = value; } + } + + private bool m_bSearchInTags = true; + [DefaultValue(true)] + public bool SearchInTags + { + get { return m_bSearchInTags; } + set { m_bSearchInTags = value; } + } + + + //Bert TODO: Check if using CurrentCultureIgnoreCase makes sense. + private StringComparison m_scType = StringComparison.CurrentCultureIgnoreCase; + //private StringComparison m_scType = StringComparison.InvariantCultureIgnoreCase; + /// + /// String comparison type. Specifies the condition when the specified + /// text matches a group/entry string. + /// + public StringComparison ComparisonMode + { + get { return m_scType; } + set { m_scType = value; } + } + + private bool m_bExcludeExpired = false; + [DefaultValue(false)] + public bool ExcludeExpired + { + get { return m_bExcludeExpired; } + set { m_bExcludeExpired = value; } + } + + private bool m_bRespectEntrySearchingDisabled = true; + [DefaultValue(true)] + public bool RespectEntrySearchingDisabled + { + get { return m_bRespectEntrySearchingDisabled; } + set { m_bRespectEntrySearchingDisabled = value; } + } + + private StrPwEntryDelegate m_fnDataTrf = null; + [XmlIgnore] + public StrPwEntryDelegate DataTransformationFn + { + get { return m_fnDataTrf; } + set { m_fnDataTrf = value; } + } + + private string m_strDataTrf = string.Empty; + /// + /// Only for serialization. + /// + [DefaultValue("")] + public string DataTransformation + { + get { return m_strDataTrf; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strDataTrf = value; + } + } + + [XmlIgnore] + public static SearchParameters None + { + get + { + SearchParameters sp = new SearchParameters(); + + // sp.m_strText = string.Empty; + // sp.m_bRegex = false; + sp.m_bSearchInTitles = false; + sp.m_bSearchInUserNames = false; + // sp.m_bSearchInPasswords = false; + sp.m_bSearchInUrls = false; + sp.m_bSearchInNotes = false; + sp.m_bSearchInOther = false; + // sp.m_bSearchInUuids = false; + // sp.SearchInGroupNames = false; + sp.m_bSearchInTags = false; + // sp.m_scType = StringComparison.InvariantCultureIgnoreCase; + // sp.m_bExcludeExpired = false; + // m_bRespectEntrySearchingDisabled = true; + + return sp; + } + } + + /// + /// Construct a new search parameters object. + /// + public SearchParameters() + { + } + + public SearchParameters Clone() + { + return (SearchParameters)this.MemberwiseClone(); + } + } + #pragma warning restore 1591 // Missing XML comments warning + + #pragma warning disable 1591 // Missing XML comments warning + /// + /// Memory protection configuration structure (for default fields). + /// + public sealed class MemoryProtectionConfig : IDeepCloneable + { + public bool ProtectTitle = false; + public bool ProtectUserName = false; + public bool ProtectPassword = true; + public bool ProtectUrl = false; + public bool ProtectNotes = false; + + // public bool AutoEnableVisualHiding = false; + + public MemoryProtectionConfig CloneDeep() + { + return (MemoryProtectionConfig)this.MemberwiseClone(); + } + + public bool GetProtection(string strField) + { + if(strField == PwDefs.TitleField) return this.ProtectTitle; + if(strField == PwDefs.UserNameField) return this.ProtectUserName; + if(strField == PwDefs.PasswordField) return this.ProtectPassword; + if(strField == PwDefs.UrlField) return this.ProtectUrl; + if(strField == PwDefs.NotesField) return this.ProtectNotes; + + return false; + } + } + #pragma warning restore 1591 // Missing XML comments warning + + public sealed class ObjectTouchedEventArgs : EventArgs + { + private object m_o; + public object Object { get { return m_o; } } + + private bool m_bModified; + public bool Modified { get { return m_bModified; } } + + private bool m_bParentsTouched; + public bool ParentsTouched { get { return m_bParentsTouched; } } + + public ObjectTouchedEventArgs(object o, bool bModified, + bool bParentsTouched) + { + m_o = o; + m_bModified = bModified; + m_bParentsTouched = bParentsTouched; + } + } +} diff --git a/ModernKeePassLib/PwDeletedObject.cs b/ModernKeePassLib/PwDeletedObject.cs new file mode 100644 index 0000000..2b0b609 --- /dev/null +++ b/ModernKeePassLib/PwDeletedObject.cs @@ -0,0 +1,86 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; + +namespace ModernKeePassLib +{ + /// + /// Represents an object that has been deleted. + /// + public sealed class PwDeletedObject : IDeepCloneable + { + private PwUuid m_uuid = PwUuid.Zero; + /// + /// UUID of the entry that has been deleted. + /// + public PwUuid Uuid + { + get { return m_uuid; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_uuid = value; + } + } + + private DateTime m_dtDeletionTime = PwDefs.DtDefaultNow; + /// + /// The date/time when the entry has been deleted. + /// + public DateTime DeletionTime + { + get { return m_dtDeletionTime; } + set { m_dtDeletionTime = value; } + } + + /// + /// Construct a new PwDeletedObject object. + /// + public PwDeletedObject() + { + } + + public PwDeletedObject(PwUuid uuid, DateTime dtDeletionTime) + { + if(uuid == null) throw new ArgumentNullException("uuid"); + + m_uuid = uuid; + m_dtDeletionTime = dtDeletionTime; + } + + /// + /// Clone the object. + /// + /// Value copy of the current object. + public PwDeletedObject CloneDeep() + { + PwDeletedObject pdo = new PwDeletedObject(); + + pdo.m_uuid = m_uuid; // PwUuid objects are immutable + pdo.m_dtDeletionTime = m_dtDeletionTime; + + return pdo; + } + } +} diff --git a/ModernKeePassLib/PwEntry.cs b/ModernKeePassLib/PwEntry.cs new file mode 100644 index 0000000..e7df340 --- /dev/null +++ b/ModernKeePassLib/PwEntry.cs @@ -0,0 +1,881 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; + +using ModernKeePassLib.Collections; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib +{ + /// + /// A class representing a password entry. A password entry consists of several + /// fields like title, user name, password, etc. Each password entry has a + /// unique ID (UUID). + /// + public sealed class PwEntry : ITimeLogger, IStructureItem, IDeepCloneable + { + private PwUuid m_uuid = PwUuid.Zero; + private PwGroup m_pParentGroup = null; + private DateTime m_tParentGroupLastMod = PwDefs.DtDefaultNow; + + private ProtectedStringDictionary m_listStrings = new ProtectedStringDictionary(); + private ProtectedBinaryDictionary m_listBinaries = new ProtectedBinaryDictionary(); + private AutoTypeConfig m_listAutoType = new AutoTypeConfig(); + private PwObjectList m_listHistory = new PwObjectList(); + + private PwIcon m_pwIcon = PwIcon.Key; + private PwUuid m_pwCustomIconID = PwUuid.Zero; + + private WinRTAdaptors.Color m_clrForeground = WinRTAdaptors.Color.Empty; + private WinRTAdaptors.Color m_clrBackground = WinRTAdaptors.Color.Empty; + + + private DateTime m_tCreation = PwDefs.DtDefaultNow; + private DateTime m_tLastMod = PwDefs.DtDefaultNow; + private DateTime m_tLastAccess = PwDefs.DtDefaultNow; + private DateTime m_tExpire = PwDefs.DtDefaultNow; + private bool m_bExpires = false; + private ulong m_uUsageCount = 0; + + private string m_strOverrideUrl = string.Empty; + + private List m_vTags = new List(); + + /// + /// UUID of this entry. + /// + public PwUuid Uuid + { + get { return m_uuid; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_uuid = value; + } + } + + /// + /// Reference to a group which contains the current entry. + /// + public PwGroup ParentGroup + { + get { return m_pParentGroup; } + + /// Plugins: use PwGroup.AddEntry instead. + internal set { m_pParentGroup = value; } + } + + /// + /// The date/time when the location of the object was last changed. + /// + public DateTime LocationChanged + { + get { return m_tParentGroupLastMod; } + set { m_tParentGroupLastMod = value; } + } + + /// + /// Get or set all entry strings. + /// + public ProtectedStringDictionary Strings + { + get { return m_listStrings; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_listStrings = value; + } + } + + /// + /// Get or set all entry binaries. + /// + public ProtectedBinaryDictionary Binaries + { + get { return m_listBinaries; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_listBinaries = value; + } + } + + /// + /// Get or set all auto-type window/keystroke sequence associations. + /// + public AutoTypeConfig AutoType + { + get { return m_listAutoType; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_listAutoType = value; + } + } + + /// + /// Get all previous versions of this entry (backups). + /// + public PwObjectList History + { + get { return m_listHistory; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_listHistory = value; + } + } + + /// + /// Image ID specifying the icon that will be used for this entry. + /// + public PwIcon IconId + { + get { return m_pwIcon; } + set { m_pwIcon = value; } + } + + /// + /// Get the custom icon ID. This value is 0, if no custom icon is + /// being used (i.e. the icon specified by the IconID property + /// should be displayed). + /// + public PwUuid CustomIconUuid + { + get { return m_pwCustomIconID; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwCustomIconID = value; + } + } + + /// + /// Get or set the foreground color of this entry. + /// + public WinRTAdaptors.Color ForegroundColor + { + get { return m_clrForeground; } + set { m_clrForeground = value; } + } + + /// + /// Get or set the background color of this entry. + /// + public WinRTAdaptors.Color BackgroundColor + { + get { return m_clrBackground; } + set { m_clrBackground = value; } + } + + /// + /// The date/time when this entry was created. + /// + public DateTime CreationTime + { + get { return m_tCreation; } + set { m_tCreation = value; } + } + + /// + /// The date/time when this entry was last accessed (read). + /// + public DateTime LastAccessTime + { + get { return m_tLastAccess; } + set { m_tLastAccess = value; } + } + + /// + /// The date/time when this entry was last modified. + /// + public DateTime LastModificationTime + { + get { return m_tLastMod; } + set { m_tLastMod = value; } + } + + /// + /// The date/time when this entry expires. Use the Expires property + /// to specify if the entry does actually expire or not. + /// + public DateTime ExpiryTime + { + get { return m_tExpire; } + set { m_tExpire = value; } + } + + /// + /// Specifies whether the entry expires or not. + /// + public bool Expires + { + get { return m_bExpires; } + set { m_bExpires = value; } + } + + /// + /// Get or set the usage count of the entry. To increase the usage + /// count by one, use the Touch function. + /// + public ulong UsageCount + { + get { return m_uUsageCount; } + set { m_uUsageCount = value; } + } + + /// + /// Entry-specific override URL. If this string is non-empty, + /// + public string OverrideUrl + { + get { return m_strOverrideUrl; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strOverrideUrl = value; + } + } + + /// + /// List of tags associated with this entry. + /// + public List Tags + { + get { return m_vTags; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_vTags = value; + } + } + + public static EventHandler EntryTouched; + public EventHandler Touched; + + /// + /// Construct a new, empty password entry. Member variables will be initialized + /// to their default values. + /// + /// If true, a new UUID will be created + /// for this entry. If false, the UUID is zero and you must set it + /// manually later. + /// If true, the creation, last modification + /// and last access times will be set to the current system time. + public PwEntry(bool bCreateNewUuid, bool bSetTimes) + { + if(bCreateNewUuid) m_uuid = new PwUuid(true); + + if(bSetTimes) + { + m_tCreation = m_tLastMod = m_tLastAccess = + m_tParentGroupLastMod = DateTime.Now; + } + } + + /// + /// Construct a new, empty password entry. Member variables will be initialized + /// to their default values. + /// + /// Reference to the containing group, this + /// parameter may be null and set later manually. + /// If true, a new UUID will be created + /// for this entry. If false, the UUID is zero and you must set it + /// manually later. + /// If true, the creation, last modification + /// and last access times will be set to the current system time. + [Obsolete("Use a different constructor. To add an entry to a group, use AddEntry of PwGroup.")] + public PwEntry(PwGroup pwParentGroup, bool bCreateNewUuid, bool bSetTimes) + { + m_pParentGroup = pwParentGroup; + + if(bCreateNewUuid) m_uuid = new PwUuid(true); + + if(bSetTimes) + { + m_tCreation = m_tLastMod = m_tLastAccess = + m_tParentGroupLastMod = DateTime.Now; + } + } + + /// + /// Clone the current entry. The returned entry is an exact value copy + /// of the current entry (including UUID and parent group reference). + /// All mutable members are cloned. + /// + /// Exact value clone. All references to mutable values changed. + public PwEntry CloneDeep() + { + PwEntry peNew = new PwEntry(false, false); + + peNew.m_uuid = m_uuid; // PwUuid is immutable + peNew.m_pParentGroup = m_pParentGroup; + peNew.m_tParentGroupLastMod = m_tParentGroupLastMod; + + peNew.m_listStrings = m_listStrings.CloneDeep(); + peNew.m_listBinaries = m_listBinaries.CloneDeep(); + peNew.m_listAutoType = m_listAutoType.CloneDeep(); + peNew.m_listHistory = m_listHistory.CloneDeep(); + + peNew.m_pwIcon = m_pwIcon; + peNew.m_pwCustomIconID = m_pwCustomIconID; + + peNew.m_clrForeground = m_clrForeground; + peNew.m_clrBackground = m_clrBackground; + + peNew.m_tCreation = m_tCreation; + peNew.m_tLastMod = m_tLastMod; + peNew.m_tLastAccess = m_tLastAccess; + peNew.m_tExpire = m_tExpire; + peNew.m_bExpires = m_bExpires; + peNew.m_uUsageCount = m_uUsageCount; + + peNew.m_strOverrideUrl = m_strOverrideUrl; + + peNew.m_vTags = new List(m_vTags); + + return peNew; + } + + public PwEntry CloneStructure() + { + PwEntry peNew = new PwEntry(false, false); + + peNew.m_uuid = m_uuid; // PwUuid is immutable + peNew.m_tParentGroupLastMod = m_tParentGroupLastMod; + // Do not assign m_pParentGroup + + return peNew; + } + + private static PwCompareOptions BuildCmpOpt(bool bIgnoreParentGroup, + bool bIgnoreLastMod, bool bIgnoreLastAccess, bool bIgnoreHistory, + bool bIgnoreThisLastBackup) + { + PwCompareOptions pwOpt = PwCompareOptions.None; + if(bIgnoreParentGroup) pwOpt |= PwCompareOptions.IgnoreParentGroup; + if(bIgnoreLastMod) pwOpt |= PwCompareOptions.IgnoreLastMod; + if(bIgnoreLastAccess) pwOpt |= PwCompareOptions.IgnoreLastAccess; + if(bIgnoreHistory) pwOpt |= PwCompareOptions.IgnoreHistory; + if(bIgnoreThisLastBackup) pwOpt |= PwCompareOptions.IgnoreLastBackup; + return pwOpt; + } + + [Obsolete] + public bool EqualsEntry(PwEntry pe, bool bIgnoreParentGroup, bool bIgnoreLastMod, + bool bIgnoreLastAccess, bool bIgnoreHistory, bool bIgnoreThisLastBackup) + { + return EqualsEntry(pe, BuildCmpOpt(bIgnoreParentGroup, bIgnoreLastMod, + bIgnoreLastAccess, bIgnoreHistory, bIgnoreThisLastBackup), + MemProtCmpMode.None); + } + + [Obsolete] + public bool EqualsEntry(PwEntry pe, bool bIgnoreParentGroup, bool bIgnoreLastMod, + bool bIgnoreLastAccess, bool bIgnoreHistory, bool bIgnoreThisLastBackup, + MemProtCmpMode mpCmpStr) + { + return EqualsEntry(pe, BuildCmpOpt(bIgnoreParentGroup, bIgnoreLastMod, + bIgnoreLastAccess, bIgnoreHistory, bIgnoreThisLastBackup), mpCmpStr); + } + + public bool EqualsEntry(PwEntry pe, PwCompareOptions pwOpt, + MemProtCmpMode mpCmpStr) + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + + if(pe == null) { Debug.Assert(false); return false; } + + bool bNeEqStd = ((pwOpt & PwCompareOptions.NullEmptyEquivStd) != + PwCompareOptions.None); + bool bIgnoreLastAccess = ((pwOpt & PwCompareOptions.IgnoreLastAccess) != + PwCompareOptions.None); + bool bIgnoreLastMod = ((pwOpt & PwCompareOptions.IgnoreLastMod) != + PwCompareOptions.None); + + if(!m_uuid.EqualsValue(pe.m_uuid)) return false; + if((pwOpt & PwCompareOptions.IgnoreParentGroup) == PwCompareOptions.None) + { + if(m_pParentGroup != pe.m_pParentGroup) return false; + if(!bIgnoreLastMod && (m_tParentGroupLastMod != pe.m_tParentGroupLastMod)) + return false; + } + + if(!m_listStrings.EqualsDictionary(pe.m_listStrings, pwOpt, mpCmpStr)) + return false; + if(!m_listBinaries.EqualsDictionary(pe.m_listBinaries)) return false; + + if(!m_listAutoType.Equals(pe.m_listAutoType)) return false; + + if((pwOpt & PwCompareOptions.IgnoreHistory) == PwCompareOptions.None) + { + bool bIgnoreLastBackup = ((pwOpt & PwCompareOptions.IgnoreLastBackup) != + PwCompareOptions.None); + + if(!bIgnoreLastBackup && (m_listHistory.UCount != pe.m_listHistory.UCount)) + return false; + if(bIgnoreLastBackup && (m_listHistory.UCount == 0)) + { + Debug.Assert(false); + return false; + } + if(bIgnoreLastBackup && ((m_listHistory.UCount - 1) != pe.m_listHistory.UCount)) + return false; + + PwCompareOptions cmpSub = PwCompareOptions.IgnoreParentGroup; + if(bNeEqStd) cmpSub |= PwCompareOptions.NullEmptyEquivStd; + if(bIgnoreLastMod) cmpSub |= PwCompareOptions.IgnoreLastMod; + if(bIgnoreLastAccess) cmpSub |= PwCompareOptions.IgnoreLastAccess; + + for(uint uHist = 0; uHist < pe.m_listHistory.UCount; ++uHist) + { + if(!m_listHistory.GetAt(uHist).EqualsEntry(pe.m_listHistory.GetAt( + uHist), cmpSub, MemProtCmpMode.None)) + return false; + } + } + + if(m_pwIcon != pe.m_pwIcon) return false; + if(!m_pwCustomIconID.EqualsValue(pe.m_pwCustomIconID)) return false; + + if(m_clrForeground != pe.m_clrForeground) return false; + if(m_clrBackground != pe.m_clrBackground) return false; + + if(m_tCreation != pe.m_tCreation) return false; + if(!bIgnoreLastMod && (m_tLastMod != pe.m_tLastMod)) return false; + if(!bIgnoreLastAccess && (m_tLastAccess != pe.m_tLastAccess)) return false; + if(m_tExpire != pe.m_tExpire) return false; + if(m_bExpires != pe.m_bExpires) return false; + if(!bIgnoreLastAccess && (m_uUsageCount != pe.m_uUsageCount)) return false; + + if(m_strOverrideUrl != pe.m_strOverrideUrl) return false; + + if(m_vTags.Count != pe.m_vTags.Count) return false; + for(int iTag = 0; iTag < m_vTags.Count; ++iTag) + { + if(m_vTags[iTag] != pe.m_vTags[iTag]) return false; + } + + return true; +#endif + } + + /// + /// Assign properties to the current entry based on a template entry. + /// + /// Template entry. Must not be null. + /// Only set the properties of the template entry + /// if it is newer than the current one. + /// If true, the history will be + /// copied, too. + /// If true, the + /// LocationChanged property is copied, otherwise not. + public void AssignProperties(PwEntry peTemplate, bool bOnlyIfNewer, + bool bIncludeHistory, bool bAssignLocationChanged) + { + Debug.Assert(peTemplate != null); if(peTemplate == null) throw new ArgumentNullException("peTemplate"); + + if(bOnlyIfNewer && (peTemplate.m_tLastMod < m_tLastMod)) return; + + // Template UUID should be the same as the current one + Debug.Assert(m_uuid.EqualsValue(peTemplate.m_uuid)); + m_uuid = peTemplate.m_uuid; + + if(bAssignLocationChanged) + m_tParentGroupLastMod = peTemplate.m_tParentGroupLastMod; + + m_listStrings = peTemplate.m_listStrings; + m_listBinaries = peTemplate.m_listBinaries; + m_listAutoType = peTemplate.m_listAutoType; + if(bIncludeHistory) m_listHistory = peTemplate.m_listHistory; + + m_pwIcon = peTemplate.m_pwIcon; + m_pwCustomIconID = peTemplate.m_pwCustomIconID; // Immutable + + m_clrForeground = peTemplate.m_clrForeground; + m_clrBackground = peTemplate.m_clrBackground; + + m_tCreation = peTemplate.m_tCreation; + m_tLastMod = peTemplate.m_tLastMod; + m_tLastAccess = peTemplate.m_tLastAccess; + m_tExpire = peTemplate.m_tExpire; + m_bExpires = peTemplate.m_bExpires; + m_uUsageCount = peTemplate.m_uUsageCount; + + m_strOverrideUrl = peTemplate.m_strOverrideUrl; + + m_vTags = new List(peTemplate.m_vTags); + } + + /// + /// Touch the entry. This function updates the internal last access + /// time. If the parameter is true, + /// the last modification time gets updated, too. + /// + /// Modify last modification time. + public void Touch(bool bModified) + { + Touch(bModified, true); + } + + /// + /// Touch the entry. This function updates the internal last access + /// time. If the parameter is true, + /// the last modification time gets updated, too. + /// + /// Modify last modification time. + /// If true, all parent objects + /// get touched, too. + public void Touch(bool bModified, bool bTouchParents) + { + m_tLastAccess = DateTime.Now; + ++m_uUsageCount; + + if(bModified) m_tLastMod = m_tLastAccess; + + if(this.Touched != null) + this.Touched(this, new ObjectTouchedEventArgs(this, + bModified, bTouchParents)); + if(PwEntry.EntryTouched != null) + PwEntry.EntryTouched(this, new ObjectTouchedEventArgs(this, + bModified, bTouchParents)); + + if(bTouchParents && (m_pParentGroup != null)) + m_pParentGroup.Touch(bModified, true); + } + + /// + /// Create a backup of this entry. The backup item doesn't contain any + /// history items. + /// + [Obsolete] + public void CreateBackup() + { + CreateBackup(null); + } + + /// + /// Create a backup of this entry. The backup item doesn't contain any + /// history items. + /// If this parameter isn't null, + /// the history list is maintained automatically (i.e. old backups are + /// deleted if there are too many or the history size is too large). + /// This parameter may be null (no maintenance then). + /// + public void CreateBackup(PwDatabase pwHistMntcSettings) + { + PwEntry peCopy = CloneDeep(); + peCopy.History = new PwObjectList(); // Remove history + + m_listHistory.Add(peCopy); // Must be added at end, see EqualsEntry + + if(pwHistMntcSettings != null) MaintainBackups(pwHistMntcSettings); + } + + /// + /// Restore an entry snapshot from backups. + /// + /// Index of the backup item, to which + /// should be reverted. + [Obsolete] + public void RestoreFromBackup(uint uBackupIndex) + { + RestoreFromBackup(uBackupIndex, null); + } + + /// + /// Restore an entry snapshot from backups. + /// + /// Index of the backup item, to which + /// should be reverted. + /// If this parameter isn't null, + /// the history list is maintained automatically (i.e. old backups are + /// deleted if there are too many or the history size is too large). + /// This parameter may be null (no maintenance then). + public void RestoreFromBackup(uint uBackupIndex, PwDatabase pwHistMntcSettings) + { + Debug.Assert(uBackupIndex < m_listHistory.UCount); + if(uBackupIndex >= m_listHistory.UCount) + throw new ArgumentOutOfRangeException("uBackupIndex"); + + PwEntry pe = m_listHistory.GetAt(uBackupIndex); + Debug.Assert(pe != null); if(pe == null) throw new InvalidOperationException(); + + CreateBackup(pwHistMntcSettings); // Backup current data before restoring + AssignProperties(pe, false, false, false); + } + + public bool HasBackupOfData(PwEntry peData, bool bIgnoreLastMod, + bool bIgnoreLastAccess) + { + if(peData == null) { Debug.Assert(false); return false; } + + PwCompareOptions cmpOpt = (PwCompareOptions.IgnoreParentGroup | + PwCompareOptions.IgnoreHistory | PwCompareOptions.NullEmptyEquivStd); + if(bIgnoreLastMod) cmpOpt |= PwCompareOptions.IgnoreLastMod; + if(bIgnoreLastAccess) cmpOpt |= PwCompareOptions.IgnoreLastAccess; + + foreach(PwEntry pe in m_listHistory) + { + if(pe.EqualsEntry(peData, cmpOpt, MemProtCmpMode.None)) return true; + } + + return false; + } + + /// + /// Delete old history items if there are too many or the history + /// size is too large. + /// If one or more history items have been deleted, true + /// is returned. Otherwise false. + /// + public bool MaintainBackups(PwDatabase pwSettings) + { + if(pwSettings == null) { Debug.Assert(false); return false; } + + bool bDeleted = false; + + int nMaxItems = pwSettings.HistoryMaxItems; + if(nMaxItems >= 0) + { + while(m_listHistory.UCount > (uint)nMaxItems) + { + RemoveOldestBackup(); + bDeleted = true; + } + } + + long lMaxSize = pwSettings.HistoryMaxSize; + if(lMaxSize >= 0) + { + while(true) + { + ulong uHistSize = 0; + foreach(PwEntry pe in m_listHistory) { uHistSize += pe.GetSize(); } + + if(uHistSize > (ulong)lMaxSize) + { + RemoveOldestBackup(); + bDeleted = true; + } + else break; + } + } + + return bDeleted; + } + + private void RemoveOldestBackup() + { + DateTime dtMin = DateTime.MaxValue; + uint idxRemove = uint.MaxValue; + + for(uint u = 0; u < m_listHistory.UCount; ++u) + { + PwEntry pe = m_listHistory.GetAt(u); + if(pe.LastModificationTime < dtMin) + { + idxRemove = u; + dtMin = pe.LastModificationTime; + } + } + + if(idxRemove != uint.MaxValue) m_listHistory.RemoveAt(idxRemove); + } + + public bool GetAutoTypeEnabled() + { + if(!m_listAutoType.Enabled) return false; + + if(m_pParentGroup != null) + return m_pParentGroup.GetAutoTypeEnabledInherited(); + + return PwGroup.DefaultAutoTypeEnabled; + } + + public string GetAutoTypeSequence() + { + string strSeq = m_listAutoType.DefaultSequence; + + PwGroup pg = m_pParentGroup; + while(pg != null) + { + if(strSeq.Length != 0) break; + + strSeq = pg.DefaultAutoTypeSequence; + pg = pg.ParentGroup; + } + + if(strSeq.Length != 0) return strSeq; + + if(PwDefs.IsTanEntry(this)) return PwDefs.DefaultAutoTypeSequenceTan; + return PwDefs.DefaultAutoTypeSequence; + } + + public bool GetSearchingEnabled() + { + if(m_pParentGroup != null) + return m_pParentGroup.GetSearchingEnabledInherited(); + + return PwGroup.DefaultSearchingEnabled; + } + + /// + /// Approximate the total size of this entry in bytes (including + /// strings, binaries and history entries). + /// + /// Size in bytes. + public ulong GetSize() + { + ulong uSize = 128; // Approx fixed length data + + foreach(KeyValuePair kvpStr in m_listStrings) + { + uSize += (ulong)kvpStr.Key.Length; + uSize += (ulong)kvpStr.Value.Length; + } + + foreach(KeyValuePair kvpBin in m_listBinaries) + { + uSize += (ulong)kvpBin.Key.Length; + uSize += kvpBin.Value.Length; + } + + uSize += (ulong)m_listAutoType.DefaultSequence.Length; + foreach(AutoTypeAssociation a in m_listAutoType.Associations) + { + uSize += (ulong)a.WindowName.Length; + uSize += (ulong)a.Sequence.Length; + } + + foreach(PwEntry peHistory in m_listHistory) + uSize += peHistory.GetSize(); + + uSize += (ulong)m_strOverrideUrl.Length; + + foreach(string strTag in m_vTags) + uSize += (ulong)strTag.Length; + + return uSize; + } + + public bool HasTag(string strTag) + { + if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); return false; } + + for(int i = 0; i < m_vTags.Count; ++i) + { + if(m_vTags[i].Equals(strTag, StrUtil.CaseIgnoreCmp)) return true; + } + + return false; + } + + public bool AddTag(string strTag) + { + if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); return false; } + + for(int i = 0; i < m_vTags.Count; ++i) + { + if(m_vTags[i].Equals(strTag, StrUtil.CaseIgnoreCmp)) return false; + } + + m_vTags.Add(strTag); + return true; + } + + public bool RemoveTag(string strTag) + { + if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); return false; } + + for(int i = 0; i < m_vTags.Count; ++i) + { + if(m_vTags[i].Equals(strTag, StrUtil.CaseIgnoreCmp)) + { + m_vTags.RemoveAt(i); + return true; + } + } + + return false; + } + + public bool IsContainedIn(PwGroup pgContainer) + { + PwGroup pgCur = m_pParentGroup; + while(pgCur != null) + { + if(pgCur == pgContainer) return true; + + pgCur = pgCur.ParentGroup; + } + + return false; + } + + public void SetUuid(PwUuid pwNewUuid, bool bAlsoChangeHistoryUuids) + { + this.Uuid = pwNewUuid; + + if(bAlsoChangeHistoryUuids) + { + foreach(PwEntry peHist in m_listHistory) + { + peHist.Uuid = pwNewUuid; + } + } + } + } + + public sealed class PwEntryComparer : IComparer + { + private string m_strFieldName; + private bool m_bCaseInsensitive; + private bool m_bCompareNaturally; + + public PwEntryComparer(string strFieldName, bool bCaseInsensitive, + bool bCompareNaturally) + { + if(strFieldName == null) throw new ArgumentNullException("strFieldName"); + + m_strFieldName = strFieldName; + m_bCaseInsensitive = bCaseInsensitive; + m_bCompareNaturally = bCompareNaturally; + } + + public int Compare(PwEntry a, PwEntry b) + { + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + string strA = a.Strings.ReadSafe(m_strFieldName); + string strB = b.Strings.ReadSafe(m_strFieldName); + + if(m_bCompareNaturally) return StrUtil.CompareNaturally(strA, strB); + return string.Compare(strA, strB, m_bCaseInsensitive); +#endif + } + } +} diff --git a/ModernKeePassLib/PwEnums.cs b/ModernKeePassLib/PwEnums.cs new file mode 100644 index 0000000..bb80199 --- /dev/null +++ b/ModernKeePassLib/PwEnums.cs @@ -0,0 +1,207 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; + +namespace ModernKeePassLib +{ + /// + /// Compression algorithm specifiers. + /// + public enum PwCompressionAlgorithm + { + /// + /// No compression. + /// + None = 0, + + /// + /// GZip compression. + /// + GZip = 1, + + /// + /// Virtual field: currently known number of algorithms. Should not be used + /// by plugins or libraries -- it's used internally only. + /// + Count = 2 + } + + /// + /// Tree traversal methods. + /// + public enum TraversalMethod + { + /// + /// Don't traverse the tree. + /// + None = 0, + + /// + /// Traverse the tree in pre-order mode, i.e. first visit all items + /// in the current node, then visit all subnodes. + /// + PreOrder = 1 + } + + /// + /// Methods for merging password databases/entries. + /// + public enum PwMergeMethod + { + None = 0, + OverwriteExisting = 1, + KeepExisting = 2, + OverwriteIfNewer = 3, + CreateNewUuids = 4, + Synchronize = 5 + } + + /// + /// Icon identifiers for groups and password entries. + /// + public enum PwIcon + { + Key = 0, + World, + Warning, + NetworkServer, + MarkedDirectory, + UserCommunication, + Parts, + Notepad, + WorldSocket, + Identity, + PaperReady, + Digicam, + IRCommunication, + MultiKeys, + Energy, + Scanner, + WorldStar, + CDRom, + Monitor, + EMail, + Configuration, + ClipboardReady, + PaperNew, + Screen, + EnergyCareful, + EMailBox, + Disk, + Drive, + PaperQ, + TerminalEncrypted, + Console, + Printer, + ProgramIcons, + Run, + Settings, + WorldComputer, + Archive, + Homebanking, + DriveWindows, + Clock, + EMailSearch, + PaperFlag, + Memory, + TrashBin, + Note, + Expired, + Info, + Package, + Folder, + FolderOpen, + FolderPackage, + LockOpen, + PaperLocked, + Checked, + Pen, + Thumbnail, + Book, + List, + UserKey, + Tool, + Home, + Star, + Tux, + Feather, + Apple, + Wiki, + Money, + Certificate, + BlackBerry, + + /// + /// Virtual identifier -- represents the number of icons. + /// + Count + } + + public enum ProxyServerType + { + None = 0, + System = 1, + Manual = 2 + } + + /// + /// Comparison modes for in-memory protected objects. + /// + public enum MemProtCmpMode + { + /// + /// Ignore the in-memory protection states. + /// + None = 0, + + /// + /// Ignore the in-memory protection states of standard + /// objects; do compare in-memory protection states of + /// custom objects. + /// + CustomOnly, + + /// + /// Compare in-memory protection states. + /// + Full + } + + [Flags] + public enum PwCompareOptions + { + None = 0x0, + + /// + /// Empty standard string fields are considered to be the + /// same as non-existing standard string fields. + /// This doesn't affect custom string comparisons. + /// + NullEmptyEquivStd = 0x1, + + IgnoreParentGroup = 0x2, + IgnoreLastAccess = 0x4, + IgnoreLastMod = 0x8, + IgnoreHistory = 0x10, + IgnoreLastBackup = 0x20, + + IgnoreTimes = (IgnoreLastAccess | IgnoreLastMod) + } +} diff --git a/ModernKeePassLib/PwGroup.cs b/ModernKeePassLib/PwGroup.cs new file mode 100644 index 0000000..d4157e7 --- /dev/null +++ b/ModernKeePassLib/PwGroup.cs @@ -0,0 +1,1442 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text.RegularExpressions; + +using ModernKeePassLib.Collections; +using ModernKeePassLib.Delegates; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib +{ + /// + /// A group containing several password entries. + /// + public sealed class PwGroup : ITimeLogger, IStructureItem, IDeepCloneable + { + public const bool DefaultAutoTypeEnabled = true; + public const bool DefaultSearchingEnabled = true; + + private PwObjectList m_listGroups = new PwObjectList(); + private PwObjectList m_listEntries = new PwObjectList(); + private PwGroup m_pParentGroup = null; + private DateTime m_tParentGroupLastMod = PwDefs.DtDefaultNow; + + private PwUuid m_uuid = PwUuid.Zero; + private string m_strName = string.Empty; + private string m_strNotes = string.Empty; + + private PwIcon m_pwIcon = PwIcon.Folder; + private PwUuid m_pwCustomIconID = PwUuid.Zero; + + private DateTime m_tCreation = PwDefs.DtDefaultNow; + private DateTime m_tLastMod = PwDefs.DtDefaultNow; + private DateTime m_tLastAccess = PwDefs.DtDefaultNow; + private DateTime m_tExpire = PwDefs.DtDefaultNow; + private bool m_bExpires = false; + private ulong m_uUsageCount = 0; + + private bool m_bIsExpanded = true; + private bool m_bVirtual = false; + + private string m_strDefaultAutoTypeSequence = string.Empty; + + private bool? m_bEnableAutoType = null; + private bool? m_bEnableSearching = null; + + private PwUuid m_pwLastTopVisibleEntry = PwUuid.Zero; + + /// + /// UUID of this group. + /// + public PwUuid Uuid + { + get { return m_uuid; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_uuid = value; + } + } + + /// + /// The name of this group. Cannot be null. + /// + public string Name + { + get { return m_strName; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strName = value; + } + } + + /// + /// Comments about this group. Cannot be null. + /// + public string Notes + { + get { return m_strNotes; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strNotes = value; + } + } + + /// + /// Icon of the group. + /// + public PwIcon IconId + { + get { return m_pwIcon; } + set { m_pwIcon = value; } + } + + /// + /// Get the custom icon ID. This value is 0, if no custom icon is + /// being used (i.e. the icon specified by the IconID property + /// should be displayed). + /// + public PwUuid CustomIconUuid + { + get { return m_pwCustomIconID; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwCustomIconID = value; + } + } + + /// + /// Reference to the group to which this group belongs. May be null. + /// + public PwGroup ParentGroup + { + get { return m_pParentGroup; } + + /// Plugins: use PwGroup.AddGroup instead. + internal set { Debug.Assert(value != this); m_pParentGroup = value; } + } + + /// + /// The date/time when the location of the object was last changed. + /// + public DateTime LocationChanged + { + get { return m_tParentGroupLastMod; } + set { m_tParentGroupLastMod = value; } + } + + /// + /// A flag that specifies if the group is shown as expanded or + /// collapsed in the user interface. + /// + public bool IsExpanded + { + get { return m_bIsExpanded; } + set { m_bIsExpanded = value; } + } + + /// + /// The date/time when this group was created. + /// + public DateTime CreationTime + { + get { return m_tCreation; } + set { m_tCreation = value; } + } + + /// + /// The date/time when this group was last modified. + /// + public DateTime LastModificationTime + { + get { return m_tLastMod; } + set { m_tLastMod = value; } + } + + /// + /// The date/time when this group was last accessed (read). + /// + public DateTime LastAccessTime + { + get { return m_tLastAccess; } + set { m_tLastAccess = value; } + } + + /// + /// The date/time when this group expires. + /// + public DateTime ExpiryTime + { + get { return m_tExpire; } + set { m_tExpire = value; } + } + + /// + /// Flag that determines if the group expires. + /// + public bool Expires + { + get { return m_bExpires; } + set { m_bExpires = value; } + } + + /// + /// Get or set the usage count of the group. To increase the usage + /// count by one, use the Touch function. + /// + public ulong UsageCount + { + get { return m_uUsageCount; } + set { m_uUsageCount = value; } + } + + /// + /// Get a list of subgroups in this group. + /// + public PwObjectList Groups + { + get { return m_listGroups; } + } + + /// + /// Get a list of entries in this group. + /// + public PwObjectList Entries + { + get { return m_listEntries; } + } + + /// + /// A flag specifying whether this group is virtual or not. Virtual + /// groups can contain links to entries stored in other groups. + /// Note that this flag has to be interpreted and set by the calling + /// code; it won't prevent you from accessing and modifying the list + /// of entries in this group in any way. + /// + public bool IsVirtual + { + get { return m_bVirtual; } + set { m_bVirtual = value; } + } + + /// + /// Default auto-type keystroke sequence for all entries in + /// this group. This property can be an empty string, which + /// means that the value should be inherited from the parent. + /// + public string DefaultAutoTypeSequence + { + get { return m_strDefaultAutoTypeSequence; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_strDefaultAutoTypeSequence = value; + } + } + + public bool? EnableAutoType + { + get { return m_bEnableAutoType; } + set { m_bEnableAutoType = value; } + } + + public bool? EnableSearching + { + get { return m_bEnableSearching; } + set { m_bEnableSearching = value; } + } + + public PwUuid LastTopVisibleEntry + { + get { return m_pwLastTopVisibleEntry; } + set + { + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + m_pwLastTopVisibleEntry = value; + } + } + + public static EventHandler GroupTouched; + public EventHandler Touched; + + /// + /// Construct a new, empty group. + /// + public PwGroup() + { + } + + /// + /// Construct a new, empty group. + /// + /// Create a new UUID for this group. + /// Set creation, last access and last modification times to the current time. + public PwGroup(bool bCreateNewUuid, bool bSetTimes) + { + if(bCreateNewUuid) m_uuid = new PwUuid(true); + + if(bSetTimes) + { + m_tCreation = m_tLastMod = m_tLastAccess = + m_tParentGroupLastMod = DateTime.Now; + } + } + + /// + /// Construct a new group. + /// + /// Create a new UUID for this group. + /// Set creation, last access and last modification times to the current time. + /// Name of the new group. + /// Icon of the new group. + public PwGroup(bool bCreateNewUuid, bool bSetTimes, string strName, PwIcon pwIcon) + { + if(bCreateNewUuid) m_uuid = new PwUuid(true); + + if(bSetTimes) + { + m_tCreation = m_tLastMod = m_tLastAccess = + m_tParentGroupLastMod = DateTime.Now; + } + + if(strName != null) m_strName = strName; + + m_pwIcon = pwIcon; + } + + /// + /// Deeply clone the current group. The returned group will be an exact + /// value copy of the current object (including UUID, etc.). + /// + /// Exact value copy of the current PwGroup object. + public PwGroup CloneDeep() + { + PwGroup pg = new PwGroup(false, false); + + pg.m_uuid = m_uuid; // PwUuid is immutable + + pg.m_listGroups = m_listGroups.CloneDeep(); + pg.m_listEntries = m_listEntries.CloneDeep(); + pg.m_pParentGroup = m_pParentGroup; + pg.m_tParentGroupLastMod = m_tParentGroupLastMod; + + pg.m_strName = m_strName; + pg.m_strNotes = m_strNotes; + + pg.m_pwIcon = m_pwIcon; + pg.m_pwCustomIconID = m_pwCustomIconID; + + pg.m_tCreation = m_tCreation; + pg.m_tExpire = m_tExpire; + pg.m_tLastAccess = m_tLastAccess; + pg.m_tLastMod = m_tLastMod; + pg.m_bExpires = m_bExpires; + pg.m_uUsageCount = m_uUsageCount; + + pg.m_bIsExpanded = m_bIsExpanded; + pg.m_bVirtual = m_bVirtual; + + pg.m_strDefaultAutoTypeSequence = m_strDefaultAutoTypeSequence; + + pg.m_pwLastTopVisibleEntry = m_pwLastTopVisibleEntry; + + return pg; + } + + public PwGroup CloneStructure() + { + PwGroup pg = new PwGroup(false, false); + + pg.m_uuid = m_uuid; // PwUuid is immutable + pg.m_tParentGroupLastMod = m_tParentGroupLastMod; + // Do not assign m_pParentGroup + + foreach(PwGroup pgSub in m_listGroups) + pg.AddGroup(pgSub.CloneStructure(), true); + + foreach(PwEntry peSub in m_listEntries) + pg.AddEntry(peSub.CloneStructure(), true); + + return pg; + } + + /// + /// Assign properties to the current group based on a template group. + /// + /// Template group. Must not be null. + /// Only set the properties of the template group + /// if it is newer than the current one. + /// If true, the + /// LocationChanged property is copied, otherwise not. + public void AssignProperties(PwGroup pgTemplate, bool bOnlyIfNewer, + bool bAssignLocationChanged) + { + Debug.Assert(pgTemplate != null); if(pgTemplate == null) throw new ArgumentNullException("pgTemplate"); + + if(bOnlyIfNewer && (pgTemplate.m_tLastMod < m_tLastMod)) return; + + // Template UUID should be the same as the current one + Debug.Assert(m_uuid.EqualsValue(pgTemplate.m_uuid)); + m_uuid = pgTemplate.m_uuid; + + if(bAssignLocationChanged) + m_tParentGroupLastMod = pgTemplate.m_tParentGroupLastMod; + + m_strName = pgTemplate.m_strName; + m_strNotes = pgTemplate.m_strNotes; + + m_pwIcon = pgTemplate.m_pwIcon; + m_pwCustomIconID = pgTemplate.m_pwCustomIconID; + + m_tCreation = pgTemplate.m_tCreation; + m_tLastMod = pgTemplate.m_tLastMod; + m_tLastAccess = pgTemplate.m_tLastAccess; + m_tExpire = pgTemplate.m_tExpire; + m_bExpires = pgTemplate.m_bExpires; + m_uUsageCount = pgTemplate.m_uUsageCount; + + m_strDefaultAutoTypeSequence = pgTemplate.m_strDefaultAutoTypeSequence; + + m_pwLastTopVisibleEntry = pgTemplate.m_pwLastTopVisibleEntry; + } + + /// + /// Touch the group. This function updates the internal last access + /// time. If the parameter is true, + /// the last modification time gets updated, too. + /// + /// Modify last modification time. + public void Touch(bool bModified) + { + Touch(bModified, true); + } + + /// + /// Touch the group. This function updates the internal last access + /// time. If the parameter is true, + /// the last modification time gets updated, too. + /// + /// Modify last modification time. + /// If true, all parent objects + /// get touched, too. + public void Touch(bool bModified, bool bTouchParents) + { + m_tLastAccess = DateTime.Now; + ++m_uUsageCount; + + if(bModified) m_tLastMod = m_tLastAccess; + + if(this.Touched != null) + this.Touched(this, new ObjectTouchedEventArgs(this, + bModified, bTouchParents)); + if(PwGroup.GroupTouched != null) + PwGroup.GroupTouched(this, new ObjectTouchedEventArgs(this, + bModified, bTouchParents)); + + if(bTouchParents && (m_pParentGroup != null)) + m_pParentGroup.Touch(bModified, true); + } + + /// + /// Get number of groups and entries in the current group. This function + /// can also traverse through all subgroups and accumulate their counts + /// (recursive mode). + /// + /// If this parameter is true, all + /// subgroups and entries in subgroups will be counted and added to + /// the returned value. If it is false, only the number of + /// subgroups and entries of the current group is returned. + /// Number of subgroups. + /// Number of entries. + public void GetCounts(bool bRecursive, out uint uNumGroups, out uint uNumEntries) + { + if(bRecursive) + { + uint uTotalGroups = m_listGroups.UCount; + uint uTotalEntries = m_listEntries.UCount; + uint uSubGroupCount, uSubEntryCount; + + foreach(PwGroup pg in m_listGroups) + { + pg.GetCounts(true, out uSubGroupCount, out uSubEntryCount); + + uTotalGroups += uSubGroupCount; + uTotalEntries += uSubEntryCount; + } + + uNumGroups = uTotalGroups; + uNumEntries = uTotalEntries; + } + else // !bRecursive + { + uNumGroups = m_listGroups.UCount; + uNumEntries = m_listEntries.UCount; + } + } + + public uint GetEntriesCount(bool bRecursive) + { + uint uGroups, uEntries; + GetCounts(bRecursive, out uGroups, out uEntries); + return uEntries; + } + + /// + /// Traverse the group/entry tree in the current group. Various traversal + /// methods are available. + /// + /// Specifies the traversal method. + /// Function that performs an action on + /// the currently visited group (see GroupHandler for more). + /// This parameter may be null, in this case the tree is traversed but + /// you don't get notifications for each visited group. + /// Function that performs an action on + /// the currently visited entry (see EntryHandler for more). + /// This parameter may be null. + /// Returns true if all entries and groups have been + /// traversed. If the traversal has been canceled by one of the two + /// handlers, the return value is false. + public bool TraverseTree(TraversalMethod tm, GroupHandler groupHandler, EntryHandler entryHandler) + { + bool bRet = false; + + switch(tm) + { + case TraversalMethod.None: + bRet = true; + break; + case TraversalMethod.PreOrder: + bRet = PreOrderTraverseTree(groupHandler, entryHandler); + break; + default: + Debug.Assert(false); + break; + } + + return bRet; + } + + private bool PreOrderTraverseTree(GroupHandler groupHandler, EntryHandler entryHandler) + { + if(entryHandler != null) + { + foreach(PwEntry pe in m_listEntries) + { + if(!entryHandler(pe)) return false; + } + } + + if(groupHandler != null) + { + foreach(PwGroup pg in m_listGroups) + { + if(!groupHandler(pg)) return false; + + pg.PreOrderTraverseTree(groupHandler, entryHandler); + } + } + else // groupHandler == null + { + foreach(PwGroup pg in m_listGroups) + { + pg.PreOrderTraverseTree(null, entryHandler); + } + } + + return true; + } + + /// + /// Pack all groups into one flat linked list of references (recursively). + /// Temporary IDs (TemporaryID field) and levels (TemporaryLevel) + /// are assigned automatically. + /// + /// Flat list of all groups. + public LinkedList GetFlatGroupList() + { + LinkedList list = new LinkedList(); + + foreach(PwGroup pg in m_listGroups) + { + list.AddLast(pg); + + if(pg.Groups.UCount != 0) + LinearizeGroupRecursive(list, pg, 1); + } + + return list; + } + + private void LinearizeGroupRecursive(LinkedList list, PwGroup pg, ushort uLevel) + { + Debug.Assert(pg != null); if(pg == null) return; + + foreach(PwGroup pwg in pg.Groups) + { + list.AddLast(pwg); + + if(pwg.Groups.UCount != 0) + LinearizeGroupRecursive(list, pwg, (ushort)(uLevel + 1)); + } + } + + /// + /// Pack all entries into one flat linked list of references. Temporary + /// group IDs are assigned automatically. + /// + /// A flat group list created by + /// GetFlatGroupList. + /// Flat list of all entries. + public static LinkedList GetFlatEntryList(LinkedList flatGroupList) + { + Debug.Assert(flatGroupList != null); if(flatGroupList == null) return null; + + LinkedList list = new LinkedList(); + foreach(PwGroup pg in flatGroupList) + { + foreach(PwEntry pe in pg.Entries) + list.AddLast(pe); + } + + return list; + } + + /// + /// Enable protection of a specific string field type. + /// + /// Name of the string field to protect or unprotect. + /// Enable protection or not. + /// Returns true, if the operation completed successfully, + /// otherwise false. + public bool EnableStringFieldProtection(string strFieldName, bool bEnable) + { + Debug.Assert(strFieldName != null); + + EntryHandler eh = delegate(PwEntry pe) + { + // Enable protection of current string + pe.Strings.EnableProtection(strFieldName, bEnable); + + // Do the same for all history items + foreach(PwEntry peHistory in pe.History) + { + peHistory.Strings.EnableProtection(strFieldName, bEnable); + } + + return true; + }; + + return PreOrderTraverseTree(null, eh); + } + + /// + /// Search this group and all subgroups for entries. + /// + /// Specifies the search method. + /// Entry list in which the search results will + /// be stored. + public void SearchEntries(SearchParameters sp, PwObjectList listStorage) + { + SearchEntries(sp, listStorage, null); + } + + /// + /// Search this group and all subgroups for entries. + /// + /// Specifies the search method. + /// Entry list in which the search results will + /// be stored. + public void SearchEntries(SearchParameters sp, PwObjectList listStorage, + IStatusLogger slStatus) + { + if(sp == null) { Debug.Assert(false); return; } + if(listStorage == null) { Debug.Assert(false); return; } + + ulong uCurEntries = 0, uTotalEntries = 0; + + List lTerms = StrUtil.SplitSearchTerms(sp.SearchString); + if((lTerms.Count <= 1) || sp.RegularExpression) + { + if(slStatus != null) uTotalEntries = GetEntriesCount(true); + SearchEntriesSingle(sp, listStorage, slStatus, ref uCurEntries, + uTotalEntries); + return; + } + + // Search longer strings first (for improved performance) + lTerms.Sort(StrUtil.CompareLengthGt); + + string strFullSearch = sp.SearchString; // Backup + + PwGroup pg = this; + for(int iTerm = 0; iTerm < lTerms.Count; ++iTerm) + { + // Update counters for a better state guess + if(slStatus != null) + { + ulong uRemRounds = (ulong)(lTerms.Count - iTerm); + uTotalEntries = uCurEntries + (uRemRounds * + pg.GetEntriesCount(true)); + } + + PwGroup pgNew = new PwGroup(); + + sp.SearchString = lTerms[iTerm]; + + bool bNegate = false; + if(sp.SearchString.StartsWith("-")) + { + sp.SearchString = sp.SearchString.Substring(1); + bNegate = (sp.SearchString.Length > 0); + } + + if(!pg.SearchEntriesSingle(sp, pgNew.Entries, slStatus, + ref uCurEntries, uTotalEntries)) + { + pg = null; + break; + } + + if(bNegate) + { + PwObjectList lCand = pg.GetEntries(true); + + pg = new PwGroup(); + foreach(PwEntry peCand in lCand) + { + if(pgNew.Entries.IndexOf(peCand) < 0) pg.Entries.Add(peCand); + } + } + else pg = pgNew; + } + + if(pg != null) listStorage.Add(pg.Entries); + sp.SearchString = strFullSearch; // Restore + } + + private bool SearchEntriesSingle(SearchParameters spIn, + PwObjectList listStorage, IStatusLogger slStatus, + ref ulong uCurEntries, ulong uTotalEntries) + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + SearchParameters sp = spIn.Clone(); + if(sp.SearchString == null) { Debug.Assert(false); return true; } + sp.SearchString = sp.SearchString.Trim(); + + bool bTitle = sp.SearchInTitles; + bool bUserName = sp.SearchInUserNames; + bool bPassword = sp.SearchInPasswords; + bool bUrl = sp.SearchInUrls; + bool bNotes = sp.SearchInNotes; + bool bOther = sp.SearchInOther; + bool bUuids = sp.SearchInUuids; + bool bGroupName = sp.SearchInGroupNames; + bool bTags = sp.SearchInTags; + bool bExcludeExpired = sp.ExcludeExpired; + bool bRespectEntrySearchingDisabled = sp.RespectEntrySearchingDisabled; + + DateTime dtNow = DateTime.Now; + + Regex rx = null; + if(sp.RegularExpression) + { + RegexOptions ro = RegexOptions.Compiled; + if((sp.ComparisonMode == StringComparison.CurrentCultureIgnoreCase) || + (sp.ComparisonMode == StringComparison.InvariantCultureIgnoreCase) || + (sp.ComparisonMode == StringComparison.OrdinalIgnoreCase)) + { + ro |= RegexOptions.IgnoreCase; + } + + rx = new Regex(sp.SearchString, ro); + } + + ulong uLocalCurEntries = uCurEntries; + + EntryHandler eh = null; + if(sp.SearchString.Length <= 0) // Report all + { + eh = delegate(PwEntry pe) + { + if(slStatus != null) + { + if(!slStatus.SetProgress((uint)((uLocalCurEntries * + 100UL) / uTotalEntries))) return false; + ++uLocalCurEntries; + } + + if(bRespectEntrySearchingDisabled && !pe.GetSearchingEnabled()) + return true; // Skip + if(bExcludeExpired && pe.Expires && (dtNow > pe.ExpiryTime)) + return true; // Skip + + listStorage.Add(pe); + return true; + }; + } + else + { + eh = delegate(PwEntry pe) + { + if(slStatus != null) + { + if(!slStatus.SetProgress((uint)((uLocalCurEntries * + 100UL) / uTotalEntries))) return false; + ++uLocalCurEntries; + } + + if(bRespectEntrySearchingDisabled && !pe.GetSearchingEnabled()) + return true; // Skip + if(bExcludeExpired && pe.Expires && (dtNow > pe.ExpiryTime)) + return true; // Skip + + uint uInitialResults = listStorage.UCount; + + foreach(KeyValuePair kvp in pe.Strings) + { + string strKey = kvp.Key; + + if(strKey == PwDefs.TitleField) + { + if(bTitle) SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + } + else if(strKey == PwDefs.UserNameField) + { + if(bUserName) SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + } + else if(strKey == PwDefs.PasswordField) + { + if(bPassword) SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + } + else if(strKey == PwDefs.UrlField) + { + if(bUrl) SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + } + else if(strKey == PwDefs.NotesField) + { + if(bNotes) SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + } + else if(bOther) + SearchEvalAdd(sp, kvp.Value.ReadString(), + rx, pe, listStorage); + + // An entry can match only once => break if we have added it + if(listStorage.UCount > uInitialResults) break; + } + + if(bUuids && (listStorage.UCount == uInitialResults)) + SearchEvalAdd(sp, pe.Uuid.ToHexString(), rx, pe, listStorage); + + if(bGroupName && (listStorage.UCount == uInitialResults) && + (pe.ParentGroup != null)) + SearchEvalAdd(sp, pe.ParentGroup.Name, rx, pe, listStorage); + + if(bTags) + { + foreach(string strTag in pe.Tags) + { + if(listStorage.UCount != uInitialResults) break; // Match + + SearchEvalAdd(sp, strTag, rx, pe, listStorage); + } + } + + return true; + }; + } + + if(!PreOrderTraverseTree(null, eh)) return false; + uCurEntries = uLocalCurEntries; + return true; +#endif + } + + private static void SearchEvalAdd(SearchParameters sp, string strDataField, + Regex rx, PwEntry pe, PwObjectList lResults) + { + bool bMatch = false; + + if(rx == null) + bMatch = (strDataField.IndexOf(sp.SearchString, + sp.ComparisonMode) >= 0); + else bMatch = rx.IsMatch(strDataField); + + if(!bMatch && (sp.DataTransformationFn != null)) + { + string strCmp = sp.DataTransformationFn(strDataField, pe); + if(!object.ReferenceEquals(strCmp, strDataField)) + { + if(rx == null) + bMatch = (strCmp.IndexOf(sp.SearchString, + sp.ComparisonMode) >= 0); + else bMatch = rx.IsMatch(strCmp); + } + } + + if(bMatch) lResults.Add(pe); + } + + public List BuildEntryTagsList() + { + return BuildEntryTagsList(false); + } + + public List BuildEntryTagsList(bool bSort) + { + List vTags = new List(); + + EntryHandler eh = delegate(PwEntry pe) + { + foreach(string strTag in pe.Tags) + { + bool bFound = false; + for(int i = 0; i < vTags.Count; ++i) + { + if(vTags[i].Equals(strTag, StrUtil.CaseIgnoreCmp)) + { + bFound = true; + break; + } + } + + if(!bFound) vTags.Add(strTag); + } + + return true; + }; + + TraverseTree(TraversalMethod.PreOrder, null, eh); + if(bSort) vTags.Sort(StrUtil.CaseIgnoreComparer); + return vTags; + } + + public void FindEntriesByTag(string strTag, PwObjectList listStorage, + bool bSearchRecursive) + { + if(strTag == null) throw new ArgumentNullException("strTag"); + if(strTag.Length == 0) return; + + foreach(PwEntry pe in m_listEntries) + { + foreach(string strEntryTag in pe.Tags) + { + if(strEntryTag.Equals(strTag, StrUtil.CaseIgnoreCmp)) + { + listStorage.Add(pe); + break; + } + } + } + + if(bSearchRecursive) + { + foreach(PwGroup pg in m_listGroups) + pg.FindEntriesByTag(strTag, listStorage, true); + } + } + + /// + /// Find a group. + /// + /// UUID identifying the group the caller is looking for. + /// If true, the search is recursive. + /// Returns reference to found group, otherwise null. + public PwGroup FindGroup(PwUuid uuid, bool bSearchRecursive) + { + // Do not assert on PwUuid.Zero + if(m_uuid.EqualsValue(uuid)) return this; + + if(bSearchRecursive) + { + PwGroup pgRec; + foreach(PwGroup pg in m_listGroups) + { + pgRec = pg.FindGroup(uuid, true); + if(pgRec != null) return pgRec; + } + } + else // Not recursive + { + foreach(PwGroup pg in m_listGroups) + { + if(pg.m_uuid.EqualsValue(uuid)) + return pg; + } + } + + return null; + } + + /// + /// Find an object. + /// + /// UUID of the object to find. + /// Specifies whether to search recursively. + /// If null, groups and entries are + /// searched. If true, only entries are searched. If false, + /// only groups are searched. + /// Reference to the object, if found. Otherwise null. + public IStructureItem FindObject(PwUuid uuid, bool bRecursive, + bool? bEntries) + { + if(bEntries.HasValue) + { + if(bEntries.Value) return FindEntry(uuid, bRecursive); + else return FindGroup(uuid, bRecursive); + } + + PwGroup pg = FindGroup(uuid, bRecursive); + if(pg != null) return pg; + return FindEntry(uuid, bRecursive); + } + + /// + /// Try to find a subgroup and create it, if it doesn't exist yet. + /// + /// Name of the subgroup. + /// If the group isn't found: create it. + /// Returns a reference to the requested group or null if + /// it doesn't exist and shouldn't be created. + public PwGroup FindCreateGroup(string strName, bool bCreateIfNotFound) + { + Debug.Assert(strName != null); if(strName == null) throw new ArgumentNullException("strName"); + + foreach(PwGroup pg in m_listGroups) + { + if(pg.Name == strName) return pg; + } + + if(!bCreateIfNotFound) return null; + + PwGroup pgNew = new PwGroup(true, true, strName, PwIcon.Folder); + AddGroup(pgNew, true); + return pgNew; + } + + /// + /// Find an entry. + /// + /// UUID identifying the entry the caller is looking for. + /// If true, the search is recursive. + /// Returns reference to found entry, otherwise null. + public PwEntry FindEntry(PwUuid uuid, bool bSearchRecursive) + { + foreach(PwEntry pe in m_listEntries) + { + if(pe.Uuid.EqualsValue(uuid)) return pe; + } + + if(bSearchRecursive) + { + PwEntry peSub; + foreach(PwGroup pg in m_listGroups) + { + peSub = pg.FindEntry(uuid, true); + if(peSub != null) return peSub; + } + } + + return null; + } + + /// + /// Get the full path of a group. + /// + /// Full path of the group. + public string GetFullPath() + { + return GetFullPath(".", false); + } + + /// + /// Get the full path of a group. + /// + /// String that separates the group + /// names. + /// Full path of the group. + public string GetFullPath(string strSeparator, bool bIncludeTopMostGroup) + { + Debug.Assert(strSeparator != null); + if(strSeparator == null) throw new ArgumentNullException("strSeparator"); + + string strPath = m_strName; + + PwGroup pg = m_pParentGroup; + while(pg != null) + { + if((!bIncludeTopMostGroup) && (pg.m_pParentGroup == null)) + break; + + strPath = pg.Name + strSeparator + strPath; + + pg = pg.m_pParentGroup; + } + + return strPath; + } + + /// + /// Assign new UUIDs to groups and entries. + /// + /// Create new UUIDs for subgroups. + /// Create new UUIDs for entries. + /// Recursive tree traversal. + public void CreateNewItemUuids(bool bNewGroups, bool bNewEntries, bool bRecursive) + { + if(bNewGroups) + { + foreach(PwGroup pg in m_listGroups) + pg.Uuid = new PwUuid(true); + } + + if(bNewEntries) + { + foreach(PwEntry pe in m_listEntries) + pe.SetUuid(new PwUuid(true), true); + } + + if(bRecursive) + { + foreach(PwGroup pg in m_listGroups) + pg.CreateNewItemUuids(bNewGroups, bNewEntries, true); + } + } + + public void TakeOwnership(bool bTakeSubGroups, bool bTakeEntries, bool bRecursive) + { + if(bTakeSubGroups) + { + foreach(PwGroup pg in m_listGroups) + pg.ParentGroup = this; + } + + if(bTakeEntries) + { + foreach(PwEntry pe in m_listEntries) + pe.ParentGroup = this; + } + + if(bRecursive) + { + foreach(PwGroup pg in m_listGroups) + pg.TakeOwnership(bTakeSubGroups, bTakeEntries, true); + } + } + + /// + /// Find/create a subtree of groups. + /// + /// Tree string. + /// Separators that delimit groups in the + /// strTree parameter. + public PwGroup FindCreateSubTree(string strTree, char[] vSeparators) + { + return FindCreateSubTree(strTree, vSeparators, true); + } + + public PwGroup FindCreateSubTree(string strTree, char[] vSeparators, + bool bAllowCreate) + { + Debug.Assert(strTree != null); if(strTree == null) return this; + if(strTree.Length == 0) return this; + + string[] vGroups = strTree.Split(vSeparators); + if((vGroups == null) || (vGroups.Length == 0)) return this; + + PwGroup pgContainer = this; + for(int nGroup = 0; nGroup < vGroups.Length; ++nGroup) + { + if(string.IsNullOrEmpty(vGroups[nGroup])) continue; + + bool bFound = false; + foreach(PwGroup pg in pgContainer.Groups) + { + if(pg.Name == vGroups[nGroup]) + { + pgContainer = pg; + bFound = true; + break; + } + } + + if(!bFound) + { + if(!bAllowCreate) return null; + + PwGroup pg = new PwGroup(true, true, vGroups[nGroup], PwIcon.Folder); + pgContainer.AddGroup(pg, true); + pgContainer = pg; + } + } + + return pgContainer; + } + + /// + /// Get the level of the group (i.e. the number of parent groups). + /// + /// Number of parent groups. + public uint GetLevel() + { + PwGroup pg = m_pParentGroup; + uint uLevel = 0; + + while(pg != null) + { + pg = pg.ParentGroup; + ++uLevel; + } + + return uLevel; + } + + public string GetAutoTypeSequenceInherited() + { + if(m_strDefaultAutoTypeSequence.Length > 0) + return m_strDefaultAutoTypeSequence; + + if(m_pParentGroup != null) + return m_pParentGroup.GetAutoTypeSequenceInherited(); + + return string.Empty; + } + + public bool GetAutoTypeEnabledInherited() + { + if(m_bEnableAutoType.HasValue) return m_bEnableAutoType.Value; + + if(m_pParentGroup != null) + return m_pParentGroup.GetAutoTypeEnabledInherited(); + + return DefaultAutoTypeEnabled; + } + + public bool GetSearchingEnabledInherited() + { + if(m_bEnableSearching.HasValue) return m_bEnableSearching.Value; + + if(m_pParentGroup != null) + return m_pParentGroup.GetSearchingEnabledInherited(); + + return DefaultSearchingEnabled; + } + + /// + /// Get a list of subgroups (not including this one). + /// + /// If true, subgroups are added + /// recursively, i.e. all child groups are returned, too. + /// List of subgroups. If is + /// true, it is guaranteed that subsubgroups appear after + /// subgroups. + public PwObjectList GetGroups(bool bRecursive) + { + if(bRecursive == false) return m_listGroups; + + PwObjectList list = m_listGroups.CloneShallow(); + foreach(PwGroup pgSub in m_listGroups) + { + list.Add(pgSub.GetGroups(true)); + } + + return list; + } + + public PwObjectList GetEntries(bool bIncludeSubGroupEntries) + { + if(bIncludeSubGroupEntries == false) return m_listEntries; + + PwObjectList list = m_listEntries.CloneShallow(); + foreach(PwGroup pgSub in m_listGroups) + { + list.Add(pgSub.GetEntries(true)); + } + + return list; + } + + /// + /// Get objects contained in this group. + /// + /// Specifies whether to search recursively. + /// If null, the returned list contains + /// groups and entries. If true, the returned list contains only + /// entries. If false, the returned list contains only groups. + /// List of objects. + public List GetObjects(bool bRecursive, bool? bEntries) + { + List list = new List(); + + if(!bEntries.HasValue || !bEntries.Value) + { + PwObjectList lGroups = GetGroups(bRecursive); + foreach(PwGroup pg in lGroups) list.Add(pg); + } + + if(!bEntries.HasValue || bEntries.Value) + { + PwObjectList lEntries = GetEntries(bRecursive); + foreach(PwEntry pe in lEntries) list.Add(pe); + } + + return list; + } + + public bool IsContainedIn(PwGroup pgContainer) + { + PwGroup pgCur = m_pParentGroup; + while(pgCur != null) + { + if(pgCur == pgContainer) return true; + + pgCur = pgCur.m_pParentGroup; + } + + return false; + } + + /// + /// Add a subgroup to this group. + /// + /// Group to be added. Must not be null. + /// If this parameter is true, the + /// parent group reference of the subgroup will be set to the current + /// group (i.e. the current group takes ownership of the subgroup). + public void AddGroup(PwGroup subGroup, bool bTakeOwnership) + { + AddGroup(subGroup, bTakeOwnership, false); + } + + /// + /// Add a subgroup to this group. + /// + /// Group to be added. Must not be null. + /// If this parameter is true, the + /// parent group reference of the subgroup will be set to the current + /// group (i.e. the current group takes ownership of the subgroup). + /// If true, the + /// LocationChanged property of the subgroup is updated. + public void AddGroup(PwGroup subGroup, bool bTakeOwnership, + bool bUpdateLocationChangedOfSub) + { + if(subGroup == null) throw new ArgumentNullException("subGroup"); + + m_listGroups.Add(subGroup); + + if(bTakeOwnership) subGroup.m_pParentGroup = this; + + if(bUpdateLocationChangedOfSub) subGroup.LocationChanged = DateTime.Now; + } + + /// + /// Add an entry to this group. + /// + /// Entry to be added. Must not be null. + /// If this parameter is true, the + /// parent group reference of the entry will be set to the current + /// group (i.e. the current group takes ownership of the entry). + public void AddEntry(PwEntry pe, bool bTakeOwnership) + { + AddEntry(pe, bTakeOwnership, false); + } + + /// + /// Add an entry to this group. + /// + /// Entry to be added. Must not be null. + /// If this parameter is true, the + /// parent group reference of the entry will be set to the current + /// group (i.e. the current group takes ownership of the entry). + /// If true, the + /// LocationChanged property of the entry is updated. + public void AddEntry(PwEntry pe, bool bTakeOwnership, + bool bUpdateLocationChangedOfEntry) + { + if(pe == null) throw new ArgumentNullException("pe"); + + m_listEntries.Add(pe); + + // Do not remove the entry from its previous parent group, + // only assign it to the new one + if(bTakeOwnership) pe.ParentGroup = this; + + if(bUpdateLocationChangedOfEntry) pe.LocationChanged = DateTime.Now; + } + + public void SortSubGroups(bool bRecursive) + { + m_listGroups.Sort(new PwGroupComparer()); + + if(bRecursive) + { + foreach(PwGroup pgSub in m_listGroups) + pgSub.SortSubGroups(true); + } + } + + public void DeleteAllObjects(PwDatabase pdContext) + { + DateTime dtNow = DateTime.Now; + + foreach(PwEntry pe in m_listEntries) + { + PwDeletedObject pdo = new PwDeletedObject(pe.Uuid, dtNow); + pdContext.DeletedObjects.Add(pdo); + } + m_listEntries.Clear(); + + foreach(PwGroup pg in m_listGroups) + { + pg.DeleteAllObjects(pdContext); + + PwDeletedObject pdo = new PwDeletedObject(pg.Uuid, dtNow); + pdContext.DeletedObjects.Add(pdo); + } + m_listGroups.Clear(); + } + } + + public sealed class PwGroupComparer : IComparer + { + public PwGroupComparer() + { + } + + public int Compare(PwGroup a, PwGroup b) + { + return StrUtil.CompareNaturally(a.Name, b.Name); + } + } +} diff --git a/ModernKeePassLib/PwUuid.cs b/ModernKeePassLib/PwUuid.cs new file mode 100644 index 0000000..ff1965f --- /dev/null +++ b/ModernKeePassLib/PwUuid.cs @@ -0,0 +1,179 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Xml; +using System.Diagnostics; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib +{ + // [ImmutableObject(true)] + /// + /// Represents an UUID of a password entry or group. Once created, PwUuid + /// objects aren't modifyable anymore (immutable). + /// + public sealed class PwUuid + { + /// + /// Standard size in bytes of a UUID. + /// + public const uint UuidSize = 16; + + /// + /// Zero UUID (all bytes are zero). + /// + public static readonly PwUuid Zero = new PwUuid(); + + private byte[] m_pbUuid = new byte[UuidSize]; + + /// + /// Get the 16 UUID bytes. + /// + public byte[] UuidBytes + { + get { return m_pbUuid; } + } + + /// + /// Construct a new UUID object. Its value is initialized to zero. + /// + private PwUuid() + { + SetZero(); + } + + /// + /// Construct a new UUID object. + /// + /// If this parameter is true, a new + /// UUID is generated. If it is false, the UUID is initialized + /// to zero. + public PwUuid(bool bCreateNew) + { + if(bCreateNew) CreateNew(); + else SetZero(); + } + + /// + /// Construct a new UUID object. + /// + /// Initial value of the PwUuid object. + public PwUuid(byte[] uuidBytes) + { + SetValue(uuidBytes); + } + + /// + /// Create a new, random UUID. + /// + /// Returns true if a random UUID has been generated, + /// otherwise it returns false. + private void CreateNew() + { + while(true) + { + m_pbUuid = Guid.NewGuid().ToByteArray(); + + if((m_pbUuid == null) || (m_pbUuid.Length != UuidSize)) + throw new InvalidOperationException(); + + // Zero is a reserved value -- do not generate Zero + if(this.EqualsValue(PwUuid.Zero) == false) + break; + } + } + + /// + /// Compare this UUID with another. + /// + /// Second UUID object. + /// Returns true if both PwUuid object contain the same + /// value, otherwise false is returned. + public bool EqualsValue(PwUuid uuid) + { + Debug.Assert(uuid != null); + if(uuid == null) throw new ArgumentNullException("uuid"); + + for(int i = 0; i < UuidSize; ++i) + { + if(m_pbUuid[i] != uuid.m_pbUuid[i]) return false; + } + + return true; + } + + /// + /// Convert the UUID to its string representation. + /// + /// String containing the UUID value. + public string ToHexString() + { + return MemUtil.ByteArrayToHexString(m_pbUuid); + } + + /// + /// Set the UUID value. The input parameter will not be modified. + /// + /// UUID bytes. The byte array must contain + /// exactly UUIDSize bytes, otherwise the function will fail. + private void SetValue(byte[] uuidBytes) + { + Debug.Assert((uuidBytes != null) && (uuidBytes.Length == UuidSize)); + if(uuidBytes == null) throw new ArgumentNullException("uuidBytes"); + if(uuidBytes.Length != UuidSize) throw new ArgumentException(); + + Array.Copy(uuidBytes, m_pbUuid, (int)UuidSize); + } + + /// + /// Set the UUID value to zero. + /// + private void SetZero() + { + Array.Clear(m_pbUuid, 0, (int)UuidSize); + } + } + + public sealed class PwUuidComparable : IComparable + { + private byte[] m_pbUuid = new byte[PwUuid.UuidSize]; + + public PwUuidComparable(PwUuid pwUuid) + { + if(pwUuid == null) throw new ArgumentNullException("pwUuid"); + + Array.Copy(pwUuid.UuidBytes, m_pbUuid, (int)PwUuid.UuidSize); + } + + public int CompareTo(PwUuidComparable other) + { + if(other == null) throw new ArgumentNullException("other"); + + for(int i = 0; i < (int)PwUuid.UuidSize; ++i) + { + if(m_pbUuid[i] < other.m_pbUuid[i]) return -1; + if(m_pbUuid[i] > other.m_pbUuid[i]) return 1; + } + + return 0; + } + } +} diff --git a/ModernKeePassLib/Resources/KLRes.Generated.cs b/ModernKeePassLib/Resources/KLRes.Generated.cs new file mode 100644 index 0000000..5f35502 --- /dev/null +++ b/ModernKeePassLib/Resources/KLRes.Generated.cs @@ -0,0 +1,390 @@ +// This is a generated file! +// Do not edit manually, changes will be overwritten. + +using System; +using System.Collections.Generic; + +namespace ModernKeePassLib.Resources +{ + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + public static class KLRes + { + private static string TryGetEx(Dictionary dictNew, + string strName, string strDefault) + { + string strTemp; + + if(dictNew.TryGetValue(strName, out strTemp)) + return strTemp; + + return strDefault; + } + + public static void SetTranslatedStrings(Dictionary dictNew) + { + if(dictNew == null) throw new ArgumentNullException("dictNew"); + + m_strCryptoStreamFailed = TryGetEx(dictNew, "CryptoStreamFailed", m_strCryptoStreamFailed); + m_strEncAlgorithmAes = TryGetEx(dictNew, "EncAlgorithmAes", m_strEncAlgorithmAes); + m_strErrorInClipboard = TryGetEx(dictNew, "ErrorInClipboard", m_strErrorInClipboard); + m_strFatalError = TryGetEx(dictNew, "FatalError", m_strFatalError); + m_strFatalErrorText = TryGetEx(dictNew, "FatalErrorText", m_strFatalErrorText); + m_strFileCorrupted = TryGetEx(dictNew, "FileCorrupted", m_strFileCorrupted); + m_strFileHeaderEndEarly = TryGetEx(dictNew, "FileHeaderEndEarly", m_strFileHeaderEndEarly); + m_strFileLoadFailed = TryGetEx(dictNew, "FileLoadFailed", m_strFileLoadFailed); + m_strFileLockedWrite = TryGetEx(dictNew, "FileLockedWrite", m_strFileLockedWrite); + m_strFileNewVerReq = TryGetEx(dictNew, "FileNewVerReq", m_strFileNewVerReq); + m_strFileSaveCorruptionWarning = TryGetEx(dictNew, "FileSaveCorruptionWarning", m_strFileSaveCorruptionWarning); + m_strFileSaveFailed = TryGetEx(dictNew, "FileSaveFailed", m_strFileSaveFailed); + m_strFileSigInvalid = TryGetEx(dictNew, "FileSigInvalid", m_strFileSigInvalid); + m_strFileUnknownCipher = TryGetEx(dictNew, "FileUnknownCipher", m_strFileUnknownCipher); + m_strFileUnknownCompression = TryGetEx(dictNew, "FileUnknownCompression", m_strFileUnknownCompression); + m_strFileVersionUnsupported = TryGetEx(dictNew, "FileVersionUnsupported", m_strFileVersionUnsupported); + m_strFinalKeyCreationFailed = TryGetEx(dictNew, "FinalKeyCreationFailed", m_strFinalKeyCreationFailed); + m_strFrameworkNotImplExcp = TryGetEx(dictNew, "FrameworkNotImplExcp", m_strFrameworkNotImplExcp); + m_strInvalidCompositeKey = TryGetEx(dictNew, "InvalidCompositeKey", m_strInvalidCompositeKey); + m_strInvalidCompositeKeyHint = TryGetEx(dictNew, "InvalidCompositeKeyHint", m_strInvalidCompositeKeyHint); + m_strInvalidDataWhileDecoding = TryGetEx(dictNew, "InvalidDataWhileDecoding", m_strInvalidDataWhileDecoding); + m_strKeePass1xHint = TryGetEx(dictNew, "KeePass1xHint", m_strKeePass1xHint); + m_strMasterSeedLengthInvalid = TryGetEx(dictNew, "MasterSeedLengthInvalid", m_strMasterSeedLengthInvalid); + m_strOldFormat = TryGetEx(dictNew, "OldFormat", m_strOldFormat); + m_strTryAgainSecs = TryGetEx(dictNew, "TryAgainSecs", m_strTryAgainSecs); + m_strUnknownHeaderId = TryGetEx(dictNew, "UnknownHeaderId", m_strUnknownHeaderId); + m_strUserAccountKeyError = TryGetEx(dictNew, "UserAccountKeyError", m_strUserAccountKeyError); + } + + private static readonly string[] m_vKeyNames = { + "CryptoStreamFailed", + "EncAlgorithmAes", + "ErrorInClipboard", + "FatalError", + "FatalErrorText", + "FileCorrupted", + "FileHeaderEndEarly", + "FileLoadFailed", + "FileLockedWrite", + "FileNewVerReq", + "FileSaveCorruptionWarning", + "FileSaveFailed", + "FileSigInvalid", + "FileUnknownCipher", + "FileUnknownCompression", + "FileVersionUnsupported", + "FinalKeyCreationFailed", + "FrameworkNotImplExcp", + "InvalidCompositeKey", + "InvalidCompositeKeyHint", + "InvalidDataWhileDecoding", + "KeePass1xHint", + "MasterSeedLengthInvalid", + "OldFormat", + "TryAgainSecs", + "UnknownHeaderId", + "UserAccountKeyError" + }; + + public static string[] GetKeyNames() + { + return m_vKeyNames; + } + + private static string m_strCryptoStreamFailed = + @"Failed to initialize encryption/decryption stream!"; + /// + /// Look up a localized string similar to + /// 'Failed to initialize encryption/decryption stream!'. + /// + public static string CryptoStreamFailed + { + get { return m_strCryptoStreamFailed; } + } + + private static string m_strEncAlgorithmAes = + @"AES/Rijndael (256-Bit Key)"; + /// + /// Look up a localized string similar to + /// 'AES/Rijndael (256-Bit Key)'. + /// + public static string EncAlgorithmAes + { + get { return m_strEncAlgorithmAes; } + } + + private static string m_strErrorInClipboard = + @"An extended error report has been copied to the clipboard."; + /// + /// Look up a localized string similar to + /// 'An extended error report has been copied to the clipboard.'. + /// + public static string ErrorInClipboard + { + get { return m_strErrorInClipboard; } + } + + private static string m_strFatalError = + @"Fatal Error"; + /// + /// Look up a localized string similar to + /// 'Fatal Error'. + /// + public static string FatalError + { + get { return m_strFatalError; } + } + + private static string m_strFatalErrorText = + @"A fatal error has occurred!"; + /// + /// Look up a localized string similar to + /// 'A fatal error has occurred!'. + /// + public static string FatalErrorText + { + get { return m_strFatalErrorText; } + } + + private static string m_strFileCorrupted = + @"The file is corrupted."; + /// + /// Look up a localized string similar to + /// 'The file is corrupted.'. + /// + public static string FileCorrupted + { + get { return m_strFileCorrupted; } + } + + private static string m_strFileHeaderEndEarly = + @"The file header is corrupted! Some header data was declared but is not present."; + /// + /// Look up a localized string similar to + /// 'The file header is corrupted! Some header data was declared but is not present.'. + /// + public static string FileHeaderEndEarly + { + get { return m_strFileHeaderEndEarly; } + } + + private static string m_strFileLoadFailed = + @"Failed to load the specified file!"; + /// + /// Look up a localized string similar to + /// 'Failed to load the specified file!'. + /// + public static string FileLoadFailed + { + get { return m_strFileLoadFailed; } + } + + private static string m_strFileLockedWrite = + @"The file is locked, because the following user is currently writing to it:"; + /// + /// Look up a localized string similar to + /// 'The file is locked, because the following user is currently writing to it:'. + /// + public static string FileLockedWrite + { + get { return m_strFileLockedWrite; } + } + + private static string m_strFileNewVerReq = + @"A newer KeePass version is required to open this file."; + /// + /// Look up a localized string similar to + /// 'A newer KeePass version is required to open this file.'. + /// + public static string FileNewVerReq + { + get { return m_strFileNewVerReq; } + } + + private static string m_strFileSaveCorruptionWarning = + @"The target file might be in a corrupted state. Please try saving again, and if that fails, save the database to a different location."; + /// + /// Look up a localized string similar to + /// 'The target file might be in a corrupted state. Please try saving again, and if that fails, save the database to a different location.'. + /// + public static string FileSaveCorruptionWarning + { + get { return m_strFileSaveCorruptionWarning; } + } + + private static string m_strFileSaveFailed = + @"Failed to save the current database to the specified location!"; + /// + /// Look up a localized string similar to + /// 'Failed to save the current database to the specified location!'. + /// + public static string FileSaveFailed + { + get { return m_strFileSaveFailed; } + } + + private static string m_strFileSigInvalid = + @"The file signature is invalid. Either the file isn't a KeePass database file at all or it is corrupted."; + /// + /// Look up a localized string similar to + /// 'The file signature is invalid. Either the file isn't a KeePass database file at all or it is corrupted.'. + /// + public static string FileSigInvalid + { + get { return m_strFileSigInvalid; } + } + + private static string m_strFileUnknownCipher = + @"The file is encrypted using an unknown encryption algorithm!"; + /// + /// Look up a localized string similar to + /// 'The file is encrypted using an unknown encryption algorithm!'. + /// + public static string FileUnknownCipher + { + get { return m_strFileUnknownCipher; } + } + + private static string m_strFileUnknownCompression = + @"The file is compressed using an unknown compression algorithm!"; + /// + /// Look up a localized string similar to + /// 'The file is compressed using an unknown compression algorithm!'. + /// + public static string FileUnknownCompression + { + get { return m_strFileUnknownCompression; } + } + + private static string m_strFileVersionUnsupported = + @"The file version is unsupported."; + /// + /// Look up a localized string similar to + /// 'The file version is unsupported.'. + /// + public static string FileVersionUnsupported + { + get { return m_strFileVersionUnsupported; } + } + + private static string m_strFinalKeyCreationFailed = + @"Failed to create the final encryption/decryption key!"; + /// + /// Look up a localized string similar to + /// 'Failed to create the final encryption/decryption key!'. + /// + public static string FinalKeyCreationFailed + { + get { return m_strFinalKeyCreationFailed; } + } + + private static string m_strFrameworkNotImplExcp = + @"The .NET framework/runtime under which KeePass is currently running does not support this operation."; + /// + /// Look up a localized string similar to + /// 'The .NET framework/runtime under which KeePass is currently running does not support this operation.'. + /// + public static string FrameworkNotImplExcp + { + get { return m_strFrameworkNotImplExcp; } + } + + private static string m_strInvalidCompositeKey = + @"The composite key is invalid!"; + /// + /// Look up a localized string similar to + /// 'The composite key is invalid!'. + /// + public static string InvalidCompositeKey + { + get { return m_strInvalidCompositeKey; } + } + + private static string m_strInvalidCompositeKeyHint = + @"Make sure the composite key is correct and try again."; + /// + /// Look up a localized string similar to + /// 'Make sure the composite key is correct and try again.'. + /// + public static string InvalidCompositeKeyHint + { + get { return m_strInvalidCompositeKeyHint; } + } + + private static string m_strInvalidDataWhileDecoding = + @"Found invalid data while decoding."; + /// + /// Look up a localized string similar to + /// 'Found invalid data while decoding.'. + /// + public static string InvalidDataWhileDecoding + { + get { return m_strInvalidDataWhileDecoding; } + } + + private static string m_strKeePass1xHint = + @"In order to import KeePass 1.x KDB files, create a new 2.x database file and click 'File' -> 'Import' in the main menu. In the import dialog, choose 'KeePass KDB (1.x)' as file format."; + /// + /// Look up a localized string similar to + /// 'In order to import KeePass 1.x KDB files, create a new 2.x database file and click 'File' -> 'Import' in the main menu. In the import dialog, choose 'KeePass KDB (1.x)' as file format.'. + /// + public static string KeePass1xHint + { + get { return m_strKeePass1xHint; } + } + + private static string m_strMasterSeedLengthInvalid = + @"The length of the master key seed is invalid!"; + /// + /// Look up a localized string similar to + /// 'The length of the master key seed is invalid!'. + /// + public static string MasterSeedLengthInvalid + { + get { return m_strMasterSeedLengthInvalid; } + } + + private static string m_strOldFormat = + @"The selected file appears to be an old format"; + /// + /// Look up a localized string similar to + /// 'The selected file appears to be an old format'. + /// + public static string OldFormat + { + get { return m_strOldFormat; } + } + + private static string m_strTryAgainSecs = + @"Please try it again in a few seconds."; + /// + /// Look up a localized string similar to + /// 'Please try it again in a few seconds.'. + /// + public static string TryAgainSecs + { + get { return m_strTryAgainSecs; } + } + + private static string m_strUnknownHeaderId = + @"Unknown header ID!"; + /// + /// Look up a localized string similar to + /// 'Unknown header ID!'. + /// + public static string UnknownHeaderId + { + get { return m_strUnknownHeaderId; } + } + + private static string m_strUserAccountKeyError = + @"The operating system did not grant KeePass read/write access to the user profile folder, where the protected user key is stored."; + /// + /// Look up a localized string similar to + /// 'The operating system did not grant KeePass read/write access to the user profile folder, where the protected user key is stored.'. + /// + public static string UserAccountKeyError + { + get { return m_strUserAccountKeyError; } + } + } +} diff --git a/ModernKeePassLib/Resources/KSRes.Generated.cs b/ModernKeePassLib/Resources/KSRes.Generated.cs new file mode 100644 index 0000000..7b49547 --- /dev/null +++ b/ModernKeePassLib/Resources/KSRes.Generated.cs @@ -0,0 +1,52 @@ +// This is a generated file! +// Do not edit manually, changes will be overwritten. + +using System; +using System.Collections.Generic; + +namespace ModernKeePassLib.Resources +{ + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + public static class KSRes + { + private static string TryGetEx(Dictionary dictNew, + string strName, string strDefault) + { + string strTemp; + + if(dictNew.TryGetValue(strName, out strTemp)) + return strTemp; + + return strDefault; + } + + public static void SetTranslatedStrings(Dictionary dictNew) + { + if(dictNew == null) throw new ArgumentNullException("dictNew"); + + m_strTest = TryGetEx(dictNew, "Test", m_strTest); + } + + private static readonly string[] m_vKeyNames = { + "Test" + }; + + public static string[] GetKeyNames() + { + return m_vKeyNames; + } + + private static string m_strTest = + @"Test"; + /// + /// Look up a localized string similar to + /// 'Test'. + /// + public static string Test + { + get { return m_strTest; } + } + } +} diff --git a/ModernKeePassLib/Security/ProtectedBinary.cs b/ModernKeePassLib/Security/ProtectedBinary.cs new file mode 100644 index 0000000..e1721ff --- /dev/null +++ b/ModernKeePassLib/Security/ProtectedBinary.cs @@ -0,0 +1,249 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Threading.Tasks; + +using ModernKeePassLib.Utility; +using ModernKeePassLib.Cryptography; +using Windows.Security.Cryptography; +using Windows.Security.Cryptography.DataProtection; +using Windows.Storage.Streams; + + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Security +{ + /// + /// Represents a protected binary, i.e. a byte array that is encrypted + /// in memory. A ProtectedBinary object is immutable and + /// thread-safe. + /// + public sealed class ProtectedBinary : IEquatable + { + private static bool m_bProtectionSupported; + private IBuffer m_pbDataCrypted; + private DataProtectionProvider m_pProvider; + private bool m_bProtected; + + /// + /// A flag specifying whether the ProtectedBinary object has + /// turned on in-memory protection or not. + /// + public bool IsProtected + { + get + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + return m_bProtected; +#endif + } + } + + /// + /// Length of the stored data. + /// + public uint Length + { + get + { + + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + return m_uDataLen; +#endif + } + } + + static ProtectedBinary() + { + m_bProtectionSupported = true; + } + + /// + /// Construct a new, empty protected binary data object. Protection + /// is disabled. + /// + public ProtectedBinary() + { + Init(false, new byte[0]); + } + + /// + /// Construct a new protected binary data object. + /// + /// If this paremeter is true, + /// the data will be encrypted in memory. If it is false, the + /// data is stored in plain-text in the process memory. + /// Value of the protected object. + /// The input parameter is not modified and + /// ProtectedBinary doesn't take ownership of the data, + /// i.e. the caller is responsible for clearing it. + public ProtectedBinary(bool bEnableProtection, byte[] pbData) + { + Init(bEnableProtection, pbData); + } + + /// + /// Construct a new protected binary data object. Copy the data from + /// a XorredBuffer object. + /// + /// Enable protection or not. + /// XorredBuffer object used to + /// initialize the ProtectedBinary object. + /// Thrown if the input + /// parameter is null. + public ProtectedBinary(bool bEnableProtection, XorredBuffer xbProtected) + { + Debug.Assert(xbProtected != null); if (xbProtected == null) throw new ArgumentNullException("xbProtected"); + + byte[] pb = xbProtected.ReadPlainText(); + Init(bEnableProtection, pb); + MemUtil.ZeroByteArray(pb); + } + + private void Init(bool bEnableProtection, byte[] pbData) + { + String strDescriptor = "LOCAL=user"; + m_pProvider = new DataProtectionProvider(strDescriptor); + + EncryptAsync(bEnableProtection, pbData); + + } + + private void EncryptAsync(bool bEnableProtection, byte[] pbData) + { + IBuffer dataUncrypted = CryptographicBuffer.CreateFromByteArray(pbData); + + Task task = m_pProvider.ProtectAsync(dataUncrypted).AsTask(); + task.Wait(); + + m_pbDataCrypted = task.Result; + // TODO: Here the dataUncrypted buffer should be cleared. Now just count on GarbageCollection to destroy. + + } + + /// + /// Get a copy of the protected data as a byte array. + /// Please note that the returned byte array is not protected and + /// can therefore been read by any other application. + /// Make sure that your clear it properly after usage. + /// + /// Unprotected byte array. This is always a copy of the internal + /// protected data and can therefore be cleared safely. + public byte[] ReadData() + { + if (m_pbDataCrypted == null) return new byte[0]; + + // Decrypt the protected message specified on input. + + Task task = m_pProvider.UnprotectAsync(m_pbDataCrypted).AsTask(); + task.Wait(); + + IBuffer buffUnprotected = task.Result; + byte[] strClearText; + CryptographicBuffer.CopyToByteArray(buffUnprotected, out strClearText); + return strClearText; + + } + + /// + /// Read the protected data and return it protected with a sequence + /// of bytes generated by a random stream. + /// + /// Random number source. + /// Protected data. + /// Thrown if the input + /// parameter is null. + public byte[] ReadXorredData(CryptoRandomStream crsRandomSource) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + Debug.Assert(crsRandomSource != null); + if(crsRandomSource == null) throw new ArgumentNullException("crsRandomSource"); + + byte[] pbData = ReadData(); + uint uLen = (uint)pbData.Length; + + byte[] randomPad = crsRandomSource.GetRandomBytes(uLen); + Debug.Assert(randomPad.Length == uLen); + + for(uint i = 0; i < uLen; ++i) + pbData[i] ^= randomPad[i]; + + return pbData; +#endif + } + + public override int GetHashCode() + { + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + int h = (m_bProtected ? 0x7B11D289 : 0); + + byte[] pb = ReadData(); + unchecked + { + for(int i = 0; i < pb.Length; ++i) + h = (h << 3) + h + (int)pb[i]; + } + MemUtil.ZeroByteArray(pb); + + return h; +#endif + } + + public override bool Equals(object obj) + { + return Equals(obj as ProtectedBinary); + } + + public bool Equals(ProtectedBinary other) + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + if(other == null) return false; // No assert + + if(m_bProtected != other.m_bProtected) return false; + if(m_uDataLen != other.m_uDataLen) return false; + + byte[] pbL = ReadData(); + byte[] pbR = other.ReadData(); + bool bEq = MemUtil.ArraysEqual(pbL, pbR); + MemUtil.ZeroByteArray(pbL); + MemUtil.ZeroByteArray(pbR); + +#if DEBUG + if(bEq) { Debug.Assert(GetHashCode() == other.GetHashCode()); } +#endif + + return bEq; +#endif + } + } +} diff --git a/ModernKeePassLib/Security/ProtectedString.cs b/ModernKeePassLib/Security/ProtectedString.cs new file mode 100644 index 0000000..5c3fee9 --- /dev/null +++ b/ModernKeePassLib/Security/ProtectedString.cs @@ -0,0 +1,264 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Text; +using System.Diagnostics; + +using ModernKeePassLib.Cryptography; +using ModernKeePassLib.Utility; +using System.Threading.Tasks; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +// SecureString objects are limited to 65536 characters, don't use + +namespace ModernKeePassLib.Security +{ + /// + /// Represents an in-memory encrypted string. + /// ProtectedString objects are immutable and thread-safe. + /// +#if (DEBUG && !KeePassLibSD) + [DebuggerDisplay(@"{ReadString()}")] +#endif + public sealed class ProtectedString + { + // Exactly one of the following will be non-null + private ProtectedBinary m_pbUtf8 = null; + private string m_strPlainText = null; + + private bool m_bIsProtected; + + private static ProtectedString m_psEmpty = new ProtectedString(); + public static ProtectedString Empty + { + get { return m_psEmpty; } + } + + /// + /// A flag specifying whether the ProtectedString object + /// has turned on in-memory protection or not. + /// + public bool IsProtected + { + get { return m_bIsProtected; } + } + + public bool IsEmpty + { + get + { + ProtectedBinary pBin = m_pbUtf8; // Local ref for thread-safety + if(pBin != null) return (pBin.Length == 0); + + Debug.Assert(m_strPlainText != null); + return (m_strPlainText.Length == 0); + } + } + + private int m_nCachedLength = -1; + public int Length + { + get + { + + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + if(m_nCachedLength >= 0) return m_nCachedLength; + + ProtectedBinary pBin = m_pbUtf8; // Local ref for thread-safety + if(pBin != null) + { + byte[] pbPlain = pBin.ReadData(); + m_nCachedLength = StrUtil.Utf8.GetCharCount(pbPlain); + MemUtil.ZeroByteArray(pbPlain); + } + else + { + Debug.Assert(m_strPlainText != null); + m_nCachedLength = m_strPlainText.Length; + } + + return m_nCachedLength; +#endif + } + } + + /// + /// Construct a new protected string object. Protection is + /// disabled. + /// + public ProtectedString() + { + Init(false, string.Empty); + } + + /// + /// Construct a new protected string. The string is initialized + /// to the value supplied in the parameters. + /// + /// If this parameter is true, + /// the string will be protected in-memory (encrypted). If it + /// is false, the string will be stored as plain-text. + /// The initial string value. This + /// parameter won't be modified. + public ProtectedString(bool bEnableProtection, string strValue) + { + Init(bEnableProtection, strValue); + } + + /// + /// Construct a new protected string. The string is initialized + /// to the value supplied in the parameters (UTF-8 encoded string). + /// + /// If this parameter is true, + /// the string will be protected in-memory (encrypted). If it + /// is false, the string will be stored as plain-text. + /// The initial string value, encoded as + /// UTF-8 byte array. This parameter won't be modified; the caller + /// is responsible for clearing it. + public ProtectedString(bool bEnableProtection, byte[] vUtf8Value) + { + Init(bEnableProtection, vUtf8Value); + } + + /// + /// Construct a new protected string. The string is initialized + /// to the value passed in the XorredBuffer object. + /// + /// Enable protection or not. + /// XorredBuffer object containing the + /// string in UTF-8 representation. The UTF-8 string must not + /// be null-terminated. + /// Thrown if the input + /// parameter is null. + public ProtectedString(bool bEnableProtection, XorredBuffer xbProtected) + { + if(xbProtected == null) throw new ArgumentNullException("xbProtected"); + + byte[] pb = xbProtected.ReadPlainText(); + Init(bEnableProtection, pb); + MemUtil.ZeroByteArray(pb); + } + + private void Init(bool bEnableProtection, string str) + { + if(str == null) throw new ArgumentNullException("str"); + + m_bIsProtected = bEnableProtection; + + // The string already is in memory and immutable, + // protection would be useless + m_strPlainText = str; + } + + private void Init(bool bEnableProtection, byte[] pbUtf8) + { + if(pbUtf8 == null) throw new ArgumentNullException("pbUtf8"); + + m_bIsProtected = bEnableProtection; + + if(bEnableProtection) + m_pbUtf8 = new ProtectedBinary(true, pbUtf8); + else + m_strPlainText = StrUtil.Utf8.GetString(pbUtf8, 0, pbUtf8.Length); + } + + /// + /// Convert the protected string to a normal string object. + /// Be careful with this function, the returned string object + /// isn't protected anymore and stored in plain-text in the + /// process memory. + /// + /// Plain-text string. Is never null. + public string ReadString() + { + if(m_strPlainText != null) return m_strPlainText; + + byte[] pb = ReadUtf8(); + + string str = ((pb.Length == 0) ? string.Empty : + StrUtil.Utf8.GetString(pb, 0, pb.Length)); + // No need to clear pb + + // As the text is now visible in process memory anyway, + // there's no need to protect it anymore + m_strPlainText = str; + m_pbUtf8 = null; // Thread-safe order + + return str; + } + + /// + /// Read out the string and return a byte array that contains the + /// string encoded using UTF-8. The returned string is not protected + /// anymore! + /// + /// Plain-text UTF-8 byte array. + public byte[] ReadUtf8() + { + ProtectedBinary pBin = m_pbUtf8; // Local ref for thread-safety + + if (pBin != null) + { + return pBin.ReadData(); + } + + return StrUtil.Utf8.GetBytes(m_strPlainText); + } + + /// + /// Read the protected string and return it protected with a sequence + /// of bytes generated by a random stream. + /// + /// Random number source. + /// Protected string. + /// Thrown if the input + /// parameter is null. + public byte[] ReadXorredString(CryptoRandomStream crsRandomSource) + { + Debug.Assert(crsRandomSource != null); if(crsRandomSource == null) throw new ArgumentNullException("crsRandomSource"); + + byte[] pbData = ReadUtf8(); + uint uLen = (uint)pbData.Length; + + byte[] randomPad = crsRandomSource.GetRandomBytes(uLen); + Debug.Assert(randomPad.Length == uLen); + + for(uint i = 0; i < uLen; ++i) + pbData[i] ^= randomPad[i]; + + return pbData; + } + + public ProtectedString WithProtection(bool bProtect) + { + if(bProtect == m_bIsProtected) return this; + + byte[] pb = ReadUtf8(); + ProtectedString ps = new ProtectedString(bProtect, pb); + MemUtil.ZeroByteArray(pb); + return ps; + } + } +} diff --git a/ModernKeePassLib/Security/XorredBuffer.cs b/ModernKeePassLib/Security/XorredBuffer.cs new file mode 100644 index 0000000..27693ff --- /dev/null +++ b/ModernKeePassLib/Security/XorredBuffer.cs @@ -0,0 +1,116 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Diagnostics; + +namespace ModernKeePassLib.Security +{ + /// + /// Represents an object that is encrypted using a XOR pad until + /// it is read. XorredBuffer objects are immutable and + /// thread-safe. + /// + public sealed class XorredBuffer + { + private byte[] m_pbData; // Never null + private byte[] m_pbXorPad; // Always valid for m_pbData + + /// + /// Length of the protected data in bytes. + /// + public uint Length + { + get { return (uint)m_pbData.Length; } + } + + /// + /// Construct a new XOR-protected object using a protected byte array + /// and a XOR pad that decrypts the protected data. The + /// byte array must have the same size + /// as the byte array. + /// The XorredBuffer object takes ownership of the two byte + /// arrays, i.e. the caller must not use or modify them afterwards. + /// + /// Protected data (XOR pad applied). + /// XOR pad that can be used to decrypt the + /// parameter. + /// Thrown if one of the input + /// parameters is null. + /// Thrown if the byte arrays are + /// of different size. + public XorredBuffer(byte[] pbProtectedData, byte[] pbXorPad) + { + if(pbProtectedData == null) { Debug.Assert(false); throw new ArgumentNullException("pbProtectedData"); } + if(pbXorPad == null) { Debug.Assert(false); throw new ArgumentNullException("pbXorPad"); } + + Debug.Assert(pbProtectedData.Length == pbXorPad.Length); + if(pbProtectedData.Length != pbXorPad.Length) throw new ArgumentException(); + + m_pbData = pbProtectedData; + m_pbXorPad = pbXorPad; + } + + /// + /// Get a copy of the plain-text. The caller is responsible + /// for clearing the byte array safely after using it. + /// + /// Unprotected plain-text byte array. + public byte[] ReadPlainText() + { + byte[] pbPlain = new byte[m_pbData.Length]; + + for(int i = 0; i < pbPlain.Length; ++i) + pbPlain[i] = (byte)(m_pbData[i] ^ m_pbXorPad[i]); + + return pbPlain; + } + + /* public bool EqualsValue(XorredBuffer xb) + { + if(xb == null) { Debug.Assert(false); throw new ArgumentNullException("xb"); } + + if(xb.m_pbData.Length != m_pbData.Length) return false; + + for(int i = 0; i < m_pbData.Length; ++i) + { + byte bt1 = (byte)(m_pbData[i] ^ m_pbXorPad[i]); + byte bt2 = (byte)(xb.m_pbData[i] ^ xb.m_pbXorPad[i]); + + if(bt1 != bt2) return false; + } + + return true; + } + + public bool EqualsValue(byte[] pb) + { + if(pb == null) { Debug.Assert(false); throw new ArgumentNullException("pb"); } + + if(pb.Length != m_pbData.Length) return false; + + for(int i = 0; i < m_pbData.Length; ++i) + { + if((byte)(m_pbData[i] ^ m_pbXorPad[i]) != pb[i]) return false; + } + + return true; + } */ + } +} diff --git a/ModernKeePassLib/Serialization/BinaryReaderEx.cs b/ModernKeePassLib/Serialization/BinaryReaderEx.cs new file mode 100644 index 0000000..6cd06c8 --- /dev/null +++ b/ModernKeePassLib/Serialization/BinaryReaderEx.cs @@ -0,0 +1,63 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace ModernKeePassLib.Serialization +{ + public sealed class BinaryReaderEx : BinaryReader + { + private string m_strReadExcp = null; + public string ReadExceptionText + { + get { return m_strReadExcp; } + set { m_strReadExcp = value; } + } + + public BinaryReaderEx(Stream input, Encoding encoding, + string strReadExceptionText) : + base(input, encoding) + { + m_strReadExcp = strReadExceptionText; + } + + public override byte[] ReadBytes(int count) + { + try + { + byte[] pb = base.ReadBytes(count); + if((pb == null) || (pb.Length != count)) + { + if(m_strReadExcp != null) throw new IOException(m_strReadExcp); + else throw new EndOfStreamException(); + } + + return pb; + } + catch(Exception) + { + if(m_strReadExcp != null) throw new IOException(m_strReadExcp); + else throw; + } + } + } +} diff --git a/ModernKeePassLib/Serialization/CryptoStream.cs b/ModernKeePassLib/Serialization/CryptoStream.cs new file mode 100644 index 0000000..6c24cf5 --- /dev/null +++ b/ModernKeePassLib/Serialization/CryptoStream.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Windows.Security.Cryptography; +using Windows.Security.Cryptography.Core; +using Windows.Storage.Streams; + +namespace ModernKeePassLib.Serialization +{ + // An adaptor function to provide a stream interface from an IBuffer. + + class CryptoStream : Stream + { + + private int m_blockSize = 16 ; + private byte[] m_decoded; + private IEnumerator m_enumerator = null; + + public CryptoStream(Stream s, String strAlgName, bool bEncrypt, byte[] pbKey, byte[] pbIV) + : base() + { + IBuffer iv = CryptographicBuffer.CreateFromByteArray(pbIV); + SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName); + CryptographicKey key = objAlg.CreateSymmetricKey( CryptographicBuffer.CreateFromByteArray(pbKey) ); + if (bEncrypt) + { + Debug.Assert(false, "Not implemented yet"); + } + else + { + // For the time being, WinRT CryptographicEngine doesn't support stream decoding. Bummer. + // Copy the file to a memory buffer, then decode all at once. + + + byte[] block = new byte[s.Length]; // We are not at the beginning of the stream + // There is always less than s.Lenght bytes remaining to be read. + int readItemCount = s.Read(block, 0, (int) s.Length); + Array.Resize(ref block, readItemCount); + + IBuffer input = CryptographicBuffer.CreateFromByteArray(block); + IBuffer decoded = null; + + try + { + decoded = CryptographicEngine.Decrypt(key, input, iv); + } catch (System.Exception) + { + throw new Keys.InvalidCompositeKeyException(); + } + CryptographicBuffer.CopyToByteArray(decoded, out m_decoded); + m_enumerator = m_decoded.AsEnumerable().GetEnumerator(); + } + } + + + public override bool CanRead { get { return true; } } + public override bool CanSeek { get { return false; } } + public override bool CanTimeout { get { return false; } } + public override bool CanWrite { get { return false; } } + public override long Length + { + get + { + throw new System.NotSupportedException(); + } + } + + public override long Position { + get + { + throw new System.NotSupportedException(); + } + set + { + throw new System.NotSupportedException(); + } + } + + + public override void Flush() + { + Debug.Assert(false, "Not yet implemented"); + } + + + public override int Read(byte[] buffer, int offset, int count) + { + // Exceptions: + // System.ArgumentException: + // The sum of offset and count is larger than the buffer length. + // + // System.ArgumentNullException: + // buffer is null. + // + // System.ArgumentOutOfRangeException: + // offset or count is negative. + // + // System.IO.IOException: + // An I/O error occurs. + // + // System.NotSupportedException: + // The stream does not support reading. + // + // System.ObjectDisposedException: + // Methods were called after the stream was closed. + + if ((count <0) || (offset <0)) + throw new System.ArgumentOutOfRangeException(); + if (buffer == null) + throw new System.ArgumentNullException(); + if (m_enumerator == null) + throw new System.ArgumentNullException(); + + for (int i = 0; i < count; i++) + { + if (!m_enumerator.MoveNext()) + return i; + buffer[i + offset] = m_enumerator.Current; + } + return count; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new System.NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new System.NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new System.NotSupportedException(); + } + + } +} diff --git a/ModernKeePassLib/Serialization/FileLock.cs b/ModernKeePassLib/Serialization/FileLock.cs new file mode 100644 index 0000000..a598f6e --- /dev/null +++ b/ModernKeePassLib/Serialization/FileLock.cs @@ -0,0 +1,280 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Threading; +using System.Diagnostics; + +using ModernKeePassLib.Cryptography; +using ModernKeePassLib.Resources; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + public sealed class FileLockException : Exception + { + private readonly string m_strMsg; + + public override string Message + { + get { return m_strMsg; } + } + + public FileLockException(string strBaseFile, string strUser) + { + Debug.Assert(false, "Not yet implemented"); + return; +#if TODO + StringBuilder sb = new StringBuilder(); + + if(!string.IsNullOrEmpty(strBaseFile)) + { + sb.Append(strBaseFile); + sb.Append(MessageService.NewParagraph); + } + + sb.Append(KLRes.FileLockedWrite); + sb.Append(MessageService.NewLine); + + if(!string.IsNullOrEmpty(strUser)) sb.Append(strUser); + else sb.Append("?"); + + sb.Append(MessageService.NewParagraph); + sb.Append(KLRes.TryAgainSecs); + + m_strMsg = sb.ToString(); +#endif + } + } + + public sealed class FileLock : IDisposable + { + private const string LockFileExt = ".lock"; + private const string LockFileHeader = "KeePass Lock File"; + + private IOConnectionInfo m_iocLockFile; + + private sealed class LockFileInfo + { + public readonly string ID; + public readonly DateTime Time; + public readonly string UserName; + public readonly string Machine; + public readonly string Domain; + + private LockFileInfo(string strID, string strTime, string strUserName, + string strMachine, string strDomain) + { + this.ID = (strID ?? string.Empty).Trim(); + + DateTime dt; + if(TimeUtil.TryDeserializeUtc(strTime.Trim(), out dt)) + this.Time = dt; + else + { + Debug.Assert(false); + this.Time = DateTime.UtcNow; + } + + this.UserName = (strUserName ?? string.Empty).Trim(); + this.Machine = (strMachine ?? string.Empty).Trim(); + this.Domain = (strDomain ?? string.Empty).Trim(); + + if(this.Domain.Equals(this.Machine, StrUtil.CaseIgnoreCmp)) + this.Domain = string.Empty; + } + + public string GetOwner() + { + StringBuilder sb = new StringBuilder(); + sb.Append((this.UserName.Length > 0) ? this.UserName : "?"); + + bool bMachine = (this.Machine.Length > 0); + bool bDomain = (this.Domain.Length > 0); + if(bMachine || bDomain) + { + sb.Append(" ("); + sb.Append(this.Machine); + if(bMachine && bDomain) sb.Append(" @ "); + sb.Append(this.Domain); + sb.Append(")"); + } + + return sb.ToString(); + } + + public static LockFileInfo Load(IOConnectionInfo iocLockFile) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + Stream s = null; + try + { + s = IOConnection.OpenRead(iocLockFile); + if(s == null) return null; + StreamReader sr = new StreamReader(s, StrUtil.Utf8); + string str = sr.ReadToEnd(); + sr.Close(); + if(str == null) { Debug.Assert(false); return null; } + + str = StrUtil.NormalizeNewLines(str, false); + string[] v = str.Split('\n'); + if((v == null) || (v.Length < 6)) { Debug.Assert(false); return null; } + + if(!v[0].StartsWith(LockFileHeader)) { Debug.Assert(false); return null; } + return new LockFileInfo(v[1], v[2], v[3], v[4], v[5]); + } + catch(FileNotFoundException) { } + catch(Exception) { Debug.Assert(false); } + finally { if(s != null) s.Close(); } + + return null; +#endif + } + + // Throws on error + public static LockFileInfo Create(IOConnectionInfo iocLockFile) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + LockFileInfo lfi; + Stream s = null; + try + { + byte[] pbID = CryptoRandom.Instance.GetRandomBytes(16); + string strTime = TimeUtil.SerializeUtc(DateTime.Now); + +#if !KeePassLibSD && TODO + lfi = new LockFileInfo(Convert.ToBase64String(pbID), strTime, + Environment.UserName, Environment.MachineName, + Environment.UserDomainName); +#else + lfi = new LockFileInfo(Convert.ToBase64String(pbID), strTime, + string.Empty, string.Empty, string.Empty); +#endif + + StringBuilder sb = new StringBuilder(); +#if !KeePassLibSD && TODO + sb.AppendLine(LockFileHeader); + sb.AppendLine(lfi.ID); + sb.AppendLine(strTime); + sb.AppendLine(lfi.UserName); + sb.AppendLine(lfi.Machine); + sb.AppendLine(lfi.Domain); +#else + sb.Append(LockFileHeader + MessageService.NewLine); + sb.Append(lfi.ID + MessageService.NewLine); + sb.Append(strTime + MessageService.NewLine); + sb.Append(lfi.UserName + MessageService.NewLine); + sb.Append(lfi.Machine + MessageService.NewLine); + sb.Append(lfi.Domain + MessageService.NewLine); +#endif + + byte[] pbFile = StrUtil.Utf8.GetBytes(sb.ToString()); + + s = IOConnection.OpenWrite(iocLockFile); + if(s == null) throw new IOException(iocLockFile.GetDisplayName()); + s.Write(pbFile, 0, pbFile.Length); + } + finally { if(s != null) s.Close(); } + + return lfi; +#endif + } + } + + public FileLock(IOConnectionInfo iocBaseFile) + { + Debug.Assert(false, "not yet implemented"); + return ; +#if TODO + if(iocBaseFile == null) throw new ArgumentNullException("strBaseFile"); + + m_iocLockFile = iocBaseFile.CloneDeep(); + m_iocLockFile.Path += LockFileExt; + + LockFileInfo lfiEx = LockFileInfo.Load(m_iocLockFile); + if(lfiEx != null) + { + m_iocLockFile = null; // Otherwise Dispose deletes the existing one + throw new FileLockException(iocBaseFile.GetDisplayName(), + lfiEx.GetOwner()); + } + + LockFileInfo.Create(m_iocLockFile); +#endif + } + + ~FileLock() + { + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool bDisposing) + { + Debug.Assert(false, "not yet implemented"); + return ; +#if TODO + if(m_iocLockFile == null) return; + + bool bFileDeleted = false; + for(int r = 0; r < 5; ++r) + { + // if(!OwnLockFile()) { bFileDeleted = true; break; } + + try + { + IOConnection.DeleteFile(m_iocLockFile); + bFileDeleted = true; + } + catch(Exception) { Debug.Assert(false); } + + if(bFileDeleted) break; + + if(bDisposing) Thread.Sleep(50); + } + + if(bDisposing && !bFileDeleted) + IOConnection.DeleteFile(m_iocLockFile); // Possibly with exception + + m_iocLockFile = null; +#endif + } + + // private bool OwnLockFile() + // { + // if(m_iocLockFile == null) { Debug.Assert(false); return false; } + // if(m_strLockID == null) { Debug.Assert(false); return false; } + // LockFileInfo lfi = LockFileInfo.Load(m_iocLockFile); + // if(lfi == null) return false; + // return m_strLockID.Equals(lfi.ID); + // } + } +} diff --git a/ModernKeePassLib/Serialization/FileTransactionEx.cs b/ModernKeePassLib/Serialization/FileTransactionEx.cs new file mode 100644 index 0000000..b198d6b --- /dev/null +++ b/ModernKeePassLib/Serialization/FileTransactionEx.cs @@ -0,0 +1,148 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Diagnostics; + +// Bert TODO: For now, remove the accesscontrol from this class. +// In WinRT, the security of file has changed, and something could potentially be done +// http://msdn.microsoft.com/en-us/library/windows/desktop/aa364399%28v=vs.85%29.aspx + +#if !KeePassLibSD && TODO +using System.Security.AccessControl; +#endif + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + public sealed class FileTransactionEx + { + private bool m_bTransacted; + private IOConnectionInfo m_iocBase; + private IOConnectionInfo m_iocTemp; + + private bool m_bMadeUnhidden = false; + + private const string StrTempSuffix = ".tmp"; + + public FileTransactionEx(IOConnectionInfo iocBaseFile) + { + Initialize(iocBaseFile, true); + } + + public FileTransactionEx(IOConnectionInfo iocBaseFile, bool bTransacted) + { + Initialize(iocBaseFile, bTransacted); + } + + private void Initialize(IOConnectionInfo iocBaseFile, bool bTransacted) + { + if(iocBaseFile == null) throw new ArgumentNullException("iocBaseFile"); + + m_bTransacted = bTransacted; + m_iocBase = iocBaseFile.CloneDeep(); + + if(m_bTransacted) + { + m_iocTemp = m_iocBase.CloneDeep(); + m_iocTemp.Path += StrTempSuffix; + } + else m_iocTemp = m_iocBase; + } + + public Stream OpenWrite() + { + if(!m_bTransacted) m_bMadeUnhidden = UrlUtil.UnhideFile(m_iocTemp.Path); + else // m_bTransacted + { + try { IOConnection.DeleteFile(m_iocTemp); } + catch(Exception) { } + } + + return IOConnection.OpenWrite(m_iocTemp); + } + + public void CommitWrite() + { + if(m_bTransacted) CommitWriteTransaction(); + else // !m_bTransacted + { + if(m_bMadeUnhidden) UrlUtil.HideFile(m_iocTemp.Path, true); // Hide again + } + } + + private void CommitWriteTransaction() + { + bool bMadeUnhidden = UrlUtil.UnhideFile(m_iocBase.Path); + +#if !KeePassLibSD && TODO + FileSecurity bkSecurity = null; + bool bEfsEncrypted = false; +#endif + + if(IOConnection.FileExists(m_iocBase)) + { +#if !KeePassLibSD && TODO + if(m_iocBase.IsLocalFile()) + { + try + { + FileAttributes faBase = File.GetAttributes(m_iocBase.Path); + bEfsEncrypted = ((long)(faBase & FileAttributes.Encrypted) != 0); + + DateTime tCreation = File.GetCreationTime(m_iocBase.Path); + bkSecurity = File.GetAccessControl(m_iocBase.Path); + + File.SetCreationTime(m_iocTemp.Path, tCreation); + } + catch(Exception) { Debug.Assert(false); } + } +#endif + + IOConnection.DeleteFile(m_iocBase); + } + + IOConnection.RenameFile(m_iocTemp, m_iocBase); + +#if !KeePassLibSD && TODO + if(m_iocBase.IsLocalFile()) + { + try + { + if(bEfsEncrypted) + { + try { File.Encrypt(m_iocBase.Path); } + catch(Exception) { Debug.Assert(false); } + } + + if(bkSecurity != null) + File.SetAccessControl(m_iocBase.Path, bkSecurity); + } + catch(Exception) { Debug.Assert(false); } + } +#endif + + if(bMadeUnhidden) UrlUtil.HideFile(m_iocBase.Path, true); // Hide again + } + } +} diff --git a/ModernKeePassLib/Serialization/HashedBlockStream.cs b/ModernKeePassLib/Serialization/HashedBlockStream.cs new file mode 100644 index 0000000..6aa9960 --- /dev/null +++ b/ModernKeePassLib/Serialization/HashedBlockStream.cs @@ -0,0 +1,321 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.IO; +using System.Text; + +using ModernKeePassLib.Native; +using ModernKeePassLib.Utility; +using ModernKeePassLib.Cryptography; + +#if KeePassLibSD +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Serialization +{ + public sealed class HashedBlockStream : Stream + { + private const int m_nDefaultBufferSize = 1024 * 1024; // 1 MB + + private Stream m_sBaseStream; + private bool m_bWriting; + private bool m_bVerify; + private bool m_bEos = false; + + private BinaryReader m_brInput; + private BinaryWriter m_bwOutput; + + private byte[] m_pbBuffer; + private int m_nBufferPos = 0; + + private uint m_uBufferIndex = 0; + + public override bool CanRead + { + get { return !m_bWriting; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return m_bWriting; } + } + + public override long Length + { + get { throw new NotSupportedException(); } + } + + public override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public HashedBlockStream(Stream sBaseStream, bool bWriting) + { + Initialize(sBaseStream, bWriting, 0, true); + } + + public HashedBlockStream(Stream sBaseStream, bool bWriting, int nBufferSize) + { + Initialize(sBaseStream, bWriting, nBufferSize, true); + } + + public HashedBlockStream(Stream sBaseStream, bool bWriting, int nBufferSize, + bool bVerify) + { + Initialize(sBaseStream, bWriting, nBufferSize, bVerify); + } + + private void Initialize(Stream sBaseStream, bool bWriting, int nBufferSize, + bool bVerify) + { + if(sBaseStream == null) throw new ArgumentNullException("sBaseStream"); + if(nBufferSize < 0) throw new ArgumentOutOfRangeException("nBufferSize"); + + if(nBufferSize == 0) nBufferSize = m_nDefaultBufferSize; + + m_sBaseStream = sBaseStream; + m_bWriting = bWriting; + m_bVerify = bVerify; + + UTF8Encoding utf8 = StrUtil.Utf8; + if(m_bWriting == false) // Reading mode + { + if(m_sBaseStream.CanRead == false) + throw new InvalidOperationException(); + + m_brInput = new BinaryReader(sBaseStream, utf8); + + m_pbBuffer = new byte[0]; + } + else // Writing mode + { + if(m_sBaseStream.CanWrite == false) + throw new InvalidOperationException(); + + m_bwOutput = new BinaryWriter(sBaseStream, utf8); + + m_pbBuffer = new byte[nBufferSize]; + } + } + + public override void Flush() + { + if(m_bWriting) m_bwOutput.Flush(); + } + +#if TODO + public override void Close() + { + if(m_sBaseStream != null) + { + if(m_bWriting == false) // Reading mode + { + m_brInput.Close(); + m_brInput = null; + } + else // Writing mode + { + if(m_nBufferPos == 0) // No data left in buffer + WriteHashedBlock(); // Write terminating block + else + { + WriteHashedBlock(); // Write remaining buffered data + WriteHashedBlock(); // Write terminating block + } + + Flush(); + m_bwOutput.Close(); + m_bwOutput = null; + } + + m_sBaseStream.Close(); + m_sBaseStream = null; + } + } +#endif + + public override long Seek(long lOffset, SeekOrigin soOrigin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long lValue) + { + throw new NotSupportedException(); + } + + public override int Read(byte[] pbBuffer, int nOffset, int nCount) + { + if(m_bWriting) throw new InvalidOperationException(); + + int nRemaining = nCount; + while(nRemaining > 0) + { + if(m_nBufferPos == m_pbBuffer.Length) + { + if(ReadHashedBlock() == false) + return nCount - nRemaining; // Bytes actually read + } + + int nCopy = Math.Min(m_pbBuffer.Length - m_nBufferPos, nRemaining); + + Array.Copy(m_pbBuffer, m_nBufferPos, pbBuffer, nOffset, nCopy); + + nOffset += nCopy; + m_nBufferPos += nCopy; + + nRemaining -= nCopy; + } + + return nCount; + } + + private bool ReadHashedBlock() + { + if(m_bEos) return false; // End of stream reached already + + m_nBufferPos = 0; + + if(m_brInput.ReadUInt32() != m_uBufferIndex) + throw new InvalidDataException(); + ++m_uBufferIndex; + + byte[] pbStoredHash = m_brInput.ReadBytes(32); + if((pbStoredHash == null) || (pbStoredHash.Length != 32)) + throw new InvalidDataException(); + + int nBufferSize = 0; + try { nBufferSize = m_brInput.ReadInt32(); } + catch(NullReferenceException) // Mono bug workaround (LaunchPad 783268) + { + if(!NativeLib.IsUnix()) throw; + } + + if(nBufferSize < 0) + throw new InvalidDataException(); + + if(nBufferSize == 0) + { + for(int iHash = 0; iHash < 32; ++iHash) + { + if(pbStoredHash[iHash] != 0) + throw new InvalidDataException(); + } + + m_bEos = true; + m_pbBuffer = new byte[0]; + return false; + } + + m_pbBuffer = m_brInput.ReadBytes(nBufferSize); + if((m_pbBuffer == null) || ((m_pbBuffer.Length != nBufferSize) && m_bVerify)) + throw new InvalidDataException(); + + if(m_bVerify) + { + byte[] pbComputedHash = SHA256Managed.Instance.ComputeHash(m_pbBuffer); + if((pbComputedHash == null) || (pbComputedHash.Length != 32)) + throw new InvalidOperationException(); + + for(int iHashPos = 0; iHashPos < 32; ++iHashPos) + { + if(pbStoredHash[iHashPos] != pbComputedHash[iHashPos]) + throw new InvalidDataException(); + } + } + + + return true; + } + + public override void Write(byte[] pbBuffer, int nOffset, int nCount) + { + if(!m_bWriting) throw new InvalidOperationException(); + + while(nCount > 0) + { + if(m_nBufferPos == m_pbBuffer.Length) + WriteHashedBlock(); + + int nCopy = Math.Min(m_pbBuffer.Length - m_nBufferPos, nCount); + + Array.Copy(pbBuffer, nOffset, m_pbBuffer, m_nBufferPos, nCopy); + + nOffset += nCopy; + m_nBufferPos += nCopy; + + nCount -= nCopy; + } + } + + private void WriteHashedBlock() + { + Debug.Assert(false, "not yet implemented"); + return ; +#if TODO + m_bwOutput.Write(m_uBufferIndex); + ++m_uBufferIndex; + + if(m_nBufferPos > 0) + { + SHA256Managed sha256 = new SHA256Managed(); + +#if !KeePassLibSD + byte[] pbHash = sha256.ComputeHash(m_pbBuffer, 0, m_nBufferPos); +#else + byte[] pbHash; + if(m_nBufferPos == m_pbBuffer.Length) + pbHash = sha256.ComputeHash(m_pbBuffer); + else + { + byte[] pbData = new byte[m_nBufferPos]; + Array.Copy(m_pbBuffer, 0, pbData, 0, m_nBufferPos); + pbHash = sha256.ComputeHash(pbData); + } +#endif + + m_bwOutput.Write(pbHash); + } + else + { + m_bwOutput.Write((ulong)0); // Zero hash + m_bwOutput.Write((ulong)0); + m_bwOutput.Write((ulong)0); + m_bwOutput.Write((ulong)0); + } + + m_bwOutput.Write(m_nBufferPos); + + if(m_nBufferPos > 0) + m_bwOutput.Write(m_pbBuffer, 0, m_nBufferPos); + + m_nBufferPos = 0; +#endif + } + } +} diff --git a/ModernKeePassLib/Serialization/IOConnection.cs b/ModernKeePassLib/Serialization/IOConnection.cs new file mode 100644 index 0000000..ce0925c --- /dev/null +++ b/ModernKeePassLib/Serialization/IOConnection.cs @@ -0,0 +1,468 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using System.IO; + +using Windows.Storage.Streams; +using Windows.Storage; +// BERT TODO: For the time being, the web functionality is not available for WinRT + + +#if !KeePassLibSD && TODO +using System.Net.Cache; +using System.Net.Security; +#endif + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ +#if !KeePassLibSD && false + public sealed class IOWebClient : HttpClient + { + protected override WebRequest GetWebRequest(Uri address) + { + WebRequest request = base.GetWebRequest(address); + IOConnection.ConfigureWebRequest(request); + return request; + } + } +#endif + + public class IOConnection + { +#if !KeePassLibSD && TODO + private static ProxyServerType m_pstProxyType = ProxyServerType.System; + private static string m_strProxyAddr = string.Empty; + private static string m_strProxyPort = string.Empty; + private static string m_strProxyUserName = string.Empty; + private static string m_strProxyPassword = string.Empty; +#endif + + // Web request methods + public const string WrmDeleteFile = "DELETEFILE"; + public const string WrmMoveFile = "MOVEFILE"; + + // Web request headers + public const string WrhMoveFileTo = "MoveFileTo"; + +#if !KeePassLibSD && TODO + // Allow self-signed certificates, expired certificates, etc. + private static bool ValidateServerCertificate(object sender, + X509Certificate certificate, X509Chain chain, + SslPolicyErrors sslPolicyErrors) + { + return true; + } + + public static void SetProxy(ProxyServerType pst, string strAddr, + string strPort, string strUserName, string strPassword) + { + m_pstProxyType = pst; + m_strProxyAddr = (strAddr ?? string.Empty); + m_strProxyPort = (strPort ?? string.Empty); + m_strProxyUserName = (strUserName ?? string.Empty); + m_strProxyPassword = (strPassword ?? string.Empty); + } + + internal static void ConfigureWebRequest(WebRequest request) + { + if(request == null) { Debug.Assert(false); return; } // No throw + + // WebDAV support + if(request is HttpWebRequest) + { + request.PreAuthenticate = true; // Also auth GET + if(request.Method == WebRequestMethods.Http.Post) + request.Method = WebRequestMethods.Http.Put; + } + // else if(request is FtpWebRequest) + // { + // Debug.Assert(((FtpWebRequest)request).UsePassive); + // } + + // Not implemented and ignored in Mono < 2.10 + try + { + request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + } + catch(NotImplementedException) { } + catch(Exception) { Debug.Assert(false); } + + try + { + IWebProxy prx; + if(GetWebProxy(out prx)) request.Proxy = prx; + } + catch(Exception) { Debug.Assert(false); } + } + + internal static void ConfigureWebClient(WebClient wc) + { + // Not implemented and ignored in Mono < 2.10 + try + { + wc.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + } + catch(NotImplementedException) { } + catch(Exception) { Debug.Assert(false); } + + try + { + IWebProxy prx; + if(GetWebProxy(out prx)) wc.Proxy = prx; + } + catch(Exception) { Debug.Assert(false); } + } + + private static bool GetWebProxy(out IWebProxy prx) + { + prx = null; + + if(m_pstProxyType == ProxyServerType.None) + return true; // Use null proxy + if(m_pstProxyType == ProxyServerType.Manual) + { + try + { + if(m_strProxyPort.Length > 0) + prx = new WebProxy(m_strProxyAddr, int.Parse(m_strProxyPort)); + else prx = new WebProxy(m_strProxyAddr); + + if((m_strProxyUserName.Length > 0) || (m_strProxyPassword.Length > 0)) + prx.Credentials = new NetworkCredential(m_strProxyUserName, + m_strProxyPassword); + + return true; // Use manual proxy + } + catch(Exception exProxy) + { + string strInfo = m_strProxyAddr; + if(m_strProxyPort.Length > 0) strInfo += ":" + m_strProxyPort; + MessageService.ShowWarning(strInfo, exProxy.Message); + } + + return false; // Use default + } + + if((m_strProxyUserName.Length == 0) && (m_strProxyPassword.Length == 0)) + return false; // Use default proxy, no auth + + try + { + prx = WebRequest.DefaultWebProxy; + if(prx == null) prx = WebRequest.GetSystemWebProxy(); + if(prx == null) throw new InvalidOperationException(); + + prx.Credentials = new NetworkCredential(m_strProxyUserName, + m_strProxyPassword); + return true; + } + catch(Exception) { Debug.Assert(false); } + + return false; + } + + private static void PrepareWebAccess() + { + ServicePointManager.ServerCertificateValidationCallback = + ValidateServerCertificate; + } + + + + + private static WebRequest CreateWebRequest(IOConnectionInfo ioc) + { + PrepareWebAccess(); + + WebRequest req = WebRequest.Create(ioc.Path); + ConfigureWebRequest(req); + + if((ioc.UserName.Length > 0) || (ioc.Password.Length > 0)) + req.Credentials = new NetworkCredential(ioc.UserName, ioc.Password); + else if(NativeLib.IsUnix()) // Mono requires credentials + req.Credentials = new NetworkCredential("anonymous", string.Empty); + + return req; + } +#endif + + private async Task OpenReadHttp(IOConnectionInfo ioc) + { + + // TODO: Configure the httpClient + // PrepareWebAccess(); + // ConfigureWebClient(wc); + + HttpClient hc = new HttpClient(); + HttpResponseMessage response = await hc.GetAsync(ioc.Path); + response.EnsureSuccessStatusCode(); + + // Read content into buffer + // Not the most efficient thing to do, + // but simplifies our life by allowing to use stream.length later on. + await response.Content.LoadIntoBufferAsync(); + return await response.Content.ReadAsStreamAsync(); +#if false + if((ioc.UserName.Length > 0) || (ioc.Password.Length > 0)) + wc.Credentials = new NetworkCredential(ioc.UserName, ioc.Password); + else if(NativeLib.IsUnix()) // Mono requires credentials + wc.Credentials = new NetworkCredential("anonymous", string.Empty); +#endif + } + + + public async Task OpenRead(IOConnectionInfo ioc) + { + if(StrUtil.IsDataUri(ioc.Path)) + { + byte[] pbData = StrUtil.DataUriToData(ioc.Path); + if(pbData != null) return new MemoryStream(pbData, false); + } + + if(ioc.IsLocalFile()) return await OpenReadLocal(ioc); + + + return await OpenReadHttp(ioc); + } + + + private async Task OpenReadLocal(IOConnectionInfo ioc) + { + try + { + var sampleFile = await StorageFile.GetFileFromPathAsync(ioc.Path); + using (IRandomAccessStream stream = await sampleFile.OpenAsync(FileAccessMode.Read)) + { + return stream.AsStream(); + } + } + catch + { + Debug.Assert(false, "Not implemented yet"); + return null; + } + } + +#if !KeePassLibSD && TODO + public static Stream OpenWrite(IOConnectionInfo ioc) + { + if(ioc == null) { Debug.Assert(false); return null; } + + if(ioc.IsLocalFile()) return OpenWriteLocal(ioc); + + Uri uri = new Uri(ioc.Path); + + // Mono does not set HttpWebRequest.Method to POST for writes, + // so one needs to set the method to PUT explicitly + if(NativeLib.IsUnix() && (uri.Scheme.Equals(Uri.UriSchemeHttp, + StrUtil.CaseIgnoreCmp) || uri.Scheme.Equals(Uri.UriSchemeHttps, + StrUtil.CaseIgnoreCmp))) + return CreateWebClient(ioc).OpenWrite(uri, WebRequestMethods.Http.Put); + + return CreateWebClient(ioc).OpenWrite(uri); + } +#else + public static Stream OpenWrite(IOConnectionInfo ioc) + { + return OpenWriteLocal(ioc); + } +#endif + + private static Stream OpenWriteLocal(IOConnectionInfo ioc) + { + Debug.Assert(false, "Not implemented yet"); + return null; + // return new FileStream(ioc.Path, FileMode.Create, FileAccess.Write, + // FileShare.None); + } + + public static bool FileExists(IOConnectionInfo ioc) + { + return FileExists(ioc, false); + } + + public static bool FileExists(IOConnectionInfo ioc, bool bThrowErrors) + { + Debug.Assert(false, "Not implemented yet"); + return false; +#if TODO + + if(ioc == null) { Debug.Assert(false); return false; } + + if(ioc.IsLocalFile()) return File.Exists(ioc.Path); + + try + { + Stream s = OpenRead(ioc); + if(s == null) throw new FileNotFoundException(); + + // For FTP clients we called RETR to get the file, but we never + // followed-up and downloaded the file; close may produce a + // 550 error -- that's okay + try { s.Close(); } + catch(Exception) { } + } + catch(Exception) + { + if(bThrowErrors) throw; + return false; + } + + return true; +#endif + } + + public static void DeleteFile(IOConnectionInfo ioc) + { + Debug.Assert(false, "Not implemented yet"); + return ; +#if TODO + if(ioc.IsLocalFile()) { File.Delete(ioc.Path); return; } + +#if !KeePassLibSD && TODO + WebRequest req = CreateWebRequest(ioc); + if(req != null) + { + if(req is HttpWebRequest) req.Method = "DELETE"; + else if(req is FtpWebRequest) req.Method = WebRequestMethods.Ftp.DeleteFile; + else if(req is FileWebRequest) + { + File.Delete(UrlUtil.FileUrlToPath(ioc.Path)); + return; + } + else req.Method = WrmDeleteFile; + + DisposeResponse(req.GetResponse(), true); + } +#endif +#endif + } + + /// + /// Rename/move a file. For local file system and WebDAV, the + /// specified file is moved, i.e. the file destination can be + /// in a different directory/path. In contrast, for FTP the + /// file is renamed, i.e. its destination must be in the same + /// directory/path. + /// + /// Source file path. + /// Target file path. + public static void RenameFile(IOConnectionInfo iocFrom, IOConnectionInfo iocTo) + { + return; +#if TODO + if(iocFrom.IsLocalFile()) { File.Move(iocFrom.Path, iocTo.Path); return; } + +#if !KeePassLibSD && TODO + WebRequest req = CreateWebRequest(iocFrom); + if(req != null) + { + if(req is HttpWebRequest) + { + req.Method = "MOVE"; + req.Headers.Set("Destination", iocTo.Path); // Full URL supported + } + else if(req is FtpWebRequest) + { + req.Method = WebRequestMethods.Ftp.Rename; + ((FtpWebRequest)req).RenameTo = UrlUtil.GetFileName(iocTo.Path); + } + else if(req is FileWebRequest) + { + File.Move(UrlUtil.FileUrlToPath(iocFrom.Path), + UrlUtil.FileUrlToPath(iocTo.Path)); + return; + } + else + { + req.Method = WrmMoveFile; + req.Headers.Set(WrhMoveFileTo, iocTo.Path); + } + + DisposeResponse(req.GetResponse(), true); + } +#endif + + // using(Stream sIn = IOConnection.OpenRead(iocFrom)) + // { + // using(Stream sOut = IOConnection.OpenWrite(iocTo)) + // { + // MemUtil.CopyStream(sIn, sOut); + // sOut.Close(); + // } + // + // sIn.Close(); + // } + // DeleteFile(iocFrom); +#endif + } + + private static void DisposeResponse(WebResponse wr, bool bGetStream) + { + Debug.Assert(false, "Not implemented yet"); + return; +#if TODO + if(wr == null) return; + + try + { + if(bGetStream) + { + Stream s = wr.GetResponseStream(); + if(s != null) s.Close(); + } + } + catch(Exception) { Debug.Assert(false); } + + try { wr.Close(); } + catch(Exception) { Debug.Assert(false); } + } + + public static byte[] ReadFile(IOConnectionInfo ioc) + { + Stream sIn = null; + MemoryStream ms = null; + try + { + sIn = IOConnection.OpenRead(ioc); + if(sIn == null) return null; + + ms = new MemoryStream(); + MemUtil.CopyStream(sIn, ms); + + return ms.ToArray(); + } + catch(Exception) { } + finally + { + if(sIn != null) sIn.Close(); + if(ms != null) ms.Close(); + } + + return null; +#endif + } + } +} diff --git a/ModernKeePassLib/Serialization/IOConnectionInfo.cs b/ModernKeePassLib/Serialization/IOConnectionInfo.cs new file mode 100644 index 0000000..6ee763a --- /dev/null +++ b/ModernKeePassLib/Serialization/IOConnectionInfo.cs @@ -0,0 +1,355 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Net; +using System.ComponentModel; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + public enum IOCredSaveMode + { + /// + /// Do not remember user name or password. + /// + NoSave = 0, + + /// + /// Remember the user name only, not the password. + /// + UserNameOnly, + + /// + /// Save both user name and password. + /// + SaveCred + } + + public enum IOCredProtMode + { + None = 0, + Obf + } + + /* public enum IOFileFormatHint + { + None = 0, + Deprecated + } */ + + public sealed class IOConnectionInfo : IDeepCloneable + { + // private IOFileFormatHint m_ioHint = IOFileFormatHint.None; + + private string m_strUrl = string.Empty; + public string Path + { + get { return m_strUrl; } + set + { + Debug.Assert(value != null); + if(value == null) throw new ArgumentNullException("value"); + + m_strUrl = value; + } + } + + private string m_strUser = string.Empty; + [DefaultValue("")] + public string UserName + { + get { return m_strUser; } + set + { + Debug.Assert(value != null); + if(value == null) throw new ArgumentNullException("value"); + + m_strUser = value; + } + } + + private string m_strPassword = string.Empty; + [DefaultValue("")] + public string Password + { + get { return m_strPassword; } + set + { + Debug.Assert(value != null); + if(value == null) throw new ArgumentNullException("value"); + + m_strPassword = value; + } + } + + private IOCredProtMode m_ioCredProtMode = IOCredProtMode.None; + public IOCredProtMode CredProtMode + { + get { return m_ioCredProtMode; } + set { m_ioCredProtMode = value; } + } + + private IOCredSaveMode m_ioCredSaveMode = IOCredSaveMode.NoSave; + public IOCredSaveMode CredSaveMode + { + get { return m_ioCredSaveMode; } + set { m_ioCredSaveMode = value; } + } + + /* public IOFileFormatHint FileFormatHint + { + get { return m_ioHint; } + set { m_ioHint = value; } + } */ + + public IOConnectionInfo CloneDeep() + { + return (IOConnectionInfo)this.MemberwiseClone(); + } + + /* + /// + /// Serialize the current connection info to a string. Credentials + /// are only serialized if the SaveCredentials property + /// is true. + /// + /// Input object to be serialized. + /// Serialized object as string. + public static string SerializeToString(IOConnectionInfo iocToCompile) + { + Debug.Assert(iocToCompile != null); + if(iocToCompile == null) throw new ArgumentNullException("iocToCompile"); + + string strUrl = iocToCompile.Path; + string strUser = TransformUnreadable(iocToCompile.UserName, true); + string strPassword = TransformUnreadable(iocToCompile.Password, true); + string strAll = strUrl + strUser + strPassword; + char chSep = char.MinValue; + + char[] vPrefSeps = new char[]{ '@', '#', '!', '$', '*' }; + foreach(char ch in vPrefSeps) + { + if(strAll.IndexOf(ch) < 0) + { + chSep = ch; + break; + } + } + + if(chSep == char.MinValue) + { + for(char chEnum = '!'; chEnum < char.MaxValue; ++chEnum) + { + if(strAll.IndexOf(chEnum) < 0) + { + chSep = chEnum; + break; + } + } + } + + if(chSep == char.MinValue) throw new FormatException(); + + StringBuilder sb = new StringBuilder(); + sb.Append(chSep); + sb.Append(strUrl); + sb.Append(chSep); + + if(iocToCompile.CredSaveMode == IOCredSaveMode.SaveCred) + { + sb.Append('C'); + sb.Append(chSep); + sb.Append(strUser); + sb.Append(chSep); + sb.Append(strPassword); + } + else if(iocToCompile.CredSaveMode == IOCredSaveMode.UserNameOnly) + { + sb.Append('U'); + sb.Append(chSep); + sb.Append(strUser); + sb.Append(chSep); + } + else // Don't remember credentials + { + sb.Append('N'); + sb.Append(chSep); + sb.Append(chSep); + } + + return sb.ToString(); + } + + public static IOConnectionInfo UnserializeFromString(string strToDecompile) + { + Debug.Assert(strToDecompile != null); + if(strToDecompile == null) throw new ArgumentNullException("strToDecompile"); + if(strToDecompile.Length <= 1) throw new ArgumentException(); + + char chSep = strToDecompile[0]; + string[] vParts = strToDecompile.Substring(1, strToDecompile.Length - + 1).Split(new char[]{ chSep }); + if(vParts.Length < 4) throw new ArgumentException(); + + IOConnectionInfo s = new IOConnectionInfo(); + s.Path = vParts[0]; + + if(vParts[1] == "C") + s.CredSaveMode = IOCredSaveMode.SaveCred; + else if(vParts[1] == "U") + s.CredSaveMode = IOCredSaveMode.UserNameOnly; + else + s.CredSaveMode = IOCredSaveMode.NoSave; + + s.UserName = TransformUnreadable(vParts[2], false); + s.Password = TransformUnreadable(vParts[3], false); + return s; + } + */ + + /* + /// + /// Very simple string protection. Doesn't really encrypt the input + /// string, only encodes it that it's not readable on the first glance. + /// + /// The string to encode/decode. + /// If true, the string will be encoded, + /// otherwise it'll be decoded. + /// Encoded/decoded string. + private static string TransformUnreadable(string strToEncode, bool bEncode) + { + Debug.Assert(strToEncode != null); + if(strToEncode == null) throw new ArgumentNullException("strToEncode"); + + if(bEncode) + { + byte[] pbUtf8 = StrUtil.Utf8.GetBytes(strToEncode); + + unchecked + { + for(int iPos = 0; iPos < pbUtf8.Length; ++iPos) + pbUtf8[iPos] += (byte)(iPos * 11); + } + + return Convert.ToBase64String(pbUtf8); + } + else // Decode + { + byte[] pbBase = Convert.FromBase64String(strToEncode); + + unchecked + { + for(int iPos = 0; iPos < pbBase.Length; ++iPos) + pbBase[iPos] -= (byte)(iPos * 11); + } + + return StrUtil.Utf8.GetString(pbBase, 0, pbBase.Length); + } + } + */ + + public string GetDisplayName() + { + string str = m_strUrl; + + if(m_strUser.Length > 0) + str += @": " + m_strUser; + + return str; + } + + public bool IsEmpty() + { + return (m_strUrl.Length > 0); + } + + public static IOConnectionInfo FromPath(string strPath) + { + IOConnectionInfo ioc = new IOConnectionInfo(); + + ioc.Path = strPath; + ioc.CredSaveMode = IOCredSaveMode.NoSave; + + return ioc; + } + + public bool CanProbablyAccess() + { + Debug.Assert(false, "not yet implemented"); + return false; +#if TODO + if(IsLocalFile()) return File.Exists(m_strUrl); + + return true; +#endif + } + + public bool IsLocalFile() + { + return (m_strUrl.IndexOf(@"://") < 0); + } + + public void ClearCredentials(bool bDependingOnRememberMode) + { + if((bDependingOnRememberMode == false) || + (m_ioCredSaveMode == IOCredSaveMode.NoSave)) + { + m_strUser = string.Empty; + } + + if((bDependingOnRememberMode == false) || + (m_ioCredSaveMode == IOCredSaveMode.NoSave) || + (m_ioCredSaveMode == IOCredSaveMode.UserNameOnly)) + { + m_strPassword = string.Empty; + } + } + + public void Obfuscate(bool bObf) + { + if(bObf && (m_ioCredProtMode == IOCredProtMode.None)) + { + m_strPassword = StrUtil.Obfuscate(m_strPassword); + m_ioCredProtMode = IOCredProtMode.Obf; + } + else if(!bObf && (m_ioCredProtMode == IOCredProtMode.Obf)) + { + m_strPassword = StrUtil.Deobfuscate(m_strPassword); + m_ioCredProtMode = IOCredProtMode.None; + } + } + + public override bool Equals(object obj) + { + if (!(obj is IOConnectionInfo)) return false; + IOConnectionInfo ioc = obj as IOConnectionInfo; + if (ioc.Path != this.Path) return false; + if (ioc.UserName != this.UserName) return false; + if (ioc.Password != this.Password) return false; + return true; + } + } +} diff --git a/ModernKeePassLib/Serialization/Kdb4File.Read.Streamed.cs b/ModernKeePassLib/Serialization/Kdb4File.Read.Streamed.cs new file mode 100644 index 0000000..30d85a2 --- /dev/null +++ b/ModernKeePassLib/Serialization/Kdb4File.Read.Streamed.cs @@ -0,0 +1,862 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +//using System.Drawing; +using System.Xml; +using System.IO; +using ModernKeePassLib.Collections; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + public sealed partial class Kdb4File + { + private enum KdbContext + { + Null, + KeePassFile, + Meta, + Root, + MemoryProtection, + CustomIcons, + CustomIcon, + Binaries, + CustomData, + CustomDataItem, + RootDeletedObjects, + DeletedObject, + Group, + GroupTimes, + Entry, + EntryTimes, + EntryString, + EntryBinary, + EntryAutoType, + EntryAutoTypeItem, + EntryHistory + } + + private bool m_bReadNextNode = true; + private Stack m_ctxGroups = new Stack(); + private PwGroup m_ctxGroup = null; + private PwEntry m_ctxEntry = null; + private string m_ctxStringName = null; + private ProtectedString m_ctxStringValue = null; + private string m_ctxBinaryName = null; + private ProtectedBinary m_ctxBinaryValue = null; + private string m_ctxATName = null; + private string m_ctxATSeq = null; + private bool m_bEntryInHistory = false; + private PwEntry m_ctxHistoryBase = null; + private PwDeletedObject m_ctxDeletedObject = null; + private PwUuid m_uuidCustomIconID = PwUuid.Zero; + private byte[] m_pbCustomIconData = null; + private string m_strCustomDataKey = null; + private string m_strCustomDataValue = null; + + private void ReadXmlStreamed(Stream readerStream, Stream sParentStream) + { + ReadDocumentStreamed(CreateXmlReader(readerStream), sParentStream); + } + + internal static XmlReaderSettings CreateStdXmlReaderSettings() + { + XmlReaderSettings xrs = new XmlReaderSettings(); + + xrs.CloseInput = true; + xrs.IgnoreComments = true; + xrs.IgnoreProcessingInstructions = true; + xrs.IgnoreWhitespace = true; + +#if !KeePassLibSD && TODO + xrs.ProhibitDtd = true; +#endif + +#if TODO + xrs.ValidationType = ValidationType.None; +#endif + return xrs; + } + + private static XmlReader CreateXmlReader(Stream readerStream) + { + XmlReaderSettings xrs = CreateStdXmlReaderSettings(); + return XmlReader.Create(readerStream, xrs); + } + + private void ReadDocumentStreamed(XmlReader xr, Stream sParentStream) + { + Debug.Assert(xr != null); + if(xr == null) throw new ArgumentNullException("xr"); + + m_ctxGroups.Clear(); + m_dictBinPool = new Dictionary(); + + KdbContext ctx = KdbContext.Null; + + uint uTagCounter = 0; + + bool bSupportsStatus = (m_slLogger != null); + long lStreamLength = 1; + try + { + sParentStream.Position.ToString(); // Test Position support + lStreamLength = sParentStream.Length; + } + catch(Exception) { bSupportsStatus = false; } + if(lStreamLength <= 0) { Debug.Assert(false); lStreamLength = 1; } + + m_bReadNextNode = true; + + while(true) + { + if(m_bReadNextNode) + { + if(!xr.Read()) break; + } + else m_bReadNextNode = true; + + switch(xr.NodeType) + { + case XmlNodeType.Element: + ctx = ReadXmlElement(ctx, xr); + break; + + case XmlNodeType.EndElement: + ctx = EndXmlElement(ctx, xr); + break; + + case XmlNodeType.XmlDeclaration: + break; // Ignore + + default: + Debug.Assert(false); + break; + } + + ++uTagCounter; + if(((uTagCounter % 256) == 0) && bSupportsStatus) + { + Debug.Assert(lStreamLength == sParentStream.Length); + uint uPct = (uint)((sParentStream.Position * 100) / + lStreamLength); + + // Clip percent value in case the stream reports incorrect + // position/length values (M120413) + if(uPct > 100) { Debug.Assert(false); uPct = 100; } + + m_slLogger.SetProgress(uPct); + } + } + + Debug.Assert(ctx == KdbContext.Null); + if(ctx != KdbContext.Null) throw new FormatException(); + + Debug.Assert(m_ctxGroups.Count == 0); + if(m_ctxGroups.Count != 0) throw new FormatException(); + } + + private KdbContext ReadXmlElement(KdbContext ctx, XmlReader xr) + { + Debug.Assert(xr.NodeType == XmlNodeType.Element); + + switch(ctx) + { + case KdbContext.Null: + if(xr.Name == ElemDocNode) + return SwitchContext(ctx, KdbContext.KeePassFile, xr); + else ReadUnknown(xr); + break; + + case KdbContext.KeePassFile: + if(xr.Name == ElemMeta) + return SwitchContext(ctx, KdbContext.Meta, xr); + else if(xr.Name == ElemRoot) + return SwitchContext(ctx, KdbContext.Root, xr); + else ReadUnknown(xr); + break; + + case KdbContext.Meta: + if(xr.Name == ElemGenerator) + ReadString(xr); // Ignore + else if(xr.Name == ElemDbName) + m_pwDatabase.Name = ReadString(xr); + else if(xr.Name == ElemDbNameChanged) + m_pwDatabase.NameChanged = ReadTime(xr); + else if(xr.Name == ElemDbDesc) + m_pwDatabase.Description = ReadString(xr); + else if(xr.Name == ElemDbDescChanged) + m_pwDatabase.DescriptionChanged = ReadTime(xr); + else if(xr.Name == ElemDbDefaultUser) + m_pwDatabase.DefaultUserName = ReadString(xr); + else if(xr.Name == ElemDbDefaultUserChanged) + m_pwDatabase.DefaultUserNameChanged = ReadTime(xr); + else if(xr.Name == ElemDbMntncHistoryDays) + m_pwDatabase.MaintenanceHistoryDays = ReadUInt(xr, 365); + else if(xr.Name == ElemDbColor) + { + string strColor = ReadString(xr); +#if TODO + if(!string.IsNullOrEmpty(strColor)) + m_pwDatabase.Color = ColorTranslator.FromHtml(strColor); +#endif + } + else if(xr.Name == ElemDbKeyChanged) + m_pwDatabase.MasterKeyChanged = ReadTime(xr); + else if(xr.Name == ElemDbKeyChangeRec) + m_pwDatabase.MasterKeyChangeRec = ReadLong(xr, -1); + else if(xr.Name == ElemDbKeyChangeForce) + m_pwDatabase.MasterKeyChangeForce = ReadLong(xr, -1); + else if(xr.Name == ElemMemoryProt) + return SwitchContext(ctx, KdbContext.MemoryProtection, xr); + else if(xr.Name == ElemCustomIcons) + return SwitchContext(ctx, KdbContext.CustomIcons, xr); + else if(xr.Name == ElemRecycleBinEnabled) + m_pwDatabase.RecycleBinEnabled = ReadBool(xr, true); + else if(xr.Name == ElemRecycleBinUuid) + m_pwDatabase.RecycleBinUuid = ReadUuid(xr); + else if(xr.Name == ElemRecycleBinChanged) + m_pwDatabase.RecycleBinChanged = ReadTime(xr); + else if(xr.Name == ElemEntryTemplatesGroup) + m_pwDatabase.EntryTemplatesGroup = ReadUuid(xr); + else if(xr.Name == ElemEntryTemplatesGroupChanged) + m_pwDatabase.EntryTemplatesGroupChanged = ReadTime(xr); + else if(xr.Name == ElemHistoryMaxItems) + m_pwDatabase.HistoryMaxItems = ReadInt(xr, -1); + else if(xr.Name == ElemHistoryMaxSize) + m_pwDatabase.HistoryMaxSize = ReadLong(xr, -1); + else if(xr.Name == ElemLastSelectedGroup) + m_pwDatabase.LastSelectedGroup = ReadUuid(xr); + else if(xr.Name == ElemLastTopVisibleGroup) + m_pwDatabase.LastTopVisibleGroup = ReadUuid(xr); + else if(xr.Name == ElemBinaries) + return SwitchContext(ctx, KdbContext.Binaries, xr); + else if(xr.Name == ElemCustomData) + return SwitchContext(ctx, KdbContext.CustomData, xr); + else ReadUnknown(xr); + break; + + case KdbContext.MemoryProtection: + if(xr.Name == ElemProtTitle) + m_pwDatabase.MemoryProtection.ProtectTitle = ReadBool(xr, false); + else if(xr.Name == ElemProtUserName) + m_pwDatabase.MemoryProtection.ProtectUserName = ReadBool(xr, false); + else if(xr.Name == ElemProtPassword) + m_pwDatabase.MemoryProtection.ProtectPassword = ReadBool(xr, true); + else if(xr.Name == ElemProtUrl) + m_pwDatabase.MemoryProtection.ProtectUrl = ReadBool(xr, false); + else if(xr.Name == ElemProtNotes) + m_pwDatabase.MemoryProtection.ProtectNotes = ReadBool(xr, false); + // else if(xr.Name == ElemProtAutoHide) + // m_pwDatabase.MemoryProtection.AutoEnableVisualHiding = ReadBool(xr, true); + else ReadUnknown(xr); + break; + + case KdbContext.CustomIcons: + if(xr.Name == ElemCustomIconItem) + return SwitchContext(ctx, KdbContext.CustomIcon, xr); + else ReadUnknown(xr); + break; + + case KdbContext.CustomIcon: + if(xr.Name == ElemCustomIconItemID) + m_uuidCustomIconID = ReadUuid(xr); + else if(xr.Name == ElemCustomIconItemData) + { + string strData = ReadString(xr); + if(!string.IsNullOrEmpty(strData)) + m_pbCustomIconData = Convert.FromBase64String(strData); + else { Debug.Assert(false); } + } + else ReadUnknown(xr); + break; + + case KdbContext.Binaries: + if(xr.Name == ElemBinary) + { + if(xr.MoveToAttribute(AttrId)) + { + string strKey = xr.Value; + ProtectedBinary pbData = ReadProtectedBinary(xr); + + m_dictBinPool[strKey ?? string.Empty] = pbData; + } + else ReadUnknown(xr); + } + else ReadUnknown(xr); + break; + + case KdbContext.CustomData: + if(xr.Name == ElemStringDictExItem) + return SwitchContext(ctx, KdbContext.CustomDataItem, xr); + else ReadUnknown(xr); + break; + + case KdbContext.CustomDataItem: + if(xr.Name == ElemKey) + m_strCustomDataKey = ReadString(xr); + else if(xr.Name == ElemValue) + m_strCustomDataValue = ReadString(xr); + else ReadUnknown(xr); + break; + + case KdbContext.Root: + if(xr.Name == ElemGroup) + { + Debug.Assert(m_ctxGroups.Count == 0); + if(m_ctxGroups.Count != 0) throw new FormatException(); + + m_pwDatabase.RootGroup = new PwGroup(false, false); + m_ctxGroups.Push(m_pwDatabase.RootGroup); + m_ctxGroup = m_ctxGroups.Peek(); + + return SwitchContext(ctx, KdbContext.Group, xr); + } + else if(xr.Name == ElemDeletedObjects) + return SwitchContext(ctx, KdbContext.RootDeletedObjects, xr); + else ReadUnknown(xr); + break; + + case KdbContext.Group: + if(xr.Name == ElemUuid) + m_ctxGroup.Uuid = ReadUuid(xr); + else if(xr.Name == ElemName) + m_ctxGroup.Name = ReadString(xr); + else if(xr.Name == ElemNotes) + m_ctxGroup.Notes = ReadString(xr); + else if(xr.Name == ElemIcon) + m_ctxGroup.IconId = (PwIcon)ReadInt(xr, (int)PwIcon.Folder); + else if(xr.Name == ElemCustomIconID) + m_ctxGroup.CustomIconUuid = ReadUuid(xr); + else if(xr.Name == ElemTimes) + return SwitchContext(ctx, KdbContext.GroupTimes, xr); + else if(xr.Name == ElemIsExpanded) + m_ctxGroup.IsExpanded = ReadBool(xr, true); + else if(xr.Name == ElemGroupDefaultAutoTypeSeq) + m_ctxGroup.DefaultAutoTypeSequence = ReadString(xr); + else if(xr.Name == ElemEnableAutoType) + m_ctxGroup.EnableAutoType = StrUtil.StringToBoolEx(ReadString(xr)); + else if(xr.Name == ElemEnableSearching) + m_ctxGroup.EnableSearching = StrUtil.StringToBoolEx(ReadString(xr)); + else if(xr.Name == ElemLastTopVisibleEntry) + m_ctxGroup.LastTopVisibleEntry = ReadUuid(xr); + else if(xr.Name == ElemGroup) + { + m_ctxGroup = new PwGroup(false, false); + m_ctxGroups.Peek().AddGroup(m_ctxGroup, true); + + m_ctxGroups.Push(m_ctxGroup); + + return SwitchContext(ctx, KdbContext.Group, xr); + } + else if(xr.Name == ElemEntry) + { + m_ctxEntry = new PwEntry(false, false); + m_ctxGroup.AddEntry(m_ctxEntry, true); + + m_bEntryInHistory = false; + return SwitchContext(ctx, KdbContext.Entry, xr); + } + else ReadUnknown(xr); + break; + + case KdbContext.Entry: + if(xr.Name == ElemUuid) + m_ctxEntry.Uuid = ReadUuid(xr); + else if(xr.Name == ElemIcon) + m_ctxEntry.IconId = (PwIcon)ReadInt(xr, (int)PwIcon.Key); + else if(xr.Name == ElemCustomIconID) + m_ctxEntry.CustomIconUuid = ReadUuid(xr); + else if(xr.Name == ElemFgColor) + { + string strColor = ReadString(xr); +#if TODO + if(!string.IsNullOrEmpty(strColor)) + m_ctxEntry.ForegroundColor = ColorTranslator.FromHtml(strColor); +#endif + } + else if(xr.Name == ElemBgColor) + { + + string strColor = ReadString(xr); +#if TODO + if(!string.IsNullOrEmpty(strColor)) + m_ctxEntry.BackgroundColor = ColorTranslator.FromHtml(strColor); +#endif + } + else if(xr.Name == ElemOverrideUrl) + m_ctxEntry.OverrideUrl = ReadString(xr); + else if(xr.Name == ElemTags) + m_ctxEntry.Tags = StrUtil.StringToTags(ReadString(xr)); + else if(xr.Name == ElemTimes) + return SwitchContext(ctx, KdbContext.EntryTimes, xr); + else if(xr.Name == ElemString) + return SwitchContext(ctx, KdbContext.EntryString, xr); + else if(xr.Name == ElemBinary) + return SwitchContext(ctx, KdbContext.EntryBinary, xr); + else if(xr.Name == ElemAutoType) + return SwitchContext(ctx, KdbContext.EntryAutoType, xr); + else if(xr.Name == ElemHistory) + { + Debug.Assert(m_bEntryInHistory == false); + + if(m_bEntryInHistory == false) + { + m_ctxHistoryBase = m_ctxEntry; + return SwitchContext(ctx, KdbContext.EntryHistory, xr); + } + else ReadUnknown(xr); + } + else ReadUnknown(xr); + break; + + case KdbContext.GroupTimes: + case KdbContext.EntryTimes: + ITimeLogger tl = ((ctx == KdbContext.GroupTimes) ? + (ITimeLogger)m_ctxGroup : (ITimeLogger)m_ctxEntry); + Debug.Assert(tl != null); + + if(xr.Name == ElemLastModTime) + tl.LastModificationTime = ReadTime(xr); + else if(xr.Name == ElemCreationTime) + tl.CreationTime = ReadTime(xr); + else if(xr.Name == ElemLastAccessTime) + tl.LastAccessTime = ReadTime(xr); + else if(xr.Name == ElemExpiryTime) + tl.ExpiryTime = ReadTime(xr); + else if(xr.Name == ElemExpires) + tl.Expires = ReadBool(xr, false); + else if(xr.Name == ElemUsageCount) + tl.UsageCount = ReadULong(xr, 0); + else if(xr.Name == ElemLocationChanged) + tl.LocationChanged = ReadTime(xr); + else ReadUnknown(xr); + break; + + case KdbContext.EntryString: + if(xr.Name == ElemKey) + m_ctxStringName = ReadString(xr); + else if(xr.Name == ElemValue) + m_ctxStringValue = ReadProtectedString(xr); + else ReadUnknown(xr); + break; + + case KdbContext.EntryBinary: + if(xr.Name == ElemKey) + m_ctxBinaryName = ReadString(xr); + else if(xr.Name == ElemValue) + m_ctxBinaryValue = ReadProtectedBinary(xr); + else ReadUnknown(xr); + break; + + case KdbContext.EntryAutoType: + if(xr.Name == ElemAutoTypeEnabled) + m_ctxEntry.AutoType.Enabled = ReadBool(xr, true); + else if(xr.Name == ElemAutoTypeObfuscation) + m_ctxEntry.AutoType.ObfuscationOptions = + (AutoTypeObfuscationOptions)ReadInt(xr, 0); + else if(xr.Name == ElemAutoTypeDefaultSeq) + m_ctxEntry.AutoType.DefaultSequence = ReadString(xr); + else if(xr.Name == ElemAutoTypeItem) + return SwitchContext(ctx, KdbContext.EntryAutoTypeItem, xr); + else ReadUnknown(xr); + break; + + case KdbContext.EntryAutoTypeItem: + if(xr.Name == ElemWindow) + m_ctxATName = ReadString(xr); + else if(xr.Name == ElemKeystrokeSequence) + m_ctxATSeq = ReadString(xr); + else ReadUnknown(xr); + break; + + case KdbContext.EntryHistory: + if(xr.Name == ElemEntry) + { + m_ctxEntry = new PwEntry(false, false); + m_ctxHistoryBase.History.Add(m_ctxEntry); + + m_bEntryInHistory = true; + return SwitchContext(ctx, KdbContext.Entry, xr); + } + else ReadUnknown(xr); + break; + + case KdbContext.RootDeletedObjects: + if(xr.Name == ElemDeletedObject) + { + m_ctxDeletedObject = new PwDeletedObject(); + m_pwDatabase.DeletedObjects.Add(m_ctxDeletedObject); + + return SwitchContext(ctx, KdbContext.DeletedObject, xr); + } + else ReadUnknown(xr); + break; + + case KdbContext.DeletedObject: + if(xr.Name == ElemUuid) + m_ctxDeletedObject.Uuid = ReadUuid(xr); + else if(xr.Name == ElemDeletionTime) + m_ctxDeletedObject.DeletionTime = ReadTime(xr); + else ReadUnknown(xr); + break; + + default: + ReadUnknown(xr); + break; + } + + return ctx; + } + + private KdbContext EndXmlElement(KdbContext ctx, XmlReader xr) + { + Debug.Assert(xr.NodeType == XmlNodeType.EndElement); + + if((ctx == KdbContext.KeePassFile) && (xr.Name == ElemDocNode)) + return KdbContext.Null; + else if((ctx == KdbContext.Meta) && (xr.Name == ElemMeta)) + return KdbContext.KeePassFile; + else if((ctx == KdbContext.Root) && (xr.Name == ElemRoot)) + return KdbContext.KeePassFile; + else if((ctx == KdbContext.MemoryProtection) && (xr.Name == ElemMemoryProt)) + return KdbContext.Meta; + else if((ctx == KdbContext.CustomIcons) && (xr.Name == ElemCustomIcons)) + return KdbContext.Meta; + else if((ctx == KdbContext.CustomIcon) && (xr.Name == ElemCustomIconItem)) + { + if((m_uuidCustomIconID != PwUuid.Zero) && (m_pbCustomIconData != null)) + m_pwDatabase.CustomIcons.Add(new PwCustomIcon( + m_uuidCustomIconID, m_pbCustomIconData)); + else { Debug.Assert(false); } + + m_uuidCustomIconID = PwUuid.Zero; + m_pbCustomIconData = null; + + return KdbContext.CustomIcons; + } + else if((ctx == KdbContext.Binaries) && (xr.Name == ElemBinaries)) + return KdbContext.Meta; + else if((ctx == KdbContext.CustomData) && (xr.Name == ElemCustomData)) + return KdbContext.Meta; + else if((ctx == KdbContext.CustomDataItem) && (xr.Name == ElemStringDictExItem)) + { + if((m_strCustomDataKey != null) && (m_strCustomDataValue != null)) + m_pwDatabase.CustomData.Set(m_strCustomDataKey, m_strCustomDataValue); + else { Debug.Assert(false); } + + m_strCustomDataKey = null; + m_strCustomDataValue = null; + + return KdbContext.CustomData; + } + else if((ctx == KdbContext.Group) && (xr.Name == ElemGroup)) + { + if(PwUuid.Zero.EqualsValue(m_ctxGroup.Uuid)) + m_ctxGroup.Uuid = new PwUuid(true); // No assert (import) + + m_ctxGroups.Pop(); + + if(m_ctxGroups.Count == 0) + { + m_ctxGroup = null; + return KdbContext.Root; + } + else + { + m_ctxGroup = m_ctxGroups.Peek(); + return KdbContext.Group; + } + } + else if((ctx == KdbContext.GroupTimes) && (xr.Name == ElemTimes)) + return KdbContext.Group; + else if((ctx == KdbContext.Entry) && (xr.Name == ElemEntry)) + { + // Create new UUID if absent + if(PwUuid.Zero.EqualsValue(m_ctxEntry.Uuid)) + m_ctxEntry.Uuid = new PwUuid(true); // No assert (import) + + if(m_bEntryInHistory) + { + m_ctxEntry = m_ctxHistoryBase; + return KdbContext.EntryHistory; + } + + return KdbContext.Group; + } + else if((ctx == KdbContext.EntryTimes) && (xr.Name == ElemTimes)) + return KdbContext.Entry; + else if((ctx == KdbContext.EntryString) && (xr.Name == ElemString)) + { + m_ctxEntry.Strings.Set(m_ctxStringName, m_ctxStringValue); + m_ctxStringName = null; + m_ctxStringValue = null; + return KdbContext.Entry; + } + else if((ctx == KdbContext.EntryBinary) && (xr.Name == ElemBinary)) + { + if(string.IsNullOrEmpty(m_strDetachBins)) + m_ctxEntry.Binaries.Set(m_ctxBinaryName, m_ctxBinaryValue); + else + { + SaveBinary(m_ctxBinaryName, m_ctxBinaryValue, m_strDetachBins); + + m_ctxBinaryValue = null; + GC.Collect(); + } + + m_ctxBinaryName = null; + m_ctxBinaryValue = null; + return KdbContext.Entry; + } + else if((ctx == KdbContext.EntryAutoType) && (xr.Name == ElemAutoType)) + return KdbContext.Entry; + else if((ctx == KdbContext.EntryAutoTypeItem) && (xr.Name == ElemAutoTypeItem)) + { + AutoTypeAssociation atAssoc = new AutoTypeAssociation(m_ctxATName, + m_ctxATSeq); + m_ctxEntry.AutoType.Add(atAssoc); + m_ctxATName = null; + m_ctxATSeq = null; + return KdbContext.EntryAutoType; + } + else if((ctx == KdbContext.EntryHistory) && (xr.Name == ElemHistory)) + { + m_bEntryInHistory = false; + return KdbContext.Entry; + } + else if((ctx == KdbContext.RootDeletedObjects) && (xr.Name == ElemDeletedObjects)) + return KdbContext.Root; + else if((ctx == KdbContext.DeletedObject) && (xr.Name == ElemDeletedObject)) + { + m_ctxDeletedObject = null; + return KdbContext.RootDeletedObjects; + } + else + { + Debug.Assert(false); + throw new FormatException(); + } + } + + private string ReadString(XmlReader xr) + { + XorredBuffer xb = ProcessNode(xr); + if(xb != null) + { + byte[] pb = xb.ReadPlainText(); + if(pb.Length == 0) return string.Empty; + return StrUtil.Utf8.GetString(pb, 0, pb.Length); + } + + m_bReadNextNode = false; // ReadElementString skips end tag + return xr.ReadElementContentAsString(); + } + + private string ReadStringRaw(XmlReader xr) + { + m_bReadNextNode = false; // ReadElementString skips end tag + return xr.ReadElementContentAsString(); + } + + private bool ReadBool(XmlReader xr, bool bDefault) + { + string str = ReadString(xr); + if(str == ValTrue) return true; + else if(str == ValFalse) return false; + + Debug.Assert(false); + return bDefault; + } + + private PwUuid ReadUuid(XmlReader xr) + { + string str = ReadString(xr); + if(string.IsNullOrEmpty(str)) return PwUuid.Zero; + return new PwUuid(Convert.FromBase64String(str)); + } + + private int ReadInt(XmlReader xr, int nDefault) + { + string str = ReadString(xr); + + int n; + if(StrUtil.TryParseInt(str, out n)) return n; + + Debug.Assert(false); + return nDefault; + } + + private uint ReadUInt(XmlReader xr, uint uDefault) + { + string str = ReadString(xr); + + uint u; + if(StrUtil.TryParseUInt(str, out u)) return u; + + Debug.Assert(false); + return uDefault; + } + + private long ReadLong(XmlReader xr, long lDefault) + { + string str = ReadString(xr); + + long l; + if(StrUtil.TryParseLong(str, out l)) return l; + + Debug.Assert(false); + return lDefault; + } + + private ulong ReadULong(XmlReader xr, ulong uDefault) + { + string str = ReadString(xr); + + ulong u; + if(StrUtil.TryParseULong(str, out u)) return u; + + Debug.Assert(false); + return uDefault; + } + + private DateTime ReadTime(XmlReader xr) + { + string str = ReadString(xr); + + DateTime dt; + if(TimeUtil.TryDeserializeUtc(str, out dt)) return dt; + + Debug.Assert(false); + return m_dtNow; + } + + private ProtectedString ReadProtectedString(XmlReader xr) + { + XorredBuffer xb = ProcessNode(xr); + if(xb != null) return new ProtectedString(true, xb); + + bool bProtect = false; + if(m_format == Kdb4Format.PlainXml) + { + if(xr.MoveToAttribute(AttrProtectedInMemPlainXml)) + { + string strProtect = xr.Value; + bProtect = ((strProtect != null) && (strProtect == ValTrue)); + } + } + + ProtectedString ps = new ProtectedString(bProtect, ReadString(xr)); + return ps; + } + + private ProtectedBinary ReadProtectedBinary(XmlReader xr) + { + if(xr.MoveToAttribute(AttrRef)) + { + string strRef = xr.Value; + if(strRef != null) + { + ProtectedBinary pb = BinPoolGet(strRef); + if(pb != null) return pb; + else { Debug.Assert(false); } + } + else { Debug.Assert(false); } + } + + bool bCompressed = false; + if(xr.MoveToAttribute(AttrCompressed)) + bCompressed = (xr.Value == ValTrue); + + XorredBuffer xb = ProcessNode(xr); + if(xb != null) + { + Debug.Assert(!bCompressed); // See SubWriteValue(ProtectedBinary value) + return new ProtectedBinary(true, xb); + } + + string strValue = ReadString(xr); + if(strValue.Length == 0) return new ProtectedBinary(); + + byte[] pbData = Convert.FromBase64String(strValue); + if(bCompressed) pbData = MemUtil.Decompress(pbData); + return new ProtectedBinary(false, pbData); + } + + private void ReadUnknown(XmlReader xr) + { + Debug.Assert(false); // Unknown node! + + if(xr.IsEmptyElement) return; + + string strUnknownName = xr.Name; + ProcessNode(xr); + + while(xr.Read()) + { + if(xr.NodeType == XmlNodeType.EndElement) break; + if(xr.NodeType != XmlNodeType.Element) continue; + + ReadUnknown(xr); + } + + Debug.Assert(xr.Name == strUnknownName); + } + + private XorredBuffer ProcessNode(XmlReader xr) + { + // Debug.Assert(xr.NodeType == XmlNodeType.Element); + + XorredBuffer xb = null; + if(xr.HasAttributes) + { + if(xr.MoveToAttribute(AttrProtected)) + { + if(xr.Value == ValTrue) + { + xr.MoveToElement(); + string strEncrypted = ReadStringRaw(xr); + + byte[] pbEncrypted; + if(strEncrypted.Length > 0) + pbEncrypted = Convert.FromBase64String(strEncrypted); + else pbEncrypted = new byte[0]; + + byte[] pbPad = m_randomStream.GetRandomBytes((uint)pbEncrypted.Length); + + xb = new XorredBuffer(pbEncrypted, pbPad); + } + } + } + + return xb; + } + + private static KdbContext SwitchContext(KdbContext ctxCurrent, + KdbContext ctxNew, XmlReader xr) + { + if(xr.IsEmptyElement) return ctxCurrent; + return ctxNew; + } + } +} diff --git a/ModernKeePassLib/Serialization/Kdb4File.Read.cs b/ModernKeePassLib/Serialization/Kdb4File.Read.cs new file mode 100644 index 0000000..205000f --- /dev/null +++ b/ModernKeePassLib/Serialization/Kdb4File.Read.cs @@ -0,0 +1,408 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Security; + +#if !KeePassLibSD +using System.IO.Compression; +#else +using ModernKeePassLibSD; +#endif + +using ModernKeePassLib.Cryptography; +using ModernKeePassLib.Cryptography.Cipher; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Keys; +using ModernKeePassLib.Resources; +using ModernKeePassLib.Utility; +using System.Threading.Tasks; + +namespace ModernKeePassLib.Serialization +{ + /// + /// Serialization to KeePass KDBX files. + /// + public sealed partial class Kdb4File + { + private IOConnection m_connection; + + /// + /// Load a KDB file from a file. + /// + /// File to load. + /// Format specifier. + /// Status logger (optional). + public async Task Load(string strFilePath, Kdb4Format kdbFormat, IStatusLogger slLogger) + { + IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFilePath); + IOConnection ioConnection = new IOConnection(); + Stream abc = await ioConnection.OpenRead(ioc); + await Load(abc, kdbFormat, slLogger); + } + + /// + /// Load a KDB file from a stream. + /// + /// Stream to read the data from. Must contain + /// a KDB4 stream. + /// Format specifier. + /// Status logger (optional). + public async Task Load(Stream sSource, Kdb4Format kdbFormat, IStatusLogger slLogger) + { + + Debug.Assert(sSource != null); + if(sSource == null) throw new ArgumentNullException("sSource"); + + m_format = kdbFormat; + m_slLogger = slLogger; + + HashingStreamEx hashedStream = new HashingStreamEx(sSource, false, null); + + UTF8Encoding encNoBom = StrUtil.Utf8; + try + { + BinaryReaderEx br = null; + BinaryReaderEx brDecrypted = null; + Stream readerStream = null; + + if(kdbFormat == Kdb4Format.Default) + { + br = new BinaryReaderEx(hashedStream, encNoBom, KLRes.FileCorrupted); + ReadHeader(br); + + Stream sDecrypted = await AttachStreamDecryptor(hashedStream); + if((sDecrypted == null) || (sDecrypted == hashedStream)) + throw new SecurityException(KLRes.CryptoStreamFailed); + + brDecrypted = new BinaryReaderEx(sDecrypted, encNoBom, KLRes.FileCorrupted); + byte[] pbStoredStartBytes = brDecrypted.ReadBytes(32); + + if((m_pbStreamStartBytes == null) || (m_pbStreamStartBytes.Length != 32)) + throw new InvalidDataException(); + + for(int iStart = 0; iStart < 32; ++iStart) + { + if(pbStoredStartBytes[iStart] != m_pbStreamStartBytes[iStart]) + throw new InvalidCompositeKeyException(); + } + + Stream sHashed = new HashedBlockStream(sDecrypted, false, 0, + !m_bRepairMode); + + if(m_pwDatabase.Compression == PwCompressionAlgorithm.GZip) + readerStream = new GZipStream(sHashed, CompressionMode.Decompress); + else readerStream = sHashed; + } + else if(kdbFormat == Kdb4Format.PlainXml) + readerStream = hashedStream; + else { Debug.Assert(false); throw new FormatException("KdbFormat"); } + + if(kdbFormat != Kdb4Format.PlainXml) // Is an encrypted format + { + if(m_pbProtectedStreamKey == null) + { + Debug.Assert(false); + throw new SecurityException("Invalid protected stream key!"); + } + + m_randomStream = new CryptoRandomStream(m_craInnerRandomStream, + m_pbProtectedStreamKey); + } + else m_randomStream = null; // No random stream for plain-text files + + ReadXmlStreamed(readerStream, hashedStream); + // ReadXmlDom(readerStream); + +#if !KeePassWinRT + readerStream.Close(); +#endif + GC.KeepAlive(brDecrypted); + GC.KeepAlive(br); + } +#if !KeePassWinRT + catch(CryptographicException) // Thrown on invalid padding + { + throw new CryptographicException(KLRes.FileCorrupted); + } +#endif + finally { CommonCleanUpRead(sSource, hashedStream); } + + } + + private void CommonCleanUpRead(Stream sSource, HashingStreamEx hashedStream) + { + m_pbHashOfFileOnDisk = hashedStream.Hash; + // Reset memory protection settings (to always use reasonable + // defaults) + m_pwDatabase.MemoryProtection = new MemoryProtectionConfig(); + + return; + +#if !KeePassWinRT + // Remove old backups (this call is required here in order to apply + // the default history maintenance settings for people upgrading from + // KeePass <= 2.14 to >= 2.15; also it ensures history integrity in + // case a different application has created the KDBX file and ignored + // the history maintenance settings) + m_pwDatabase.MaintainBackups(); // Don't mark database as modified + + + // Is it ok to leave the stream open ???? + hashedStream.Close(); + sSource.Close(); +#endif + } + + private void ReadHeader(BinaryReaderEx br) + { + Debug.Assert(br != null); + if(br == null) throw new ArgumentNullException("br"); + + byte[] pbSig1 = br.ReadBytes(4); + uint uSig1 = MemUtil.BytesToUInt32(pbSig1); + byte[] pbSig2 = br.ReadBytes(4); + uint uSig2 = MemUtil.BytesToUInt32(pbSig2); + + if((uSig1 == FileSignatureOld1) && (uSig2 == FileSignatureOld2)) + throw new OldFormatException(PwDefs.ShortProductName + @" 1.x", + OldFormatException.OldFormatType.KeePass1x); + + if((uSig1 == FileSignature1) && (uSig2 == FileSignature2)) { } + else if((uSig1 == FileSignaturePreRelease1) && (uSig2 == + FileSignaturePreRelease2)) { } + else throw new FormatException(KLRes.FileSigInvalid); + + byte[] pb = br.ReadBytes(4); + uint uVersion = MemUtil.BytesToUInt32(pb); + + if ((uVersion & FileVersionCriticalMask) > (FileVersion32 & FileVersionCriticalMask)) +#if TODO + throw new FormatException(KLRes.FileVersionUnsupported + + MessageService.NewParagraph + KLRes.FileNewVerReq); +#else + throw new FormatException(); +#endif + while(true) + { + if(ReadHeaderField(br) == false) + break; + } + } + + private bool ReadHeaderField(BinaryReaderEx brSource) + { + Debug.Assert(brSource != null); + if(brSource == null) throw new ArgumentNullException("brSource"); + + byte btFieldID = brSource.ReadByte(); + ushort uSize = MemUtil.BytesToUInt16(brSource.ReadBytes(2)); + + byte[] pbData = null; + if(uSize > 0) + { + string strPrevExcpText = brSource.ReadExceptionText; + brSource.ReadExceptionText = KLRes.FileHeaderEndEarly; + + pbData = brSource.ReadBytes(uSize); + + brSource.ReadExceptionText = strPrevExcpText; + } + + bool bResult = true; + Kdb4HeaderFieldID kdbID = (Kdb4HeaderFieldID)btFieldID; + switch(kdbID) + { + case Kdb4HeaderFieldID.EndOfHeader: + bResult = false; // Returning false indicates end of header + break; + + case Kdb4HeaderFieldID.CipherID: + SetCipher(pbData); + break; + + case Kdb4HeaderFieldID.CompressionFlags: + SetCompressionFlags(pbData); + break; + + case Kdb4HeaderFieldID.MasterSeed: + m_pbMasterSeed = pbData; + CryptoRandom.Instance.AddEntropy(pbData); + break; + + case Kdb4HeaderFieldID.TransformSeed: + m_pbTransformSeed = pbData; + CryptoRandom.Instance.AddEntropy(pbData); + break; + + case Kdb4HeaderFieldID.TransformRounds: + m_pwDatabase.KeyEncryptionRounds = MemUtil.BytesToUInt64(pbData); + break; + + case Kdb4HeaderFieldID.EncryptionIV: + m_pbEncryptionIV = pbData; + break; + + case Kdb4HeaderFieldID.ProtectedStreamKey: + m_pbProtectedStreamKey = pbData; + CryptoRandom.Instance.AddEntropy(pbData); + break; + + case Kdb4HeaderFieldID.StreamStartBytes: + m_pbStreamStartBytes = pbData; + break; + + case Kdb4HeaderFieldID.InnerRandomStreamID: + SetInnerRandomStreamID(pbData); + break; + + default: + Debug.Assert(false); + if(m_slLogger != null) + m_slLogger.SetText(KLRes.UnknownHeaderId + @": " + + kdbID.ToString() + "!", LogStatusType.Warning); + break; + } + + return bResult; + } + + private void SetCipher(byte[] pbID) + { + if((pbID == null) || (pbID.Length != 16)) + throw new FormatException(KLRes.FileUnknownCipher); + + m_pwDatabase.DataCipherUuid = new PwUuid(pbID); + } + + private void SetCompressionFlags(byte[] pbFlags) + { + int nID = (int)MemUtil.BytesToUInt32(pbFlags); + if((nID < 0) || (nID >= (int)PwCompressionAlgorithm.Count)) + throw new FormatException(KLRes.FileUnknownCompression); + + m_pwDatabase.Compression = (PwCompressionAlgorithm)nID; + } + + private void SetInnerRandomStreamID(byte[] pbID) + { + uint uID = MemUtil.BytesToUInt32(pbID); + if(uID >= (uint)CrsAlgorithm.Count) + throw new FormatException(KLRes.FileUnknownCipher); + + m_craInnerRandomStream = (CrsAlgorithm)uID; + } + + private async Task AttachStreamDecryptor(Stream s) + { + MemoryStream ms = new MemoryStream(); + + Debug.Assert(m_pbMasterSeed.Length == 32); + if(m_pbMasterSeed.Length != 32) + throw new FormatException(KLRes.MasterSeedLengthInvalid); + ms.Write(m_pbMasterSeed, 0, 32); + + Security.ProtectedBinary pb = await m_pwDatabase.MasterKey.GenerateKey32(m_pbTransformSeed, + m_pwDatabase.KeyEncryptionRounds); + + byte[] pKey32 = pb.ReadData(); + if((pKey32 == null) || (pKey32.Length != 32)) + throw new SecurityException(KLRes.InvalidCompositeKey); + ms.Write(pKey32, 0, 32); + + byte[] aesKey = SHA256Managed.Instance.ComputeHash(ms.ToArray()); + + //SHA256Managed sha256 = new SHA256Managed(); + //byte[] aesKey = sha256.ComputeHash(ms.ToArray()); + + //ms.Close(); + Array.Clear(pKey32, 0, 32); + + if((aesKey == null) || (aesKey.Length != 32)) + throw new SecurityException(KLRes.FinalKeyCreationFailed); + + ICipherEngine iEngine = CipherPool.GlobalPool.GetCipher(m_pwDatabase.DataCipherUuid); + if(iEngine == null) throw new SecurityException(KLRes.FileUnknownCipher); + return iEngine.DecryptStream(s, aesKey, m_pbEncryptionIV); + + } + + [Obsolete] + public static List ReadEntries(PwDatabase pwDatabase, Stream msData) + { + return ReadEntries(msData); + } + + /// + /// Read entries from a stream. + /// + /// Input stream to read the entries from. + /// Extracted entries. + public static List ReadEntries(Stream msData) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + /* Kdb4File f = new Kdb4File(pwDatabase); + f.m_format = Kdb4Format.PlainXml; + + XmlDocument doc = new XmlDocument(); + doc.Load(msData); + + XmlElement el = doc.DocumentElement; + if(el.Name != ElemRoot) throw new FormatException(); + + List vEntries = new List(); + + foreach(XmlNode xmlChild in el.ChildNodes) + { + if(xmlChild.Name == ElemEntry) + { + PwEntry pe = f.ReadEntry(xmlChild); + pe.Uuid = new PwUuid(true); + + foreach(PwEntry peHistory in pe.History) + peHistory.Uuid = pe.Uuid; + + vEntries.Add(pe); + } + else { Debug.Assert(false); } + } + + return vEntries; */ + + PwDatabase pd = new PwDatabase(); + Kdb4File f = new Kdb4File(pd); + f.Load(msData, Kdb4Format.PlainXml, null); + + List vEntries = new List(); + foreach(PwEntry pe in pd.RootGroup.Entries) + { + pe.SetUuid(new PwUuid(true), true); + vEntries.Add(pe); + } + + return vEntries; +#endif + } + } +} diff --git a/ModernKeePassLib/Serialization/Kdb4File.Write.cs b/ModernKeePassLib/Serialization/Kdb4File.Write.cs new file mode 100644 index 0000000..bef0d31 --- /dev/null +++ b/ModernKeePassLib/Serialization/Kdb4File.Write.cs @@ -0,0 +1,866 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.IO; +//using System.Drawing; +//using System.Drawing.Imaging; + +#if !KeePassLibSD +#else +using ModernKeePassLibSD; +#endif + +using ModernKeePassLib.Collections; +using ModernKeePassLib.Cryptography; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Keys; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + /// + /// Serialization to KeePass KDB files. + /// + public sealed partial class Kdb4File + { + // public void Save(string strFile, PwGroup pgDataSource, Kdb4Format format, + // IStatusLogger slLogger) + // { + // bool bMadeUnhidden = UrlUtil.UnhideFile(strFile); + // + // IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile); + // this.Save(IOConnection.OpenWrite(ioc), pgDataSource, format, slLogger); + // + // if(bMadeUnhidden) UrlUtil.HideFile(strFile, true); // Hide again + // } + + /// + /// Save the contents of the current PwDatabase to a KDBX file. + /// + /// Stream to write the KDBX file into. + /// Group containing all groups and + /// entries to write. If null, the complete database will + /// be written. + /// Format of the file to create. + /// Logger that recieves status information. + public void Save(Stream sSaveTo, PwGroup pgDataSource, Kdb4Format format, + IStatusLogger slLogger) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + + Debug.Assert(sSaveTo != null); + if(sSaveTo == null) throw new ArgumentNullException("sSaveTo"); + + m_format = format; + m_slLogger = slLogger; + + HashingStreamEx hashedStream = new HashingStreamEx(sSaveTo, true, null); + + UTF8Encoding encNoBom = StrUtil.Utf8; + CryptoRandom cr = CryptoRandom.Instance; + + try + { + m_pbMasterSeed = cr.GetRandomBytes(32); + m_pbTransformSeed = cr.GetRandomBytes(32); + m_pbEncryptionIV = cr.GetRandomBytes(16); + + m_pbProtectedStreamKey = cr.GetRandomBytes(32); + m_craInnerRandomStream = CrsAlgorithm.Salsa20; + m_randomStream = new CryptoRandomStream(m_craInnerRandomStream, + m_pbProtectedStreamKey); + + m_pbStreamStartBytes = cr.GetRandomBytes(32); + + Stream writerStream; + BinaryWriter bw = null; + if(m_format == Kdb4Format.Default) + { + bw = new BinaryWriter(hashedStream, encNoBom); + WriteHeader(bw); // Also flushes bw + + Stream sEncrypted = AttachStreamEncryptor(hashedStream); + if((sEncrypted == null) || (sEncrypted == hashedStream)) + throw new SecurityException(KLRes.CryptoStreamFailed); + + sEncrypted.Write(m_pbStreamStartBytes, 0, m_pbStreamStartBytes.Length); + + Stream sHashed = new HashedBlockStream(sEncrypted, true); + + if(m_pwDatabase.Compression == PwCompressionAlgorithm.GZip) + writerStream = new GZipStream(sHashed, CompressionMode.Compress); + else + writerStream = sHashed; + } + else if(m_format == Kdb4Format.PlainXml) + writerStream = hashedStream; + else { Debug.Assert(false); throw new FormatException("KdbFormat"); } + + m_xmlWriter = new XmlTextWriter(writerStream, encNoBom); + WriteDocument(pgDataSource); + + m_xmlWriter.Flush(); + m_xmlWriter.Close(); + writerStream.Close(); + + GC.KeepAlive(bw); + } + finally { CommonCleanUpWrite(sSaveTo, hashedStream); } +#endif + } + + private void CommonCleanUpWrite(Stream sSaveTo, HashingStreamEx hashedStream) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + hashedStream.Close(); + m_pbHashOfFileOnDisk = hashedStream.Hash; + + sSaveTo.Close(); + + m_xmlWriter = null; +#endif + } + + private void WriteHeader(BinaryWriter bw) + { + Debug.Assert(bw != null); + if(bw == null) throw new ArgumentNullException("bw"); + + bw.Write(MemUtil.UInt32ToBytes(FileSignature1)); + bw.Write(MemUtil.UInt32ToBytes(FileSignature2)); + bw.Write(MemUtil.UInt32ToBytes(FileVersion32)); + + WriteHeaderField(bw, Kdb4HeaderFieldID.CipherID, + m_pwDatabase.DataCipherUuid.UuidBytes); + + int nCprID = (int)m_pwDatabase.Compression; + WriteHeaderField(bw, Kdb4HeaderFieldID.CompressionFlags, + MemUtil.UInt32ToBytes((uint)nCprID)); + + WriteHeaderField(bw, Kdb4HeaderFieldID.MasterSeed, m_pbMasterSeed); + WriteHeaderField(bw, Kdb4HeaderFieldID.TransformSeed, m_pbTransformSeed); + WriteHeaderField(bw, Kdb4HeaderFieldID.TransformRounds, MemUtil.UInt64ToBytes(m_pwDatabase.KeyEncryptionRounds)); + WriteHeaderField(bw, Kdb4HeaderFieldID.EncryptionIV, m_pbEncryptionIV); + WriteHeaderField(bw, Kdb4HeaderFieldID.ProtectedStreamKey, m_pbProtectedStreamKey); + WriteHeaderField(bw, Kdb4HeaderFieldID.StreamStartBytes, m_pbStreamStartBytes); + + int nIrsID = (int)m_craInnerRandomStream; + WriteHeaderField(bw, Kdb4HeaderFieldID.InnerRandomStreamID, + MemUtil.UInt32ToBytes((uint)nIrsID)); + + WriteHeaderField(bw, Kdb4HeaderFieldID.EndOfHeader, new byte[]{ (byte)'\r', (byte)'\n', (byte)'\r', (byte)'\n' }); + bw.Flush(); + } + + private static void WriteHeaderField(BinaryWriter bwOut, + Kdb4HeaderFieldID kdbID, byte[] pbData) + { + Debug.Assert(bwOut != null); + if(bwOut == null) throw new ArgumentNullException("bwOut"); + + bwOut.Write((byte)kdbID); + + if(pbData != null) + { + ushort uLength = (ushort)pbData.Length; + bwOut.Write(uLength); + + if(uLength > 0) bwOut.Write(pbData); + } + else bwOut.Write((ushort)0); + } + + private Stream AttachStreamEncryptor(Stream s) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + MemoryStream ms = new MemoryStream(); + + Debug.Assert(m_pbMasterSeed != null); + Debug.Assert(m_pbMasterSeed.Length == 32); + ms.Write(m_pbMasterSeed, 0, 32); + + Debug.Assert(m_pwDatabase != null); + Debug.Assert(m_pwDatabase.MasterKey != null); + ProtectedBinary pbinKey = m_pwDatabase.MasterKey.GenerateKey32( + m_pbTransformSeed, m_pwDatabase.KeyEncryptionRounds); + Debug.Assert(pbinKey != null); + if(pbinKey == null) + throw new SecurityException(KLRes.InvalidCompositeKey); + byte[] pKey32 = pbinKey.ReadData(); + if((pKey32 == null) || (pKey32.Length != 32)) + throw new SecurityException(KLRes.InvalidCompositeKey); + ms.Write(pKey32, 0, 32); + + SHA256Managed sha256 = new SHA256Managed(); + byte[] aesKey = sha256.ComputeHash(ms.ToArray()); + + ms.Close(); + Array.Clear(pKey32, 0, 32); + + Debug.Assert(CipherPool.GlobalPool != null); + ICipherEngine iEngine = CipherPool.GlobalPool.GetCipher(m_pwDatabase.DataCipherUuid); + if(iEngine == null) throw new SecurityException(KLRes.FileUnknownCipher); + return iEngine.EncryptStream(s, aesKey, m_pbEncryptionIV); +#endif + } + + private void WriteDocument(PwGroup pgDataSource) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + Debug.Assert(m_xmlWriter != null); + if(m_xmlWriter == null) throw new InvalidOperationException(); + + PwGroup pgRoot = (pgDataSource ?? m_pwDatabase.RootGroup); + + uint uNumGroups, uNumEntries, uCurEntry = 0; + pgRoot.GetCounts(true, out uNumGroups, out uNumEntries); + + BinPoolBuild(pgRoot); + + m_xmlWriter.Formatting = Formatting.Indented; + m_xmlWriter.IndentChar = '\t'; + m_xmlWriter.Indentation = 1; + + m_xmlWriter.WriteStartDocument(true); + m_xmlWriter.WriteStartElement(ElemDocNode); + + WriteMeta(); + + m_xmlWriter.WriteStartElement(ElemRoot); + StartGroup(pgRoot); + + Stack groupStack = new Stack(); + groupStack.Push(pgRoot); + + GroupHandler gh = delegate(PwGroup pg) + { + Debug.Assert(pg != null); + if(pg == null) throw new ArgumentNullException("pg"); + + while(true) + { + if(pg.ParentGroup == groupStack.Peek()) + { + groupStack.Push(pg); + StartGroup(pg); + break; + } + else + { + groupStack.Pop(); + if(groupStack.Count <= 0) return false; + + EndGroup(); + } + } + + return true; + }; + + EntryHandler eh = delegate(PwEntry pe) + { + Debug.Assert(pe != null); + WriteEntry(pe, false); + + ++uCurEntry; + if(m_slLogger != null) + if(!m_slLogger.SetProgress((100 * uCurEntry) / uNumEntries)) + return false; + + return true; + }; + + if(!pgRoot.TraverseTree(TraversalMethod.PreOrder, gh, eh)) + throw new InvalidOperationException(); + + while(groupStack.Count > 1) + { + m_xmlWriter.WriteEndElement(); + groupStack.Pop(); + } + + EndGroup(); + + WriteList(ElemDeletedObjects, m_pwDatabase.DeletedObjects); + m_xmlWriter.WriteEndElement(); // Root + + m_xmlWriter.WriteEndElement(); // ElemDocNode + m_xmlWriter.WriteEndDocument(); +#endif + } + + private void WriteMeta() + { + m_xmlWriter.WriteStartElement(ElemMeta); + + WriteObject(ElemGenerator, PwDatabase.LocalizedAppName, false); // Generator name + WriteObject(ElemDbName, m_pwDatabase.Name, true); + WriteObject(ElemDbNameChanged, m_pwDatabase.NameChanged); + WriteObject(ElemDbDesc, m_pwDatabase.Description, true); + WriteObject(ElemDbDescChanged, m_pwDatabase.DescriptionChanged); + WriteObject(ElemDbDefaultUser, m_pwDatabase.DefaultUserName, true); + WriteObject(ElemDbDefaultUserChanged, m_pwDatabase.DefaultUserNameChanged); + WriteObject(ElemDbMntncHistoryDays, m_pwDatabase.MaintenanceHistoryDays); + WriteObject(ElemDbColor, StrUtil.ColorToUnnamedHtml(m_pwDatabase.Color, true), false); + WriteObject(ElemDbKeyChanged, m_pwDatabase.MasterKeyChanged); + WriteObject(ElemDbKeyChangeRec, m_pwDatabase.MasterKeyChangeRec); + WriteObject(ElemDbKeyChangeForce, m_pwDatabase.MasterKeyChangeForce); + + WriteList(ElemMemoryProt, m_pwDatabase.MemoryProtection); + + WriteCustomIconList(); + + WriteObject(ElemRecycleBinEnabled, m_pwDatabase.RecycleBinEnabled); + WriteObject(ElemRecycleBinUuid, m_pwDatabase.RecycleBinUuid); + WriteObject(ElemRecycleBinChanged, m_pwDatabase.RecycleBinChanged); + WriteObject(ElemEntryTemplatesGroup, m_pwDatabase.EntryTemplatesGroup); + WriteObject(ElemEntryTemplatesGroupChanged, m_pwDatabase.EntryTemplatesGroupChanged); + WriteObject(ElemHistoryMaxItems, m_pwDatabase.HistoryMaxItems); + WriteObject(ElemHistoryMaxSize, m_pwDatabase.HistoryMaxSize); + + WriteObject(ElemLastSelectedGroup, m_pwDatabase.LastSelectedGroup); + WriteObject(ElemLastTopVisibleGroup, m_pwDatabase.LastTopVisibleGroup); + + WriteBinPool(); + WriteList(ElemCustomData, m_pwDatabase.CustomData); + + m_xmlWriter.WriteEndElement(); + } + + private void StartGroup(PwGroup pg) + { + m_xmlWriter.WriteStartElement(ElemGroup); + WriteObject(ElemUuid, pg.Uuid); + WriteObject(ElemName, pg.Name, true); + WriteObject(ElemNotes, pg.Notes, true); + WriteObject(ElemIcon, (int)pg.IconId); + + if(pg.CustomIconUuid != PwUuid.Zero) + WriteObject(ElemCustomIconID, pg.CustomIconUuid); + + WriteList(ElemTimes, pg); + WriteObject(ElemIsExpanded, pg.IsExpanded); + WriteObject(ElemGroupDefaultAutoTypeSeq, pg.DefaultAutoTypeSequence, true); + WriteObject(ElemEnableAutoType, StrUtil.BoolToStringEx(pg.EnableAutoType), false); + WriteObject(ElemEnableSearching, StrUtil.BoolToStringEx(pg.EnableSearching), false); + WriteObject(ElemLastTopVisibleEntry, pg.LastTopVisibleEntry); + } + + private void EndGroup() + { + m_xmlWriter.WriteEndElement(); // Close group element + } + + private void WriteEntry(PwEntry pe, bool bIsHistory) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + Debug.Assert(pe != null); if(pe == null) throw new ArgumentNullException("pe"); + + m_xmlWriter.WriteStartElement(ElemEntry); + + WriteObject(ElemUuid, pe.Uuid); + WriteObject(ElemIcon, (int)pe.IconId); + + if(pe.CustomIconUuid != PwUuid.Zero) + WriteObject(ElemCustomIconID, pe.CustomIconUuid); + + WriteObject(ElemFgColor, StrUtil.ColorToUnnamedHtml(pe.ForegroundColor, true), false); + WriteObject(ElemBgColor, StrUtil.ColorToUnnamedHtml(pe.BackgroundColor, true), false); + WriteObject(ElemOverrideUrl, pe.OverrideUrl, true); + WriteObject(ElemTags, StrUtil.TagsToString(pe.Tags, false), true); + + WriteList(ElemTimes, pe); + + WriteList(pe.Strings, true); + WriteList(pe.Binaries); + WriteList(ElemAutoType, pe.AutoType); + + if(!bIsHistory) WriteList(ElemHistory, pe.History, true); + else { Debug.Assert(pe.History.UCount == 0); } + + m_xmlWriter.WriteEndElement(); +#endif + } + + private void WriteList(ProtectedStringDictionary dictStrings, bool bEntryStrings) + { + Debug.Assert(dictStrings != null); + if(dictStrings == null) throw new ArgumentNullException("dictStrings"); + + foreach(KeyValuePair kvp in dictStrings) + WriteObject(kvp.Key, kvp.Value, bEntryStrings); + } + + private void WriteList(ProtectedBinaryDictionary dictBinaries) + { + Debug.Assert(dictBinaries != null); + if(dictBinaries == null) throw new ArgumentNullException("dictBinaries"); + + foreach(KeyValuePair kvp in dictBinaries) + WriteObject(kvp.Key, kvp.Value, true); + } + + private void WriteList(string name, AutoTypeConfig cfgAutoType) + { + Debug.Assert(name != null); + Debug.Assert(cfgAutoType != null); + if(cfgAutoType == null) throw new ArgumentNullException("cfgAutoType"); + + m_xmlWriter.WriteStartElement(name); + + WriteObject(ElemAutoTypeEnabled, cfgAutoType.Enabled); + WriteObject(ElemAutoTypeObfuscation, (int)cfgAutoType.ObfuscationOptions); + + if(cfgAutoType.DefaultSequence.Length > 0) + WriteObject(ElemAutoTypeDefaultSeq, cfgAutoType.DefaultSequence, true); + + foreach(AutoTypeAssociation a in cfgAutoType.Associations) + WriteObject(ElemAutoTypeItem, ElemWindow, ElemKeystrokeSequence, + new KeyValuePair(a.WindowName, a.Sequence)); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteList(string name, ITimeLogger times) + { + Debug.Assert(name != null); + Debug.Assert(times != null); if(times == null) throw new ArgumentNullException("times"); + + m_xmlWriter.WriteStartElement(name); + + WriteObject(ElemLastModTime, times.LastModificationTime); + WriteObject(ElemCreationTime, times.CreationTime); + WriteObject(ElemLastAccessTime, times.LastAccessTime); + WriteObject(ElemExpiryTime, times.ExpiryTime); + WriteObject(ElemExpires, times.Expires); + WriteObject(ElemUsageCount, times.UsageCount); + WriteObject(ElemLocationChanged, times.LocationChanged); + + m_xmlWriter.WriteEndElement(); // Name + } + + private void WriteList(string name, PwObjectList value, bool bIsHistory) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(name); + + foreach(PwEntry pe in value) + WriteEntry(pe, bIsHistory); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteList(string name, PwObjectList value) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(name); + + foreach(PwDeletedObject pdo in value) + WriteObject(ElemDeletedObject, pdo); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteList(string name, MemoryProtectionConfig value) + { + Debug.Assert(name != null); + Debug.Assert(value != null); + + m_xmlWriter.WriteStartElement(name); + + WriteObject(ElemProtTitle, value.ProtectTitle); + WriteObject(ElemProtUserName, value.ProtectUserName); + WriteObject(ElemProtPassword, value.ProtectPassword); + WriteObject(ElemProtUrl, value.ProtectUrl); + WriteObject(ElemProtNotes, value.ProtectNotes); + // WriteObject(ElemProtAutoHide, value.AutoEnableVisualHiding); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteList(string name, StringDictionaryEx value) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(name); + + foreach(KeyValuePair kvp in value) + WriteObject(ElemStringDictExItem, ElemKey, ElemValue, kvp); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteCustomIconList() + { + if(m_pwDatabase.CustomIcons.Count == 0) return; + + m_xmlWriter.WriteStartElement(ElemCustomIcons); + + foreach(PwCustomIcon pwci in m_pwDatabase.CustomIcons) + { + m_xmlWriter.WriteStartElement(ElemCustomIconItem); + + WriteObject(ElemCustomIconItemID, pwci.Uuid); + + string strData = Convert.ToBase64String(pwci.ImageDataPng); + WriteObject(ElemCustomIconItemData, strData, false); + + m_xmlWriter.WriteEndElement(); + } + + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, string value, + bool bFilterValueXmlChars) + { + Debug.Assert(name != null); + Debug.Assert(value != null); + + m_xmlWriter.WriteStartElement(name); + + if(bFilterValueXmlChars) + m_xmlWriter.WriteString(StrUtil.SafeXmlString(value)); + else m_xmlWriter.WriteString(value); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, bool value) + { + Debug.Assert(name != null); + + WriteObject(name, value ? ValTrue : ValFalse, false); + } + + private void WriteObject(string name, PwUuid value) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + WriteObject(name, Convert.ToBase64String(value.UuidBytes), false); + } + + private void WriteObject(string name, int value) + { + Debug.Assert(name != null); + + m_xmlWriter.WriteStartElement(name); + m_xmlWriter.WriteString(value.ToString()); + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, uint value) + { + Debug.Assert(name != null); + + m_xmlWriter.WriteStartElement(name); + m_xmlWriter.WriteString(value.ToString()); + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, long value) + { + Debug.Assert(name != null); + + m_xmlWriter.WriteStartElement(name); + m_xmlWriter.WriteString(value.ToString()); + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, ulong value) + { + Debug.Assert(name != null); + + m_xmlWriter.WriteStartElement(name); + m_xmlWriter.WriteString(value.ToString()); + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, DateTime value) + { + Debug.Assert(name != null); + + WriteObject(name, TimeUtil.SerializeUtc(value), false); + } + + private void WriteObject(string name, string strKeyName, + string strValueName, KeyValuePair kvp) + { + m_xmlWriter.WriteStartElement(name); + + m_xmlWriter.WriteStartElement(strKeyName); + m_xmlWriter.WriteString(StrUtil.SafeXmlString(kvp.Key)); + m_xmlWriter.WriteEndElement(); + m_xmlWriter.WriteStartElement(strValueName); + m_xmlWriter.WriteString(StrUtil.SafeXmlString(kvp.Value)); + m_xmlWriter.WriteEndElement(); + + m_xmlWriter.WriteEndElement(); + } + + private void WriteObject(string name, ProtectedString value, bool bIsEntryString) + { + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(ElemString); + m_xmlWriter.WriteStartElement(ElemKey); + m_xmlWriter.WriteString(StrUtil.SafeXmlString(name)); + m_xmlWriter.WriteEndElement(); + m_xmlWriter.WriteStartElement(ElemValue); + + bool bProtected = value.IsProtected; + if(bIsEntryString) + { + // Adjust memory protection setting (which might be different + // from the database default, e.g. due to an import which + // didn't specify the correct setting) + if(name == PwDefs.TitleField) + bProtected = m_pwDatabase.MemoryProtection.ProtectTitle; + else if(name == PwDefs.UserNameField) + bProtected = m_pwDatabase.MemoryProtection.ProtectUserName; + else if(name == PwDefs.PasswordField) + bProtected = m_pwDatabase.MemoryProtection.ProtectPassword; + else if(name == PwDefs.UrlField) + bProtected = m_pwDatabase.MemoryProtection.ProtectUrl; + else if(name == PwDefs.NotesField) + bProtected = m_pwDatabase.MemoryProtection.ProtectNotes; + } + + if(bProtected && (m_format != Kdb4Format.PlainXml)) + { + m_xmlWriter.WriteAttributeString(AttrProtected, ValTrue); + + byte[] pbEncoded = value.ReadXorredString(m_randomStream); + if(pbEncoded.Length > 0) + m_xmlWriter.WriteBase64(pbEncoded, 0, pbEncoded.Length); + } + else + { + + string strValue = value.ReadString(); + + // If names should be localized, we need to apply the language-dependent + // string transformation here. By default, language-dependent conversions + // should be applied, otherwise characters could be rendered incorrectly + // (code page problems). + if(m_bLocalizedNames) + { + StringBuilder sb = new StringBuilder(); + foreach(char ch in strValue) + { + char chMapped = ch; + + // Symbols and surrogates must be moved into the correct code + // page area + if(char.IsSymbol(ch) || char.IsSurrogate(ch)) + { + System.Globalization.UnicodeCategory cat = char.GetUnicodeCategory(ch); + // Map character to correct position in code page + chMapped = (char)((int)cat * 32 + ch); + } + else if(char.IsControl(ch)) + { + if(ch >= 256) // Control character in high ANSI code page + { + // Some of the control characters map to corresponding ones + // in the low ANSI range (up to 255) when calling + // ToLower on them with invariant culture (see + // http://lists.ximian.com/pipermail/mono-patches/2002-February/086106.html ) + chMapped = char.ToLower(ch, CultureInfo.InvariantCulture); + } + } + + sb.Append(chMapped); + } + + strValue = sb.ToString(); // Correct string for current code page + } + + + if((m_format == Kdb4Format.PlainXml) && bProtected) + m_xmlWriter.WriteAttributeString(AttrProtectedInMemPlainXml, ValTrue); + + m_xmlWriter.WriteString(StrUtil.SafeXmlString(strValue)); + } + + m_xmlWriter.WriteEndElement(); // ElemValue + m_xmlWriter.WriteEndElement(); // ElemString +#endif + } + + private void WriteObject(string name, ProtectedBinary value, bool bAllowRef) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(ElemBinary); + m_xmlWriter.WriteStartElement(ElemKey); + m_xmlWriter.WriteString(StrUtil.SafeXmlString(name)); + m_xmlWriter.WriteEndElement(); + m_xmlWriter.WriteStartElement(ElemValue); + + string strRef = (bAllowRef ? BinPoolFind(value) : null); + if(strRef != null) + { + m_xmlWriter.WriteAttributeString(AttrRef, strRef); + } + else SubWriteValue(value); + + m_xmlWriter.WriteEndElement(); // ElemValue + m_xmlWriter.WriteEndElement(); // ElemBinary + } + + private void SubWriteValue(ProtectedBinary value) + { + + Debug.Assert(false, "not yet implemented"); + return ; +#if TODO + if(value.IsProtected && (m_format != Kdb4Format.PlainXml)) + { + m_xmlWriter.WriteAttributeString(AttrProtected, ValTrue); + + byte[] pbEncoded = value.ReadXorredData(m_randomStream); + if(pbEncoded.Length > 0) + m_xmlWriter.WriteBase64(pbEncoded, 0, pbEncoded.Length); + } + else + { + if(m_pwDatabase.Compression == PwCompressionAlgorithm.GZip) + { + m_xmlWriter.WriteAttributeString(AttrCompressed, ValTrue); + + byte[] pbRaw = value.ReadData(); + byte[] pbCmp = MemUtil.Compress(pbRaw); + m_xmlWriter.WriteBase64(pbCmp, 0, pbCmp.Length); + } + else + { + byte[] pbRaw = value.ReadData(); + m_xmlWriter.WriteBase64(pbRaw, 0, pbRaw.Length); + } + } +#endif + } + + private void WriteObject(string name, PwDeletedObject value) + { + Debug.Assert(name != null); + Debug.Assert(value != null); if(value == null) throw new ArgumentNullException("value"); + + m_xmlWriter.WriteStartElement(name); + WriteObject(ElemUuid, value.Uuid); + WriteObject(ElemDeletionTime, value.DeletionTime); + m_xmlWriter.WriteEndElement(); + } + + private void WriteBinPool() + { + m_xmlWriter.WriteStartElement(ElemBinaries); + + foreach(KeyValuePair kvp in m_dictBinPool) + { + m_xmlWriter.WriteStartElement(ElemBinary); + m_xmlWriter.WriteAttributeString(AttrId, kvp.Key); + SubWriteValue(kvp.Value); + m_xmlWriter.WriteEndElement(); + } + + m_xmlWriter.WriteEndElement(); + } + + [Obsolete] + public static bool WriteEntries(Stream msOutput, PwDatabase pwDatabase, + PwEntry[] vEntries) + { + return WriteEntries(msOutput, vEntries); + } + + /// + /// Write entries to a stream. + /// + /// Output stream to which the entries will be written. + /// Entries to serialize. + /// Returns true, if the entries were written successfully + /// to the stream. + public static bool WriteEntries(Stream msOutput, PwEntry[] vEntries) + { + /* Kdb4File f = new Kdb4File(pwDatabase); + f.m_format = Kdb4Format.PlainXml; + + XmlTextWriter xtw = null; + try { xtw = new XmlTextWriter(msOutput, StrUtil.Utf8); } + catch(Exception) { Debug.Assert(false); return false; } + if(xtw == null) { Debug.Assert(false); return false; } + + f.m_xmlWriter = xtw; + + xtw.Formatting = Formatting.Indented; + xtw.IndentChar = '\t'; + xtw.Indentation = 1; + + xtw.WriteStartDocument(true); + xtw.WriteStartElement(ElemRoot); + + foreach(PwEntry pe in vEntries) + f.WriteEntry(pe, false); + + xtw.WriteEndElement(); + xtw.WriteEndDocument(); + + xtw.Flush(); + xtw.Close(); + return true; */ + + PwDatabase pd = new PwDatabase(); + pd.New(new IOConnectionInfo(), new CompositeKey()); + + foreach(PwEntry peCopy in vEntries) + pd.RootGroup.AddEntry(peCopy.CloneDeep(), true); + + Kdb4File f = new Kdb4File(pd); + f.Save(msOutput, null, Kdb4Format.PlainXml, null); + return true; + } + } +} diff --git a/ModernKeePassLib/Serialization/Kdb4File.cs b/ModernKeePassLib/Serialization/Kdb4File.cs new file mode 100644 index 0000000..10b42d0 --- /dev/null +++ b/ModernKeePassLib/Serialization/Kdb4File.cs @@ -0,0 +1,397 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Xml; +using System.Text; +using System.Globalization; +using System.IO; +using System.Diagnostics; + +#if !KeePassLibSD +using System.IO.Compression; +#endif + +using ModernKeePassLib.Collections; +using ModernKeePassLib.Cryptography; +using ModernKeePassLib.Delegates; +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Security; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + /// + /// The Kdb4File class supports saving the data to various + /// formats. + /// + public enum Kdb4Format + { + /// + /// The default, encrypted file format. + /// + Default = 0, + + /// + /// Use this flag when exporting data to a plain-text XML file. + /// + PlainXml + } + + /// + /// Serialization to KeePass KDB files. + /// + public sealed partial class Kdb4File + { + /// + /// File identifier, first 32-bit value. + /// + private const uint FileSignature1 = 0x9AA2D903; + + /// + /// File identifier, second 32-bit value. + /// + private const uint FileSignature2 = 0xB54BFB67; + + /// + /// File version of files saved by the current Kdb4File class. + /// KeePass 2.07 has version 1.01, 2.08 has 1.02, 2.09 has 2.00, + /// 2.10 has 2.02, 2.11 has 2.04, 2.15 has 3.00. + /// The first 2 bytes are critical (i.e. loading will fail, if the + /// file version is too high), the last 2 bytes are informational. + /// + private const uint FileVersion32 = 0x00030000; + + private const uint FileVersionCriticalMask = 0xFFFF0000; + + // KeePass 1.x signature + private const uint FileSignatureOld1 = 0x9AA2D903; + private const uint FileSignatureOld2 = 0xB54BFB65; + // KeePass 2.x pre-release (alpha and beta) signature + private const uint FileSignaturePreRelease1 = 0x9AA2D903; + private const uint FileSignaturePreRelease2 = 0xB54BFB66; + + private const string ElemDocNode = "KeePassFile"; + private const string ElemMeta = "Meta"; + private const string ElemRoot = "Root"; + private const string ElemGroup = "Group"; + private const string ElemEntry = "Entry"; + + private const string ElemGenerator = "Generator"; + private const string ElemDbName = "DatabaseName"; + private const string ElemDbNameChanged = "DatabaseNameChanged"; + private const string ElemDbDesc = "DatabaseDescription"; + private const string ElemDbDescChanged = "DatabaseDescriptionChanged"; + private const string ElemDbDefaultUser = "DefaultUserName"; + private const string ElemDbDefaultUserChanged = "DefaultUserNameChanged"; + private const string ElemDbMntncHistoryDays = "MaintenanceHistoryDays"; + private const string ElemDbColor = "Color"; + private const string ElemDbKeyChanged = "MasterKeyChanged"; + private const string ElemDbKeyChangeRec = "MasterKeyChangeRec"; + private const string ElemDbKeyChangeForce = "MasterKeyChangeForce"; + private const string ElemRecycleBinEnabled = "RecycleBinEnabled"; + private const string ElemRecycleBinUuid = "RecycleBinUUID"; + private const string ElemRecycleBinChanged = "RecycleBinChanged"; + private const string ElemEntryTemplatesGroup = "EntryTemplatesGroup"; + private const string ElemEntryTemplatesGroupChanged = "EntryTemplatesGroupChanged"; + private const string ElemHistoryMaxItems = "HistoryMaxItems"; + private const string ElemHistoryMaxSize = "HistoryMaxSize"; + private const string ElemLastSelectedGroup = "LastSelectedGroup"; + private const string ElemLastTopVisibleGroup = "LastTopVisibleGroup"; + + private const string ElemMemoryProt = "MemoryProtection"; + private const string ElemProtTitle = "ProtectTitle"; + private const string ElemProtUserName = "ProtectUserName"; + private const string ElemProtPassword = "ProtectPassword"; + private const string ElemProtUrl = "ProtectURL"; + private const string ElemProtNotes = "ProtectNotes"; + // private const string ElemProtAutoHide = "AutoEnableVisualHiding"; + + private const string ElemCustomIcons = "CustomIcons"; + private const string ElemCustomIconItem = "Icon"; + private const string ElemCustomIconItemID = "UUID"; + private const string ElemCustomIconItemData = "Data"; + + private const string ElemAutoType = "AutoType"; + private const string ElemHistory = "History"; + + private const string ElemName = "Name"; + private const string ElemNotes = "Notes"; + private const string ElemUuid = "UUID"; + private const string ElemIcon = "IconID"; + private const string ElemCustomIconID = "CustomIconUUID"; + private const string ElemFgColor = "ForegroundColor"; + private const string ElemBgColor = "BackgroundColor"; + private const string ElemOverrideUrl = "OverrideURL"; + private const string ElemTimes = "Times"; + private const string ElemTags = "Tags"; + + private const string ElemCreationTime = "CreationTime"; + private const string ElemLastModTime = "LastModificationTime"; + private const string ElemLastAccessTime = "LastAccessTime"; + private const string ElemExpiryTime = "ExpiryTime"; + private const string ElemExpires = "Expires"; + private const string ElemUsageCount = "UsageCount"; + private const string ElemLocationChanged = "LocationChanged"; + + private const string ElemGroupDefaultAutoTypeSeq = "DefaultAutoTypeSequence"; + private const string ElemEnableAutoType = "EnableAutoType"; + private const string ElemEnableSearching = "EnableSearching"; + + private const string ElemString = "String"; + private const string ElemBinary = "Binary"; + private const string ElemKey = "Key"; + private const string ElemValue = "Value"; + + private const string ElemAutoTypeEnabled = "Enabled"; + private const string ElemAutoTypeObfuscation = "DataTransferObfuscation"; + private const string ElemAutoTypeDefaultSeq = "DefaultSequence"; + private const string ElemAutoTypeItem = "Association"; + private const string ElemWindow = "Window"; + private const string ElemKeystrokeSequence = "KeystrokeSequence"; + + private const string ElemBinaries = "Binaries"; + + private const string AttrId = "ID"; + private const string AttrRef = "Ref"; + private const string AttrProtected = "Protected"; + private const string AttrProtectedInMemPlainXml = "ProtectInMemory"; + private const string AttrCompressed = "Compressed"; + + private const string ElemIsExpanded = "IsExpanded"; + private const string ElemLastTopVisibleEntry = "LastTopVisibleEntry"; + + private const string ElemDeletedObjects = "DeletedObjects"; + private const string ElemDeletedObject = "DeletedObject"; + private const string ElemDeletionTime = "DeletionTime"; + + private const string ValFalse = "False"; + private const string ValTrue = "True"; + + private const string ElemCustomData = "CustomData"; + private const string ElemStringDictExItem = "Item"; + + private PwDatabase m_pwDatabase; // Not null, see constructor + + private XmlWriter m_xmlWriter = null; + private CryptoRandomStream m_randomStream = null; + private Kdb4Format m_format = Kdb4Format.Default; + private IStatusLogger m_slLogger = null; + + private byte[] m_pbMasterSeed = null; + private byte[] m_pbTransformSeed = null; + private byte[] m_pbEncryptionIV = null; + private byte[] m_pbProtectedStreamKey = null; + private byte[] m_pbStreamStartBytes = null; + + // ArcFourVariant only for compatibility; KeePass will default to a + // different (more secure) algorithm when *writing* databases + private CrsAlgorithm m_craInnerRandomStream = CrsAlgorithm.ArcFourVariant; + + private Dictionary m_dictBinPool = + new Dictionary(); + + private byte[] m_pbHashOfFileOnDisk = null; + + private readonly DateTime m_dtNow = DateTime.Now; // Cache current time + + private const uint NeutralLanguageOffset = 0x100000; // 2^20, see 32-bit Unicode specs + private const uint NeutralLanguageIDSec = 0x7DC5C; // See 32-bit Unicode specs + private const uint NeutralLanguageID = NeutralLanguageOffset + NeutralLanguageIDSec; + private static bool m_bLocalizedNames = false; + + private enum Kdb4HeaderFieldID : byte + { + EndOfHeader = 0, + Comment = 1, + CipherID = 2, + CompressionFlags = 3, + MasterSeed = 4, + TransformSeed = 5, + TransformRounds = 6, + EncryptionIV = 7, + ProtectedStreamKey = 8, + StreamStartBytes = 9, + InnerRandomStreamID = 10 + } + + public byte[] HashOfFileOnDisk + { + get { return m_pbHashOfFileOnDisk; } + } + + private bool m_bRepairMode = false; + public bool RepairMode + { + get { return m_bRepairMode; } + set { m_bRepairMode = value; } + } + + private string m_strDetachBins = null; + /// + /// Detach binaries when opening a file. If this isn't null, + /// all binaries are saved to the specified path and are removed + /// from the database. + /// + public string DetachBinaries + { + get { return m_strDetachBins; } + set { m_strDetachBins = value; } + } + + /// + /// Default constructor. + /// + /// The PwDatabase instance that the + /// class will load file data into or use to create a KDBX file. + public Kdb4File(PwDatabase pwDataStore) + { + Debug.Assert(pwDataStore != null); + if(pwDataStore == null) throw new ArgumentNullException("pwDataStore"); + + m_pwDatabase = pwDataStore; + } + + /// + /// Call this once to determine the current localization settings. + /// + public static void DetermineLanguageId() + { + // Test if localized names should be used. If localized names are used, + // the m_bLocalizedNames value must be set to true. By default, localized + // names should be used! (Otherwise characters could be corrupted + // because of different code pages). + unchecked + { + uint uTest = 0; + foreach(char ch in PwDatabase.LocalizedAppName) + uTest = uTest * 5 + ch; + + m_bLocalizedNames = (uTest != NeutralLanguageID); + } + } + + private void BinPoolBuild(PwGroup pgDataSource) + { + m_dictBinPool = new Dictionary(); + + if(pgDataSource == null) { Debug.Assert(false); return; } + + EntryHandler eh = delegate(PwEntry pe) + { + foreach(PwEntry peHistory in pe.History) + { + BinPoolAdd(peHistory.Binaries); + } + + BinPoolAdd(pe.Binaries); + return true; + }; + + pgDataSource.TraverseTree(TraversalMethod.PreOrder, null, eh); + } + + private void BinPoolAdd(ProtectedBinaryDictionary dict) + { + foreach(KeyValuePair kvp in dict) + { + BinPoolAdd(kvp.Value); + } + } + + private void BinPoolAdd(ProtectedBinary pb) + { + if(pb == null) { Debug.Assert(false); return; } + + if(BinPoolFind(pb) != null) return; // Exists already + + m_dictBinPool.Add(m_dictBinPool.Count.ToString(), pb); + } + + private string BinPoolFind(ProtectedBinary pb) + { + if(pb == null) { Debug.Assert(false); return null; } + + foreach(KeyValuePair kvp in m_dictBinPool) + { + if(pb.Equals(kvp.Value)) return kvp.Key; + } + + return null; + } + + private ProtectedBinary BinPoolGet(string strKey) + { + if(strKey == null) { Debug.Assert(false); return null; } + + ProtectedBinary pb; + if(m_dictBinPool.TryGetValue(strKey, out pb)) return pb; + + return null; + } + + private static void SaveBinary(string strName, ProtectedBinary pb, + string strSaveDir) + { + // TODO Bert: Needs to be implemented. +#if !TODO + Debug.Assert(false,"not implemented"); +#else + + + if(pb == null) { Debug.Assert(false); return; } + + if(string.IsNullOrEmpty(strName)) strName = "File.bin"; + + string strPath; + int iTry = 1; + do + { + strPath = UrlUtil.EnsureTerminatingSeparator(strSaveDir, false); + + string strExt = UrlUtil.GetExtension(strName); + string strDesc = UrlUtil.StripExtension(strName); + + strPath += strDesc; + if(iTry > 1) strPath += " (" + iTry.ToString() + ")"; + + if(!string.IsNullOrEmpty(strExt)) strPath += "." + strExt; + + ++iTry; + } + while(File.Exists(strPath)); + +#if !KeePassLibSD + byte[] pbData = pb.ReadData(); + File.WriteAllBytes(strPath, pbData); + MemUtil.ZeroByteArray(pbData); +#else + FileStream fs = new FileStream(strPath, FileMode.Create, + FileAccess.Write, FileShare.None); + byte[] pbData = pb.ReadData(); + fs.Write(pbData, 0, pbData.Length); + fs.Close(); +#endif + +#endif // TODO + } + + } +} diff --git a/ModernKeePassLib/Serialization/OldFormatException.cs b/ModernKeePassLib/Serialization/OldFormatException.cs new file mode 100644 index 0000000..3d67a7f --- /dev/null +++ b/ModernKeePassLib/Serialization/OldFormatException.cs @@ -0,0 +1,70 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using ModernKeePassLib.Resources; +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Serialization +{ + public sealed class OldFormatException : Exception + { + private string m_strFormat = string.Empty; + private OldFormatType m_type = OldFormatType.Unknown; + + public enum OldFormatType + { + Unknown = 0, + KeePass1x = 1 + } + + public override string Message + { + get + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + string str = KLRes.OldFormat + ((m_strFormat.Length > 0) ? + (@" (" + m_strFormat + @")") : string.Empty) + "."; + + if(m_type == OldFormatType.KeePass1x) + str += MessageService.NewParagraph + KLRes.KeePass1xHint; + + return str; +#endif + } + } + + public OldFormatException(string strFormatName) + { + if(strFormatName != null) m_strFormat = strFormatName; + } + + public OldFormatException(string strFormatName, OldFormatType t) + { + if(strFormatName != null) m_strFormat = strFormatName; + + m_type = t; + } + } +} diff --git a/ModernKeePassLib/Translation/KPControlCustomization.cs b/ModernKeePassLib/Translation/KPControlCustomization.cs new file mode 100644 index 0000000..c7faca2 --- /dev/null +++ b/ModernKeePassLib/Translation/KPControlCustomization.cs @@ -0,0 +1,406 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// BERT TODO: Removed completely for the time being */ + +#if TODO + +using System; +using System.Collections.Generic; +using System.Text; +using System.ComponentModel; +using System.Windows.Forms; +using System.Diagnostics; +using System.Xml.Serialization; +using System.Globalization; +using System.IO; +using System.Security.Cryptography; +using System.Drawing; + +using ModernKeePassLib.Utility; + +namespace ModernKeePassLib.Translation +{ + public sealed class KpccLayout + { + public enum LayoutParameterEx + { + X, Y, Width, Height + } + + private const string m_strControlRelative = @"%c"; + + internal const NumberStyles m_nsParser = NumberStyles.AllowLeadingSign | + NumberStyles.AllowDecimalPoint; + internal static readonly CultureInfo m_lclInv = CultureInfo.InvariantCulture; + + private string m_strPosX = string.Empty; + [XmlAttribute] + [DefaultValue("")] + public string X + { + get { return m_strPosX; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strPosX = value; + } + } + + private string m_strPosY = string.Empty; + [XmlAttribute] + [DefaultValue("")] + public string Y + { + get { return m_strPosY; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strPosY = value; + } + } + + private string m_strSizeW = string.Empty; + [XmlAttribute] + [DefaultValue("")] + public string Width + { + get { return m_strSizeW; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strSizeW = value; + } + } + + private string m_strSizeH = string.Empty; + [XmlAttribute] + [DefaultValue("")] + public string Height + { + get { return m_strSizeH; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strSizeH = value; + } + } + + public void SetControlRelativeValue(LayoutParameterEx lp, string strValue) + { + Debug.Assert(strValue != null); + if(strValue == null) throw new ArgumentNullException("strValue"); + + if(strValue.Length > 0) strValue += m_strControlRelative; + + if(lp == LayoutParameterEx.X) m_strPosX = strValue; + else if(lp == LayoutParameterEx.Y) m_strPosY = strValue; + else if(lp == LayoutParameterEx.Width) m_strSizeW = strValue; + else if(lp == LayoutParameterEx.Height) m_strSizeH = strValue; + else { Debug.Assert(false); } + } + +#if !KeePassLibSD + internal void ApplyTo(Control c) + { + Debug.Assert(c != null); if(c == null) return; + + int? v; + v = GetModControlParameter(c, LayoutParameterEx.X, m_strPosX); + if(v.HasValue) c.Left = v.Value; + v = GetModControlParameter(c, LayoutParameterEx.Y, m_strPosY); + if(v.HasValue) c.Top = v.Value; + v = GetModControlParameter(c, LayoutParameterEx.Width, m_strSizeW); + if(v.HasValue) c.Width = v.Value; + v = GetModControlParameter(c, LayoutParameterEx.Height, m_strSizeH); + if(v.HasValue) c.Height = v.Value; + } + + private static int? GetModControlParameter(Control c, LayoutParameterEx p, + string strModParam) + { + if(strModParam.Length == 0) return null; + + Debug.Assert(c.Left == c.Location.X); + Debug.Assert(c.Top == c.Location.Y); + Debug.Assert(c.Width == c.Size.Width); + Debug.Assert(c.Height == c.Size.Height); + + int iPrev; + if(p == LayoutParameterEx.X) iPrev = c.Left; + else if(p == LayoutParameterEx.Y) iPrev = c.Top; + else if(p == LayoutParameterEx.Width) iPrev = c.Width; + else if(p == LayoutParameterEx.Height) iPrev = c.Height; + else { Debug.Assert(false); return null; } + + double? dRel = ToControlRelativePercent(strModParam); + if(dRel.HasValue) + return (iPrev + (int)((dRel.Value * (double)iPrev) / 100.0)); + + Debug.Assert(false); + return null; + } + + public static double? ToControlRelativePercent(string strEncoded) + { + Debug.Assert(strEncoded != null); + if(strEncoded == null) throw new ArgumentNullException("strEncoded"); + + if(strEncoded.Length == 0) return null; + + if(strEncoded.EndsWith(m_strControlRelative)) + { + string strValue = strEncoded.Substring(0, strEncoded.Length - + m_strControlRelative.Length); + if((strValue.Length == 1) && (strValue == "-")) + strValue = "0"; + + double dRel; + if(double.TryParse(strValue, m_nsParser, m_lclInv, out dRel)) + { + return dRel; + } + else + { + Debug.Assert(false); + return null; + } + } + + Debug.Assert(false); + return null; + } +#endif + + public static string ToControlRelativeString(string strEncoded) + { + Debug.Assert(strEncoded != null); + if(strEncoded == null) throw new ArgumentNullException("strEncoded"); + + if(strEncoded.Length == 0) return string.Empty; + + if(strEncoded.EndsWith(m_strControlRelative)) + return strEncoded.Substring(0, strEncoded.Length - + m_strControlRelative.Length); + + Debug.Assert(false); + return string.Empty; + } + } + + public sealed class KPControlCustomization : IComparable + { + private string m_strMemberName = string.Empty; + /// + /// Member variable name of the control to be translated. + /// + [XmlAttribute] + public string Name + { + get { return m_strMemberName; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strMemberName = value; + } + } + + private string m_strHash = string.Empty; + [XmlAttribute] + public string BaseHash + { + get { return m_strHash; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strHash = value; + } + } + + private string m_strText = string.Empty; + [DefaultValue("")] + public string Text + { + get { return m_strText; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strText = value; + } + } + + private string m_strEngText = string.Empty; + [XmlIgnore] + public string TextEnglish + { + get { return m_strEngText; } + set { m_strEngText = value; } + } + + private KpccLayout m_layout = new KpccLayout(); + public KpccLayout Layout + { + get { return m_layout; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_layout = value; + } + } + + public int CompareTo(KPControlCustomization kpOther) + { + if(kpOther == null) { Debug.Assert(false); return 1; } + + return m_strMemberName.CompareTo(kpOther.Name); + } + +#if !KeePassLibSD + private static readonly Type[] m_vTextControls = new Type[] { + typeof(MenuStrip), typeof(PictureBox), typeof(ListView), + typeof(TreeView), typeof(ToolStrip), typeof(WebBrowser), + typeof(Panel), typeof(StatusStrip), typeof(ProgressBar), + typeof(NumericUpDown), typeof(TabControl) + }; + + public static bool ControlSupportsText(object oControl) + { + if(oControl == null) return false; + + Type t = oControl.GetType(); + for(int i = 0; i < m_vTextControls.Length; ++i) + { + if(t == m_vTextControls[i]) return false; + } + + return true; + } + + // Name-unchecked (!) property application method + internal void ApplyTo(Control c) + { + if((m_strText.Length > 0) && ControlSupportsText(c) && + (c.Text.Length > 0)) + { + c.Text = m_strText; + } + + m_layout.ApplyTo(c); + } + + public static string HashControl(Control c) + { + if(c == null) { Debug.Assert(false); return string.Empty; } + + StringBuilder sb = new StringBuilder(); + WriteCpiParam(sb, c.Text); + + if(c is Form) + { + WriteCpiParam(sb, c.ClientSize.Width.ToString()); + WriteCpiParam(sb, c.ClientSize.Height.ToString()); + } + else // Normal control + { + WriteCpiParam(sb, c.Left.ToString(KpccLayout.m_lclInv)); + WriteCpiParam(sb, c.Top.ToString(KpccLayout.m_lclInv)); + WriteCpiParam(sb, c.Width.ToString(KpccLayout.m_lclInv)); + WriteCpiParam(sb, c.Height.ToString(KpccLayout.m_lclInv)); + WriteCpiParam(sb, c.Dock.ToString()); + } + + WriteCpiParam(sb, c.Font.Name); + WriteCpiParam(sb, c.Font.SizeInPoints.ToString(KpccLayout.m_lclInv)); + WriteCpiParam(sb, c.Font.Bold ? "B" : "N"); + WriteCpiParam(sb, c.Font.Italic ? "I" : "N"); + WriteCpiParam(sb, c.Font.Underline ? "U" : "N"); + WriteCpiParam(sb, c.Font.Strikeout ? "S" : "N"); + + WriteControlDependentParams(sb, c); + + byte[] pb = StrUtil.Utf8.GetBytes(sb.ToString()); + + SHA256Managed sha256 = new SHA256Managed(); + byte[] pbSha = sha256.ComputeHash(pb); + + // Also see MatchHash + return "v1:" + Convert.ToBase64String(pbSha, 0, 3, + Base64FormattingOptions.None); + } + + private static void WriteControlDependentParams(StringBuilder sb, Control c) + { + CheckBox cb = (c as CheckBox); + RadioButton rb = (c as RadioButton); + Button btn = (c as Button); + Label l = (c as Label); + LinkLabel ll = (c as LinkLabel); + + if(cb != null) + { + WriteCpiParam(sb, cb.AutoSize ? "A" : "F"); + WriteCpiParam(sb, cb.TextAlign.ToString()); + WriteCpiParam(sb, cb.TextImageRelation.ToString()); + WriteCpiParam(sb, cb.Appearance.ToString()); + WriteCpiParam(sb, cb.CheckAlign.ToString()); + } + else if(rb != null) + { + WriteCpiParam(sb, rb.AutoSize ? "A" : "F"); + WriteCpiParam(sb, rb.TextAlign.ToString()); + WriteCpiParam(sb, rb.TextImageRelation.ToString()); + WriteCpiParam(sb, rb.Appearance.ToString()); + WriteCpiParam(sb, rb.CheckAlign.ToString()); + } + else if(btn != null) + { + WriteCpiParam(sb, btn.AutoSize ? "A" : "F"); + WriteCpiParam(sb, btn.TextAlign.ToString()); + WriteCpiParam(sb, btn.TextImageRelation.ToString()); + } + else if(l != null) + { + WriteCpiParam(sb, l.AutoSize ? "A" : "F"); + WriteCpiParam(sb, l.TextAlign.ToString()); + } + else if(ll != null) + { + WriteCpiParam(sb, ll.AutoSize ? "A" : "F"); + WriteCpiParam(sb, ll.TextAlign.ToString()); + } + } + + private static void WriteCpiParam(StringBuilder sb, string strProp) + { + sb.Append('/'); + sb.Append(strProp); + } + + public bool MatchHash(string strHash) + { + if(strHash == null) throw new ArgumentNullException("strHash"); + + // Currently only v1: is supported, see HashControl + return (m_strHash == strHash); + } +#endif + } +} + +#endif \ No newline at end of file diff --git a/ModernKeePassLib/Translation/KPFormCustomization.cs b/ModernKeePassLib/Translation/KPFormCustomization.cs new file mode 100644 index 0000000..29d3855 --- /dev/null +++ b/ModernKeePassLib/Translation/KPFormCustomization.cs @@ -0,0 +1,111 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Bert TODO: completely removed for the time being */ + +#if TODO +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using System.Xml.Serialization; +using System.Diagnostics; +using System.Reflection; + +namespace ModernKeePassLib.Translation +{ + public sealed class KPFormCustomization + { + private string m_strFQName = string.Empty; + /// + /// The fully qualified name of the form. + /// + [XmlAttribute] + public string FullName + { + get { return m_strFQName; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strFQName = value; + } + } + + private KPControlCustomization m_ccWindow = new KPControlCustomization(); + public KPControlCustomization Window + { + get { return m_ccWindow; } + set { m_ccWindow = value; } + } + + private List m_vControls = + new List(); + [XmlArray("ChildControls")] + [XmlArrayItem("Control")] + public List Controls + { + get { return m_vControls; } + set + { + if(value == null) throw new ArgumentNullException("value"); + + m_vControls = value; + } + } + + private Form m_formEnglish = null; + [XmlIgnore] + public Form FormEnglish + { + get { return m_formEnglish; } + set { m_formEnglish = value; } + } + +#if !KeePassLibSD + public void ApplyTo(Form form) + { + Debug.Assert(form != null); if(form == null) throw new ArgumentNullException("form"); + + // Not supported by TrlUtil (preview form): + // Debug.Assert(form.GetType().FullName == m_strFQName); + + m_ccWindow.ApplyTo(form); + + if(m_vControls.Count == 0) return; + foreach(Control c in form.Controls) ApplyToControl(c); + } + + private void ApplyToControl(Control c) + { + foreach(KPControlCustomization cc in m_vControls) + { + if(c.Name == cc.Name) + { + cc.ApplyTo(c); + break; + } + } + + foreach(Control cSub in c.Controls) ApplyToControl(cSub); + } +#endif + } +} + +#endif //TODO \ No newline at end of file diff --git a/ModernKeePassLib/Translation/KPStringTable.cs b/ModernKeePassLib/Translation/KPStringTable.cs new file mode 100644 index 0000000..1f7b40a --- /dev/null +++ b/ModernKeePassLib/Translation/KPStringTable.cs @@ -0,0 +1,104 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* BERT TODO: Completely removed for the time being */ + +#if TODO +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; +using System.Windows.Forms; +using System.Diagnostics; + +namespace ModernKeePassLib.Translation +{ + public sealed class KPStringTable + { + private string m_strName = string.Empty; + [XmlAttribute] + public string Name + { + get { return m_strName; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_strName = value; + } + } + + private List m_vItems = new List(); + + [XmlArrayItem("Data")] + public List Strings + { + get { return m_vItems; } + set + { + if(value == null) throw new ArgumentNullException("value"); + m_vItems = value; + } + } + + public Dictionary ToDictionary() + { + Dictionary dict = new Dictionary(); + + foreach(KPStringTableItem kpstItem in m_vItems) + { + if(kpstItem.Value.Length > 0) + dict[kpstItem.Name] = kpstItem.Value; + } + + return dict; + } + +#if !KeePassLibSD + public void ApplyTo(ToolStripItemCollection tsic) + { + if(tsic == null) throw new ArgumentNullException("tsic"); + + Dictionary dict = this.ToDictionary(); + if(dict.Count == 0) return; + + this.ApplyTo(tsic, dict); + } + + private void ApplyTo(ToolStripItemCollection tsic, Dictionary dict) + { + if(tsic == null) return; + + foreach(ToolStripItem tsi in tsic) + { + if(tsi.Text.Length == 0) continue; + + string strTrl; + if(dict.TryGetValue(tsi.Name, out strTrl)) + tsi.Text = strTrl; + + ToolStripMenuItem tsmi = tsi as ToolStripMenuItem; + if((tsmi != null) && (tsmi.DropDownItems != null)) + this.ApplyTo(tsmi.DropDownItems); + } + } +#endif + } +} + +#endif //TODO \ No newline at end of file diff --git a/ModernKeePassLib/Translation/KPStringTableItem.cs b/ModernKeePassLib/Translation/KPStringTableItem.cs new file mode 100644 index 0000000..1dad3f8 --- /dev/null +++ b/ModernKeePassLib/Translation/KPStringTableItem.cs @@ -0,0 +1,51 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; + +namespace ModernKeePassLib.Translation +{ + public sealed class KPStringTableItem + { + private string m_strName = string.Empty; + public string Name + { + get { return m_strName; } + set { m_strName = value; } + } + + private string m_strValue = string.Empty; + public string Value + { + get { return m_strValue; } + set { m_strValue = value; } + } + + private string m_strEnglish = string.Empty; + [XmlIgnore] + public string ValueEnglish + { + get { return m_strEnglish; } + set { m_strEnglish = value; } + } + } +} diff --git a/ModernKeePassLib/Translation/KPTranslation.cs b/ModernKeePassLib/Translation/KPTranslation.cs new file mode 100644 index 0000000..c79778a --- /dev/null +++ b/ModernKeePassLib/Translation/KPTranslation.cs @@ -0,0 +1,257 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Bert TODO: completely removed for the time being */ + +#if TODO +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using System.Windows.Forms; +using System.ComponentModel; +using System.Drawing; +using System.Diagnostics; + +using ModernKeePassLib.Interfaces; +using ModernKeePassLib.Utility; + +#if !KeePassLibSD +using System.IO.Compression; +#else +using ICSharpCode.SharpZipLib.GZip; +#endif + +namespace ModernKeePassLib.Translation +{ + [XmlRoot("Translation")] + public sealed class KPTranslation + { + public const string FileExtension = "lngx"; + + private KPTranslationProperties m_props = new KPTranslationProperties(); + public KPTranslationProperties Properties + { + get { return m_props; } + set { m_props = value; } + } + + private List m_vStringTables = new List(); + + [XmlArrayItem("StringTable")] + public List StringTables + { + get { return m_vStringTables; } + set + { + if(value == null) throw new ArgumentNullException("value"); + + m_vStringTables = value; + } + } + + private List m_vForms = new List(); + + [XmlArrayItem("Form")] + public List Forms + { + get { return m_vForms; } + set + { + if(value == null) throw new ArgumentNullException("value"); + + m_vForms = value; + } + } + + private string m_strUnusedText = string.Empty; + [DefaultValue("")] + public string UnusedText + { + get { return m_strUnusedText; } + set + { + if(value == null) throw new ArgumentNullException("value"); + + m_strUnusedText = value; + } + } + + public static void SaveToFile(KPTranslation kpTrl, string strFileName, + IXmlSerializerEx xs) + { + if(xs == null) throw new ArgumentNullException("xs"); + + FileStream fs = new FileStream(strFileName, FileMode.Create, + FileAccess.Write, FileShare.None); + +#if !KeePassLibSD + GZipStream gz = new GZipStream(fs, CompressionMode.Compress); +#else + GZipOutputStream gz = new GZipOutputStream(fs); +#endif + + XmlWriterSettings xws = new XmlWriterSettings(); + xws.CheckCharacters = true; + xws.Encoding = StrUtil.Utf8; + xws.Indent = true; + xws.IndentChars = "\t"; + + XmlWriter xw = XmlWriter.Create(gz, xws); + + xs.Serialize(xw, kpTrl); + + xw.Close(); + gz.Close(); + fs.Close(); + } + + public static KPTranslation LoadFromFile(string strFile, + IXmlSerializerEx xs) + { + if(xs == null) throw new ArgumentNullException("xs"); + + FileStream fs = new FileStream(strFile, FileMode.Open, + FileAccess.Read, FileShare.Read); + +#if !KeePassLibSD + GZipStream gz = new GZipStream(fs, CompressionMode.Decompress); +#else + GZipInputStream gz = new GZipInputStream(fs); +#endif + + KPTranslation kpTrl = (xs.Deserialize(gz) as KPTranslation); + + gz.Close(); + fs.Close(); + return kpTrl; + } + + public Dictionary SafeGetStringTableDictionary( + string strTableName) + { + foreach(KPStringTable kpst in m_vStringTables) + { + if(kpst.Name == strTableName) return kpst.ToDictionary(); + } + + return new Dictionary(); + } + +#if !KeePassLibSD + public void ApplyTo(Form form) + { + if(form == null) throw new ArgumentNullException("form"); + + if(m_props.RightToLeft) + { + try + { + form.RightToLeft = RightToLeft.Yes; + form.RightToLeftLayout = true; + } + catch(Exception) { Debug.Assert(false); } + } + + string strTypeName = form.GetType().FullName; + foreach(KPFormCustomization kpfc in m_vForms) + { + if(kpfc.FullName == strTypeName) + { + kpfc.ApplyTo(form); + break; + } + } + + if(m_props.RightToLeft) + { + try { RtlApplyToControls(form.Controls); } + catch(Exception) { Debug.Assert(false); } + } + } + + private static void RtlApplyToControls(Control.ControlCollection cc) + { + foreach(Control c in cc) + { + if(c.Controls.Count > 0) RtlApplyToControls(c.Controls); + + if(c is DateTimePicker) + ((DateTimePicker)c).RightToLeftLayout = true; + else if(c is ListView) + ((ListView)c).RightToLeftLayout = true; + else if(c is MonthCalendar) + ((MonthCalendar)c).RightToLeftLayout = true; + else if(c is ProgressBar) + ((ProgressBar)c).RightToLeftLayout = true; + else if(c is TabControl) + ((TabControl)c).RightToLeftLayout = true; + else if(c is TrackBar) + ((TrackBar)c).RightToLeftLayout = true; + else if(c is TreeView) + ((TreeView)c).RightToLeftLayout = true; + else if(c is ToolStrip) + RtlApplyToToolStripItems(((ToolStrip)c).Items); + + if((c is GroupBox) || (c is Panel)) RtlMoveChildControls(c); + } + } + + private static void RtlMoveChildControls(Control cParent) + { + int nParentWidth = cParent.Size.Width; + + foreach(Control c in cParent.Controls) + { + Point ptCur = c.Location; + c.Location = new Point(nParentWidth - c.Size.Width - ptCur.X, ptCur.Y); + } + } + + private static void RtlApplyToToolStripItems(ToolStripItemCollection tsic) + { + foreach(ToolStripItem tsi in tsic) + { + tsi.RightToLeftAutoMirrorImage = true; + } + } + + public void ApplyTo(string strTableName, ToolStripItemCollection tsic) + { + if(tsic == null) throw new ArgumentNullException("tsic"); + + KPStringTable kpst = null; + foreach(KPStringTable kpstEnum in m_vStringTables) + { + if(kpstEnum.Name == strTableName) + { + kpst = kpstEnum; + break; + } + } + + if(kpst != null) kpst.ApplyTo(tsic); + } +#endif + } +} + +#endif \ No newline at end of file diff --git a/ModernKeePassLib/Translation/KPTranslationProperties.cs b/ModernKeePassLib/Translation/KPTranslationProperties.cs new file mode 100644 index 0000000..a275d68 --- /dev/null +++ b/ModernKeePassLib/Translation/KPTranslationProperties.cs @@ -0,0 +1,105 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace ModernKeePassLib.Translation +{ + public sealed class KPTranslationProperties + { + private string m_strApp = string.Empty; + public string Application + { + get { return m_strApp; } + set { m_strApp = value; } + } + + private string m_strForVersion = PwDefs.VersionString; + public string ApplicationVersion + { + get { return m_strForVersion; } + set { m_strForVersion = value; } + } + + private string m_strNameEnglish = string.Empty; + public string NameEnglish + { + get { return m_strNameEnglish; } + set { m_strNameEnglish = value; } + } + + private string m_strNameNative = string.Empty; + public string NameNative + { + get { return m_strNameNative; } + set { m_strNameNative = value; } + } + + private string m_strIso6391Code = string.Empty; + public string Iso6391Code + { + get { return m_strIso6391Code; } + set { m_strIso6391Code = value; } + } + + private bool m_bRtl = false; + public bool RightToLeft + { + get { return m_bRtl; } + set { m_bRtl = value; } + } + + private string m_strAuthorName = string.Empty; + public string AuthorName + { + get { return m_strAuthorName; } + set { m_strAuthorName = value; } + } + + private string m_strAuthorContact = string.Empty; + public string AuthorContact + { + get { return m_strAuthorContact; } + set { m_strAuthorContact = value; } + } + + private string m_strGen = string.Empty; + public string Generator + { + get { return m_strGen; } + set { m_strGen = value; } + } + + private string m_strUuid = string.Empty; + public string FileUuid + { + get { return m_strUuid; } + set { m_strUuid = value; } + } + + private string m_strLastModified = string.Empty; + public string LastModified + { + get { return m_strLastModified; } + set { m_strLastModified = value; } + } + } +} diff --git a/ModernKeePassLib/Utility/AppLogEx.cs b/ModernKeePassLib/Utility/AppLogEx.cs new file mode 100644 index 0000000..49a6a63 --- /dev/null +++ b/ModernKeePassLib/Utility/AppLogEx.cs @@ -0,0 +1,108 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Diagnostics; + +#if !KeePassLibSD +using System.IO.Compression; +#endif + +namespace ModernKeePassLib.Utility +{ + /// + /// Application-wide logging services. + /// + public static class AppLogEx + { + private static StreamWriter m_swOut = null; + + public static void Open(string strPrefix) + { + return; // Logging is not enabled in normal builds of KeePass! + + /* + AppLogEx.Close(); + + Debug.Assert(strPrefix != null); + if(strPrefix == null) strPrefix = "Log"; + + try + { + string strDirSep = string.Empty; + strDirSep += Path.DirectorySeparatorChar; + + string strTemp = Path.GetTempPath(); + if(!strTemp.EndsWith(strDirSep)) + strTemp += strDirSep; + + string strPath = strTemp + strPrefix + "-"; + Debug.Assert(strPath.IndexOf('/') < 0); + + DateTime dtNow = DateTime.Now; + string strTime = dtNow.ToString("s"); + strTime = strTime.Replace('T', '-'); + strTime = strTime.Replace(':', '-'); + + strPath += strTime + "-" + Environment.TickCount.ToString( + CultureInfo.InvariantCulture) + ".log.gz"; + + FileStream fsOut = new FileStream(strPath, FileMode.Create, + FileAccess.Write, FileShare.None); + GZipStream gz = new GZipStream(fsOut, CompressionMode.Compress); + m_swOut = new StreamWriter(gz); + + AppLogEx.Log("Started logging on " + dtNow.ToString("s") + "."); + } + catch(Exception) { Debug.Assert(false); } + */ + } + + public static void Close() + { + if(m_swOut == null) return; + + Debug.Assert(false, "not yet implemented"); + return; +#if TODO + m_swOut.Close(); + m_swOut = null; +#endif + } + + public static void Log(string strText) + { + if(m_swOut == null) return; + + if(strText == null) m_swOut.WriteLine(); + else m_swOut.WriteLine(strText); + } + + public static void Log(Exception ex) + { + if(m_swOut == null) return; + + if(ex == null) m_swOut.WriteLine(); + else m_swOut.WriteLine(ex.ToString()); + } + } +} diff --git a/ModernKeePassLib/Utility/MemUtil.cs b/ModernKeePassLib/Utility/MemUtil.cs new file mode 100644 index 0000000..53edbce --- /dev/null +++ b/ModernKeePassLib/Utility/MemUtil.cs @@ -0,0 +1,371 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Text; +using System.IO; + +#if !KeePassLibSD +#else +using ModernKeePassLibSD; +#endif + +namespace ModernKeePassLib.Utility +{ + /// + /// Contains static buffer manipulation and string conversion routines. + /// + public static class MemUtil + { + /// + /// Convert a hexadecimal string to a byte array. The input string must be + /// even (i.e. its length is a multiple of 2). + /// + /// String containing hexadecimal characters. + /// Returns a byte array. Returns null if the string parameter + /// was null or is an uneven string (i.e. if its length isn't a + /// multiple of 2). + /// Thrown if + /// is null. + public static byte[] HexStringToByteArray(string strHex) + { + if(strHex == null) { Debug.Assert(false); throw new ArgumentNullException("strHex"); } + + int nStrLen = strHex.Length; + if((nStrLen & 1) != 0) { Debug.Assert(false); return null; } + + byte[] pb = new byte[nStrLen / 2]; + byte bt; + char ch; + + for(int i = 0; i < nStrLen; i += 2) + { + ch = strHex[i]; + + if((ch >= '0') && (ch <= '9')) + bt = (byte)(ch - '0'); + else if((ch >= 'a') && (ch <= 'f')) + bt = (byte)(ch - 'a' + 10); + else if((ch >= 'A') && (ch <= 'F')) + bt = (byte)(ch - 'A' + 10); + else { Debug.Assert(false); bt = 0; } + + bt <<= 4; + + ch = strHex[i + 1]; + if((ch >= '0') && (ch <= '9')) + bt += (byte)(ch - '0'); + else if((ch >= 'a') && (ch <= 'f')) + bt += (byte)(ch - 'a' + 10); + else if((ch >= 'A') && (ch <= 'F')) + bt += (byte)(ch - 'A' + 10); + else { Debug.Assert(false); } + + pb[i >> 1] = bt; + } + + return pb; + } + + /// + /// Convert a byte array to a hexadecimal string. + /// + /// Input byte array. + /// Returns the hexadecimal string representing the byte + /// array. Returns null, if the input byte array was null. Returns + /// an empty string, if the input byte array has length 0. + public static string ByteArrayToHexString(byte[] pbArray) + { + if(pbArray == null) return null; + + int nLen = pbArray.Length; + if(nLen == 0) return string.Empty; + + StringBuilder sb = new StringBuilder(); + + byte bt, btHigh, btLow; + for(int i = 0; i < nLen; ++i) + { + bt = pbArray[i]; + btHigh = bt; btHigh >>= 4; + btLow = (byte)(bt & 0x0F); + + if(btHigh >= 10) sb.Append((char)('A' + btHigh - 10)); + else sb.Append((char)('0' + btHigh)); + + if(btLow >= 10) sb.Append((char)('A' + btLow - 10)); + else sb.Append((char)('0' + btLow)); + } + + return sb.ToString(); + } + + /// + /// Set all bytes in a byte array to zero. + /// + /// Input array. All bytes of this array will be set + /// to zero. + public static void ZeroByteArray(byte[] pbArray) + { + Debug.Assert(pbArray != null); if(pbArray == null) throw new ArgumentNullException("pbArray"); + + // for(int i = 0; i < pbArray.Length; ++i) + // pbArray[i] = 0; + + Array.Clear(pbArray, 0, pbArray.Length); + } + + /// + /// Convert 2 bytes to a 16-bit unsigned integer using Little-Endian + /// encoding. + /// + /// Input bytes. Array must contain at least 2 bytes. + /// 16-bit unsigned integer. + public static ushort BytesToUInt16(byte[] pb) + { + Debug.Assert((pb != null) && (pb.Length == 2)); + if(pb == null) throw new ArgumentNullException("pb"); + if(pb.Length != 2) throw new ArgumentException(); + + return (ushort)((ushort)pb[0] | ((ushort)pb[1] << 8)); + } + + /// + /// Convert 4 bytes to a 32-bit unsigned integer using Little-Endian + /// encoding. + /// + /// Input bytes. + /// 32-bit unsigned integer. + public static uint BytesToUInt32(byte[] pb) + { + Debug.Assert((pb != null) && (pb.Length == 4)); + if(pb == null) throw new ArgumentNullException("pb"); + if(pb.Length != 4) throw new ArgumentException("Input array must contain 4 bytes!"); + + return (uint)pb[0] | ((uint)pb[1] << 8) | ((uint)pb[2] << 16) | + ((uint)pb[3] << 24); + } + + /// + /// Convert 8 bytes to a 64-bit unsigned integer using Little-Endian + /// encoding. + /// + /// Input bytes. + /// 64-bit unsigned integer. + public static ulong BytesToUInt64(byte[] pb) + { + Debug.Assert((pb != null) && (pb.Length == 8)); + if(pb == null) throw new ArgumentNullException("pb"); + if(pb.Length != 8) throw new ArgumentException(); + + return (ulong)pb[0] | ((ulong)pb[1] << 8) | ((ulong)pb[2] << 16) | + ((ulong)pb[3] << 24) | ((ulong)pb[4] << 32) | ((ulong)pb[5] << 40) | + ((ulong)pb[6] << 48) | ((ulong)pb[7] << 56); + } + + /// + /// Convert a 16-bit unsigned integer to 2 bytes using Little-Endian + /// encoding. + /// + /// 16-bit input word. + /// Two bytes representing the 16-bit value. + public static byte[] UInt16ToBytes(ushort uValue) + { + byte[] pb = new byte[2]; + + unchecked + { + pb[0] = (byte)uValue; + pb[1] = (byte)(uValue >> 8); + } + + return pb; + } + + /// + /// Convert a 32-bit unsigned integer to 4 bytes using Little-Endian + /// encoding. + /// + /// 32-bit input word. + /// Four bytes representing the 32-bit value. + public static byte[] UInt32ToBytes(uint uValue) + { + byte[] pb = new byte[4]; + + unchecked + { + pb[0] = (byte)uValue; + pb[1] = (byte)(uValue >> 8); + pb[2] = (byte)(uValue >> 16); + pb[3] = (byte)(uValue >> 24); + } + + return pb; + } + + /// + /// Convert a 64-bit unsigned integer to 8 bytes using Little-Endian + /// encoding. + /// + /// 64-bit input word. + /// Eight bytes representing the 64-bit value. + public static byte[] UInt64ToBytes(ulong uValue) + { + byte[] pb = new byte[8]; + + unchecked + { + pb[0] = (byte)uValue; + pb[1] = (byte)(uValue >> 8); + pb[2] = (byte)(uValue >> 16); + pb[3] = (byte)(uValue >> 24); + pb[4] = (byte)(uValue >> 32); + pb[5] = (byte)(uValue >> 40); + pb[6] = (byte)(uValue >> 48); + pb[7] = (byte)(uValue >> 56); + } + + return pb; + } + + public static bool ArraysEqual(byte[] x, byte[] y) + { + // Return false if one of them is null (not comparable)! + if((x == null) || (y == null)) { Debug.Assert(false); return false; } + + if(x.Length != y.Length) return false; + + for(int i = 0; i < x.Length; ++i) + { + if(x[i] != y[i]) return false; + } + + return true; + } + + public static void XorArray(byte[] pbSource, int nSourceOffset, + byte[] pbBuffer, int nBufferOffset, int nLength) + { + if(pbSource == null) throw new ArgumentNullException("pbSource"); + if(nSourceOffset < 0) throw new ArgumentException(); + if(pbBuffer == null) throw new ArgumentNullException("pbBuffer"); + if(nBufferOffset < 0) throw new ArgumentException(); + if(nLength < 0) throw new ArgumentException(); + if((nSourceOffset + nLength) > pbSource.Length) throw new ArgumentException(); + if((nBufferOffset + nLength) > pbBuffer.Length) throw new ArgumentException(); + + for(int i = 0; i < nLength; ++i) + pbBuffer[nBufferOffset + i] ^= pbSource[nSourceOffset + i]; + } + + public static void CopyStream(Stream sSource, Stream sTarget) + { + Debug.Assert((sSource != null) && (sTarget != null)); + if(sSource == null) throw new ArgumentNullException("sSource"); + if(sTarget == null) throw new ArgumentNullException("sTarget"); + + const int nBufSize = 4096; + byte[] pbBuf = new byte[nBufSize]; + int nRead; + + while((nRead = sSource.Read(pbBuf, 0, nBufSize)) > 0) + sTarget.Write(pbBuf, 0, nRead); + + // Do not close any of the streams + } + + public static byte[] Compress(byte[] pbData) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(pbData == null) throw new ArgumentNullException("pbData"); + if(pbData.Length == 0) return pbData; + + MemoryStream msCompressed = new MemoryStream(); + GZipStream gz = new GZipStream(msCompressed, CompressionMode.Compress); + MemoryStream msSource = new MemoryStream(pbData, false); + MemUtil.CopyStream(msSource, gz); + gz.Close(); + msSource.Close(); + + byte[] pbCompressed = msCompressed.ToArray(); + msCompressed.Close(); + return pbCompressed; +#endif + } + + public static byte[] Decompress(byte[] pbCompressed) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(pbCompressed == null) throw new ArgumentNullException("pbCompressed"); + if(pbCompressed.Length == 0) return pbCompressed; + + MemoryStream msCompressed = new MemoryStream(pbCompressed, false); + GZipStream gz = new GZipStream(msCompressed, CompressionMode.Decompress); + MemoryStream msData = new MemoryStream(); + MemUtil.CopyStream(gz, msData); + gz.Close(); + msCompressed.Close(); + + byte[] pbData = msData.ToArray(); + msData.Close(); + return pbData; +#endif + } + + public static int IndexOf(T[] vHaystack, T[] vNeedle) + where T : IEquatable + { + if(vHaystack == null) throw new ArgumentNullException("vHaystack"); + if(vNeedle == null) throw new ArgumentNullException("vNeedle"); + if(vNeedle.Length == 0) return 0; + + for(int i = 0; i <= (vHaystack.Length - vNeedle.Length); ++i) + { + bool bFound = true; + for(int m = 0; m < vNeedle.Length; ++m) + { + if(!vHaystack[i + m].Equals(vNeedle[m])) + { + bFound = false; + break; + } + } + if(bFound) return i; + } + + return -1; + } + + public static T[] Mid(T[] v, int iOffset, int iLength) + { + if(v == null) throw new ArgumentNullException("v"); + if(iOffset < 0) throw new ArgumentOutOfRangeException("iOffset"); + if(iLength < 0) throw new ArgumentOutOfRangeException("iLength"); + if(iOffset + iLength > v.Length) throw new ArgumentException(); + + T[] r = new T[iLength]; + Array.Copy(v, iOffset, r, 0, iLength); + return r; + } + } +} diff --git a/ModernKeePassLib/Utility/MessageService.cs b/ModernKeePassLib/Utility/MessageService.cs new file mode 100644 index 0000000..35e0ea2 --- /dev/null +++ b/ModernKeePassLib/Utility/MessageService.cs @@ -0,0 +1,427 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* BERT TODO: All removed for the time being */ + +#if false +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; + +using ModernKeePassLib.Resources; +using ModernKeePassLib.Serialization; + +namespace ModernKeePassLib.Utility +{ + public sealed class MessageServiceEventArgs : EventArgs + { + private string m_strTitle = string.Empty; + private string m_strText = string.Empty; + private MessageBoxButtons m_msgButtons = MessageBoxButtons.OK; + private MessageBoxIcon m_msgIcon = MessageBoxIcon.None; + + public string Title { get { return m_strTitle; } } + public string Text { get { return m_strText; } } + public MessageBoxButtons Buttons { get { return m_msgButtons; } } + public MessageBoxIcon Icon { get { return m_msgIcon; } } + + public MessageServiceEventArgs() { } + + public MessageServiceEventArgs(string strTitle, string strText, + MessageBoxButtons msgButtons, MessageBoxIcon msgIcon) + { + m_strTitle = (strTitle ?? string.Empty); + m_strText = (strText ?? string.Empty); + m_msgButtons = msgButtons; + m_msgIcon = msgIcon; + } + } + + public static class MessageService + { + private static volatile uint m_uCurrentMessageCount = 0; + +#if !KeePassLibSD + private const MessageBoxIcon m_mbiInfo = MessageBoxIcon.Information; + private const MessageBoxIcon m_mbiWarning = MessageBoxIcon.Warning; + private const MessageBoxIcon m_mbiFatal = MessageBoxIcon.Error; + + private const MessageBoxOptions m_mboRtl = (MessageBoxOptions.RtlReading | + MessageBoxOptions.RightAlign); +#else + private const MessageBoxIcon m_mbiInfo = MessageBoxIcon.Asterisk; + private const MessageBoxIcon m_mbiWarning = MessageBoxIcon.Exclamation; + private const MessageBoxIcon m_mbiFatal = MessageBoxIcon.Hand; +#endif + private const MessageBoxIcon m_mbiQuestion = MessageBoxIcon.Question; + + public static string NewLine + { +#if !KeePassLibSD + get { return Environment.NewLine; } +#else + get { return "\r\n"; } +#endif + } + + public static string NewParagraph + { +#if !KeePassLibSD + get { return Environment.NewLine + Environment.NewLine; } +#else + get { return "\r\n\r\n"; } +#endif + } + + public static uint CurrentMessageCount + { + get { return m_uCurrentMessageCount; } + } + + public static event EventHandler MessageShowing; + + private static string ObjectsToMessage(object[] vLines) + { + return ObjectsToMessage(vLines, false); + } + + private static string ObjectsToMessage(object[] vLines, bool bFullExceptions) + { + if(vLines == null) return string.Empty; + + string strNewPara = MessageService.NewParagraph; + + StringBuilder sbText = new StringBuilder(); + bool bSeparator = false; + + foreach(object obj in vLines) + { + if(obj == null) continue; + + string strAppend = null; + + Exception exObj = (obj as Exception); + string strObj = (obj as string); +#if !KeePassLibSD + StringCollection scObj = (obj as StringCollection); +#endif + + if(exObj != null) + { + if(bFullExceptions) + strAppend = StrUtil.FormatException(exObj); + else if((exObj.Message != null) && (exObj.Message.Length > 0)) + strAppend = exObj.Message; + } +#if !KeePassLibSD + else if(scObj != null) + { + StringBuilder sb = new StringBuilder(); + foreach(string strCollLine in scObj) + { + if(sb.Length > 0) sb.AppendLine(); + sb.Append(strCollLine.TrimEnd()); + } + strAppend = sb.ToString(); + } +#endif + else if(strObj != null) + strAppend = strObj; + else + strAppend = obj.ToString(); + + if(!string.IsNullOrEmpty(strAppend)) + { + if(bSeparator) sbText.Append(strNewPara); + else bSeparator = true; + + sbText.Append(strAppend); + } + } + + return sbText.ToString(); + } + + private static DialogResult SafeShowMessageBox(string strText, string strTitle, + MessageBoxButtons mb, MessageBoxIcon mi, MessageBoxDefaultButton mdb) + { +#if KeePassLibSD + return MessageBox.Show(strText, strTitle, mb, mi, mdb); +#else + IWin32Window wnd = null; + try + { + FormCollection fc = Application.OpenForms; + if((fc != null) && (fc.Count > 0)) + { + Form f = fc[fc.Count - 1]; + if((f != null) && f.InvokeRequired) + return (DialogResult)f.Invoke(new SafeShowMessageBoxInternalDelegate( + SafeShowMessageBoxInternal), f, strText, strTitle, mb, mi, mdb); + else wnd = f; + } + } + catch(Exception) { Debug.Assert(false); } + + if(wnd == null) + { + if(StrUtil.RightToLeft) + return MessageBox.Show(strText, strTitle, mb, mi, mdb, m_mboRtl); + return MessageBox.Show(strText, strTitle, mb, mi, mdb); + } + + try + { + if(StrUtil.RightToLeft) + return MessageBox.Show(wnd, strText, strTitle, mb, mi, mdb, m_mboRtl); + return MessageBox.Show(wnd, strText, strTitle, mb, mi, mdb); + } + catch(Exception) { Debug.Assert(false); } + + if(StrUtil.RightToLeft) + return MessageBox.Show(strText, strTitle, mb, mi, mdb, m_mboRtl); + return MessageBox.Show(strText, strTitle, mb, mi, mdb); +#endif + } + +#if !KeePassLibSD + internal delegate DialogResult SafeShowMessageBoxInternalDelegate(IWin32Window iParent, + string strText, string strTitle, MessageBoxButtons mb, MessageBoxIcon mi, + MessageBoxDefaultButton mdb); + + internal static DialogResult SafeShowMessageBoxInternal(IWin32Window iParent, + string strText, string strTitle, MessageBoxButtons mb, MessageBoxIcon mi, + MessageBoxDefaultButton mdb) + { + if(StrUtil.RightToLeft) + return MessageBox.Show(iParent, strText, strTitle, mb, mi, mdb, m_mboRtl); + return MessageBox.Show(iParent, strText, strTitle, mb, mi, mdb); + } +#endif + + public static void ShowInfo(params object[] vLines) + { + ShowInfoEx(null, vLines); + } + + public static void ShowInfoEx(string strTitle, params object[] vLines) + { + ++m_uCurrentMessageCount; + + strTitle = (strTitle ?? PwDefs.ShortProductName); + string strText = ObjectsToMessage(vLines); + + if(MessageService.MessageShowing != null) + MessageService.MessageShowing(null, new MessageServiceEventArgs( + strTitle, strText, MessageBoxButtons.OK, m_mbiInfo)); + + SafeShowMessageBox(strText, strTitle, MessageBoxButtons.OK, m_mbiInfo, + MessageBoxDefaultButton.Button1); + + --m_uCurrentMessageCount; + } + + public static void ShowWarning(params object[] vLines) + { + ShowWarningPriv(vLines, false); + } + + internal static void ShowWarningExcp(params object[] vLines) + { + ShowWarningPriv(vLines, true); + } + + private static void ShowWarningPriv(object[] vLines, bool bFullExceptions) + { + ++m_uCurrentMessageCount; + + string strTitle = PwDefs.ShortProductName; + string strText = ObjectsToMessage(vLines, bFullExceptions); + + if(MessageService.MessageShowing != null) + MessageService.MessageShowing(null, new MessageServiceEventArgs( + strTitle, strText, MessageBoxButtons.OK, m_mbiWarning)); + + SafeShowMessageBox(strText, strTitle, MessageBoxButtons.OK, m_mbiWarning, + MessageBoxDefaultButton.Button1); + + --m_uCurrentMessageCount; + } + + public static void ShowFatal(params object[] vLines) + { + ++m_uCurrentMessageCount; + + string strTitle = PwDefs.ShortProductName + @" - " + KLRes.FatalError; + string strText = KLRes.FatalErrorText + MessageService.NewParagraph + + KLRes.ErrorInClipboard + MessageService.NewParagraph + + // Please send it to the KeePass developers. + // KLRes.ErrorFeedbackRequest + MessageService.NewParagraph + + ObjectsToMessage(vLines); + + try + { +#if !KeePassLibSD + Clipboard.Clear(); + Clipboard.SetText(ObjectsToMessage(vLines, true)); +#else + Clipboard.SetDataObject(ObjectsToMessage(vLines, true)); +#endif + } + catch(Exception) { Debug.Assert(false); } + + if(MessageService.MessageShowing != null) + MessageService.MessageShowing(null, new MessageServiceEventArgs( + strTitle, strText, MessageBoxButtons.OK, m_mbiFatal)); + + SafeShowMessageBox(strText, strTitle, MessageBoxButtons.OK, m_mbiFatal, + MessageBoxDefaultButton.Button1); + + --m_uCurrentMessageCount; + } + + public static DialogResult Ask(string strText, string strTitle, + MessageBoxButtons mbb) + { + ++m_uCurrentMessageCount; + + string strTextEx = (strText ?? string.Empty); + string strTitleEx = (strTitle ?? PwDefs.ShortProductName); + + if(MessageService.MessageShowing != null) + MessageService.MessageShowing(null, new MessageServiceEventArgs( + strTitleEx, strTextEx, mbb, m_mbiQuestion)); + + DialogResult dr = SafeShowMessageBox(strTextEx, strTitleEx, mbb, + m_mbiQuestion, MessageBoxDefaultButton.Button1); + + --m_uCurrentMessageCount; + return dr; + } + + public static bool AskYesNo(string strText, string strTitle, bool bDefaultToYes) + { + ++m_uCurrentMessageCount; + + string strTextEx = (strText ?? string.Empty); + string strTitleEx = (strTitle ?? PwDefs.ShortProductName); + + if(MessageService.MessageShowing != null) + MessageService.MessageShowing(null, new MessageServiceEventArgs( + strTitleEx, strTextEx, MessageBoxButtons.YesNo, m_mbiQuestion)); + + DialogResult dr = SafeShowMessageBox(strTextEx, strTitleEx, + MessageBoxButtons.YesNo, m_mbiQuestion, bDefaultToYes ? + MessageBoxDefaultButton.Button1 : MessageBoxDefaultButton.Button2); + + --m_uCurrentMessageCount; + return (dr == DialogResult.Yes); + } + + public static bool AskYesNo(string strText, string strTitle) + { + return AskYesNo(strText, strTitle, true); + } + + public static bool AskYesNo(string strText) + { + return AskYesNo(strText, null, true); + } + + public static void ShowLoadWarning(string strFilePath, Exception ex) + { + ShowLoadWarning(strFilePath, ex, false); + } + + public static void ShowLoadWarning(string strFilePath, Exception ex, + bool bFullException) + { + string str = string.Empty; + + if((strFilePath != null) && (strFilePath.Length > 0)) + str += strFilePath + MessageService.NewParagraph; + + str += KLRes.FileLoadFailed; + + if((ex != null) && (ex.Message != null) && (ex.Message.Length > 0)) + { + str += MessageService.NewParagraph; + if(!bFullException) str += ex.Message; + else str += ObjectsToMessage(new object[] { ex }, true); + } + + ShowWarning(str); + } + + public static void ShowLoadWarning(IOConnectionInfo ioConnection, Exception ex) + { + if(ioConnection != null) + ShowLoadWarning(ioConnection.GetDisplayName(), ex, false); + else ShowWarning(ex); + } + + public static void ShowSaveWarning(string strFilePath, Exception ex, + bool bCorruptionWarning) + { + FileLockException fl = (ex as FileLockException); + if(fl != null) + { + ShowWarning(fl.Message); + return; + } + + string str = string.Empty; + if((strFilePath != null) && (strFilePath.Length > 0)) + str += strFilePath + MessageService.NewParagraph; + + str += KLRes.FileSaveFailed; + + if((ex != null) && (ex.Message != null) && (ex.Message.Length > 0)) + str += MessageService.NewParagraph + ex.Message; + + if(bCorruptionWarning) + str += MessageService.NewParagraph + KLRes.FileSaveCorruptionWarning; + + ShowWarning(str); + } + + public static void ShowSaveWarning(IOConnectionInfo ioConnection, Exception ex, + bool bCorruptionWarning) + { + if(ioConnection != null) + ShowSaveWarning(ioConnection.GetDisplayName(), ex, bCorruptionWarning); + else ShowWarning(ex); + } + + public static void ExternalIncrementMessageCount() + { + ++m_uCurrentMessageCount; + } + + public static void ExternalDecrementMessageCount() + { + --m_uCurrentMessageCount; + } + } +} + +#endif // false diff --git a/ModernKeePassLib/Utility/StrUtil.cs b/ModernKeePassLib/Utility/StrUtil.cs new file mode 100644 index 0000000..0b936f2 --- /dev/null +++ b/ModernKeePassLib/Utility/StrUtil.cs @@ -0,0 +1,1362 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.Text; +//using System.Drawing; +using ModernKeePassLib.WinRTAdaptors; +using System.IO; +using System.Text.RegularExpressions; + +using ModernKeePassLib.Collections; +using ModernKeePassLib.Security; + +namespace ModernKeePassLib.Utility +{ + /// + /// Character stream class. + /// + public sealed class CharStream + { + private string m_strString = string.Empty; + private int m_nPos = 0; + + public CharStream(string str) + { + Debug.Assert(str != null); + if(str == null) throw new ArgumentNullException("str"); + + m_strString = str; + } + + public void Seek(SeekOrigin org, int nSeek) + { + if(org == SeekOrigin.Begin) + m_nPos = nSeek; + else if(org == SeekOrigin.Current) + m_nPos += nSeek; + else if(org == SeekOrigin.End) + m_nPos = m_strString.Length + nSeek; + } + + public char ReadChar() + { + if(m_nPos < 0) return char.MinValue; + if(m_nPos >= m_strString.Length) return char.MinValue; + + char chRet = m_strString[m_nPos]; + ++m_nPos; + return chRet; + } + + public char ReadChar(bool bSkipWhiteSpace) + { + if(bSkipWhiteSpace == false) return ReadChar(); + + while(true) + { + char ch = ReadChar(); + + if((ch != ' ') && (ch != '\t') && (ch != '\r') && (ch != '\n')) + return ch; + } + } + + public char PeekChar() + { + if(m_nPos < 0) return char.MinValue; + if(m_nPos >= m_strString.Length) return char.MinValue; + + return m_strString[m_nPos]; + } + + public char PeekChar(bool bSkipWhiteSpace) + { + if(bSkipWhiteSpace == false) return PeekChar(); + + int iIndex = m_nPos; + while(true) + { + if(iIndex < 0) return char.MinValue; + if(iIndex >= m_strString.Length) return char.MinValue; + + char ch = m_strString[iIndex]; + + if((ch != ' ') && (ch != '\t') && (ch != '\r') && (ch != '\n')) + return ch; + + ++iIndex; + } + } + } + + public enum StrEncodingType + { + Unknown = 0, + Default, + Ascii, + Utf7, + Utf8, + Utf16LE, + Utf16BE, + Utf32LE, + Utf32BE + } + + public sealed class StrEncodingInfo + { + private readonly StrEncodingType m_type; + public StrEncodingType Type + { + get { return m_type; } + } + + private readonly string m_strName; + public string Name + { + get { return m_strName; } + } + + private readonly Encoding m_enc; + public Encoding Encoding + { + get { return m_enc; } + } + + private readonly uint m_cbCodePoint; + /// + /// Size of a character in bytes. + /// + public uint CodePointSize + { + get { return m_cbCodePoint; } + } + + private readonly byte[] m_vSig; + /// + /// Start signature of the text (byte order mark). + /// May be null or empty, if no signature is known. + /// + public byte[] StartSignature + { + get { return m_vSig; } + } + + public StrEncodingInfo(StrEncodingType t, string strName, Encoding enc, + uint cbCodePoint, byte[] vStartSig) + { + if(strName == null) throw new ArgumentNullException("strName"); + if(enc == null) throw new ArgumentNullException("enc"); + if(cbCodePoint <= 0) throw new ArgumentOutOfRangeException("cbCodePoint"); + + m_type = t; + m_strName = strName; + m_enc = enc; + m_cbCodePoint = cbCodePoint; + m_vSig = vStartSig; + } + } + + /// + /// A class containing various string helper methods. + /// + public static class StrUtil + { + public const StringComparison CaseIgnoreCmp = StringComparison.OrdinalIgnoreCase; + + public static StringComparer CaseIgnoreComparer + { + get { return StringComparer.OrdinalIgnoreCase; } + } + + private static bool m_bRtl = false; + public static bool RightToLeft + { + get { return m_bRtl; } + set { m_bRtl = value; } + } + + private static UTF8Encoding m_encUtf8 = null; + public static UTF8Encoding Utf8 + { + get + { + if(m_encUtf8 == null) m_encUtf8 = new UTF8Encoding(false, false); + return m_encUtf8; + } + } + + private static List m_lEncs = null; + public static IEnumerable Encodings + { + get + { + if(m_lEncs == null) + { + m_lEncs = new List(); +#if !KeePassWinRT + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Default, + + +#if !KeePassLibSD + Encoding.Default.EncodingName, +#else + Encoding.Default.WebName, +#endif + Encoding.Default, + (uint)Encoding.Default.GetBytes("a").Length, null)); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Ascii, + "ASCII", Encoding.ASCII, 1, null)); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf7, + "Unicode (UTF-7)", Encoding.UTF7, 1, null)); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf8, + "Unicode (UTF-8)", StrUtil.Utf8, 1, new byte[] { 0xEF, 0xBB, 0xBF })); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16LE, + "Unicode (UTF-16 LE)", new UnicodeEncoding(false, false), + 2, new byte[] { 0xFF, 0xFE })); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16BE, + "Unicode (UTF-16 BE)", new UnicodeEncoding(true, false), + 2, new byte[] { 0xFE, 0xFF })); +#if !KeePassLibSD + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf32LE, + "Unicode (UTF-32 LE)", new UTF32Encoding(false, false), + 4, new byte[] { 0xFF, 0xFE, 0x0, 0x0 })); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf32BE, + "Unicode (UTF-32 BE)", new UTF32Encoding(true, false), + 4, new byte[] { 0x0, 0x0, 0xFE, 0xFF })); +#endif +#else // KeePassWinRT + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf8, + "Unicode (UTF-8)", StrUtil.Utf8, 1, new byte[] { 0xEF, 0xBB, 0xBF })); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16LE, + "Unicode (UTF-16 LE)", new UnicodeEncoding(false, false), + 2, new byte[] { 0xFF, 0xFE })); + m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16BE, + "Unicode (UTF-16 BE)", new UnicodeEncoding(true, false), + 2, new byte[] { 0xFE, 0xFF })); +#endif + } + + return m_lEncs; + } + } + + // public static string RtfPar + // { + // // get { return (m_bRtl ? "\\rtlpar " : "\\par "); } + // get { return "\\par "; } + // } + + // /// + // /// Convert a string into a valid RTF string. + // /// + // /// Any string. + // /// RTF-encoded string. + // public static string MakeRtfString(string str) + // { + // Debug.Assert(str != null); if(str == null) throw new ArgumentNullException("str"); + // str = str.Replace("\\", "\\\\"); + // str = str.Replace("\r", string.Empty); + // str = str.Replace("{", "\\{"); + // str = str.Replace("}", "\\}"); + // str = str.Replace("\n", StrUtil.RtfPar); + // StringBuilder sbEncoded = new StringBuilder(); + // for(int i = 0; i < str.Length; ++i) + // { + // char ch = str[i]; + // if((int)ch >= 256) + // { + // sbEncoded.Append("\\u"); + // sbEncoded.Append((int)ch); + // sbEncoded.Append('?'); + // } + // else sbEncoded.Append(ch); + // } + // return sbEncoded.ToString(); + // } + + /// + /// Convert a string into a valid HTML sequence representing that string. + /// + /// String to convert. + /// String, HTML-encoded. + public static string StringToHtml(string str) + { + Debug.Assert(str != null); if(str == null) throw new ArgumentNullException("str"); + + str = str.Replace(@"&", @"&"); + str = str.Replace(@"<", @"<"); + str = str.Replace(@">", @">"); + str = str.Replace("\"", @"""); + str = str.Replace("\'", @"'"); + + str = NormalizeNewLines(str, false); + str = str.Replace("\n", @"
"); + + return str; + } + + public static string XmlToString(string str) + { + Debug.Assert(str != null); if(str == null) throw new ArgumentNullException("str"); + + str = str.Replace(@"&", @"&"); + str = str.Replace(@"<", @"<"); + str = str.Replace(@">", @">"); + str = str.Replace(@""", "\""); + str = str.Replace(@"'", "\'"); + + return str; + } + + public static string ReplaceCaseInsensitive(string strString, string strFind, + string strNew) + { + Debug.Assert(strString != null); if(strString == null) return strString; + Debug.Assert(strFind != null); if(strFind == null) return strString; + Debug.Assert(strNew != null); if(strNew == null) return strString; + + string str = strString; + + int nPos = 0; + while(nPos < str.Length) + { + nPos = str.IndexOf(strFind, nPos, StringComparison.OrdinalIgnoreCase); + if(nPos < 0) break; + + str = str.Remove(nPos, strFind.Length); + str = str.Insert(nPos, strNew); + + nPos += strNew.Length; + } + + return str; + } + + /// + /// Split up a command-line into application and argument. + /// + /// Command-line to split. + /// Application path. + /// Arguments. + public static void SplitCommandLine(string strCmdLine, out string strApp, out string strArgs) + { + Debug.Assert(strCmdLine != null); if(strCmdLine == null) throw new ArgumentNullException("strCmdLine"); + + string str = strCmdLine.Trim(); + + strApp = null; strArgs = null; + + if(str.StartsWith("\"")) + { + int nSecond = str.IndexOf('\"', 1); + if(nSecond >= 1) + { + strApp = str.Substring(1, nSecond - 1).Trim(); + strArgs = str.Remove(0, nSecond + 1).Trim(); + } + } + + if(strApp == null) + { + int nSpace = str.IndexOf(' '); + + if(nSpace >= 0) + { + strApp = str.Substring(0, nSpace); + strArgs = str.Remove(0, nSpace).Trim(); + } + else strApp = strCmdLine; + } + + if(strApp == null) strApp = string.Empty; + if(strArgs == null) strArgs = string.Empty; + } + + // /// + // /// Initialize an RTF document based on given font face and size. + // /// + // /// StringBuilder to put the generated RTF into. + // /// Face name of the font to use. + // /// Size of the font to use. + // public static void InitRtf(StringBuilder sb, string strFontFace, float fFontSize) + // { + // Debug.Assert(sb != null); if(sb == null) throw new ArgumentNullException("sb"); + // Debug.Assert(strFontFace != null); if(strFontFace == null) throw new ArgumentNullException("strFontFace"); + // sb.Append("{\\rtf1"); + // if(m_bRtl) sb.Append("\\fbidis"); + // sb.Append("\\ansi\\ansicpg"); + // sb.Append(Encoding.Default.CodePage); + // sb.Append("\\deff0{\\fonttbl{\\f0\\fswiss MS Sans Serif;}{\\f1\\froman\\fcharset2 Symbol;}{\\f2\\fswiss "); + // sb.Append(strFontFace); + // sb.Append(";}{\\f3\\fswiss Arial;}}"); + // sb.Append("{\\colortbl\\red0\\green0\\blue0;}"); + // if(m_bRtl) sb.Append("\\rtldoc"); + // sb.Append("\\deflang1031\\pard\\plain\\f2\\cf0 "); + // sb.Append("\\fs"); + // sb.Append((int)(fFontSize * 2)); + // if(m_bRtl) sb.Append("\\rtlpar\\qr\\rtlch "); + // } + + // /// + // /// Convert a simple HTML string to an RTF string. + // /// + // /// Input HTML string. + // /// RTF string representing the HTML input string. + // public static string SimpleHtmlToRtf(string strHtmlString) + // { + // StringBuilder sb = new StringBuilder(); + // StrUtil.InitRtf(sb, "Microsoft Sans Serif", 8.25f); + // sb.Append(" "); + // string str = MakeRtfString(strHtmlString); + // str = str.Replace("", "\\b "); + // str = str.Replace("", "\\b0 "); + // str = str.Replace("", "\\i "); + // str = str.Replace("", "\\i0 "); + // str = str.Replace("", "\\ul "); + // str = str.Replace("", "\\ul0 "); + // str = str.Replace("
", StrUtil.RtfPar); + // sb.Append(str); + // return sb.ToString(); + // } + + /// + /// Convert a Color to a HTML color identifier string. + /// + /// Color to convert. + /// If this is true, an empty string + /// is returned if the color is transparent. + /// HTML color identifier string. + public static string ColorToUnnamedHtml(Color color, bool bEmptyIfTransparent) + { + if(bEmptyIfTransparent && (color.A != 255)) + return string.Empty; + + StringBuilder sb = new StringBuilder(); + byte bt; + + sb.Append('#'); + + bt = (byte)(color.R >> 4); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + bt = (byte)(color.R & 0x0F); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + + bt = (byte)(color.G >> 4); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + bt = (byte)(color.G & 0x0F); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + + bt = (byte)(color.B >> 4); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + bt = (byte)(color.B & 0x0F); + if(bt < 10) sb.Append((char)('0' + bt)); else sb.Append((char)('A' - 10 + bt)); + + return sb.ToString(); + } + + /// + /// Format an exception and convert it to a string. + /// + /// Exception to convert/format. + /// String representing the exception. + public static string FormatException(Exception excp) + { + Debug.Assert(false, "not yet implemented"); + return ""; +#if TODO + string strText = string.Empty; + + if(excp.Message != null) + strText += excp.Message + MessageService.NewLine; +#if !KeePassLibSD + if(excp.Source != null) + strText += excp.Source + MessageService.NewLine; +#endif + if(excp.StackTrace != null) + strText += excp.StackTrace + MessageService.NewLine; +#if !KeePassLibSD + if(excp.TargetSite != null) + strText += excp.TargetSite.ToString() + MessageService.NewLine; + + if(excp.Data != null) + { + strText += MessageService.NewLine; + foreach(DictionaryEntry de in excp.Data) + strText += @"'" + de.Key + @"' -> '" + de.Value + @"'" + + MessageService.NewLine; + } +#endif + + if(excp.InnerException != null) + { + strText += MessageService.NewLine + "Inner:" + MessageService.NewLine; + if(excp.InnerException.Message != null) + strText += excp.InnerException.Message + MessageService.NewLine; +#if !KeePassLibSD + if(excp.InnerException.Source != null) + strText += excp.InnerException.Source + MessageService.NewLine; +#endif + if(excp.InnerException.StackTrace != null) + strText += excp.InnerException.StackTrace + MessageService.NewLine; +#if !KeePassLibSD + if(excp.InnerException.TargetSite != null) + strText += excp.InnerException.TargetSite.ToString(); + + if(excp.InnerException.Data != null) + { + strText += MessageService.NewLine; + foreach(DictionaryEntry de in excp.InnerException.Data) + strText += @"'" + de.Key + @"' -> '" + de.Value + @"'" + + MessageService.NewLine; + } +#endif + } + + return strText; +#endif + } + + public static bool TryParseUShort(string str, out ushort u) + { +#if !KeePassLibSD + return ushort.TryParse(str, out u); +#else + try { u = ushort.Parse(str); return true; } + catch(Exception) { u = 0; return false; } +#endif + } + + public static bool TryParseInt(string str, out int n) + { +#if !KeePassLibSD + return int.TryParse(str, out n); +#else + try { n = int.Parse(str); return true; } + catch(Exception) { n = 0; return false; } +#endif + } + + public static bool TryParseUInt(string str, out uint u) + { +#if !KeePassLibSD + return uint.TryParse(str, out u); +#else + try { u = uint.Parse(str); return true; } + catch(Exception) { u = 0; return false; } +#endif + } + + public static bool TryParseLong(string str, out long n) + { +#if !KeePassLibSD + return long.TryParse(str, out n); +#else + try { n = long.Parse(str); return true; } + catch(Exception) { n = 0; return false; } +#endif + } + + public static bool TryParseULong(string str, out ulong u) + { +#if !KeePassLibSD + return ulong.TryParse(str, out u); +#else + try { u = ulong.Parse(str); return true; } + catch(Exception) { u = 0; return false; } +#endif + } + + public static bool TryParseDateTime(string str, out DateTime dt) + { +#if !KeePassLibSD + return DateTime.TryParse(str, out dt); +#else + try { dt = DateTime.Parse(str); return true; } + catch(Exception) { dt = DateTime.MinValue; return false; } +#endif + } + + public static string CompactString3Dots(string strText, int nMaxChars) + { + Debug.Assert(strText != null); + if(strText == null) throw new ArgumentNullException("strText"); + Debug.Assert(nMaxChars >= 0); + if(nMaxChars < 0) throw new ArgumentOutOfRangeException("nMaxChars"); + + if(nMaxChars == 0) return string.Empty; + if(strText.Length <= nMaxChars) return strText; + + if(nMaxChars <= 3) return strText.Substring(0, nMaxChars); + + return strText.Substring(0, nMaxChars - 3) + "..."; + } + + public static string GetStringBetween(string strText, int nStartIndex, + string strStart, string strEnd) + { + int nTemp; + return GetStringBetween(strText, nStartIndex, strStart, strEnd, out nTemp); + } + + public static string GetStringBetween(string strText, int nStartIndex, + string strStart, string strEnd, out int nInnerStartIndex) + { + if(strText == null) throw new ArgumentNullException("strText"); + if(strStart == null) throw new ArgumentNullException("strStart"); + if(strEnd == null) throw new ArgumentNullException("strEnd"); + + nInnerStartIndex = -1; + + int nIndex = strText.IndexOf(strStart, nStartIndex); + if(nIndex < 0) return string.Empty; + + nIndex += strStart.Length; + + int nEndIndex = strText.IndexOf(strEnd, nIndex); + if(nEndIndex < 0) return string.Empty; + + nInnerStartIndex = nIndex; + return strText.Substring(nIndex, nEndIndex - nIndex); + } + + /// + /// Removes all characters that are not valid XML characters, + /// according to http://www.w3.org/TR/xml/#charsets . + /// + /// Source text. + /// Text containing only valid XML characters. + public static string SafeXmlString(string strText) + { + Debug.Assert(strText != null); // No throw + if(string.IsNullOrEmpty(strText)) return strText; + + char[] vChars = strText.ToCharArray(); + StringBuilder sb = new StringBuilder(strText.Length, strText.Length); + char ch; + + for(int i = 0; i < vChars.Length; ++i) + { + ch = vChars[i]; + + if(((ch >= 0x20) && (ch <= 0xD7FF)) || + (ch == 0x9) || (ch == 0xA) || (ch == 0xD) || + ((ch >= 0xE000) && (ch <= 0xFFFD))) + sb.Append(ch); + // Range ((ch >= 0x10000) && (ch <= 0x10FFFF)) excluded + } + + return sb.ToString(); + } + + private static Regex m_rxNaturalSplit = null; + public static int CompareNaturally(string strX, string strY) + { + Debug.Assert(false, "not yet implemented"); + return 0; +#if TODO + Debug.Assert(strX != null); + if(strX == null) throw new ArgumentNullException("strX"); + Debug.Assert(strY != null); + if(strY == null) throw new ArgumentNullException("strY"); + + if(NativeMethods.SupportsStrCmpNaturally) + return NativeMethods.StrCmpNaturally(strX, strY); + + strX = strX.ToLower(); // Case-insensitive comparison + strY = strY.ToLower(); + + if(m_rxNaturalSplit == null) + m_rxNaturalSplit = new Regex(@"([0-9]+)", RegexOptions.Compiled); + + string[] vPartsX = m_rxNaturalSplit.Split(strX); + string[] vPartsY = m_rxNaturalSplit.Split(strY); + + for(int i = 0; i < Math.Min(vPartsX.Length, vPartsY.Length); ++i) + { + string strPartX = vPartsX[i], strPartY = vPartsY[i]; + int iPartCompare; + +#if KeePassLibSD + ulong uX = 0, uY = 0; + try + { + uX = ulong.Parse(strPartX); + uY = ulong.Parse(strPartY); + iPartCompare = uX.CompareTo(uY); + } + catch(Exception) { iPartCompare = strPartX.CompareTo(strPartY); } +#else + ulong uX, uY; + if(ulong.TryParse(strPartX, out uX) && ulong.TryParse(strPartY, out uY)) + iPartCompare = uX.CompareTo(uY); + else iPartCompare = strPartX.CompareTo(strPartY); +#endif + + if(iPartCompare != 0) return iPartCompare; + } + + if(vPartsX.Length == vPartsY.Length) return 0; + if(vPartsX.Length < vPartsY.Length) return -1; + return 1; +#endif + } + + public static string RemoveAccelerator(string strMenuText) + { + if(strMenuText == null) throw new ArgumentNullException("strMenuText"); + + string str = strMenuText; + + for(char ch = 'A'; ch <= 'Z'; ++ch) + { + string strEnhAcc = @"(&" + ch.ToString() + @")"; + if(str.IndexOf(strEnhAcc) >= 0) + { + str = str.Replace(@" " + strEnhAcc, string.Empty); + str = str.Replace(strEnhAcc, string.Empty); + } + } + + str = str.Replace(@"&", string.Empty); + + return str; + } + + public static bool IsHexString(string str, bool bStrict) + { + if(str == null) throw new ArgumentNullException("str"); + if(str.Length == 0) return true; + + foreach(char ch in str) + { + if((ch >= '0') && (ch <= '9')) continue; + if((ch >= 'a') && (ch <= 'z')) continue; + if((ch >= 'A') && (ch <= 'Z')) continue; + + if(bStrict) return false; + + if((ch == ' ') || (ch == '\t') || (ch == '\r') || (ch == '\n')) + continue; + + return false; + } + + return true; + } + +#if !KeePassLibSD + private static readonly char[] m_vPatternPartsSep = new char[]{ '*' }; + public static bool SimplePatternMatch(string strPattern, string strText, + StringComparison sc) + { + if(strPattern == null) throw new ArgumentNullException("strPattern"); + if(strText == null) throw new ArgumentNullException("strText"); + + if(strPattern.IndexOf('*') < 0) return strText.Equals(strPattern, sc); + + string[] vPatternParts = strPattern.Split(m_vPatternPartsSep, + StringSplitOptions.RemoveEmptyEntries); + if(vPatternParts == null) { Debug.Assert(false); return true; } + if(vPatternParts.Length == 0) return true; + + if(strText.Length == 0) return false; + + if(!strPattern.StartsWith(@"*") && !strText.StartsWith(vPatternParts[0], sc)) + { + return false; + } + + if(!strPattern.EndsWith(@"*") && !strText.EndsWith(vPatternParts[ + vPatternParts.Length - 1], sc)) + { + return false; + } + + int iOffset = 0; + for(int i = 0; i < vPatternParts.Length; ++i) + { + string strPart = vPatternParts[i]; + + int iFound = strText.IndexOf(strPart, iOffset, sc); + if(iFound < iOffset) return false; + + iOffset = iFound + strPart.Length; + if(iOffset == strText.Length) return (i == (vPatternParts.Length - 1)); + } + + return true; + } +#endif // !KeePassLibSD + + public static bool StringToBool(string str) + { + if(string.IsNullOrEmpty(str)) return false; // No assert + + string s = str.Trim().ToLower(); + if(s == "true") return true; + if(s == "yes") return true; + if(s == "1") return true; + if(s == "enabled") return true; + if(s == "checked") return true; + + return false; + } + + public static bool? StringToBoolEx(string str) + { + if(string.IsNullOrEmpty(str)) return null; + + string s = str.Trim().ToLower(); + if(s == "true") return true; + if(s == "false") return false; + + return null; + } + + public static string BoolToString(bool bValue) + { + return (bValue ? "true" : "false"); + } + + public static string BoolToStringEx(bool? bValue) + { + if(bValue.HasValue) return BoolToString(bValue.Value); + return "null"; + } + + /// + /// Normalize new line characters in a string. Input strings may + /// contain mixed new line character sequences from all commonly + /// used operating systems (i.e. \r\n from Windows, \n from Unix + /// and \r from Mac OS. + /// + /// String with mixed new line characters. + /// If true, new line characters + /// are normalized for Windows (\r\n); if false, new line + /// characters are normalized for Unix (\n). + /// String with normalized new line characters. + public static string NormalizeNewLines(string str, bool bWindows) + { + if(string.IsNullOrEmpty(str)) return str; + + str = str.Replace("\r\n", "\n"); + str = str.Replace("\r", "\n"); + + if(bWindows) str = str.Replace("\n", "\r\n"); + + return str; + } + + private static char[] m_vNewLineChars = null; + public static void NormalizeNewLines(ProtectedStringDictionary dict, + bool bWindows) + { + if(dict == null) { Debug.Assert(false); return; } + + if(m_vNewLineChars == null) + m_vNewLineChars = new char[]{ '\r', '\n' }; + + List vKeys = dict.GetKeys(); + foreach(string strKey in vKeys) + { + ProtectedString ps = dict.Get(strKey); + if(ps == null) { Debug.Assert(false); continue; } + + string strValue = ps.ReadString(); + if(strValue.IndexOfAny(m_vNewLineChars) < 0) continue; + + dict.Set(strKey, new ProtectedString(ps.IsProtected, + NormalizeNewLines(strValue, bWindows))); + } + } + + public static string AlphaNumericOnly(string str) + { + if(string.IsNullOrEmpty(str)) return str; + + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < str.Length; ++i) + { + char ch = str[i]; + if(((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || + ((ch >= '0') && (ch <= '9'))) + sb.Append(ch); + } + + return sb.ToString(); + } + + public static string FormatDataSize(ulong uBytes) + { + const ulong uKB = 1024; + const ulong uMB = uKB * uKB; + const ulong uGB = uMB * uKB; + const ulong uTB = uGB * uKB; + + if(uBytes == 0) return "0 KB"; + if(uBytes <= uKB) return "1 KB"; + if(uBytes <= uMB) return (((uBytes - 1UL) / uKB) + 1UL).ToString() + " KB"; + if(uBytes <= uGB) return (((uBytes - 1UL) / uMB) + 1UL).ToString() + " MB"; + if(uBytes <= uTB) return (((uBytes - 1UL) / uGB) + 1UL).ToString() + " GB"; + + return (((uBytes - 1UL)/ uTB) + 1UL).ToString() + " TB"; + } + + public static string FormatDataSizeKB(ulong uBytes) + { + const ulong uKB = 1024; + + if(uBytes == 0) return "0 KB"; + if(uBytes <= uKB) return "1 KB"; + + return (((uBytes - 1UL) / uKB) + 1UL).ToString() + " KB"; + } + + private static readonly char[] m_vVersionSep = new char[]{ '.', ',' }; + public static ulong ParseVersion(string strVersion) + { + if(strVersion == null) { Debug.Assert(false); return 0; } + + string[] vVer = strVersion.Split(m_vVersionSep); + if((vVer == null) || (vVer.Length == 0)) { Debug.Assert(false); return 0; } + + ushort uPart; + StrUtil.TryParseUShort(vVer[0].Trim(), out uPart); + ulong uVer = ((ulong)uPart << 48); + + if(vVer.Length >= 2) + { + StrUtil.TryParseUShort(vVer[1].Trim(), out uPart); + uVer |= ((ulong)uPart << 32); + } + + if(vVer.Length >= 3) + { + StrUtil.TryParseUShort(vVer[2].Trim(), out uPart); + uVer |= ((ulong)uPart << 16); + } + + if(vVer.Length >= 4) + { + StrUtil.TryParseUShort(vVer[3].Trim(), out uPart); + uVer |= (ulong)uPart; + } + + return uVer; + } + + public static string VersionToString(ulong uVersion) + { + return VersionToString(uVersion, false); + } + + public static string VersionToString(ulong uVersion, + bool bEnsureAtLeastTwoComp) + { + string str = string.Empty; + bool bMultiComp = false; + + for(int i = 0; i < 4; ++i) + { + ushort us = (ushort)(uVersion & 0xFFFFUL); + + if((us != 0) || (str.Length > 0)) + { + if(str.Length > 0) + { + str = "." + str; + bMultiComp = true; + } + + str = us.ToString() + str; + } + + uVersion >>= 16; + } + + if(bEnsureAtLeastTwoComp && !bMultiComp && (str.Length > 0)) + str += ".0"; + + return str; + } + + private static readonly byte[] m_pbOptEnt = { 0xA5, 0x74, 0x2E, 0xEC }; + + public static string EncryptString(string strPlainText) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(string.IsNullOrEmpty(strPlainText)) return string.Empty; + + try + { + byte[] pbPlain = StrUtil.Utf8.GetBytes(strPlainText); + byte[] pbEnc = ProtectedData.Protect(pbPlain, m_pbOptEnt, + DataProtectionScope.CurrentUser); + +#if !KeePassLibSD + return Convert.ToBase64String(pbEnc, Base64FormattingOptions.None); +#else + return Convert.ToBase64String(pbEnc); +#endif + } + catch(Exception) { Debug.Assert(false); } + + return strPlainText; +#endif + } + + public static string DecryptString(string strCipherText) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(string.IsNullOrEmpty(strCipherText)) return string.Empty; + + try + { + byte[] pbEnc = Convert.FromBase64String(strCipherText); + byte[] pbPlain = ProtectedData.Unprotect(pbEnc, m_pbOptEnt, + DataProtectionScope.CurrentUser); + + return StrUtil.Utf8.GetString(pbPlain, 0, pbPlain.Length); + } + catch(Exception) { Debug.Assert(false); } + + return strCipherText; +#endif + } + + public static string SerializeIntArray(int[] vNumbers) + { + if(vNumbers == null) throw new ArgumentNullException("vNumbers"); + + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < vNumbers.Length; ++i) + { + if(i > 0) sb.Append(' '); + sb.Append(vNumbers[i]); + } + + return sb.ToString(); + } + + public static int[] DeserializeIntArray(string strSerialized) + { + if(strSerialized == null) throw new ArgumentNullException("strSerialized"); + if(strSerialized.Length == 0) return new int[0]; + + string[] vParts = strSerialized.Split(' '); + int[] v = new int[vParts.Length]; + + for(int i = 0; i < vParts.Length; ++i) + { + int n; + if(!TryParseInt(vParts[i], out n)) { Debug.Assert(false); } + v[i] = n; + } + + return v; + } + + private static readonly char[] m_vTagSep = new char[]{ ',', ';', ':' }; + public static string TagsToString(List vTags, bool bForDisplay) + { + if(vTags == null) throw new ArgumentNullException("vTags"); + + StringBuilder sb = new StringBuilder(); + bool bFirst = true; + + foreach(string strTag in vTags) + { + if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); continue; } + Debug.Assert(strTag.IndexOfAny(m_vTagSep) < 0); + + if(!bFirst) + { + if(bForDisplay) sb.Append(", "); + else sb.Append(';'); + } + sb.Append(strTag); + + bFirst = false; + } + + return sb.ToString(); + } + + public static List StringToTags(string strTags) + { + if(strTags == null) throw new ArgumentNullException("strTags"); + + List lTags = new List(); + if(strTags.Length == 0) return lTags; + + string[] vTags = strTags.Split(m_vTagSep); + foreach(string strTag in vTags) + { + string strFlt = strTag.Trim(); + if(strFlt.Length > 0) lTags.Add(strFlt); + } + + return lTags; + } + + public static string Obfuscate(string strPlain) + { + if(strPlain == null) { Debug.Assert(false); return string.Empty; } + if(strPlain.Length == 0) return string.Empty; + + byte[] pb = StrUtil.Utf8.GetBytes(strPlain); + + Array.Reverse(pb); + for(int i = 0; i < pb.Length; ++i) pb[i] = (byte)(pb[i] ^ 0x65); + +#if !KeePassLibSD && TODO + return Convert.ToBase64String(pb, Base64FormattingOptions.None); +#else + return Convert.ToBase64String(pb); +#endif + } + + public static string Deobfuscate(string strObf) + { + if(strObf == null) { Debug.Assert(false); return string.Empty; } + if(strObf.Length == 0) return string.Empty; + + try + { + byte[] pb = Convert.FromBase64String(strObf); + + for(int i = 0; i < pb.Length; ++i) pb[i] = (byte)(pb[i] ^ 0x65); + Array.Reverse(pb); + + return StrUtil.Utf8.GetString(pb, 0, pb.Length); + } + catch(Exception) { Debug.Assert(false); } + + return string.Empty; + } + + /// + /// Split a string and include the separators in the splitted array. + /// + /// String to split. + /// Separators. + /// Specifies whether separators are + /// matched case-sensitively or not. + /// Splitted string including separators. + public static List SplitWithSep(string str, string[] vSeps, + bool bCaseSensitive) + { + if(str == null) throw new ArgumentNullException("str"); + if(vSeps == null) throw new ArgumentNullException("vSeps"); + + List v = new List(); + while(true) + { + int minIndex = int.MaxValue, minSep = -1; + for(int i = 0; i < vSeps.Length; ++i) + { + string strSep = vSeps[i]; + if(string.IsNullOrEmpty(strSep)) { Debug.Assert(false); continue; } + + int iIndex = (bCaseSensitive ? str.IndexOf(strSep) : + str.IndexOf(strSep, StrUtil.CaseIgnoreCmp)); + if((iIndex >= 0) && (iIndex < minIndex)) + { + minIndex = iIndex; + minSep = i; + } + } + + if(minIndex == int.MaxValue) break; + + v.Add(str.Substring(0, minIndex)); + v.Add(vSeps[minSep]); + + str = str.Substring(minIndex + vSeps[minSep].Length); + } + + v.Add(str); + return v; + } + + public static string MultiToSingleLine(string strMulti) + { + if(strMulti == null) { Debug.Assert(false); return string.Empty; } + if(strMulti.Length == 0) return string.Empty; + + string str = strMulti; + str = str.Replace("\r\n", " "); + str = str.Replace("\r", " "); + str = str.Replace("\n", " "); + + return str; + } + + public static List SplitSearchTerms(string strSearch) + { + List l = new List(); + if(strSearch == null) { Debug.Assert(false); return l; } + + StringBuilder sbTerm = new StringBuilder(); + bool bQuoted = false; + + for(int i = 0; i < strSearch.Length; ++i) + { + char ch = strSearch[i]; + + if(((ch == ' ') || (ch == '\t') || (ch == '\r') || + (ch == '\n')) && !bQuoted) + { + if(sbTerm.Length > 0) l.Add(sbTerm.ToString()); + + sbTerm.Remove(0, sbTerm.Length); + } + else if(ch == '\"') bQuoted = !bQuoted; + else sbTerm.Append(ch); + } + if(sbTerm.Length > 0) l.Add(sbTerm.ToString()); + + return l; + } + + public static int CompareLengthGt(string x, string y) + { + if(x.Length == y.Length) return 0; + return ((x.Length > y.Length) ? -1 : 1); + } + + public static bool IsDataUri(string strUri) + { + if(strUri == null) { Debug.Assert(false); return false; } + + return strUri.StartsWith("data:", StrUtil.CaseIgnoreCmp); + } + + /// + /// Create a data URI (according to RFC 2397). + /// + /// Data to encode. + /// Optional MIME type. If null, + /// an appropriate type is used. + /// Data URI. + public static string DataToDataUri(byte[] pbData, string strMimeType) + { + if(pbData == null) throw new ArgumentNullException("pbData"); + + if(strMimeType == null) strMimeType = "application/octet-stream"; + +#if !KeePassLibSD && TODO + return ("data:" + strMimeType + ";base64," + Convert.ToBase64String( + pbData, Base64FormattingOptions.None)); +#else + return ("data:" + strMimeType + ";base64," + Convert.ToBase64String( + pbData)); +#endif + } + + /// + /// Convert a data URI (according to RFC 2397) to binary data. + /// + /// Data URI to decode. + /// Decoded binary data. + public static byte[] DataUriToData(string strDataUri) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(strDataUri == null) throw new ArgumentNullException("strDataUri"); + if(!strDataUri.StartsWith("data:", StrUtil.CaseIgnoreCmp)) return null; + + int iSep = strDataUri.IndexOf(','); + if(iSep < 0) return null; + + string strDesc = strDataUri.Substring(5, iSep - 5); + bool bBase64 = strDesc.EndsWith(";base64", StrUtil.CaseIgnoreCmp); + + string strData = strDataUri.Substring(iSep + 1); + + if(bBase64) return Convert.FromBase64String(strData); + + MemoryStream ms = new MemoryStream(); + + string[] v = strData.Split('%'); + byte[] pb = Encoding.ASCII.GetBytes(v[0]); + ms.Write(pb, 0, pb.Length); + for(int i = 1; i < v.Length; ++i) + { + ms.WriteByte(Convert.ToByte(v[i].Substring(0, 2), 16)); + pb = Encoding.ASCII.GetBytes(v[i].Substring(2)); + ms.Write(pb, 0, pb.Length); + } + + pb = ms.ToArray(); + ms.Close(); + return pb; +#endif + } + + /// + /// Remove placeholders from a string (wrapped in '{' and '}'). + /// This doesn't remove environment variables (wrapped in '%'). + /// + public static string RemovePlaceholders(string str) + { + if(str == null) { Debug.Assert(false); return string.Empty; } + + while(true) + { + int iPlhStart = str.IndexOf('{'); + if(iPlhStart < 0) break; + + int iPlhEnd = str.IndexOf('}', iPlhStart); // '{' might be at end + if(iPlhEnd < 0) break; + + str = (str.Substring(0, iPlhStart) + str.Substring(iPlhEnd + 1)); + } + + return str; + } + + public static StrEncodingInfo GetEncoding(StrEncodingType t) + { + foreach(StrEncodingInfo sei in StrUtil.Encodings) + { + if(sei.Type == t) return sei; + } + + return null; + } + + public static StrEncodingInfo GetEncoding(string strName) + { + foreach(StrEncodingInfo sei in StrUtil.Encodings) + { + if(sei.Name == strName) return sei; + } + + return null; + } + } +} diff --git a/ModernKeePassLib/Utility/TimeUtil.cs b/ModernKeePassLib/Utility/TimeUtil.cs new file mode 100644 index 0000000..3937678 --- /dev/null +++ b/ModernKeePassLib/Utility/TimeUtil.cs @@ -0,0 +1,222 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Diagnostics; + +namespace ModernKeePassLib.Utility +{ + /// + /// Contains various static time structure manipulation and conversion + /// routines. + /// + public static class TimeUtil + { + /// + /// Length of a compressed PW_TIME structure in bytes. + /// + public const int PwTimeLength = 7; + + /// + /// Pack a DateTime object into 5 bytes. Layout: 2 zero bits, + /// year 12 bits, month 4 bits, day 5 bits, hour 5 bits, minute 6 + /// bits, second 6 bits. + /// + /// + /// + public static byte[] PackTime(DateTime dt) + { + byte[] pb = new byte[5]; + + // Pack time to 5 byte structure: + // Byte bits: 11111111 22222222 33333333 44444444 55555555 + // Contents : 00YYYYYY YYYYYYMM MMDDDDDH HHHHMMMM MMSSSSSS + pb[0] = (byte)((dt.Year >> 6) & 0x3F); + pb[1] = (byte)(((dt.Year & 0x3F) << 2) | ((dt.Month >> 2) & 0x03)); + pb[2] = (byte)(((dt.Month & 0x03) << 6) | ((dt.Day & 0x1F) << 1) | + ((dt.Hour >> 4) & 0x01)); + pb[3] = (byte)(((dt.Hour & 0x0F) << 4) | ((dt.Minute >> 2) & 0x0F)); + pb[4] = (byte)(((dt.Minute & 0x03) << 6) | (dt.Second & 0x3F)); + + return pb; + } + + /// + /// Unpack a packed time (5 bytes, packed by the PackTime + /// member function) to a DateTime object. + /// + /// Packed time, 5 bytes. + /// Unpacked DateTime object. + public static DateTime UnpackTime(byte[] pb) + { + Debug.Assert((pb != null) && (pb.Length == 5)); + if(pb == null) throw new ArgumentNullException("pb"); + if(pb.Length != 5) throw new ArgumentException(); + + int n1 = pb[0], n2 = pb[1], n3 = pb[2], n4 = pb[3], n5 = pb[4]; + + // Unpack 5 byte structure to date and time + int nYear = (n1 << 6) | (n2 >> 2); + int nMonth = ((n2 & 0x00000003) << 2) | (n3 >> 6); + int nDay = (n3 >> 1) & 0x0000001F; + int nHour = ((n3 & 0x00000001) << 4) | (n4 >> 4); + int nMinute = ((n4 & 0x0000000F) << 2) | (n5 >> 6); + int nSecond = n5 & 0x0000003F; + + return new DateTime(nYear, nMonth, nDay, nHour, nMinute, nSecond); + } + + /// + /// Pack a DateTime object into 7 bytes (PW_TIME). + /// + /// Object to be encoded. + /// Packed time, 7 bytes (PW_TIME). + public static byte[] PackPwTime(DateTime dt) + { + Debug.Assert(PwTimeLength == 7); + + byte[] pb = new byte[7]; + pb[0] = (byte)(dt.Year & 0xFF); + pb[1] = (byte)(dt.Year >> 8); + pb[2] = (byte)dt.Month; + pb[3] = (byte)dt.Day; + pb[4] = (byte)dt.Hour; + pb[5] = (byte)dt.Minute; + pb[6] = (byte)dt.Second; + + return pb; + } + + /// + /// Unpack a packed time (7 bytes, PW_TIME) to a DateTime object. + /// + /// Packed time, 7 bytes. + /// Unpacked DateTime object. + public static DateTime UnpackPwTime(byte[] pb) + { + Debug.Assert(PwTimeLength == 7); + + Debug.Assert(pb != null); if(pb == null) throw new ArgumentNullException("pb"); + Debug.Assert(pb.Length == 7); if(pb.Length != 7) throw new ArgumentException(); + + return new DateTime(((int)pb[1] << 8) | (int)pb[0], (int)pb[2], (int)pb[3], + (int)pb[4], (int)pb[5], (int)pb[6]); + } + + /// + /// Convert a DateTime object to a displayable string. + /// + /// DateTime object to convert to a string. + /// String representing the specified DateTime object. + public static string ToDisplayString(DateTime dt) + { + return dt.ToString(); + } + + public static string ToDisplayStringDateOnly(DateTime dt) + { + return dt.ToString("d"); + } + + public static DateTime FromDisplayString(string strDisplay) + { + DateTime dt; + +#if !KeePassLibSD + if(DateTime.TryParse(strDisplay, out dt)) return dt; +#else + try { dt = DateTime.Parse(strDisplay); return dt; } + catch(Exception) { } +#endif + + Debug.Assert(false); + return DateTime.Now; + } + + public static string SerializeUtc(DateTime dt) + { + string str = dt.ToUniversalTime().ToString("s"); + if(str.EndsWith("Z") == false) str += "Z"; + return str; + } + + public static bool TryDeserializeUtc(string str, out DateTime dt) + { + if(str == null) throw new ArgumentNullException("str"); + + if(str.EndsWith("Z")) str = str.Substring(0, str.Length - 1); + + bool bResult = StrUtil.TryParseDateTime(str, out dt); + if(bResult) dt = dt.ToLocalTime(); + return bResult; + } + + private static DateTime? m_dtUnixRoot = null; + public static DateTime ConvertUnixTime(double dtUnix) + { + try + { + if(!m_dtUnixRoot.HasValue) + m_dtUnixRoot = (new DateTime(1970, 1, 1, 0, 0, 0, 0, + DateTimeKind.Utc)).ToLocalTime(); + + return m_dtUnixRoot.Value.AddSeconds(dtUnix); + } + catch(Exception) { Debug.Assert(false); } + + return DateTime.Now; + } + +#if !KeePassLibSD + private static string[] m_vUSMonths = null; + /// + /// Parse a US textual date string, like e.g. "January 02, 2012". + /// + public static DateTime? ParseUSTextDate(string strDate) + { + if(strDate == null) { Debug.Assert(false); return null; } + + if(m_vUSMonths == null) + m_vUSMonths = new string[]{ "January", "February", "March", + "April", "May", "June", "July", "August", "September", + "October", "November", "December" }; + + string str = strDate.Trim(); + for(int i = 0; i < m_vUSMonths.Length; ++i) + { + if(str.StartsWith(m_vUSMonths[i], StrUtil.CaseIgnoreCmp)) + { + str = str.Substring(m_vUSMonths[i].Length); + string[] v = str.Split(new char[]{ ',', ';' }); + if((v == null) || (v.Length != 2)) return null; + + string strDay = v[0].Trim().TrimStart('0'); + int iDay, iYear; + if(int.TryParse(strDay, out iDay) && + int.TryParse(v[1].Trim(), out iYear)) + return new DateTime(iYear, i + 1, iDay); + else { Debug.Assert(false); return null; } + } + } + + return null; + } +#endif + } +} diff --git a/ModernKeePassLib/Utility/UrlUtil.cs b/ModernKeePassLib/Utility/UrlUtil.cs new file mode 100644 index 0000000..8dae2b1 --- /dev/null +++ b/ModernKeePassLib/Utility/UrlUtil.cs @@ -0,0 +1,599 @@ +/* + KeePass Password Safe - The Open-Source Password Manager + Copyright (C) 2003-2012 Dominik Reichl + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Text; + +using ModernKeePassLib.Native; + +namespace ModernKeePassLib.Utility +{ + /// + /// A class containing various static path utility helper methods (like + /// stripping extension from a file, etc.). + /// + public static class UrlUtil + { + // Bert TODO: Temporary fix, most of this class is not needed in WINRT. + private static readonly char DirectorySeparatorChar = '/'; + + private static readonly char[] m_vDirSeps = new char[] { '\\', '/', + DirectorySeparatorChar }; + + /// + /// Get the directory (path) of a file name. The returned string is + /// terminated by a directory separator character. Example: + /// passing C:\\My Documents\\My File.kdb in + /// would produce this string: C:\\My Documents\\. + /// + /// Full path of a file. + /// Append a terminating directory separator + /// character to the returned path. + /// If true, the returned path + /// is guaranteed to be a valid directory path (for example X:\\ instead + /// of X:, overriding ). + /// This should only be set to true, if the returned path is directly + /// passed to some directory API. + /// Directory of the file. The return value is an empty string + /// ("") if the input parameter is null. + public static string GetFileDirectory(string strFile, bool bAppendTerminatingChar, + bool bEnsureValidDirSpec) + { + Debug.Assert(strFile != null); + if(strFile == null) throw new ArgumentNullException("strFile"); + + int nLastSep = strFile.LastIndexOfAny(m_vDirSeps); + if(nLastSep < 0) return strFile; // None + + if(bEnsureValidDirSpec && (nLastSep == 2) && (strFile[1] == ':') && + (strFile[2] == '\\')) // Length >= 3 and Windows root directory + bAppendTerminatingChar = true; + + if(!bAppendTerminatingChar) return strFile.Substring(0, nLastSep); + return EnsureTerminatingSeparator(strFile.Substring(0, nLastSep), false); + } + + /// + /// Gets the file name of the specified file (full path). Example: + /// if is C:\\My Documents\\My File.kdb + /// the returned string is My File.kdb. + /// + /// Full path of a file. + /// File name of the specified file. The return value is + /// an empty string ("") if the input parameter is null. + public static string GetFileName(string strPath) + { + Debug.Assert(strPath != null); if(strPath == null) throw new ArgumentNullException("strPath"); + + int nLastSep = strPath.LastIndexOfAny(m_vDirSeps); + + if(nLastSep < 0) return strPath; + if(nLastSep >= (strPath.Length - 1)) return string.Empty; + + return strPath.Substring(nLastSep + 1); + } + + /// + /// Strip the extension of a file. + /// + /// Full path of a file with extension. + /// File name without extension. + public static string StripExtension(string strPath) + { + Debug.Assert(strPath != null); if(strPath == null) throw new ArgumentNullException("strPath"); + + int nLastDirSep = strPath.LastIndexOfAny(m_vDirSeps); + int nLastExtDot = strPath.LastIndexOf('.'); + + if(nLastExtDot <= nLastDirSep) return strPath; + + return strPath.Substring(0, nLastExtDot); + } + + /// + /// Get the extension of a file. + /// + /// Full path of a file with extension. + /// Extension without prepending dot. + public static string GetExtension(string strPath) + { + Debug.Assert(strPath != null); if(strPath == null) throw new ArgumentNullException("strPath"); + + int nLastDirSep = strPath.LastIndexOfAny(m_vDirSeps); + int nLastExtDot = strPath.LastIndexOf('.'); + + if(nLastExtDot <= nLastDirSep) return string.Empty; + if(nLastExtDot == (strPath.Length - 1)) return string.Empty; + + return strPath.Substring(nLastExtDot + 1); + } + + /// + /// Ensure that a path is terminated with a directory separator character. + /// + /// Input path. + /// If true, a slash (/) is appended to + /// the string if it's not terminated already. If false, the + /// default system directory separator character is used. + /// Path having a directory separator as last character. + public static string EnsureTerminatingSeparator(string strPath, bool bUrl) + { + Debug.Assert(strPath != null); if(strPath == null) throw new ArgumentNullException("strPath"); + + int nLength = strPath.Length; + if(nLength <= 0) return string.Empty; + + char chLast = strPath[nLength - 1]; + + for(int i = 0; i < m_vDirSeps.Length; ++i) + { + if(chLast == m_vDirSeps[i]) return strPath; + } + + if(bUrl) return (strPath + '/'); + return (strPath + DirectorySeparatorChar); + } + + /* /// + /// File access mode enumeration. Used by the FileAccessible + /// method. + /// + public enum FileAccessMode + { + /// + /// Opening a file in read mode. The specified file must exist. + /// + Read = 0, + + /// + /// Opening a file in create mode. If the file exists already, it + /// will be overwritten. If it doesn't exist, it will be created. + /// The return value is true, if data can be written to the + /// file. + /// + Create + } */ + + /* /// + /// Test if a specified path is accessible, either in read or write mode. + /// + /// Path to test. + /// Requested file access mode. + /// Returns true if the specified path is accessible in + /// the requested mode, otherwise the return value is false. + public static bool FileAccessible(string strFilePath, FileAccessMode fMode) + { + Debug.Assert(strFilePath != null); + if(strFilePath == null) throw new ArgumentNullException("strFilePath"); + + if(fMode == FileAccessMode.Read) + { + FileStream fs; + + try { fs = File.OpenRead(strFilePath); } + catch(Exception) { return false; } + if(fs == null) return false; + + fs.Close(); + return true; + } + else if(fMode == FileAccessMode.Create) + { + FileStream fs; + + try { fs = File.Create(strFilePath); } + catch(Exception) { return false; } + if(fs == null) return false; + + fs.Close(); + return true; + } + + return false; + } */ + + public static string GetQuotedAppPath(string strPath) + { + int nFirst = strPath.IndexOf('\"'); + int nSecond = strPath.IndexOf('\"', nFirst + 1); + + if((nFirst >= 0) && (nSecond >= 0)) + return strPath.Substring(nFirst + 1, nSecond - nFirst - 1); + + return strPath; + } + + public static string FileUrlToPath(string strUrl) + { + Debug.Assert(strUrl != null); + if(strUrl == null) throw new ArgumentNullException("strUrl"); + + string str = strUrl; + if(str.StartsWith(@"file:///", StrUtil.CaseIgnoreCmp)) + str = str.Substring(8, str.Length - 8); + + str = str.Replace('/', DirectorySeparatorChar); + + return str; + } + + public static bool UnhideFile(string strFile) + { +#if KeePassLibSD || !TODO + return false; +#else + if(strFile == null) throw new ArgumentNullException("strFile"); + + try + { + FileAttributes fa = File.GetAttributes(strFile); + if((long)(fa & FileAttributes.Hidden) == 0) return false; + + return HideFile(strFile, false); + } + catch(Exception) { } + + return false; +#endif + } + + public static bool HideFile(string strFile, bool bHide) + { +#if KeePassLibSD || !TODO + return false; +#else + if(strFile == null) throw new ArgumentNullException("strFile"); + + try + { + FileAttributes fa = File.GetAttributes(strFile); + + if(bHide) fa = ((fa & ~FileAttributes.Normal) | FileAttributes.Hidden); + else // Unhide + { + fa &= ~FileAttributes.Hidden; + if((long)fa == 0) fa |= FileAttributes.Normal; + } + + File.SetAttributes(strFile, fa); + return true; + } + catch(Exception) { } + + return false; +#endif + } + + public static string MakeRelativePath(string strBaseFile, string strTargetFile) + { + if(strBaseFile == null) throw new ArgumentNullException("strBasePath"); + if(strTargetFile == null) throw new ArgumentNullException("strTargetPath"); + if(strBaseFile.Length == 0) return strTargetFile; + if(strTargetFile.Length == 0) return string.Empty; + + // Test whether on different Windows drives + if((strBaseFile.Length >= 3) && (strTargetFile.Length >= 3)) + { + if((strBaseFile[1] == ':') && (strTargetFile[1] == ':') && + (strBaseFile[2] == '\\') && (strTargetFile[2] == '\\') && + (strBaseFile[0] != strTargetFile[0])) + return strTargetFile; + } + + if(NativeLib.IsUnix()) + { + bool bBaseUnc = IsUncPath(strBaseFile); + bool bTargetUnc = IsUncPath(strTargetFile); + if((!bBaseUnc && bTargetUnc) || (bBaseUnc && !bTargetUnc)) + return strTargetFile; + + string strBase = GetShortestAbsolutePath(strBaseFile); + string strTarget = GetShortestAbsolutePath(strTargetFile); + string[] vBase = strBase.Split(m_vDirSeps); + string[] vTarget = strTarget.Split(m_vDirSeps); + + int i = 0; + while((i < (vBase.Length - 1)) && (i < (vTarget.Length - 1)) && + (vBase[i] == vTarget[i])) { ++i; } + + StringBuilder sbRel = new StringBuilder(); + for(int j = i; j < (vBase.Length - 1); ++j) + { + if(sbRel.Length > 0) sbRel.Append(DirectorySeparatorChar); + sbRel.Append(".."); + } + for(int k = i; k < vTarget.Length; ++k) + { + if(sbRel.Length > 0) sbRel.Append(DirectorySeparatorChar); + sbRel.Append(vTarget[k]); + } + + return sbRel.ToString(); + } + +#if KeePassLibSD || !TODO + return strTargetFile; +#else + try // Windows + { + const int nMaxPath = NativeMethods.MAX_PATH * 2; + StringBuilder sb = new StringBuilder(nMaxPath + 2); + if(NativeMethods.PathRelativePathTo(sb, strBaseFile, 0, + strTargetFile, 0) == false) + return strTargetFile; + + string str = sb.ToString(); + while(str.StartsWith(".\\")) str = str.Substring(2, str.Length - 2); + + return str; + } + catch(Exception) { Debug.Assert(false); return strTargetFile; } +#endif + } + + public static string MakeAbsolutePath(string strBaseFile, string strTargetFile) + { + if(strBaseFile == null) throw new ArgumentNullException("strBasePath"); + if(strTargetFile == null) throw new ArgumentNullException("strTargetPath"); + if(strBaseFile.Length == 0) return strTargetFile; + if(strTargetFile.Length == 0) return string.Empty; + + if(IsAbsolutePath(strTargetFile)) return strTargetFile; + + string strBaseDir = GetFileDirectory(strBaseFile, true, false); + return GetShortestAbsolutePath(strBaseDir + strTargetFile); + } + + public static bool IsAbsolutePath(string strPath) + { + if(strPath == null) throw new ArgumentNullException("strPath"); + if(strPath.Length == 0) return false; + + if(IsUncPath(strPath)) return true; + + try { return Path.IsPathRooted(strPath); } + catch(Exception) { Debug.Assert(false); } + + return true; + } + + public static string GetShortestAbsolutePath(string strPath) + { + Debug.Assert(false, "not yet implemented"); + return null; +#if TODO + if(strPath == null) throw new ArgumentNullException("strPath"); + if(strPath.Length == 0) return string.Empty; + + // Path.GetFullPath is incompatible with UNC paths traversing over + // different server shares (which are created by PathRelativePathTo); + // we need to build the absolute path on our own... + if(IsUncPath(strPath)) + { + char chSep = strPath[0]; + Debug.Assert(Array.IndexOf(m_vDirSeps, chSep) >= 0); + + List l = new List(); +#if !KeePassLibSD + string[] v = strPath.Split(m_vDirSeps, StringSplitOptions.None); +#else + string[] v = strPath.Split(m_vDirSeps); +#endif + Debug.Assert((v.Length >= 3) && (v[0].Length == 0) && + (v[1].Length == 0)); + + foreach(string strPart in v) + { + if(strPart.Equals(".")) continue; + else if(strPart.Equals("..")) + { + if(l.Count > 0) l.RemoveAt(l.Count - 1); + else { Debug.Assert(false); } + } + else l.Add(strPart); // Do not ignore zero length parts + } + + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < l.Count; ++i) + { + // Don't test length of sb, might be 0 due to initial UNC seps + if(i > 0) sb.Append(chSep); + + sb.Append(l[i]); + } + + return sb.ToString(); + } + + string str; + try { str = Path.GetFullPath(strPath); } + catch(Exception) { Debug.Assert(false); return strPath; } + + Debug.Assert(str.IndexOf("\\..\\") < 0); + foreach(char ch in m_vDirSeps) + { + string strSep = new string(ch, 1); + str = str.Replace(strSep + "." + strSep, strSep); + } + + return str; +#endif + } + + public static int GetUrlLength(string strText, int nOffset) + { + if(strText == null) throw new ArgumentNullException("strText"); + if(nOffset > strText.Length) throw new ArgumentException(); // Not >= (0 len) + + int iPosition = nOffset, nLength = 0, nStrLen = strText.Length; + + while(iPosition < nStrLen) + { + char ch = strText[iPosition]; + ++iPosition; + + if((ch == ' ') || (ch == '\t') || (ch == '\r') || (ch == '\n')) + break; + + ++nLength; + } + + return nLength; + } + + public static string RemoveScheme(string strUrl) + { + if(string.IsNullOrEmpty(strUrl)) return string.Empty; + + int nNetScheme = strUrl.IndexOf(@"://", StrUtil.CaseIgnoreCmp); + int nShScheme = strUrl.IndexOf(@":/", StrUtil.CaseIgnoreCmp); + int nSmpScheme = strUrl.IndexOf(@":", StrUtil.CaseIgnoreCmp); + + if((nNetScheme < 0) && (nShScheme < 0) && (nSmpScheme < 0)) + return strUrl; // No scheme + + int nMin = Math.Min(Math.Min((nNetScheme >= 0) ? nNetScheme : int.MaxValue, + (nShScheme >= 0) ? nShScheme : int.MaxValue), + (nSmpScheme >= 0) ? nSmpScheme : int.MaxValue); + + if(nMin == nNetScheme) return strUrl.Substring(nMin + 3); + if(nMin == nShScheme) return strUrl.Substring(nMin + 2); + return strUrl.Substring(nMin + 1); + } + + public static string ConvertSeparators(string strPath) + { + return ConvertSeparators(strPath, DirectorySeparatorChar); + } + + public static string ConvertSeparators(string strPath, char chSeparator) + { + if(string.IsNullOrEmpty(strPath)) return string.Empty; + + strPath = strPath.Replace('/', chSeparator); + strPath = strPath.Replace('\\', chSeparator); + + return strPath; + } + + public static bool IsUncPath(string strPath) + { + if(strPath == null) throw new ArgumentNullException("strPath"); + + return (strPath.StartsWith("\\\\") || strPath.StartsWith("//")); + } + + public static string FilterFileName(string strName) + { + if(strName == null) { Debug.Assert(false); return string.Empty; } + + string str = strName; + + str = str.Replace('/', '-'); + str = str.Replace('\\', '-'); + str = str.Replace(":", string.Empty); + str = str.Replace("*", string.Empty); + str = str.Replace("?", string.Empty); + str = str.Replace("\"", string.Empty); + str = str.Replace(@"'", string.Empty); + str = str.Replace('<', '('); + str = str.Replace('>', ')'); + str = str.Replace('|', '-'); + + return str; + } + + /// + /// Get the host component of an URL. + /// This method is faster and more fault-tolerant than creating + /// an Uri object and querying its Host + /// property. + /// + /// + /// For the input s://u:p@d.tld:p/p?q#f the return + /// value is d.tld. + /// + public static string GetHost(string strUrl) + { + if(strUrl == null) { Debug.Assert(false); return string.Empty; } + + StringBuilder sb = new StringBuilder(); + bool bInExtHost = false; + for(int i = 0; i < strUrl.Length; ++i) + { + char ch = strUrl[i]; + if(bInExtHost) + { + if(ch == '/') + { + if(sb.Length == 0) { } // Ignore leading '/'s + else break; + } + else sb.Append(ch); + } + else // !bInExtHost + { + if(ch == ':') bInExtHost = true; + } + } + + string str = sb.ToString(); + if(str.Length == 0) str = strUrl; + + // Remove the login part + int nLoginLen = str.IndexOf('@'); + if(nLoginLen >= 0) str = str.Substring(nLoginLen + 1); + + // Remove the port + int iPort = str.LastIndexOf(':'); + if(iPort >= 0) str = str.Substring(0, iPort); + + return str; + } + + public static bool AssemblyEquals(string strExt, string strShort) + { + if((strExt == null) || (strShort == null)) { Debug.Assert(false); return false; } + + if(strExt.Equals(strShort, StrUtil.CaseIgnoreCmp) || + strExt.StartsWith(strShort + ",", StrUtil.CaseIgnoreCmp)) + return true; + + if(!strShort.EndsWith(".dll", StrUtil.CaseIgnoreCmp)) + { + if(strExt.Equals(strShort + ".dll", StrUtil.CaseIgnoreCmp) || + strExt.StartsWith(strShort + ".dll,", StrUtil.CaseIgnoreCmp)) + return true; + } + + if(!strShort.EndsWith(".exe", StrUtil.CaseIgnoreCmp)) + { + if(strExt.Equals(strShort + ".exe", StrUtil.CaseIgnoreCmp) || + strExt.StartsWith(strShort + ".exe,", StrUtil.CaseIgnoreCmp)) + return true; + } + + return false; + } + } +} diff --git a/ModernKeePassLib/WinRTColor.cs b/ModernKeePassLib/WinRTColor.cs new file mode 100644 index 0000000..3794df6 --- /dev/null +++ b/ModernKeePassLib/WinRTColor.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ModernKeePassLib.WinRTAdaptors +{ + // BERT TODO: Whole class is just a non-functional stub + + public struct Color + { + public byte A + { + get + { return 255; } + } + public byte R + { + get + { + return 100; + } + } + public byte G + { + get { return 150; } + } + public byte B + { + get { return 200; } + } + public bool isEmpty + { + get { return false; } + } + + + public static Color Empty + { + get + { + Color abc; + return abc; } + } + + } + +} diff --git a/ModernKeePassLib/bin/Debug/ModernKeePassLib.dll b/ModernKeePassLib/bin/Debug/ModernKeePassLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..5f258ec32328dd0391e13af6b0199f1becdfda61 GIT binary patch literal 212480 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 literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/bin/Debug/ModernKeePassLib.pdb b/ModernKeePassLib/bin/Debug/ModernKeePassLib.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a1b69bef79eeb1dc3d1c416e9fcdd4f41661578b GIT binary patch literal 593408 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≶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

><8I4V5A3#%r|i8l+S`$o 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�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

    LF${mcCnG?Pa>>rBxS9 zVH2Zk2v5Z~<7dwZ^^m*fU*{-Q>wbI5wyWtxglYadFZqkl-Ve(=*I+!}cGP(9&QZe( zZD;5S*a?fG^FnJbEE%!5@z}<(&1}_F^Cs=jg}DdrvcGyan&}!RsPMH7=2rQ|%?XOB z8T&0u-{o~g#F^SDCOBas0c7BEC zvH#mkz1@~0cEJ!JJKrsAGp-}7iEJ*T25M|_{L7&G9qs=kyrGSQJP1%bla2^ z4c1>8r9pnaLW|TRD8wdC_>ac?4U;qoevi~+lHy<8{VkJJ^6~7E@(-Hsl?=_BDB-ed zU4;R!_W8!M?^%Z~&>w96-W8FeMbsWS9)D`W-S@O zPO^52$Xq*d3uCV09F6_#P0D9hv?>f+k$e2&xlI>4rWU-u?>tfZ?pQ&Ip%nW@b&wwK z;G6sC?h}^e`Xz%ta)xEMf2#D^`tc5b8as)XwK?z1Ch2WX2VOLtY0cloKd1YyZYD)9 z_e;N!_{0XNL+YBt|ozH^iN z+EW*_-2CqqezsV#PC1^qd_Z99cQ1jFI)L$4yx9*TH4|2HCA#J8}rFNQwp49#u18!c9F1jO_ z?W+PCPBS>~_lY+h$!9}Ihmg{*o6dh$ljEO<;I-@o`;3F#K%wj29+UQ%{O{cK|LOj; zZReueM!VJqda>~W9jkjUCR)~;ueo658+O0rz}L3MVe{ryJRP_5?ZCbxmL2bys6Iq{ zR-XxVi6#}bCJOcs7d_gdxqW<5Xtctos%JsB`5b2hI@0nV95Bme!71N9{r#!M`Wr5+ zy4E4sXct+3&g;~T50S^RE;PL;oK)TSdFv8QvoWZ(ek9SR<-Et=g{P%T>DoGBcGQ%u z6pt6@9I|X@X%=4^x^=hgo3Q>WBOObwN2HCs#xIUs*{NmwEWiK$4?9&lugrT~fJcEoSR=O^i34IlesCZOvA36MUp|C z-+A||OW)Oq_ou!vQhj<|fYcchU~KFdys>)uA1(!5t~xEnIY0kW(Y%6sm;rD(ZPPKl#Nxx8b`lnX3WkuQ-0?pHQGv*xu`{1=}K z)|$vbA9`+oNT{PzMtX8#ipx@LpWRMP*Y4xUdh7M0JnsmR*RVdXp2*wxZ?U-l>90@% zLPN-3p|}&a1Fbv;csp9LJRKcb{fT};OWp8iOPv|Q%izaynEvn&0>W=tJm7zBc;+K)2iQ49iWy+x3mHTf*jB8MIFu{iRLvexuy|PnT@JhM+;tY9WEtesra5f2zw(%9>uw(`E zmnM_Hg%~&Sw*cMY9$27TUevhBR=!q?wbH80r@$}scWYIl8t%8^YAn8i`6o*mUc zIz?;JGu@fK`wqOG#6Mc7(r0B-#W|GUxUo9z*yVE?mxmWyXg|2|V#d22FYQa3PNqm( z9x+)ga7vQHG{`O&|#0kG@m&V6QxwqP% z9n5{!yztSc+uMgalv}YMRwXPO@Jy{=y77_bG|q69<0VYzQy&wlCtdpMjqD2i%6hlQ zT+=2twA~^9Wo5y~Y2{V?$S!Aj#VtPunlZT_s}>E7f8oBOT7oF9T<4nge)+rO6tC;o zzNie}^42%~-0-J$p?%@@N*gS`yX4}V`=31lf{W`XgQmBOE1%Mj(C+a|NwDO9@?Q|Y z`mDBDM%{Lp%3t?5d6$<q6WArN`F>!e*HL%NQxEqyTqsJIUTM^FN3%m`#weerJlY_6H4hi*?OiwC zpSnG`sX)WwaoMaxD{ALT+)UMz(H + + + System.Net.Requests + + + + The HTTP headers that may be specified in a client request. + + + The Accept header, which specifies the MIME types that are acceptable for the response. + + + The Accept-Charset header, which specifies the character sets that are acceptable for the response. + + + The Accept-Encoding header, which specifies the content encodings that are acceptable for the response. + + + The Accept-Langauge header, which specifies that natural languages that are preferred for the response. + + + The Allow header, which specifies the set of HTTP methods supported. + + + The Authorization header, which specifies the credentials that the client presents in order to authenticate itself to the server. + + + The Cache-Control header, which specifies directives that must be obeyed by all cache control mechanisms along the request/response chain. + + + The Connection header, which specifies options that are desired for a particular connection. + + + The Content-Encoding header, which specifies the encodings that have been applied to the accompanying body data. + + + The Content-Langauge header, which specifies the natural language(s) of the accompanying body data. + + + The Content-Length header, which specifies the length, in bytes, of the accompanying body data. + + + The Content-Location header, which specifies a URI from which the accompanying body may be obtained. + + + The Content-MD5 header, which specifies the MD5 digest of the accompanying body data, for the purpose of providing an end-to-end message integrity check. + + + The Content-Range header, which specifies where in the full body the accompanying partial body data should be applied. + + + The Content-Type header, which specifies the MIME type of the accompanying body data. + + + The Cookie header, which specifies cookie data presented to the server. + + + The Date header, which specifies the date and time at which the request originated. + + + The Expect header, which specifies particular server behaviors that are required by the client. + + + The Expires header, which specifies the date and time after which the accompanying body data should be considered stale. + + + The From header, which specifies an Internet E-mail address for the human user who controls the requesting user agent. + + + The Host header, which specifies the host name and port number of the resource being requested. + + + The If-Match header, which specifies that the requested operation should be performed only if the client's cached copy of the indicated resource is current. + + + The If-Modified-Since header, which specifies that the requested operation should be performed only if the requested resource has been modified since the indicated data and time. + + + The If-None-Match header, which specifies that the requested operation should be performed only if none of client's cached copies of the indicated resources are current. + + + The If-Range header, which specifies that only the specified range of the requested resource should be sent, if the client's cached copy is current. + + + The If-Unmodified-Since header, which specifies that the requested operation should be performed only if the requested resource has not been modified since the indicated date and time. + + + The Keep-Alive header, which specifies a parameter used into order to maintain a persistent connection. + + + The Last-Modified header, which specifies the date and time at which the accompanying body data was last modified. + + + The Max-Forwards header, which specifies an integer indicating the remaining number of times that this request may be forwarded. + + + The Pragma header, which specifies implementation-specific directives that might apply to any agent along the request/response chain. + + + The Proxy-Authorization header, which specifies the credentials that the client presents in order to authenticate itself to a proxy. + + + The Range header, which specifies the the sub-range(s) of the response that the client requests be returned in lieu of the entire response. + + + The Referer header, which specifies the URI of the resource from which the request URI was obtained. + + + The TE header, which specifies the transfer encodings that are acceptable for the response. + + + The Trailer header, which specifies the header fields present in the trailer of a message encoded with chunked transfer-coding. + + + The Transfer-Encoding header, which specifies what (if any) type of transformation that has been applied to the message body. + + + The Translate header, a Microsoft extension to the HTTP specification used in conjunction with WebDAV functionality. + + + The Upgrade header, which specifies additional communications protocols that the client supports. + + + The User-Agent header, which specifies information about the client agent. + + + The Via header, which specifies intermediate protocols to be used by gateway and proxy agents. + + + The Warning header, which specifies additional information about that status or transformation of a message that might not be reflected in the message. + + + Provides an HTTP-specific implementation of the class. + + + Cancels a request to an Internet resource. + + + + + + + + Gets or sets the value of the Accept HTTP header. + The value of the Accept HTTP header. The default value is null. + + + Gets or sets a value that indicates whether to buffer the received from the Internet resource. + Returns .true to enable buffering of the data received from the Internet resource; false to disable buffering. The default is true. + + + Begins an asynchronous request for a object to use to write data. + An that references the asynchronous request. + The delegate. + The state object for this request. + The property is GET or HEAD.-or- is true, is false, is -1, is false, and is POST or PUT. + The stream is being used by a previous call to -or- is set to a value and is false.-or- The thread pool is running out of threads. + The request cache validator indicated that the response for this request can be served from the cache; however, requests that write data must not use the cache. This exception can occur if you are using a custom cache validator that is incorrectly implemented. + + was previously called. + In a .NET Compact Framework application, a request stream with zero content length was not obtained and closed correctly. For more information about handling zero content length requests, see Network Programming in the .NET Compact Framework. + + + + + + + + + + + Begins an asynchronous request to an Internet resource. + An that references the asynchronous request for a response. + The delegate + The state object for this request. + The stream is already in use by a previous call to -or- is set to a value and is false.-or- The thread pool is running out of threads. + + is GET or HEAD, and either is greater than zero or is true.-or- is true, is false, and either is -1, is false and is POST or PUT.-or- The has an entity body but the method is called without calling the method. -or- The is greater than zero, but the application does not write all of the promised data. + + was previously called. + + + + + + + + + + + Gets or sets the value of the Content-type HTTP header. + The value of the Content-type HTTP header. The default value is null. + + + Gets or sets a timeout, in milliseconds, to wait until the 100-Continue is received from the server. + Returns .The timeout, in milliseconds, to wait until the 100-Continue is received. + + + Gets or sets the cookies associated with the request. + A that contains the cookies associated with this request. + + + Gets or sets authentication information for the request. + An that contains the authentication credentials associated with the request. The default is null. + + + + + + Ends an asynchronous request for a object to use to write data. + A to use to write request data. + The pending request for a stream. + + is null. + The request did not complete, and no stream is available. + + was not returned by the current instance from a call to . + This method was called previously using . + + was previously called.-or- An error occurred while processing the request. + + + + + + + + Ends an asynchronous request to an Internet resource. + A that contains the response from the Internet resource. + The pending request for a response. + + is null. + This method was called previously using -or- The property is greater than 0 but the data has not been written to the request stream. + + was previously called.-or- An error occurred while processing the request. + + was not returned by the current instance from a call to . + + + + + + + + Gets a value that indicates whether a response has been received from an Internet resource. + true if a response has been received; otherwise, false. + + + Specifies a collection of the name/value pairs that make up the HTTP headers. + A that contains the name/value pairs that make up the headers for the HTTP request. + The request has been started by calling the , , , or method. + + + + + + Gets or sets the method for the request. + The request method to use to contact the Internet resource. The default value is GET. + No method is supplied.-or- The method string contains invalid characters. + + + Gets the original Uniform Resource Identifier (URI) of the request. + A that contains the URI of the Internet resource passed to the method. + + + Gets a value that indicates whether the request provides support for a . + Returns .true if a is supported; otherwise, false. + + + Gets or sets a value that controls whether default credentials are sent with requests. + true if the default credentials are used; otherwise false. The default value is false. + You attempted to set this property after the request was sent. + + + + + + Provides an HTTP-specific implementation of the class. + + + Gets the length of the content returned by the request. + The number of bytes returned by the request. Content length does not include header information. + The current instance has been disposed. + + + Gets the content type of the response. + A string that contains the content type of the response. + The current instance has been disposed. + + + Gets or sets the cookies that are associated with this response. + A that contains the cookies that are associated with this response. + The current instance has been disposed. + + + Releases the unmanaged resources used by the , and optionally disposes of the managed resources. + true to release both managed and unmanaged resources; false to releases only unmanaged resources. + + + Gets the stream that is used to read the body of the response from the server. + A containing the body of the response. + There is no response stream. + The current instance has been disposed. + + + + + + + + Gets the headers that are associated with this response from the server. + A that contains the header information returned with the response. + The current instance has been disposed. + + + Gets the method that is used to return the response. + A string that contains the HTTP method that is used to return the response. + The current instance has been disposed. + + + Gets the URI of the Internet resource that responded to the request. + A that contains the URI of the Internet resource that responded to the request. + The current instance has been disposed. + + + Gets the status of the response. + One of the values. + The current instance has been disposed. + + + Gets the status description returned with the response. + A string that describes the status of the response. + The current instance has been disposed. + + + Gets a value that indicates if headers are supported. + Returns .true if headers are supported; otherwise, false. + + + Provides the base interface for creating instances. + + + Creates a instance. + A instance. + The uniform resource identifier (URI) of the Web resource. + The request scheme specified in is not supported by this instance. + + is null. + NoteIn the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, , instead.The URI specified in is not a valid URI. + + + The exception that is thrown when an error is made while using a network protocol. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class with the specified message. + The error message string. + + + The exception that is thrown when an error occurs while accessing the network through a pluggable protocol. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class with the specified error message. + The text of the error message. + + + Initializes a new instance of the class with the specified error message and nested exception. + The text of the error message. + A nested exception. + + + Initializes a new instance of the class with the specified error message, nested exception, status, and response. + The text of the error message. + A nested exception. + One of the values. + A instance that contains the response from the remote host. + + + Initializes a new instance of the class with the specified error message and status. + The text of the error message. + One of the values. + + + Gets the response that the remote host returned. + If a response is available from the Internet resource, a instance that contains the error response from an Internet resource; otherwise, null. + + + Gets the status of the response. + One of the values. + + + Defines status codes for the class. + + + The remote service point could not be contacted at the transport level. + + + A message was received that exceeded the specified limit when sending a request or receiving a response from the server. + + + An internal asynchronous request is pending. + + + The request was canceled, the method was called, or an unclassifiable error occurred. This is the default value for . + + + A complete request could not be sent to the remote server. + + + No error was encountered. + + + An exception of unknown type has occurred. + + + Contains protocol headers associated with a request or response. + + + Initializes a new instance of the class. + + + Gets all header names (keys) in the collection. + An array of type containing all header names in a Web request. + + + Gets the number of headers in the collection. + An indicating the number of headers in a request. + + + Gets or sets the specified request header. + A instance containing the specified header value. + The request header value. + This instance does not allow instances of . + + + + + + + Returns an enumerator that can iterate through the instance. + Returns .An enumerator that can iterate through the instance. + + + This method is obsolete. + The representation of the collection. + + + Makes a request to a Uniform Resource Identifier (URI). This is an abstract class. + + + Initializes a new instance of the class. + + + Aborts the Request + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + + + + When overridden in a descendant class, provides an asynchronous version of the method. + An that references the asynchronous request. + The delegate. + An object containing state information for this asynchronous request. + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + When overridden in a descendant class, begins an asynchronous request for an Internet resource. + An that references the asynchronous request. + The delegate. + An object containing state information for this asynchronous request. + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + When overridden in a descendant class, gets or sets the content type of the request data being sent. + The content type of the request data. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + Initializes a new instance for the specified URI scheme. + A descendant for the specific URI scheme. + The URI that identifies the Internet resource. + The request scheme specified in has not been registered. + + is null. + The caller does not have permission to connect to the requested URI or a URI that the request is redirected to. + NoteIn the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, , instead.The URI specified in is not a valid URI. + + + + + + + + Initializes a new instance for the specified URI scheme. + A descendant for the specified URI scheme. + A containing the URI of the requested resource. + The request scheme specified in is not registered. + + is null. + The caller does not have permission to connect to the requested URI or a URI that the request is redirected to. + + + + + + + + Initializes a new instance for the specified URI string. + Returns .An instance for the specific URI string. + A URI string that identifies the Internet resource. + The request scheme specified in is the http or https scheme. + + is null. + The caller does not have permission to connect to the requested URI or a URI that the request is redirected to. + The URI specified in is not a valid URI. + + + Initializes a new instance for the specified URI. + Returns .An instance for the specific URI string. + A URI that identifies the Internet resource. + The request scheme specified in is the http or https scheme. + + is null. + The caller does not have permission to connect to the requested URI or a URI that the request is redirected to. + The URI specified in is not a valid URI. + + + When overridden in a descendant class, gets or sets the network credentials used for authenticating the request with the Internet resource. + An containing the authentication credentials associated with the request. The default is null. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + Gets or sets the global HTTP proxy. + An used by every call to instances of . + + + When overridden in a descendant class, returns a for writing data to the Internet resource. + A to write data to. + An that references a pending request for a stream. + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + When overridden in a descendant class, returns a . + A that contains a response to the Internet request. + An that references a pending request for a response. + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + When overridden in a descendant class, returns a for writing data to the Internet resource as an asynchronous operation. + Returns .The task object representing the asynchronous operation. + + + When overridden in a descendant class, returns a response to an Internet request as an asynchronous operation. + Returns .The task object representing the asynchronous operation. + + + When overridden in a descendant class, gets or sets the collection of header name/value pairs associated with the request. + A containing the header name/value pairs associated with this request. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + When overridden in a descendant class, gets or sets the protocol method to use in this request. + The protocol method to use in this request. + If the property is not overridden in a descendant class, any attempt is made to get or set the property. + + + + + + When overridden in a descendant class, gets or sets the network proxy to use to access this Internet resource. + The to use to access the Internet resource. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + Registers a descendant for the specified URI. + true if registration is successful; otherwise, false. + The complete URI or URI prefix that the descendant services. + The create method that the calls to create the descendant. + + is null-or- is null. + + + + + + + + When overridden in a descendant class, gets the URI of the Internet resource associated with the request. + A representing the resource associated with the request + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + When overridden in a descendant class, gets or sets a value that controls whether are sent with requests. + true if the default credentials are used; otherwise false. The default value is false. + You attempted to set this property after the request was sent. + Any attempt is made to access the property, when the property is not overridden in a descendant class. + + + + + + Provides a response from a Uniform Resource Identifier (URI). This is an abstract class. + + + Initializes a new instance of the class. + + + When overridden in a descendant class, gets or sets the content length of data being received. + The number of bytes returned from the Internet resource. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + When overridden in a derived class, gets or sets the content type of the data being received. + A string that contains the content type of the response. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + Releases the unmanaged resources used by the object. + + + Releases the unmanaged resources used by the object, and optionally disposes of the managed resources. + true to release both managed and unmanaged resources; false to releases only unmanaged resources. + + + When overridden in a descendant class, returns the data stream from the Internet resource. + An instance of the class for reading data from the Internet resource. + Any attempt is made to access the method, when the method is not overridden in a descendant class. + + + + + + When overridden in a derived class, gets a collection of header name-value pairs associated with this request. + An instance of the class that contains header values associated with this response. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + When overridden in a derived class, gets the URI of the Internet resource that actually responded to the request. + An instance of the class that contains the URI of the Internet resource that actually responded to the request. + Any attempt is made to get or set the property, when the property is not overridden in a descendant class. + + + + + + Gets a value that indicates if headers are supported. + Returns .true if headers are supported; otherwise, false. + + + \ No newline at end of file diff --git a/ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.dll b/ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.dll new file mode 100644 index 0000000000000000000000000000000000000000..169737397e56d47191467a9739b99ddcc2ea3355 GIT binary patch literal 32240 zcmeHw2V7Ih_wU@B(4`0n(j*Adq$Cst1(m8u6%Z^SHAoMH&@4z%R93~Vhy_r@Ua%{Q zh`o!wB4V#7_OiY+H#Z@;y1T#s|Lter|GgJCC-XgXrrtAWX3orIeMikk41^F9zTdwi zv>Sf$XAnjIoa95alKx&Lv|a9u!EVCmj6raGLIx|1&l}5+N@2xBrKa)(tY|KapP9-^ zNM*VE2eDFkv0N)fMR_AS>i`dgd;j84!$>x~)GnBY$Ze1ZQZmw&)~-Zld4-J1aLzg;4ASN z1dq##&rRlmAXV3Vh{SmffUm@75JIjJkP1fPeuWRN8;PXQAb2qM*$Bx|+zt}JqPn7k z@rzKZ)~DMRFS@Pi9ik}j)ql;AS9*gk%?q5j(kR?r_3aDa@rGVKiknvWObpjvdHKdp z1!mx*qP_O4?&MdmvlCm)x9m#d?Jo%E(!W-FD*ND);7JFsw=ey=cgyg$qp=%LHEfKG zzn)dG?7;xV>XQRcHqS7!sy9B=eTQy()Wf>6qK|bYS2cT(rchIP^I!eStD8%k3yB7V zK&&Sg7jfh!k4Cud+gjw9wsp=6-9bP+Pl0~@1<&~_yV z2MPEIsbe#+#MjR@$Pm7&@C|_PbohdKqvRRz3j?37xioSj?MZ3mNzq8s z7s7EAJh=%gr(_!MV4MfWL| z1Lq1w-&530$x=xgg;6wJ38$J)(IrX`U{V#fA5#KV0y3ed6O0I$D2D-(f)JBJi8R6- z6;uF74nj&4Dx>2}D72nNwiIfhB|Ru~jgA{bp_g=AGKH9gFwb-fsRF`fl~BlI0`VjKq^b1RA$edvV=(`Y6b&*3d z1_(aIvR;gV(0+Lu1u{Hfd~^{aG@9W9YYSx>MKA)9B2uMMJYxjtggT9QAgO{hX_O7Q zbVXV;%40+#HKaqKhjLS(X6mR1g<9lF8F7FNXmp8@2*`*=icB15LL*NKnbT+@GZo@2 zX|#fwfx01U3Oytmm^w%kacFdrnG48{MlDPmKz)Sih&E;(>W&;}q#-p0X`}u$vXv@9 zI%oimhC`e#a-mU{R0h&RZZujbRf_bH2Ze-BnuUDDNFTA#a3PY-1M6vkM$l-Mv_7Cw zG}<6t1GX!iMmwZ80E(c|0qHofY0)$~BV7w9mPS|$jL=vbVJ$F12{gi5&&HyqmikM4WJD) za+EoN*l072TxA*oZ51M_?Hsg+j`Lz%L>yE{qd>-WWP=U}5sZMl$PP8oD1z}2*`vcW zif25B1^iJO@j%i6ouE-R4%MTgT2y2f&GNTdJ z9)HxEMp#1vkQI%vh6EtC5K$Tevmzbm#X!U`)L)Ebh(I(zh(JS>iC{EHjJgw{$W@4_ zTt=dybh>#m*2GBUOQRYYJ3#(4+9%VG7=;39bXH~{py4#SDdP?(ltzzbh7zOEC>nj1 z@dp%6BL&%DKoK<3l^sQdp=cV}$tI#O#HG;?*-}7bX%r?KL4>138YRod0!pD#j%)%T z9*ri;#-TBYPoufAwSWXPs(`o%lue^`5Ep@RX|!FIM?|6tG&(3N0F+0g)3W1;C{#eB zYqFC7718Lv>=Ysz71O9qwgk{LA)LX%uy^Vr_m-keL%~^k~)Zs zs>Mhj&_*$;Lvd(_7&W4Jv|orQ%a?!-(g^Ed0y;z^Z21z=5gK93mxzwh2TBEJr!N25w`59=q8P@Uh~i$8ezTW zp}Rsv^;sHvOviaKjuC0-8I1xNXNYw4LWn@GFA*82jYbiS8-xJ0(9h)=`TbwtVA}6pgUu8;@jZge~8A zq(CEV`Nkt98ez*f0jW?(X!-JxDvhw^%R}90ge_kl(iEnnEZ-!gMI&ta3Xm?1u;nX6 z`ZU6puL$*|5w?7jkr9os=b(9rPO-(FsM0kv_!5)9JANoPm;PgmrfYN}&t`t%Mfu8B3*=RBycU&$G%|TOX)Ff96 zXgZB9D{rJr-rd|@1*Mu=M~MsJCEXq6a!Ar_zwV#FjDq3vSSg)BpLVx&zj zM~5kNl=v#wldM3;gmFk$-ju9FC&kE$tU_nR$c|iz&QoY1vX$>gu0j{-IA?h`vKn0$ zqoHICx++FN*U&gAmE$ zHS|vOS%_ey8UgxBqZs*oayR-ePNxIjT^YOqre@zpK*~Zy*|R-Jl}1=6_8@f{VXfPX zG--sjZZFajBC4MIkbxNKqkYJXmQ0e5Lv_f4Mib?00a?+g6yo+H4vkhq+?d#pW5pa=%YN|&wi(sIbx>s5-^LltjW< zZHgnLMigHtBjgArC1w7YgODSc_UGk_N)*PLQ|10qQj#N-!IVUOD0v~3l=<`UA8RYw z7RfsQ)9vj~)gROUq%9q-CXtu82ZUh;3XtFk!++ize;zB;AEC_uO+7E!E=m3Qa}69# z^{ucsB%eZ@M4x9%gbRNNGZ2ntq8UJ?kYp;%AI176EtE=8FGeba0~r|*8_&pt@My*qpb?A`pgby^4Y67% zk5LM%06dS*p=cRJD=E5`qFX7thoTJ>Jwee6Kx@%;D%?Vap8(ZCuYnem1cAeHKy6T0 zDy#+6ieUzH0C-q&tRsZ=p)EMfLhZ;N=9``iZDm)LFKzJL)*@v>3G3X2OU=#t3V5~$6L@uL|;>X7kDz* z%P9rgDUB4sW2OR6PZK;~J;3i}2%KKv@v?h;yU!aZ@bz}60@J^}uK=(=EaD&tmps%Es1J#tqVJC`4N>@SnmNZWLSb7)G z7ZhJIA8#2P`zx7X8Jzz|>9at0N___UcS@W>;o&M3+N32I)bSR#FL;Wm}){i3A&*OR10_{_!GMV)dBq>!GG8d z~u z5cY#|Nbr-`0u2Cv7YXMBxHkf!91;aV2?PoTN}^~ehk#wTGlXNI90GRI10fs-zoJ`A~NPEdWZQh0p>5Euv@{?666+ zn4(J%KGi6v=rU*%iIxH-&Kc=Sn*(j0W^e=0y=__0XmA10~$ss03Ac%c{`3!1{zP``8$zN1DZ_WIX#uo z1e!)@A!dHZy_0mX7Bfh7IMrlANc16)F^R*Sd3itKDZrkE`Z)RWVl$Ju15i+IhJc%5 zH6kS$e}lOEgs9|%aa_JtY;rR4l3+zeCvzpGMWRuH1YRlvL6_8A7Xci#MrR7R;s71t zk<3lurV9Rwok5B7`B5D?i8)?S&CcnuTqmwD`OoVh;`(QC`TT@fZf98vxyADmVz^$h zP|<|A1TMc*X+LYhk31?DkJQZ0_4FE>%HwzL5wFykQqEX8zT@Yg&Qw986apw2J-Sr$Pgf}4i@sl{lew{s6~O?D5!cUKS2OB zmC!|D)2O;rjYNaF0-Dz$g`$X0TGAlbTM0q zaGXCMYDV#eAu6@F|B#T01+flNa#X-2HWs<@QUy^7&<}3BwA^4G@=A^6=J?0KZw8ky zfXb%uvba>0+<4HrqK0>LSB8~D-&s+GWCZ1=#>De^sW3WYskC05S#-brStd9OtVL9E zG5A?R{QT&0Jri=cu|ZHOU1$gXi-h=@_@^f4(&@zT&y(TK{G|kbcvLUDC3Bz+J*3Z*?%06%;&$1B4xGdY3}TqXbbDz=_2GSIm!_A%N>bKHMyBvd}6>GO&a=9TgBK?vxPA zi4CQ=k)1i65l#UOmz+hZ;(z3I$k7eWpc;h5C{@P|5(AO2XsYax70rj@GQ;!Ky-pJIupG`p+$&#N*&A$l+w}lvBIH( z1%=BB=q^5Gb}|qw0O)lnA5X|R;+0H>@F@s7dL9=G2@tL>l}`r3v2@2nN;;Ir=f)-E zAS_PRjh;>dxpDNm47p@vKz);QgA)YF66-t>8=ia&KOqe-;l#E{oQ76zm*j*fiDjuM zsT(gPElP4!i6UTi8k-p-vC0%h;5nC{FgE@tQ6XG@#!u_unUKu=Wu#YX984F~x;ZNO zms0NB=cdMR zMLBkqA(W+hAP}0F^Wz?Z&Xampf`sUVWT<{eYPwx8kUQ@LMK!|7c&V^Cf~_M=jUKTH zu+Vbl^RhGWEZmXL4-r9vC;_))(=a?EYOI8?I9YHMA4YcuSRZP75!yI$EVXB4u&AFs zy2}DL>b=q^sdtq_Hm!$!-}KF{$fi`F>0mQq_`T5rnE9MGYVY!33-%#UcqMC4l%V zi&?S^Qvjw&79>?wWTinsR#gRnkdmq@GQiStoGD~a!dI7R3TZ&Pt0m5>t0fj8nWlhoY9&<;RRjm;#{o8lRdwk)=~8vV zlvLFf)(KYt8cCIc#RydkRSrbqA0=59gMc4Z3oNV3QMHhUy5M+IVLUFS3zfbL4yt3) zox+E$^M^M;Vh@C~)K!^SQjO?}i1$k_^fr%(9{CLM0cRw+FylkIQz*hXpY zQ>o|o9~&I3e)afuY?x1%c@68!Ov9rs)^RQLK3{Pbg!3#Pyv`f5S^4lnXJg$GRX1*T zR?5M7cD|#U=HW_r&7UKS>w-T*T&6{!d^23bU{aAXXuhzk?t>+Qs zhEv1cddQT@7gG69E&ee-0z`D7Pbk?gAVLLnsel1Q{mKea{wSnPpl-eiF??PIFHXR6 zKFRI{^ez7QbR(#p&y411}m#QGI7lpk8tP!eV2?1Uz1HMp!I2D>fl3%rhZ1 zDmfrCIyoT*<`b)oR4AH>y9C-Te7UR#P998Zgz}@({CKGzIWb&n$_<9ieRc-)8~u(H z?wV8_X5r8uKcaW3I>$snr?@94`-1xcrDVi_=ZP!qIuQHb3-Y4gPV1cJ-$M8dgL;o5 zzjFbM32>kp0aH0?azkcB96~6Ab zpZV%{p@uS%oF^{}`%LlgKq?oZ2Ne%m$&Wh#0& zf^!KzNThh)D(i{vUHnqh#3N#TNdvgHsOZ1IQVl z!?;0yDew;#tdI+SnI#DP_plNKP70jci~tJ0F8VhJxVWS!;3dGR1x8kIQj!e+@W%(v z6GeHZQT5J+UW%gf$ML?9DhATPg>5rcu4UFMM8$GD0IFE ztaETjh@-%kla}hO#2~fdK-WiFzPB{NBntbI1hZlQ+lj3y!BJ+*F$h$_tRnLf+dv{6 zQ~iGPs*jU2NYjgR@0hZ0YzVI@Ia5;g>_VcaWS_wyH=_{FvVkv877_${Ir_lFu12lJ z(s$#&580u)pS-`li%lDUz(lL5SN$rt*0@=J;4bI1*l;{HU2QO$Y;e_T$K<@v_7{V6 zukIYy!~bmDo@cwdkl)P0Hm;fa{$$VXm+NIS-<715#$0_>(&I^~n^Ekji&H1gPU*iP z>r7~$iI3}4LN+XJn;vczdvvq0+?XCQ-CjG_Ym}BvBOBSf8WbY+mHDTy>{?^5T3lYK zApdaQ=vkkGmo~I(MYzsXU7yuHiB#$!ava zkp$HwRu&R^&?8!GHRxKsUd%3Rd1+bDXelWf27|4KnMzCzrn*j`QhQhPT?eN(b}ewe zv~a|pl|iYLa_K1(#CIl>LCWN_^|81ivpZWOU;R|q$0wV%Ym6XH^tH0p(AeX%L|&gA zf(7)M{%l{icZFBQ;9`$>fgr7)wRH?X*(yb}ZL*5trC6sWC19>K{Phg%p3AU?eGw=k zs3B-z1lz&VmSbrHDrf~l>`|gR69m(b?ZX}_!fdj509{0OcJ|MTfaA_T%Ud9+LNM$= zg$PtVx=->(zw!jtR$d8No{-&`9LqPIcHP+{#iIN8OQzOp_eLh_98$2`Rr2lWp83yZ zI1dxwW->3<+!)hOdb!HCwTk)wRidM(y(btedZ_I%IsddaahIqL$_x2RNdd$TzEC4 z^26=6YF4O<%CeUmiUrB( z8x}1#D_Jyq>eFRA!A9)`8&xH;QRLjA)I`Dhp|jZ8|A-whpcD;kRQHa(axk3#TY@Jq zB~5Ihuy#1wfPJ!e6j~@dF=Q8P`$uZ_gM~6-_X33ngViI|Eg>zQ%V)UxXkv!%9_2$TEsq!d^B{% z-QUI>4oT?S&zu>qNgS_VyX)eK^(*JBDQF#Nx$D~f!#OC|@!Yp#vG)vBbC!3>GVv;1 zvO!7EDm{F-*YOvX6Vg1Q@@msHdbBjS>}hJUc@k*U-Y0;0^)}DR>$1Y7tU+J7T(!If z!}?wRzI#bcXp(og2YpBA-$IHizm-u2C+>fzA~Uapw5-0aF3Z~3gEHaBLov={45&?xsU!^Sy^ESenjl$3<=I-|8A z%6Is3|k+BlGfUsUtY6(`0GF2l)rU^_H7%KJ<5e8G`^!H5FPjeRh%!14QFd!-GHB9$P zb0581`E_K?(XwWZh2OdB~je9DWW zvd@K+m)~a)25Rd~uAENydT>MUJI_hZ@AAyJ$6ZcLddX2I`$mjUcs_lA$E05FkMy;# z9MNtZdcWoMvIj0@CTnzU+-^5VIx=H`U;&S{-kd+hqo zw2955GlJ^ZU5X3vZadL`!ITFLL%GX(jR@Gs3Z9eOPe&#!G1PQ3=h%uzje0K!e>1r{ z>73ve_sBqYp;R4MuT>)JWoxWWSuf5HoyCrz7FF_cbB(9Zdt(txXlXEDX5wh!C7uLR zPCRjOEZMz<k6Ca z-|rl9^)tN8M>p+5<)@$A#PWLE7QeyQduH|iT<`Sq!7?|#^=e+0IqlrK4EIS_3vRaW zf755xi7<~_n>RY&HH}}ST~p1^2zjkJ|Nb}o`TUA2SrI+5J&L9{Xq?X&Ewy)S;LPgU z1nV1G3ct@4nBB{=4!*6<9{I6pX7smHCn7vK0eei;?hj(0XoDsL666+8~VocTwf=L<=eBv zsx_C-Jk_-{#HnF}Tm<8y$kdDhQ!|RKj7^0aUIvg>)Qp6-$mn+1ucss`>)~fRy);Qvt(T>rTGA_+9oalj;F&&|(xgSOi2NPMPb zow~;B!?TFY7e4(huexni`2ExqOU_Ee(-Q&~=Np7?aJKf@TeT)+X=~cP-P=Fr?(pJ& z81U3((#e)CnhB?>m$EEBD+C-4Ib+#6w5cxb(Hg}nMs>*D-6h_kZx*;Neck@*Woxm% zozw1+C2c{5Q_NQt>dw12Uq#7g|CdpU+v?J?wsng&YxMKGlVhf!?~4X<3o%OtQQS(XeVdnOWUo4vSOO|ht z|Dt9xXyg4)Eo&!v?vsfe%#9r6x5f3j--~Tox!2_Fl{PJM1%Es8m z-vczPCe%wAjJvnM#U!C|Ug?4pGq05!Y*Gwc+E%rxIKHS$qUFA=!C!Z>vA1R8Ri+Jxg762Q0RDT+-@mfnD=L$> zHs2gF*L*^fl~&9Cd#y*xh8YHIJbSylpONy*3pE#fHVW9RuFqsH2QTR6HDAYd?xw|I zY~vd!>GAme&!@{Me^6q=R`#_1DO;nd%ig>lt84Lf{G(}lPapZMtZXn0Iyv*R$2qz4 zV>X}P;>xW0v^sg-*sG?uJcG6rpMPNLX=SpZ*nfCnm-`HhFNw2fvs0(Gk7O_VoOfl> zw#NpG@;)}Hwae}bN(tQVF?+=jG<0xWR}-_iHH+?Flr9)r^=WcV*TL#?g)1h%7@qSx zu|zLGb_!Bqd%oCp$Ix@%VawnZn|tKAaI#OAH}@}^R~bd_&{N#{^+S0raki&-@b^zr zjfYqYBI~^#tar_yS?`}N3_DqG6|oTp>kalCu?rSs+iJ)xn9VMjnXmpc^II9SD(W9! zUKFb2Zq%q8T2Z~xCu78088s{J{}`+P6KBL9m$J~;DvL@Q!x-*;Za>++G5hA(++n`N zRx3gJ=#(yM>(3q-U%K1sl4{kAl<3`|hZho3C*EX`1u* zDe`K~hvcJXwO!q<`ONRPNk{B^k6Bs&tZt%$>-bASe1n(lllyYGVWSC6d3B|x8|sVS zIqiuXvCY!@(WfcJr-y|+UY0gLd4r?RrT4k@>$;DNHhWc7Ze}N)tsQ;BxkrkAVVlA+ zi+$(ZwmtateBzGQRci$HyZw%&8>$*-DL4hrNFU|tre3#g+ZNxk$5*(1&(Af;U*3%! z_t;f+jP~*6Jq^ygJ?Z^q-`gRlEiPTN$@eifA7T_S>S@TU)pyF4o$LpHf6_!C-SuUb zL4A2)gGuntt%=UlE3=}ur&g-1u3tB}O_lep#3s4+_vT^8XBeJ{+rLb2s%k9hY`J-4 z>F)am4|Z%h8M8enSn86CRltV%TdH%`Z>w0CseOI!RJF{W);4QoQ!7T#=v80wYVt{g zE6;lPpIGwJ>+T1F%bTt+@p!`VhpA6%7MRED!RaF59A<(mw!?X>z)@mL#&*MN zKv6;_2iAZy3iLmn=@m8e;HcK>L349zQcd@+^Eb#c*E~V*7)U`Z7V8T_s%S{Sl#R9+oKDt)1FKknq4Cpcfe`RdzYgd zx+c0UYoFQh$SQr=)o=A#>N-!k^72ti<4?Xw-7e2-8PMN#M9(qV#)%5u=crEq@U-Y` z)AVt*CbztIKj>Y%a%*_j9xcy-{AZ7|m(P|Rr1Qk&@ki;0v#%{*)%C=i`+V!WE+IFU zznj)-a5x8r^Cn3U9{$Lg_%FmG;T;& zyP~Jo^VXc1)`weVd%Zj*i#_H_9}E9JeHI%Vo{ZHxSx6*~tK55FpT)TPH*q$5ms(73 zzM_2cnD-a+^43|)m(T3m_WkLMLkCB!sVwYuh+RnPbUY(zP9fO^ShAEdPWjg+e^A8^ zf1HFWhO@hORF=U}5Ca(k6j7{dQXFM)=i9)##*y9E)`nw0>JN%oACbDb!aIKIkiH9h zPl=yf)cc(84oMXOHz`(;Rg2%OXtmeUU_E{|Yx2Grf9-Z3>4{BbaGaNBSyH@dPE^~e z?A5hL)eHAHH!-#i37E2Utn;VKJCZLMYTWh|jG3cwD6cq7g)f_9dwqtUy6bwS7Z;mv zK2Rv1v@&^e?5yjP+K1n5p^Y!tGw0%tmRxJGOMp)o<5w+Ff@Z z^6?z-ozd{TCX98kdgO=b3o)k6H#HxhcpA6AW^8kG(SMPR^R^ey8gfkL4lz#}`lG zJ@6f~I^Qs*+HMRRb3tbv8}Y|%nm+7AC^P=pwg4^shZlJ}1|OHJ9vuuuZ0 zr+$aCx;TE zk;$0Faq(-qswwvHADFUo)eQFP>_dWxmD?sYX#SqQcTnPf^;%um`El6|-{Kx+zgzy; zaNQvTkE>VC#yj+p|IXh3YU<1)U}DMcYsq$?JR4CWPX>54hO>j%!$cT78=?cOUl#zL zjLrv4e=I@(Gr!1zM8e%FiIZL!evCp`>5jVC^Ng)+7xrk8sqmss5$QB(IouqlQb< zy7dU{W?VV)95JHr2k9j3VGq6($MydQ$DR$aYI%~D&gWN*>{}+C z>ryWNXy+%gF2COv)0esK>C3KZE7v`C(jU6+fPJ(%r&rvUr)ztia^G;?&3DJX*3&%? zdpv3@ipwkYovhm-r*dXag6i4Zt!7m(qmOL8o#c|-6g$}X zJ%6TE-RNxP4fDNth8d-cOABJh-Z9jgIln%3+>r1I+$nl)CnL?Zj+VZ==9(kDR#x?F zZ(~*MeQb|>Gp)?im4&7Iv|seelU6>n>&v!&s%X^v+V1Az46h|Xe%rdcbHEHw4CQGkil^hIrslVj;y-&{6 z$X}n;oTg42Q3>iLF-d@_t)o)Cl3E&H+IOGQOP%! z8yz}oT9>-x_-?&rnK#;>j`~(l+CRU1dBR-&&H4HIpQRr6{?w#2Y4|~KSj&t9dmSyZ z)k?FQer~G^ru`$v8XVI?V{O)9tbgsbgP|U%S0;c8)Mu;i_Yv^kh`Py4}(a+Dxy#lN!79 zxZOADsOmL^HituH(p!!@UMAEzt{0~(=EhFVn;&VEym`6T(kJm_nwralYUM2&H(y`d zd($|%%~uzWJQ=Ai^&~Fqu}z?{s`aDwvH|C|x$g?UcG!xMxjw%AR7!iluu6@$o_p^) z#BNB9wa-~y5u7 zx65nHwHGhk<`i8YUpu~7=lX!HGr}KF_n)l&rqX)k{n`C3H`$IjvTMNaHW#-soVV6) zp6ig;v@GA^onOct1N&Z$j;XPeg7z*|-l%0b`PAFJjN+LeBHGRe*3XzfweFySpjSk9 z)19YHOdWbHb{yL0+=Q)jH|ZMItc`mfrJvYh>a{Fl+Pz-k7Y)1z1RmZII?#yGc46FT z>&u3%Y2nJlJhQibL@jk2$ij%52fJ*i(3l@Ax{g}fVVWAct zxnRivf7{77woKE!v)u3P!Yy^470HX6?p~QTL+mAb0Tb2}_8%QR9k(NXIvM?md%lwg z=?{kolGiBsmikcqm=rds^V*6M4R(KbC{e9;>3||1;x)n8p5+P) zySBv4EpuHsu_?F9>;`UxmBoOMjrxOp2VJTcg`7S*seBl z^=v`W%(thENl)`bB`W(?t(EFh{v!T!yw!pV^MU3`BfMhtndzd%zDmvtZ)B%m(QmZrey{C_<=N58w|hCtAC*6J zbmOK6wbyTUn>Ng2go91GiT0$eZ%sblvFOK2SX?`DdVDIcW|yFGkd*Xl!rXK~;XpOt zIE91TeBZT{PSWLdo9I!K^C4rh3u&m*Fuk zt)pd@P8}efEqy_HYo@;XfvBh*ZMTld1<-O?Mv&gUsx96=U<;6+OsmJ ztBt|9S1$5f2Yy*|dR2Hs<+Sq9^bo%x9tT}dlxK~W&mWTXEq6u3{*;u&6M-3OisJ&# za03?C?8n)g(546$Pzu4^Up@H_~Eqz$H!m*L_gd;?1fYlhc#Q z8lac$^{K00kl~xu(oy|*nm(<@k%_V;H8oGC-f}hBZ}YGDqr%*W?OEy9M|x^e4=urM z!@RXF?&G`YE3#%d*JPe3h`;gh+UDZs#@>rh`J9+N`Mhjyaz#!+fZD*jS*H!XFI_s` z&9Bd=Z{LD?gsT-?XH!R;(6JA$zinz0N`KEa*HOt*2XD8j+5;D`QLG|eQF^VJKSwEez@xzIX z>$>|FzV_euNbZ()K;iT#i>`aFSl%HMqP+&~Q61GXeuS}(ePi5;3u~p^SC!sTo)x!g z_rPg64>rU}TkY6a*Pi?y&2HMF?Uv5-yHazp{PB2pq;%Z1^xIC~TGv`U2-uTeS*T{i zE>yD;`wSQia5$*-0G_t^8DfWnngXz7NP_W4heILZEUh3?9To676cQHT$T5ZK&j_@L z&U*4lc?JPjt2%otm@KQVw|*1k`af-ZK4tBm7_*&V+ZHkoJjtc?M;eM8@i)CLoN6z28pH)$) zbPNtB)8TsDNYOf7uE3mHr;|TSEA0Pc*6D2e8cJVyDjeHB_V_xljXkW>0oq~6p74+C zD2&-g!X1TP$Bv@&Ek3-9V1x4gag{E4jd!h{VqJFEl76h`U)2`9`#dROev%+q<#M$= zDxC7=#e{foi-;qQ526lb?HUl*dvsg3AQL7>-$h4zf!H-IZTQPMaL; z*5#`2ZU@Ww08MnrnP88NunW^xZf)Yv%@1;Ja- z&GVVtaCmk2g($UD)1%s-iu3n1M}75dFwrv_tIF3lDB0{CJ3SzJYxuWpedo5&%nkcX zTzv-(yP&*OdcfF8@8S+J7P{xXI`920^}&*pTi3i9XD-iayWuB2XXi9o`^P!DTb`7i zae8F!zPIM>t=Rpmhz6G2yqq&%>kgi94a>Ddo#LB31q;{(bJ+!@offDCY-jQMlF;D%a)BD)?Im2D zx&;JT(|={*Z!Av(;Ju@c!-RGNx`AAy@wULtA5!NG~@K!NY#?8 z(}M=Nl-~-|{2umcjHdl!qY!VwD_51{o9ibXo%E*f#8Crv-<0JJofC*QJ1A?uv(7Ex zUSGQ->He{^?@x|HJa4wUQBS9HFBsJeOGld3?fk}UNn2qv)a2Xn&DOu~d@##)Uv$Kh zo1ufAygpkNH+#nS#OO)4j|^3qV|>r?xz^D1m}TP)QW}@8taAE1Y2w1f**U9Inp&2A z();RgZT{P%)$$9ASM6V}y@}~sw0lQ>c~1w{j$RL9pMQ8;pBFQ-m-09($Iz^*^mWoD z%F{LWM%8pZwd9)8;3fG-&Y!6{|7v1UTTB0Rx#n=e;-0cmH?{=y;O&3if|?(3WLC}V z_klY&=kdoiL)L$|!_SLK;$^QbI8`IJ!ExX7qo=MFZs(uTd%JrI(Ifwh&UEu&$J)_1 zjw=o?8#gthzwE=smQQEiwY5?;dw0+}*u>z&@eO`AOm}ZxdvjrJjce73b6PIGcZ)xn zFIm|&j(u^Tz{a~dX8gOd5^J4f2AfCj*mTR?X;DD>)yk$L!&?*Xgf?8b!#?=!^h4h- ziuK|CPnPx2aQb_zA=P)7>%gic^b{=aL<@oOV^EIYzHV{dCGbmQYo*&I6z|7TA6e>p#0i{tsc zTK&8EFf*mw4CSoSY0W#P`#V_Q)H2$M%g* zW$s~Xr>l=Hvzu=6y=~^GeocdGt@E3YRXjYDl-F}Z{Smfw#WhD6%fYt~W@=?BZS*La zt21F;U=8#5h_fHr*Fv)LB5b!f1}xgBU~RLlK`^P@KW*VkLv_t=PE&gy)H@e9&ChdM znDM8ZUVi>bd)zyD$CSR(4EMrITI#Jn>Sgm6_)U=ZS~{~N zXhhEma+8vl%+w!!C?;gyK~sf712lO{(#>V6kKwOEK76O^XC=qXK!i;*5j_+E9nA@N(9Zl3wAbrXMF^w$}kJp4bMuKt^EkiY^1Ze!y& zNQ9FL`1m>hyC#)i-%%Vy$8?hli73b^Y+=vU+^9S;6r0%(ScKu#c{(SAB@wuyHj^}QFUhQJDed~y?i@T`>c*gDRcI)Pw zt;!=fp^t|4sa@1JH2qv?-N{OSCGEtPL2n;fUXS1`F1uyF?nFePUjMAa%=J#|FFSA^ zmQ8iJ`#Dv+A5PyMWwpC)ui$s)4TT9Wj(i=nGp4C6e&g>i*9P2?U1HDG zy0JvbYDKyCW zr}za23Exg(+w`?`>*MKQ$#HjZ;Phsj30LYpJFnDPLA*?U4435_1%FV8&vJwR;ck-T zHV5tjkW%R4s+D8dJ-aKzfD_&-V8iahW|W8lD|{h?oegU%;e8m`V#0B`H7xq%=?uUd z4`Bk4Bnx(l-|==4!kWoKf$Fz+us|P)+zW>dRKvlL$ z54c;bcWusvHCEe8^(Nc(^jtrv?$V=$Q$NhvoB3Shy(a;;#_BxwUCjIH@k!roH@Cfy zj>Yb-hWf5S@ewWedk#?ZzEJ*csB_88a#DR@;$zi?r9HS2mp`4^_U@Z(*VX=hCb_14 zj|p^oZJu&xtBJIAwMNvniKzp-3_V^svHO;JPRDlYCw+MRaWC`ksOfrpeVUfNoO$Eu z5Cc;FdPvDWAHTNib;;EaHDW?s%b6BuW)2>3@^I*^kF(RqTc+fYoPu3Hf=1HaRY;hzJNz4P!Ah}{2ZQ~i z|LVh{sJty?qSW#GcX``4Ju!5?pj7rryKhlRoXZH8sja`W3$9CKKz892oM0CmWfwHE z3)V2ze>Q4ihrlk#UzPWNP#?ivv0^(XpG^~b3wBSdUw2)-=;@-WrW(ni36l)IqElauL_@fMYc{4San43_0krc_3s6|bgM*Jo-^bPc|FCh}3?IOdm4f+*gi3&+z1*OIl- zZ0`r=+5?US9C1p2ImUk3vrmrAaZfgSn)_HtKUnn8^JM=vbGh3O)!6#$5(_*_D~pxVmnRp52C--wro z3@S>c?x3NX!!`Es9@d#oFvz#e%;g4t$u}_8wmBa-{#EVa-;B+e*vPtNfZD8 literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.xml b/ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.xml new file mode 100644 index 0000000..ab5da38 --- /dev/null +++ b/ModernKeePassLib/bin/Debug/System.Xml.XmlSerializer.xml @@ -0,0 +1,910 @@ + + + + System.Xml.XmlSerializer + + + + Provides custom formatting for XML serialization and deserialization. + + + This method is reserved and should not be used. When implementing the IXmlSerializable interface, you should return null (Nothing in Visual Basic) from this method, and instead, if specifying a custom schema is required, apply the to the class. + An that describes the XML representation of the object that is produced by the method and consumed by the method. + + + Generates an object from its XML representation. + The stream from which the object is deserialized. + + + Converts an object into its XML representation. + The stream to which the object is serialized. + + + Specifies that the member (a field that returns an array of objects) can contain any XML attributes. + + + Constructs a new instance of the class. + + + Specifies that the member (a field that returns an array of or objects) contains objects that represent any XML element that has no corresponding member in the object being serialized or deserialized. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the XML element name generated in the XML document. + The name of the XML element that the generates. + + + Initializes a new instance of the class and specifies the XML element name generated in the XML document and its XML namespace. + The name of the XML element that the generates. + The XML namespace of the XML element. + + + Gets or sets the XML element name. + The name of the XML element. + The element name of an array member does not match the element name specified by the property. + + + Gets or sets the XML namespace generated in the XML document. + An XML namespace. + + + Gets or sets the explicit order in which the elements are serialized or deserialized. + The order of the code generation. + + + Represents a collection of objects. + + + Initializes a new instance of the class. + + + Adds an to the collection. + The index of the newly added . + The to add. + + + Removes all objects from the . This method cannot be overridden. + + + Gets a value that indicates whether the specified exists in the collection. + true if the exists in the collection; otherwise, false. + The you are interested in. + + + Copies the entire collection to a compatible one-dimensional array of objects, starting at the specified index of the target array. + The one-dimensional array of objects that is the destination of the elements copied from the collection. The array must have zero-based indexing. + The zero-based index in at which copying begins. + + + Gets the number of elements contained in the instance. + The number of elements contained in the instance. + + + Returns an enumerator that iterates through the . + An enumerator that iterates through the . + + + Gets the index of the specified . + The index of the specified . + The whose index you want. + + + Inserts an into the collection at the specified index. + The index where the is inserted. + The to insert. + + + Gets or sets the at the specified index. + An at the specified index. + The index of the . + + + Removes the specified from the collection. + The to remove. + + + Removes the element at the specified index of the . This method cannot be overridden. + The index of the element to be removed. + + + Copies the entire collection to a compatible one-dimensional array of objects, starting at the specified index of the target array. + The one-dimensional array. + The specified index. + + + Gets a value indicating whether access to the is synchronized (thread safe). + True if the access to the is synchronized; otherwise, false. + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Adds an object to the end of the . + The added object to the collection. + The value of the object to be added to the collection. + + + Determines whether the contains a specific element. + True if the contains a specific element; otherwise, false. + The value of the element. + + + Searches for the specified Object and returns the zero-based index of the first occurrence within the entire . + The zero-based index of the object. + The value of the object. + + + Inserts an element into the at the specified index. + The index where the element will be inserted. + The value of the element. + + + Gets a value indicating whether the a fixed size. + True if the a fixed size; otherwise, false. + + + Gets a value indicating whether the is read-only. + True if the is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + The index of the element. + + + Removes the first occurrence of a specific object from the . + The value of the removed object. + + + Specifies that the must serialize a particular class member as an array of XML elements. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the XML element name generated in the XML document instance. + The name of the XML element that the generates. + + + Gets or sets the XML element name given to the serialized array. + The XML element name of the serialized array. The default is the name of the member to which the is assigned. + + + Gets or sets a value that indicates whether the XML element name generated by the is qualified or unqualified. + One of the values. The default is XmlSchemaForm.None. + + + Gets or sets a value that indicates whether the must serialize a member as an empty XML tag with the xsi:nil attribute set to true. + true if the generates the xsi:nil attribute; otherwise, false. + + + Gets or sets the namespace of the XML element. + The namespace of the XML element. + + + Gets or sets the explicit order in which the elements are serialized or deserialized. + The order of the code generation. + + + Represents an attribute that specifies the derived types that the can place in a serialized array. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the name of the XML element generated in the XML document. + The name of the XML element. + + + Initializes a new instance of the class and specifies the name of the XML element generated in the XML document and the that can be inserted into the generated XML document. + The name of the XML element. + The of the object to serialize. + + + Initializes a new instance of the class and specifies the that can be inserted into the serialized array. + The of the object to serialize. + + + Gets or sets the XML data type of the generated XML element. + An XML schema definition (XSD) data type, as defined by the World Wide Web Consortium (www.w3.org) document "XML Schema Part 2: DataTypes". + + + Gets or sets the name of the generated XML element. + The name of the generated XML element. The default is the member identifier. + + + Gets or sets a value that indicates whether the name of the generated XML element is qualified. + One of the values. The default is XmlSchemaForm.None. + The property is set to XmlSchemaForm.Unqualified and a value is specified. + + + Gets or sets a value that indicates whether the must serialize a member as an empty XML tag with the xsi:nil attribute set to true. + true if the generates the xsi:nil attribute; otherwise, false, and no instance is generated. The default is true. + + + Gets or sets the namespace of the generated XML element. + The namespace of the generated XML element. + + + Gets or sets the level in a hierarchy of XML elements that the affects. + The zero-based index of a set of indexes in an array of arrays. + + + Gets or sets the type allowed in an array. + A that is allowed in the array. + + + Represents a collection of objects. + + + Initializes a new instance of the class. + + + Adds an to the collection. + The index of the added item. + The to add to the collection. + + + Removes all elements from the . + The is read-only.-or- The has a fixed size. + + + Determines whether the collection contains the specified . + true if the collection contains the specified ; otherwise, false. + The to check for. + + + Copies an array to the collection, starting at a specified target index. + The array of objects to copy to the collection. + The index at which the copied attributes begin. + + + Gets the number of elements contained in the . + The number of elements contained in the . + + + Returns an enumerator for the entire . + An for the entire . + + + Returns the zero-based index of the first occurrence of the specified in the collection or -1 if the attribute is not found in the collection. + The first index of the in the collection or -1 if the attribute is not found in the collection. + The to locate in the collection. + + + Inserts an into the collection at the specified index. + The index at which the attribute is inserted. + The to insert. + + + Gets or sets the item at the specified index. + The at the specified index. + The zero-based index of the collection member to get or set. + + + Removes an from the collection, if it is present. + The to remove. + + + Removes the item at the specified index. + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only.-or- The has a fixed size. + + + Copies the entire to a compatible one-dimensional , starting at the specified index of the target array. + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + + + Gets a value indicating whether access to the is synchronized (thread safe). + true if access to the is synchronized (thread safe); otherwise, false. + + + + Adds an object to the end of the . + The index at which the has been added. + The to be added to the end of the . The value can be null. + The is read-only.-or- The has a fixed size. + + + Determines whether the collection contains the specified . + true if the collection contains the specified ; otherwise, false. + + + Returns the zero-based index of the first occurrence of the specified in the collection or -1 if the attribute is not found in the collection. + The first index of the in the collection or -1 if the attribute is not found in the collection. + + + Inserts an element into the at the specified index. + The zero-based index at which should be inserted. + The to insert. The value can be null. + + is less than zero.-or- is greater than . + The is read-only.-or- The has a fixed size. + + + Gets a value indicating whether the has a fixed size. + true if the has a fixed size; otherwise, false. + + + Gets a value indicating whether the is read-only. + true if the is read-only; otherwise, false. + + + Gets or sets the item at the specified index. + The at the specified index. + The zero-based index of the collection member to get or set. + + + Removes the first occurrence of a specific object from the . + The is read-only.-or- The has a fixed size. + + + Specifies that the must serialize the class member as an XML attribute. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the name of the generated XML attribute. + The name of the XML attribute that the generates. + + + Initializes a new instance of the class. + The name of the XML attribute that is generated. + The used to store the attribute. + + + Initializes a new instance of the class. + The used to store the attribute. + + + Gets or sets the name of the XML attribute. + The name of the XML attribute. The default is the member name. + + + Gets or sets the XSD data type of the XML attribute generated by the . + An XSD (XML Schema Document) data type, as defined by the World Wide Web Consortium (www.w3.org) document named "XML Schema: DataTypes". + + + Gets or sets a value that indicates whether the XML attribute name generated by the is qualified. + One of the values. The default is XmlForm.None. + + + Gets or sets the XML namespace of the XML attribute. + The XML namespace of the XML attribute. + + + Gets or sets the complex type of the XML attribute. + The type of the XML attribute. + + + Allows you to override property, field, and class attributes when you use the to serialize or deserialize an object. + + + Initializes a new instance of the class. + + + Adds an object to the collection of objects. The parameter specifies an object to be overridden. The parameter specifies the name of a member that is overridden. + The of the object to override. + The name of the member to override. + An object that represents the overriding attributes. + + + Adds an object to the collection of objects. The parameter specifies an object to be overridden by the object. + The of the object that is overridden. + An object that represents the overriding attributes. + + + Gets the object associated with the specified, base-class, type. + An that represents the collection of overriding attributes. + The base class that is associated with the collection of attributes you want to retrieve. + + + Gets the object associated with the specified (base-class) type. The member parameter specifies the base-class member that is overridden. + An that represents the collection of overriding attributes. + The base class that is associated with the collection of attributes you want. + The name of the overridden member that specifies the to return. + + + Represents a collection of attribute objects that control how the serializes and deserializes an object. + + + Initializes a new instance of the class. + + + Gets or sets the to override. + The to override. + + + Gets the collection of objects to override. + An object that represents the collection of objects. + + + Gets or sets an object that specifies how the serializes a public field or read/write property that returns an array. + An that specifies how the serializes a public field or read/write property that returns an array. + + + Gets or sets a collection of objects that specify how the serializes items inserted into an array returned by a public field or read/write property. + An object that contains a collection of objects. + + + Gets or sets an object that specifies how the serializes a public field or public read/write property as an XML attribute. + An that controls the serialization of a public field or read/write property as an XML attribute. + + + Gets or sets an object that allows you to distinguish between a set of choices. + An that can be applied to a class member that is serialized as an xsi:choice element. + + + Gets or sets the default value of an XML element or attribute. + An that represents the default value of an XML element or attribute. + + + Gets a collection of objects that specify how the serializes a public field or read/write property as an XML element. + An that contains a collection of objects. + + + Gets or sets an object that specifies how the serializes an enumeration member. + An that specifies how the serializes an enumeration member. + + + Gets or sets a value that specifies whether or not the serializes a public field or public read/write property. + true if the must not serialize the field or property; otherwise, false. + + + Gets or sets a value that specifies whether to keep all namespace declarations when an object containing a member that returns an object is overridden. + true if the namespace declarations should be kept; otherwise, false. + + + Gets or sets an object that specifies how the serializes a class as an XML root element. + An that overrides a class attributed as an XML root element. + + + Gets or sets an object that instructs the to serialize a public field or public read/write property as XML text. + An that overrides the default serialization of a public property or field. + + + Gets or sets an object that specifies how the serializes a class to which the has been applied. + An that overrides an applied to a class declaration. + + + Specifies that the member can be further detected by using an enumeration. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class. + The member name that returns the enumeration used to detect a choice. + + + Gets or sets the name of the field that returns the enumeration to use when detecting types. + The name of a field that returns an enumeration. + + + Indicates that a public field or property represents an XML element when the serializes or deserializes the object that contains it. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the name of the XML element. + The XML element name of the serialized member. + + + Initializes a new instance of the and specifies the name of the XML element and a derived type for the member to which the is applied. This member type is used when the serializes the object that contains it. + The XML element name of the serialized member. + The of an object derived from the member's type. + + + Initializes a new instance of the class and specifies a type for the member to which the is applied. This type is used by the when serializing or deserializing object that contains it. + The of an object derived from the member's type. + + + Gets or sets the XML Schema definition (XSD) data type of the XML element generated by the . + An XML Schema data type, as defined by the World Wide Web Consortium (www.w3.org) document named "XML Schema Part 2: Datatypes". + The XML Schema data type you have specified cannot be mapped to the.NET data type. + + + Gets or sets the name of the generated XML element. + The name of the generated XML element. The default is the member identifier. + + + Gets or sets a value that indicates whether the element is qualified. + One of the values. The default is . + + + Gets or sets a value that indicates whether the must serialize a member that is set to null as an empty tag with the xsi:nil attribute set to true. + true if the generates the xsi:nil attribute; otherwise, false. + + + Gets or sets the namespace assigned to the XML element that results when the class is serialized. + The namespace of the XML element. + + + Gets or sets the explicit order in which the elements are serialized or deserialized. + The order of the code generation. + + + Gets or sets the object type used to represent the XML element. + The of the member. + + + Represents a collection of objects used by the to override the default way it serializes a class. + + + Initializes a new instance of the class. + + + Adds an to the collection. + The zero-based index of the newly added item. + The to add. + + + Removes all elements from the . + The is read-only.-or- The has a fixed size. + + + Determines whether the collection contains the specified object. + true if the object exists in the collection; otherwise, false. + The to look for. + + + Copies the , or a portion of it to a one-dimensional array. + The array to hold the copied elements. + The zero-based index in at which copying begins. + + + Gets the number of elements contained in the . + The number of elements contained in the . + + + Returns an enumerator for the entire . + An for the entire . + + + Gets the index of the specified . + The zero-based index of the . + The whose index is being retrieved. + + + Inserts an into the collection. + The zero-based index where the member is inserted. + The to insert. + + + Gets or sets the element at the specified index. + The element at the specified index. + The zero-based index of the element to get or set. + + is not a valid index in the . + The property is set and the is read-only. + + + Removes the specified object from the collection. + The to remove from the collection. + + + Removes the item at the specified index. + The zero-based index of the item to remove. + + is not a valid index in the . + The is read-only.-or- The has a fixed size. + + + Copies the entire to a compatible one-dimensional , starting at the specified index of the target array. + The one-dimensional that is the destination of the elements copied from . The must have zero-based indexing. + + + Gets a value indicating whether access to the is synchronized (thread safe). + true if access to the is synchronized (thread safe); otherwise, false. + + + Gets an object that can be used to synchronize access to the . + An object that can be used to synchronize access to the . + + + Adds an object to the end of the . + The index at which the has been added. + The to be added to the end of the . The value can be null. + The is read-only.-or- The has a fixed size. + + + Determines whether the contains a specific value. + true if the is found in the ; otherwise, false. + The object to locate in the . + + + Determines the index of a specific item in the . + The index of if found in the list; otherwise, -1. + The object to locate in the . + + + Inserts an element into the at the specified index. + The zero-based index at which should be inserted. + The to insert. The value can be null. + + is less than zero.-or- is greater than . + The is read-only.-or- The has a fixed size. + + + Gets a value indicating whether the has a fixed size. + true if the has a fixed size; otherwise, false. + + + Gets a value indicating whether the is read-only. + true if the is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + The zero-based index of the element to get or set. + + is not a valid index in the . + The property is set and the is read-only. + + + Removes the first occurrence of a specific object from the . + The is read-only.-or- The has a fixed size. + + + Controls how the serializes an enumeration member. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, and specifies the XML value that the generates or recognizes (when it serializes or deserializes the enumeration, respectively). + The overriding name of the enumeration member. + + + Gets or sets the value generated in an XML-document instance when the serializes an enumeration, or the value recognized when it deserializes the enumeration member. + The value generated in an XML-document instance when the serializes the enumeration, or the value recognized when it is deserializes the enumeration member. + + + Instructs the method of the not to serialize the public field or public read/write property value. + + + Initializes a new instance of the class. + + + Allows the to recognize a type when it serializes or deserializes an object. + + + Initializes a new instance of the class. + The of the object to include. + + + Gets or sets the type of the object to include. + The of the object to include. + + + Specifies that the target property, parameter, return value, or class member contains prefixes associated with namespaces that are used within an XML document. + + + Initializes a new instance of the class. + + + Controls XML serialization of the attribute target as an XML root element. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the name of the XML root element. + The name of the XML root element. + + + Gets or sets the XSD data type of the XML root element. + An XSD (XML Schema Document) data type, as defined by the World Wide Web Consortium (www.w3.org) document named "XML Schema: DataTypes". + + + Gets or sets the name of the XML element that is generated and recognized by the class's and methods, respectively. + The name of the XML root element that is generated and recognized in an XML-document instance. The default is the name of the serialized class. + + + Gets or sets a value that indicates whether the must serialize a member that is set to null into the xsi:nil attribute set to true. + true if the generates the xsi:nil attribute; otherwise, false. + + + Gets or sets the namespace for the XML root element. + The namespace for the XML element. + + + When applied to a type, stores the name of a static method of the type that returns an XML schema and a (or for anonymous types) that controls the serialization of the type. + + + Initializes a new instance of the class, taking the name of the static method that supplies the type's XML schema. + The name of the static method that must be implemented. + + + Gets or sets a value that determines whether the target class is a wildcard, or that the schema for the class has contains only an xs:any element. + true, if the class is a wildcard, or if the schema contains only the xs:any element; otherwise, false. + + + Gets the name of the static method that supplies the type's XML schema and the name of its XML Schema data type. + The name of the method that is invoked by the XML infrastructure to return an XML schema. + + + Serializes and deserializes objects into and from XML documents. The enables you to control how objects are encoded into XML. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class that can serialize objects of the specified type into XML documents, and deserialize XML documents into objects of the specified type. + The type of the object that this can serialize. + + + Initializes a new instance of the class that can serialize objects of the specified type into XML documents, and deserialize XML documents into objects of the specified type. Specifies the default namespace for all the XML elements. + The type of the object that this can serialize. + The default namespace to use for all the XML elements. + + + Initializes a new instance of the class that can serialize objects of the specified type into XML documents, and deserialize XML documents into object of a specified type. If a property or field returns an array, the parameter specifies objects that can be inserted into the array. + The type of the object that this can serialize. + A array of additional object types to serialize. + + + Initializes a new instance of the class that can serialize objects of the specified type into XML documents, and deserialize XML documents into objects of the specified type. Each object to be serialized can itself contain instances of classes, which this overload can override with other classes. + The type of the object to serialize. + An . + + + Initializes a new instance of the class that can serialize objects of type into XML document instances, and deserialize XML document instances into objects of type . Each object to be serialized can itself contain instances of classes, which this overload overrides with other classes. This overload also specifies the default namespace for all the XML elements and the class to use as the XML root element. + The type of the object that this can serialize. + An that extends or overrides the behavior of the class specified in the parameter. + A array of additional object types to serialize. + An that defines the XML root element properties. + The default namespace of all XML elements in the XML document. + + + Initializes a new instance of the class that can serialize objects of the specified type into XML documents, and deserialize an XML document into object of the specified type. It also specifies the class to use as the XML root element. + The type of the object that this can serialize. + An that represents the XML root element. + + + Gets a value that indicates whether this can deserialize a specified XML document. + true if this can deserialize the object that the points to; otherwise, false. + An that points to the document to deserialize. + + + Deserializes the XML document contained by the specified . + The being deserialized. + The that contains the XML document to deserialize. + + + Deserializes the XML document contained by the specified . + The being deserialized. + The that contains the XML document to deserialize. + An error occurred during deserialization. The original exception is available using the property. + + + Deserializes the XML document contained by the specified . + The being deserialized. + The that contains the XML document to deserialize. + An error occurred during deserialization. The original exception is available using the property. + + + Returns an array of objects created from an array of types. + An array of objects. + An array of objects. + + + Serializes the specified and writes the XML document to a file using the specified . + The used to write the XML document. + The to serialize. + An error occurred during serialization. The original exception is available using the property. + + + Serializes the specified and writes the XML document to a file using the specified that references the specified namespaces. + The used to write the XML document. + The to serialize. + The referenced by the object. + An error occurred during serialization. The original exception is available using the property. + + + Serializes the specified and writes the XML document to a file using the specified . + The used to write the XML document. + The to serialize. + + + Serializes the specified and writes the XML document to a file using the specified and references the specified namespaces. + The used to write the XML document. + The to serialize. + The that contains namespaces for the generated XML document. + An error occurred during serialization. The original exception is available using the property. + + + Serializes the specified and writes the XML document to a file using the specified . + The used to write the XML document. + The to serialize. + An error occurred during serialization. The original exception is available using the property. + + + Serializes the specified and writes the XML document to a file using the specified and references the specified namespaces. + The used to write the XML document. + The to serialize. + The referenced by the object. + An error occurred during serialization. The original exception is available using the property. + + + Contains the XML namespaces and prefixes that the uses to generate qualified names in an XML-document instance. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class, using the specified instance of XmlSerializerNamespaces containing the collection of prefix and namespace pairs. + An instance of the containing the namespace and prefix pairs. + + + Initializes a new instance of the class. + An array of objects. + + + Adds a prefix and namespace pair to an object. + The prefix associated with an XML namespace. + An XML namespace. + + + Gets the number of prefix and namespace pairs in the collection. + The number of prefix and namespace pairs in the collection. + + + Gets the array of prefix and namespace pairs in an object. + An array of objects that are used as qualified names in an XML document. + + + Indicates to the that the member must be treated as XML text when the class that contains it is serialized or deserialized. + + + Initializes a new instance of the class. + + + Initializes a new instance of the class. + The of the member to be serialized. + + + Gets or sets the XML Schema definition language (XSD) data type of the text generated by the . + An XML Schema (XSD) data type, as defined by the World Wide Web Consortium (www.w3.org) document "XML Schema Part 2: Datatypes". + The XML Schema data type you have specified cannot be mapped to the .NET data type. + The XML Schema data type you have specified is invalid for the property and cannot be converted to the member type. + + + Gets or sets the type of the member. + The of the member. + + + Controls the XML schema that is generated when the attribute target is serialized by the . + + + Initializes a new instance of the class. + + + Initializes a new instance of the class and specifies the name of the XML type. + The name of the XML type that the generates when it serializes the class instance (and recognizes when it deserializes the class instance). + + + Gets or sets a value that determines whether the resulting schema type is an XSD anonymous type. + true, if the resulting schema type is an XSD anonymous type; otherwise, false. + + + Gets or sets a value that indicates whether to include the type in XML schema documents. + true to include the type in XML schema documents; otherwise, false. + + + Gets or sets the namespace of the XML type. + The namespace of the XML type. + + + Gets or sets the name of the XML type. + The name of the XML type. + + + \ No newline at end of file diff --git a/ModernKeePassLib/bin/Debug/Windows.winmd b/ModernKeePassLib/bin/Debug/Windows.winmd new file mode 100644 index 0000000000000000000000000000000000000000..aeb07b5e3e8d646272b6662d3a560614ed10eb9f GIT binary patch literal 2171904 zcmd4ab(B_B*zo@|!%Yl5bV!#VA&oTB-Q7qGEiFi=C{mJ2x1=DAgoFr4Bc(K`bR+G1 zo$KuVWk2ip{P$byU9W2${P3M??|trj3WloQ#QR_WEB(LL{~7(6TID^jT3DDjVCDUK z_NAA-@CE(X?`^p&Hw=?3U_q@{X_y1qC|CqwP=w2;(45j6C>%u$FA+t=gpnpKOnm2KX>J}B=<56_PovV|9{Fw z_cGP(-Lqr24!!(|d2iqIV#)tA)vxO<6Z=nbri%3|my`c*mhXR&A>?KHxJ&mo@_qk5 zc?<~~rduB;A|&5=8J6Em=ILD|P2_p;<@#7Q2$$gt13YhGgy(Hc?|D<>dETAMo>yKT zbjE0&_jzp3i}Ru99V+X2bFz6}3F-dx;a?f#@;uqdJhqURUF_dY46nU>+fuHO*OfMu zHcB*Iu8_A4{ed2f;>ZCZFNb^^s3@v~x}&eqkLWzQk3#Z}73>#@(iz3@ii(1JuEtAy zqw#1p+J#Odc^5TjBtivH4HSh&pebkt+JTOvCn%Y`Zi7cu0rf$X(NeTsbV9C>cL&9k zk10XRhKiyls6U#7mZPoc5PE=O#jt1OMwL(#Q6ITN-gjsz+JR1?$0&YGyEZE-hH9cV zXds%5zDK*zX><)e6J?fn!;sffz76ylnu^w4b%k<6U~q- zlyAk5EWH9|ZT80)2prqAI8kYK8is$!G&Q zfX<`GC{CokgVZPoDuT+R2B?y^ji`(x{5)6S+d( zc(epSgw%Q0}Vqn(PFe2?Lnu}ee?>&mme1eXQUJrkSpX> zN3BqAG#M>H8__XzRrErxke4vIRXUUxl|gk;TQmYqM=Q~G(P6nl-bM5TMWnDVO@p$d zLZYg2g}lyaESf9Ypf5d*Zlf0{PD(qM2IWTOQFGKAjYA927IX+*K=)9bRQBBLs2Hk& zqRnu!L<74p783(-&LuqgPE?`;$-oo$Ix8k9#=S}ytVAL=I>r)>^e zh4!H1q6>0`ys-3EsZkzO3AI7P(Gs)^okDj}+zj@NOsE*DgLDuvZ9ix4f;|vO)mL-gf^mm=oGq+yqtDze3S=O zLv2uhGy$ze`_V=88l}!WBuQ zuh1;?1Ns?VME68*^v_`B7O^8?{Fx(L%Hjoj|uxcmaD_e3TaDLlsa%)E@N_ z1wV%vf+nEZ=zFvU9YSYC!E^8cMHI9x1Ns;>5CxxmdeO$AnP?evJ7|Z{6?7lPC}ht~ zi^`zd=rc4{6g&sh(I)g8I)@&jh{ASlMpPWtLp{-0v;b`p1wV5*i2g+PQM4j>A6q+syo`a>LO>%|2ljtUTgA#sZ=dz(nC<+Zi3(*#IMs#1UkQckC zRd!SwH9}EnfGBtynuE5Ya-tHbK58ZECRfNChrUDW&{1?9y+pA~ z+vhYn`T!M1RZ)A?Uo=84`57ddi&mlo=oGq+?xHs+qKw@+3Ce~Fp|YqJYK^+1foL?E ziWZ@DXgfND{z6Ys?2ql8ra+lcK2#Ak6Lpm<e;vXfJwzVpg#GWkMxUD>Mu(M0?Rq6tAM)FE^@zqR=q31RX?oP`pZZzk;YUnupG# z#Fg!eYG@?dg6^VNRqTpvs66U`zCcUR9&{CXRqcM6QAN}lO+f3=DfCnntD65dlw7_I zlpPgCHBn3SDe5npAy>%Tg#JV?QQYcwE)6Op3f>1BiaN*@@>D}(By&S)U|Mzln(khe>|y`W0a%&Ht}grd+;^etM6cB1p> z9(se4G`FW^Ld{V>G#<@C+tC&D0wrl-cg}^XqmF0{nvPDOYv>h9(9-Ul6IBwmk}Kp5 zLzB<~v;&<$f1~KF>@KNMK2cSFN4okZ8sGZd$_JtGCmD#|BU$g6?c zpq}V6^c9+oHlicw7J7kVwy~$BMEOw#)EM-Xat%q3f|AxqTT2`x+Qugm;C6uomEy; z5PgiApw6fd8iFRGnP>w#hAyGEC|P@ZFPTw3R0>r?jZjbY6N)bRWG$aXZ+1 zNhZoHmweRE+u%`B6z!8+AYf&_px`twP(;L3A43Krc|7PWE2XqkN(&a)rE(Xf&FSHla)C35w`! zcS(cFq9`;1O+(wzG4uq*?qYZT5Y~ihWeo?XdAkS5_Gfs z6+tb~K=d8jgnmb{y4zhcp@wJ*+J)|*w4d6wwb9pTGrESN_pmFnqK{Ea)Ej*%nk84r z+kg(CE9gFYBg)a!Ur|H84Kx7FMmy16l&Y6qkq=cyQD`(;h_;A+lPl!iKrwpTmKl{n z4N*5V0sVlEqlYM>kKH*vDu(K#E@%LnfM$u-$`$espiAg3dW|Cc+7*RRUDOdxK&#Mh zbQE1c4^h&7_KX~;3hIuAp|8+1v=se{&ZE~T?q~M2Bq$BaiK?QeXaM>atwvkXesmta zL6QCK9TY@WQFGK2jX<-}8nhezfkFf98EH{j)D;aubI~Sr3`P6g?pIh;Rj!cN9t}j} z&}#GxI*tBD4^e2K-8m)7h03BDs0$j7rlOVT7jy|dM~Md6b917KsHx~vxkBDZGzBd~ zJJD%$2SpofcS(dYqI{?fYJ$3;L1+S+iI$+P=n%S$UZZqF>|NzTl~5}*1WiM$&;fJ{ z#T;sP&W^C|aGj8V2_5CxC25UPl3p$=#WnuxwfThXuRPjm;p zMe#@5JII6zp~|Qc>WxOA>1Zk1f{vie=)Nd;&AdX1#@Ln$WkLBw!Sh@aRY8qV8`Kl^ zMqKo*U?i^aHko+uqusOqh4q>+KkSkrzm`^-7g7x9~Bl=kxM?8pq+~1m#AhP$kq@)K;#L z_cfY{zDGZz9q14`i*BRnuTjd0c12E964gg-P&YIV%|bt--RLaxCfUsJ&eB zXUWhUv=04-t|M=?(aMn9oL=udPLJx8Ibc9+B`9m(D9m6eXT+&-f74LS4`pG!rdH`_VP@FAB}DXCxBkl}o_P6%5RH!7Xg9f6-Xsu|UTp{ng ze0xjfePqk4xpPT)?B+^D)bR*h`OTT zXgXSf4xwA<1&TS(o|Z-wytZCc2pKMK)uiev>I(gmr-b$JtI4+hMI_ix6@9vA)?^3!Bn(@mu^Kz z(N**YMSgG3O@|7i+9(PQMdQ(Iv=aS-{zQ*O!99nTTO~u;P(k!Ds)d@P0caXpj5eZQ z&;|4e#aLnQB{|B5@}n}S25NYpbEUnP+^8~YhCW3T&>HkRdWfR0 zvTsB0p?s(!swe6!mwZJN%|YAHpXfD8y4tSIhpM8^Xarh}cA-n?4NAMl?pzerL+wy6 zG!D%Z?T|};wI1C=(SNWneGe5ywNM8%3Vnx`p>60ex`!gy+S7`mE@(7bh&G~M(LEGv zo!u`Fs)@RxiD)ajhNAyycgc#Xpq^+Z+JeraXzT4R`A{n~2CYJuM9<`szxiQe!W62`F-Z7H5!g)qD|;9dVo^wvis#grBOrF5e-E%&`NX)y+tX0wrAu= zRZtt$AB{zG(H8V8x{tiw_KcJ$KdOXUpe|@Ant_(0z32u?w#S~934Mg>qdw?Mv=tpk z*U$?T+H229g9@Qas1+KBzD66-5p)SXLy`OJX<1NlR1LL6ozVc%D7obK<)W47S9Bgd zKw-bwwTV$yR0LH;El_v#85)kJp*3h1I)QGXu>JO45~B2|AgX{`qJiiO^c`A^dfXG!N}Sr_fdO3?=@}-ob~c1geADq26dTT8eg~Q|KysisB!(=jK2kqnfBC>Wl`U z@n}9;jdr6W=qh@PB9GX6$%M+H2B;GnE1Dx$$lH%@px8(4OS7Sps2Xa6`lG36IogB{ zi*Cpz?@`CBGNNLrF6xE860MLcbwWeYw`emugRUX(lszpA zs*1Xxv1kd}hJHtXp?^`t@AixjPzlr!bwp#)e6$svKzC8h)Ao#%=mS(7RYuKGcQh1D zK(o=0=oq?z!q3<{NP!BXDyV~Kj9ejaIXZwYqJL5Hvvx%uR0h>SpP)Wy99n?3pmXRs zN^#DfRuEM|9nl!H5bZ*z&?6MFLRoxv|J&t8Hz%^&@eO} z%|{zWzsMExE}%Q2;LnzNSFGZQvdATWnisVZ4bt{4S|!?}?K=7w#k^`?ni6G4rBHp; z6OBPL(K56h9TEK_SIB#gVqUW?Eh>a+pij^cGz+ao`_U!z1f{xePb-9~qo$}U8iVGe z?dTl3fu5lMQ0yD_+)Stv`ULeuU!!l)3bYqpLN8I=zwBvgQ2|r~bwC5r6toEKMVHWH z^dCy}w>>u}Dv!FM@n{L!hEAe8DD;orIVCE9s-tdbJer5Lpo8d7^c2OoY5#8A#3%#G zkIJI@s0$i~CZlC&D>{sBqljDf4)UOys685pCZI)VBl-pXf$pHUDD`c7ZV}WR4MdYg zOXLc9JJ3mV2|Y!z@7NVtP$^Ue)kE!3KlC+PfHtB7=q&mRy+ujy+Iz`>a*Be#Ex8P; zf!d*7=u0#Utw$%&zbMH)`}fCYLU~ao)B<%veMDc#CBI7Hj%K-E!4 zG#0HvzoWM((*wI-8Po|)L(PF6Omt1IkQeir)q5xhDvD~O zmZ%pRCYmOf{7s(n?H<)dbXOGTU;m|<w>zgnWl$S5 z08K}0MZvRi2wg!hP@)%h?tN4RH5UcXK~FRi%|)BgZ|I^Zc-EdH|NSFqabH?xM`ckf zGyu&I1<&|T=z=JCi@kxKpjV>c?KJ$ARYH^&Lfb!ZqKof1)So4T=}C_mT$XKqXNn)EIR@1JNWj4{bzy(K+-tdX3^lw|A8R zWYS;31|`e5gkD1&;t}R zroERes03<;I-_A|CR&PqMHkQ=6hD?dEi)>FDx!{P99oJFpfl(W3Xk9nQ~*^)ZBQrF zAANx)q4{VP+J#P{tLP<47~9@eYLp9ogsP$Xs2%EqhMW&7YiD(hphR&g@=n;w@*WOD8R01_b-O)s}Mil(`bQ?N?uAm1fMm)PB zJt~44qRwbEnuWHYeds*8i@f;uw6v%Is){dHR`_O509lb#D6WY7VjS8Z&s2Xa9I-y}`8d`x4psS+ia)rE%LhQ^{5 zXg|7zqNlL?WkaP=D>M+zMO)FI=mkoX((e2*>W0RkrDzZO3%x~YQrZ1JLe0=;=sUCp zT|`e%WNN!#4parTMnljP^aJ`0-A8fWvpeS&1z#5^gPNeOXds%5mWhI|0qjAS&=V9p zjh)LP3V!Ba7*$4%QCBn?Eknme!Dr61=p{;-*1ohDYJvu%xuW1}3d_+?=y&EWpnK>I zikr@!mI~!T zfX<-@C}t+kMTJmR)Bz1dGteBg3T;LE(Q$MYJw|U)n#}gD%As~>Jer5rp%dr{N}I** zR{^z0U!$eyS9A?MMzOQn{W73js5GjJTB0FnGFps&L4TqbC|NdpZaS0)eT15!&(SQj z3*AD=-nTnvLj_S4)CrA4o6w)=Ey|eP?pzZ!Mx8{#kJg8wxoA5&g&v`VIqYYRtf(w% ziH4&^=rH;l#rnYRmkm`%-O&uR0_{VWkeAc$mlf4Teb5~A6S{&zx$G{vQAN}N4MPji zFX*8t_}mzl+bRXhBdQ`-$ZLXnq7kCtGt&e#70p7c(Pp$8{eljmW9SUJA`0Fj?udfV zt8Zw@^4OQ=N3~EFG*%R>ole_`PNLhQ;Kv&;M8Tts_Mu%HTNFHNDQTHS!E;p+HAe%` zG_)CA7QK*5{>)U~FfXrM^6$T)A)*nb{a^X{3QZLSr!7H0qFv|+I*0y3uTjE$cE2SQ*trtx<2$*K&otg=iBxf-Z}m$QAMu6|~AI3f>nAqME2Z z8Xy`gSIAq0)}nprG`fafqJ)L)F7KiIs64763VuG_3iU-}&}{T0+AF#sSIB#VViXSZ z63G?vvZ11=hA8+kdP7n0{?SGhyjOHbBhVbQ7Hvfb(G~Ony+ZMd*fX-C!l)c-gxaD{ z(FimieT!D1&1g3|iEg7;qToFx{3EM`C=1Fb3f?-4qROZx>WT)U$!HDQD+=BcPow)N zK~ekCY@*VU*Ic*@Cfi|I&=st>7!tR$9RS^ZR^C&b{ z6ns=!fHtCE&_5_fNxLF9s)4$r5$HR#S`>V2I)rYBg4c9dDXUbd5UME(-fNqoPtib8 z@T@IH+tGRS424SD6)8~;^f9V~TB9Cl2%3Zzq3!50dW8~{v3HOj6+nOY{f)vtw&$io#ZV>G0`);-(Ny$3+J+9Je^6Li&PBOUW%LQ^izcE4qTu~<1I_=J znu6EE130+bfzKqXKm zR1>vB1JFdY7_CI>&@OZo-9V3#SHa$C5|ke0LPbQu=Zfm0;G;@?UfL0Tj=n}S(L%Id z6nu2tCJJ8XyU}rU74>Xwe?P-NwEO4@idNC?mk?z|1yEJg0JTDW(O@)D6nqYtgEsTh zqqN`A1zvg+Jwb0!yh`?-Q=`nN1geG_qLwI16x`onG({A=rz}N#(Q$MEy+m;<+qG#> zUQ`2hMx)V8v>yF}&Y%bAIf_}uo*N%!6_u7te)fq5p*d(1Ix7l3BVI@Uq8L@}OW#A; z(TAucs)p*I=BNYeg+`&7Xg%78PNRG1C5l(g-f0Sy1C>V&Pb z&`T6i-QHDtR0vf=O;8jXguX=6(D!H~+Ko=5+bCuYdoP(#VN@P9K^;(U^aYxQHlbh9 zWpoFH*R*$#6s1Q6QCZXowL?A8XfzqkMk~-J^eeiI9-wHo?ER%dc~EK82t}chXeru_ zj-Yes4tk9e)V6n!4OKwRQGYZAEk#?5 ziGm*$Y(;y~@8~b|7R9e`*QP?b&_}2;YJ~=)X=ocdh%TdNDAd57`yMKWDxl`57y1e< zL|f4zbPa_!w5O#;Wl(Jtg@&NR2DTtUC~%H8*M^o(L)s3+MbaHeTd4UW@sRqiZ-B~=vQBOS_*DxubB0Gf=JquuBvx{e;8Xl?De@liHZ64gUp z&`>lLtwg_wf}dGmL;s<8?d(f4q9Uj~YL0rNL1;Sq0UbbB&>NJZy*)QG%7aRw8mJxW zkH(>O=nQ&+QgyJWRX{z^NHhoifKH)*QN}2{Uq#dz^+w~+LbMZ|M-NfVj$vLxx#U+Q zP%cyyl}6Q36Z8q{g$AMVXeL^L)}dYK2s(xSL|4#X=pOnPg>|w&dX0_VL%C5QR9+N( z?V%2>CF+Fwp^<1j`VK8a>(S5XFglO^LXS~+XC4Pij?$qIM8Vw`qLo0^d1*u1C#VxI z?T3b;FPZxW%|qX#b!aQvBMR>706NV}FQMD$5&91$=whFPj3^f>fy$y9s1E9g2BHaQ z0a}app>yaW`UgEmvAWtjO@ZD=AEC;k;8z+NpiXEo8i(eiHE1t7hyFs3P`qyTv<#>? zs);^9gV7|k5*6>h*U%%B=u^A%N2nDV zf@Yu%=oq?uoC(&TJLf!)O1KNR3pj+rQirw4pl1dc3e)FK}C<={0^F+ZNY@(e&Pk3qUK6Wl0 z$}b8|tBTs8L1?llIAayskN!ZnMZtbC`q~v~(1)Vnr4>;N)EiAeOVD;va0jQ+ZS)Ey z>u2Y(qavs(YJs|-&(Q=lR}|dyR`ff%gJOJU=Q5x|s39643LeMTXg>OZx&5@uw8toZ ze|uUkR1I}TW6?5EaPDSN@GG)EqvPlbx{aQr&;YwOE=rH`qw1(F8jfb5Kxfetlwi2sFE^@ynxm0u5!!?PK`}mMsMx8~$Yhf6gftI7)=p?!&3Laa`aaP$;Ez}c@M@!LO^ay4C+V0l?^*}Sx9`rYg zJKnA>fEuHIXgb=8en)Rn@(FgoBB(a%iN>KH&`Iti`DE2hF_5)N6bwy*)60{xtiJqY3)9udrP<_+`O-K9DeUxs7 z-K7%x9L+~N(G3)uY1ifw^(^cEzWU;*I%*(_k}Kp5MU&7%v=tpgH&FPuc9+B`6Do#k zqxNV7nt~Rg&FC1qj{Zf7zO#3b3FSvsQ491b`V!4WKcb`PGJ1f#S@zr%C_5^H>Y?^% zD4L0ui+0Er@=l-|=mC0(;>@-yQllKG2&y3p{x#{Qs52UlCZPprD>{hIqld_wW6wy9 z3ZlxWE$Sy4Cs)W@jebKnQ1rQWE)6P)8llh7Oten4U#^gM2PK|o+Xtu|YLCXEnP@pW zAe!#^?^`!f*!(arsazp1H!6$jqxR@CGzl$7yU;oG82yLhF0kjOL4{Fy)CzS)pQEqQ zYV;F2gf5`xC~~2_gG{Ids)ahCL1-#kjt--nD9$2#Mpje=RYh%$VtDu0hUvcxAH&P| zlhwI$(Y48|&I|Lu(f`84^GbVOcKKd8%CIu>FKwF=Ars+Vn3Pdc{MUS>lxVtYn<@Uk zMIX)cSN&m1gp}wyBY$)1m;?Km=nWCon`y|v-$0>4N8PDr(ioYt6 z&d3ka*g3Jz{OHUi(Q@9DNLiIsSKVh-gcN`0P`JIH2rq@sM4IB?V;Y@FXG)}$bXuyJ zQd{mgD81Pyp_f5t#yc~awXAk#vTE7olpI=4JF7m>B2TV)#u9qD^bQl5;>qcGwG?nl zJ}otzl3z=dQwr+NBTR{ueG2Q$6lRi{vcf4vbY_QBifK9SloGo06H_9*WL`;~NfxrN zuVh{+ovC1oKT|ICpxp$ndzf5hn$&V`o8nPDZ_PD ztQf&P`}gyumfTMHN>^1f#XoD3&NPwIM=pQWbUo`kQ~a5ET9%p;DP^mc9h97=oTB72 zlb^XizHU8Y1xxvVp%otcOFj9qhPVu$(rJd=_+mONpyDzTQ9@;zIUYx&G6 zX|zmrN|rGHqu*Ln{L^!W`H$j^Q$Eyk-zkN(#EA&b@>iAAl2uCZk+zOkUe79Fisv>cG}H3F zQ`%}NWs1K~J1uRTnGRZpJ2M@%EOBN!>m%K7ihp`nEmxh=P4DofQ@U$O94EL#f7Pd2 zGC8G(?o-MspJ{31l>WM^zf*>48TUVm|JE}9|5LU&Ww`GAhf_xCBYka({~V6i*I=T! z@1E6(I+I0;|1aA{%FHA!H7Q+9=|t&a$|y>2QZ&tN`CV82<*YiZGcgkc`}nKm?~RoA)AXi9O1Y{fFJ-PN6)20P`0s;FP4T>CW~QSl z5mNrr)B8FzcXj7+&dg(-neWVa;r{(>cVf1>Nurwxc}H&Ijh=g>Eo0RS|&TClkT&@*{7?P z1ExgE9rn}vInSzP!)5W`dUT zrbNoBX}YQbtJX^KPjAbrwcac(Jy^BYTd1o>vTB1Af7KLLZSdCW%tB{om(J{QX7*~i zYD%QH!8@R<9WI}wtI!NpeJ(ls?9p=HDJON+D`(X|S|XC#*Trt{mcA}B zniApd_U`CRerM*M&Xjj%o$_AD-+8mMDvi$Uab}9@%xPz)SjgY`zB5x+SG{sd3tbgIS#Zz({j}7Xlu`=F z<=@XBovCh$KQmlsS~)Y*b*8r|wPj|hmdU0>O8H*P63S62{v+MUK4+y2lSg{YlnC#v zw@qiRN_iode4g+Q>plsS2gRQ`s*g0CDgMkKx+ub9d|6jz2l>3Q@?myCtrg+|;Qv8`GrbI}ItuqlRf>r*E z{N2Galg1Q(Ca%t8cV-gnOd%;%<%*P%IeHGXQsT)EO2Hj=*$*VBIWdoI&+Ab2U7e;dVzf&c(t|Mb4pWP6(^N_To1fv zI+NX$2=9T{TxW_oGp%%{hBNbt&O|vgZFOdZlqqsW%0BJ1tfD-YqVE@`c=FFC1T%+B ziI5_HH?%y8OHS#dt6n>+`sz%o)WKQ)s(w0?(-eQ_K{`{)nHixojh&g1T6#+vA(y{u zl&<>L6o2P0bY__|^Oe5U?RRFz>8guT9>^6btG?C}@t!SjOi4)z3kzoQQev1=oDy3~ zgghJdO_>x*U}oAdlh~BLlw_uSNl9tS3`z!5R#I|E@n1W;O!2%tX6Cpl5mILA%oS&5 ziI&GsS*DLYZkph+`>Vd!lEx`3qx&Dj^O)kFwL$kO@05+Ys-d%Lla?+{*{rJuIjgqn z%tU8qo0bJm`AJV-?W{VeGuxb*)4KD1XXdKTTykdq(wS$@%q^XXoA%vff1)#~Oz|IS zf*AhuoZTr&V)$?KrJPmibf&s9Q$$NMDTCzl_o<+(zA?pro-4%|Ci^UON>yF;le4P2 zmcvr~uj%>w)Y5%!o8s?NS7&0SdpFZSXA+y@&otGUG|o(GoyjAmv|N!g()mfn_%rlh7+ zGbInDzA2R`%}r@TX=TcAN;gxMPE+Cv(3wTf%o&|I?980gnWxUoA3BpJ)4Q`S=u8Py{ImYj(!wcsb=44O)jge= z>&)EOnf=bpBb~YD%skbZc$wdw9v;(wTm3*vS-B$R^n@|}kH)P{nG_l)#h>ZT%y?5q zQ@$}}DrK6KdGeO9z!Xn@$v4<%y(tk=66?GURVk(v9j2E zo)?x%S0yz?e*A4p7N_LURfSB6keLEn%1a5}PZx*P)Kb%w+TIE&^W{-=Fh%~=;;`C! zR!^ri)Kw!*iIABlTE;u2t*)Bytdf5bK_1siXQsQ(Y?R{v9K=7Xcg$fjbKDev=YBeK z-I*Dn`#g4LKG%DG>C6n#neeRkXE!UthU-jHQ#@~t6#ss5NGT;(q?8eQR$Eg%??);A zOkYzXq>R;>F;c#l%b%H`GY3rZXC~{+EoWw`&Lqqhtnz23>HQQm#ouST&NOglzSVvD zIy1Ai%yi0JU3J`9HBVFKsiTA;~nZ&wJR#W_EER&X!PAQxgup%P*zbko3fFz zQ;PrC_nG2(yG=Rel*YRAbyMVP4q>gdcsYZ!{L))Xe5Wkdo%5LD@4Q4yHK%OV(#9#< zwe)w&4lNU$vRltuYl?sR9-Z0m%;&dhn88RyLWp);$UnLl;rs55gxXRbRlS9IpNGxN8WB)L5= zom~F&d^5O1Q~XEqP-mJtGcUDtc1pAe|Lu98vnr(JD=FW}C0{iPiyz^CzF1?5d~H#R zziJyZzlJ5$nFGumk>bz%VM>H|BrJ)RJFGeqmReUmXVobw{#$0OJi+OncPi|CU6sz1 z2q`(VlzMVSN?D|(7v-50|FI7nQ~aG1 zX&K;@543#cl;T=uIiX9X@hMCnX^XQsQ(lyzqM=uB;A=6fyeo$`a0kxp5wWua5n#U3W7?=!_e{YO3P zgej3yw(F`}tV%1zzvu7*!J~-q(uV)6`^0z3U7bm5N~Fv@)RK>q(Uc05ET%N1WH+Tf zL0?x$e_IO7LU#7U6GoRWE0s|8!=Y zvno7}fBH0nJZ4otmVE_vTBJ@$iDTq2+yS@ty4aX zfRx~4LjUj`Iy1)$Eyta5LdzAWoYL~h zDQC1KC>EUM?|fZL7N`8BrMOdWYH28?yR&B`DFaQJU`m8H%9NE(d9AAsIwcg( zf9+f}MSj*79;xM?Q{L0^)+ssS`Ojh8;=%p+XBE(r+9{>AEe`Tx@x#75i-+US50(gT4|Z@l-9axi?gbY&Kz)N+G@G$ly(@kfVIWwQ?%noO! zr_TKD%zUOZx1E{6Iul;ferB8#K3Zo|nBqUH<8>yFGxLqkly_!k=u9(bX131sbY>RB z^WSqvIx}l@)l?}<xbb7wB&TkZ(2$?<*43seN+6iPU_CBq;!+Z-}$tbai;h)XLXr7#1=8=}FPI;oM z+B>VBYUwX!gj|ub&vPx`P?ni8m$K57m6Wxn9H4A4HYm`K%eui|>D~jQw%&jQJ&&mK09O zq$QJ68fwYsl-61*I^~=A^JM2{Qo73J@4P3z|B-*FDgOPO(lXg8f9R@d&Z@^+b~@#$ zmg7$OS5Lp`lovV^R`%WLue79h%4C9mHUOD-`{Eo6{ zUIPD7OrmTz<$KCrDf3Eu-cP2;SA?YauZvTrL`X@XGuNG&v|9dkN=99kSdR8j_g7`s znY8lVoPLs$L+_`SDgI0@EzM1dl=7jLev~6p=F1(9HbuTVW6HNq$*(ipol-!{d8ZWA zou8NzA^Q~8nRw;x9bSr7QcE_cl-5-ZOz~Hh(V6bfOeLKe@61%znU&5=buD|HQd3tw za8}jQnV1#c-A_ZE$z+OudLx}F>C80OnO4qB3!NF}%(T&&h0e?;!TmTh9dzcVGZUpV z@hZN%pDsF++Z6wPy6Q{~XQqeFL^(6Pg8Ol1`s>URXJ&xT9CT&|>&zWzW@vCfmEPUY zC@lq@GFn%4HpRcgF*-BPnHi@u=bf3abtZA;cRNqknQEr^`+TD_Bb}KUI<6aW`oWwab`B@%pPZEyUtv7W_Ia} zSM}Zf?AMvhrug@BP-iMSGsm@bcFGA|HNjbRQfJmVGiP+>lrwWyKPEht604g3G2v3Q zOFENWzULSJ^cy;p-4uW3ww9t!d9JH!I;&plOiO1bc0&K-*r(1+{Dl6;y8cpT$mQ>x zNXsUtBu?mm%>2_7|9+C{%u8n`na;$m9_-`Kq|uVbDVY=cAGOLz2|lM>ik4OHr=gS% za`~&W>8epqDWL9lBCAF zed=n-?vw^v$~vX7p5DSKP4uimrub(y(^a#bndVy7Ii-!3U!C%a?sL=Gr>)LBcV^n_ z>9J}CkIR2HqIA`Jrue6K)R{cajQnfb@)|7X%yiM2M$Sw(J*%sfL2~&!ch@q{DWB>- zYfbUb>Y+2coS6Yy&N$_BE%%)=L`#fXo|jxM|E!_9b175&okwY@>Xh-is;RSTmd^BY zX6ES32xn%o&P;P=mg~$iXJ(C-El$~}<+xKeX}RT;pLFLprug@~M`se$e)qTz>P%Ww z{F!4qlhc_wtur4vGv~EbcgjUAt(A$ta zuj6?c<%*PhjvncMl&EEj=UtQH&$KorLP|`X8Q{#s)0xT6OnjYL;LIe}vdt+;wEXUr zWV+9NXP@`9#H#CgY2}KP)6;4xLHWm&%9J~%G&QBR_ehHWxcZtRe+DL6dfjKZDG^fM z*D}>9xpmbtXH@~6+2hO<(Q?u$#kD+fN;%ypcD>+H_@`IYlFli$w3Ky9JuUT|(nxoX zGR42=7CO_ zmSU#(cQ{Z>1*d$W_tQj*|5-0mW~N5^KNtK|ivKZuQs}u9|MfM*6wiAt#eX~e(v%1( zvvp>QGqYG{W;-+A>&#+jW`mYBPWeg8PN!_wdp_apvqNVtNVy}Ie?L2Q=B+9I{p`}y z<2LZTRB}a1`B_U&O0>|=k^X1K;-<*wD=Gfts%T1tlwY;fcFJ`MK<4f_M`M*txkkV6UUN|#-btY~j&r2$o z{OSA9XNmmRdk$0N{Y8quPcc*E*Zx8SwN!M<2rUhrGEw*W#Mx)RmcC9osP{9(DOa>i zb;?yOOPq2;%X+8W)N=SIlvG+?Iwg&k_>F_-$A31` zB=(=5_nnenXNo%IeVwWBKZ<`=O{ZknRjvL<@$b2-DgHedP3)IJPHC!TvQwIAneCJ@ zTGl#cv6d}P`Ay4Sr##Yf!6}K8_@_T`O5P;?qwt!%do~(riF8UUEoq(7MoS*2bkUtl zn&Lmw?mAP$nHiunZJe3GTDm!9j;{Jl${4x)*UnBYvz)R^SFJO}KkH|m*(K$KS+z%J z?waDy?9-XI&dh$DN!B!2<DMxixXHz0%=D3!D zPC2FJ8!1cVijPqLh^4zfOmmB0m>0GvAsL zA>|J}eWg=w=&GI0s%KixJLO+pb6 zzvq6Y`1hPz%Xp`}r)7>)GHKcFl+0SLIHi=97fvasB}t3m4*jz#XvyW2np&zmrLC5Z zPU)m&j8nR3neLQsNr%bvbHWt=+4xk;HK+8~^2#aW_4!HA^4)VdMQ3t4WxAeKNlGiZ z{711)R}C}8KWnSbOmb%SX<6WuUvu%3x@w;(5i)Z} z%Slrrr99Gdol;YZzt1yMXQs&SaFXJ`H+{vbj-doPGuxR-q%#|xnIu|{I3<~`y5+1& zturs2nfJBCY!f^R`MV=R1$9+QQ~dj>q$R&o>gcKprpVtW5o)S4jhX2t#eWq2Oo{Ni zg_`Ni6lbQn&a84~TItL_XQsW*+>r8Eu1MLZqs}D$Bq;J{52W~KWi};3N*65!oYGxa zRdQDK)|n>G%rGsToibim^>J2B*D}T_vvk#DDa+-Gl+)*FIZo+s$|cHRQ=U>rNtq{a z331v6`*_|LX68LpBBU(RnJmuC8ZCL8vQbMFr)<^xY2)m(O=o&KGkbMrgfsJ-mf2E* z&x2otj_InkrpV8QOxf*}<7gQwmbPHRWT< zY$^VamYbL|DYQ_^e0dH#n}xBN&_vUozgh_ zveYSEwCr_CPc2uRGFy({Z);i@EEhn6^U&{@r9M-d*ONrgle_i|-I-T5q|4J|4^UI{r zCR6fLc1rPIJ0(q#-$!doZKwR9Gaa1rrLta8ddE!&-P zU-voa?DJ5|X{S8VRX3bfPj%*nGxJPKoKC@G_wVPmmh?_}t0kY5Dsn~2Ojrv4y|N?a zS5rn)elul0<+v%EC>Kn*M7bixf1aP1B0v8(GZCGG(<7ur*O@e?_%jiDKV_YnI64#M z%*0DEOzwGvGt*gTra3bQbf0a`%t0;3oN_q0Lub_yEwQ@UTp7V=)?`+O2WiBG~8)dE_bBi+9k$F#`Y;)z6h@Qc}Ogx^CBD(YOxdd4qK=q|94XZ4voh9`c^3A@7pw=VP}_15=)sUiPC zJ~#1+#7v=?(yk;B(T_y+O`?L6ifHF9Ci40VtD0ycuYd?in?mon)s!iX&Zj6-3z;XB z8IFv%SM&^%hm1fbt%;5`5}Bfu84amxBCoax8H=h;ZdDqSek7AoHPP*pCS)pPmdF}; z$akMY=Aq9K6Z!6wi0;o-6Zu|K$b4k}rOZ-f-cx2R#Mj&DtW_H!1xPlbPi+$&Ycr%h z$#%#@k{ys0Bs^%KQ#_LUIaKiTgNn*7=-OSNW$s@>nlE>&1{+)m4pCFUSMA!8inbef| z2>FsEMoPV&t58);NMn*%kbWegkRM6HQtI`y(nNQ|i_BKa#7E{3Ws*QHkt9Ra2dYXA z@%8neuauDdB&i@(NHU^xQxly}R!9$$JgEAfstO=8n=%EFSw)!=$n2#|S;(Ix6;T!3 z&p+o%kTfJ!A!SIap-*QM`Ce{Fbz}y+nQS7u&vQ+@o@^mCkl93;+Q^)wOg&^`_K%)V zwvYzM6cni<51;gD1Zm?+E|USShteAtG(KT}nnFJ=<=OQFM$xT${p{l#cl%~vM zNF$OrsOm&jZ;%;CnHZ_`E|^G}P{>S@M3BWKDIr@)(xuYfIBKG+_#ASLBpc*CNe=Y+ zY_NYfazV0_Y4DP*QmrUEi6C{rDBgd`GjkEAXnbclb34bVBO ziO#19G8HJ(44I~sX$$E@(g9T?sH!7mwuw(VcY-W;rJjiH^L7*Y{+h{Al5bIU)x;~A zKB#(1nf{O%L!EVLpCPD9YNAymAQ?%|(BGw2eBd;S1 zIS5H7;+&m1Ax9tuNRB}&n8@p`LQX(xx|#VVZAnfdGuW+~A94yZ$<3@Z`IY1}GFwT` zKn|0fg3AqT#KynFEfaFg|B@>@#O~_?P12?nL zq^FzN7;*)f@7>Hclj&||TgX*pmbjUnCR<3ZA#9b(E?SBJ($85+n0MM0ZR(Cq*XxXh(E6k|R^f zL^ElSX-S#1$b3tg49Lu;Oh#ljQzjea0?C)CdO=k=ATh@H=aUmviA;1pxgc3c@}$vc zn}Q;h<)N#{hfEt2uSiK`zNJiAWX4mb95Qn$6N$_U5qEkQ^lCFjhGe`CBF-H6is#YD3zQ z)PwXUX$YA>(iXCWq&;LiNk^>WI7w&B@E;SMa~EV@Q)WCez6t(yO+Y5SiLPP=GQ}vf z5>nm7Cz)fYYVB6N7SVkktpGv42M^#lIvq);7Y8~~d3E4|h7jnTwJJ&}a`EyX%A6-R5 zND7jss48lr>uLt6Bhp45K9R2>6I{t8qWAI~6M0ubleHurk@=mZGvsfQF6b*YUWmjT_I(_cC;xl>e zN-~q+sm|y=&u1nHUCC(jnJalsa=21VM6cDNCLT|9lg1?Jkr_gg0V|zm;+3k;Gw3th z63UdwpwA?SC{qP}u2H4|s$P5|x`&CTIqTBS4KY?86Q4*URFyaJcxsDi)z@xS?a;=^ z45myIWX4jaEizLm(;Kpuq#vrzQdNIsUQlKLG6|XMa?3+y8l)1* zbo6Oy;+4#FWWE#m!K!B9yst9R%uH165jidopU97>`rAZ42NTgV_};`TG7Fi6Go32U z%t0o*iDu>^Q=T&OkZDGl`H)^Fky5n)GM+MvATuem39^o43*-dJHjIAPL}$1I@{;5@ zs$%~bz4q3jCvg{~Fp<~Nis-#lg5)%+YMFQ?^Cx5g$rbGL&m>ooStD{l9zLnM1Gyys zbq~@_M91>{{JSYIPk#6-txjZA&Y ze1l9M%Ctdd8fDrdvzRiIkl8?)t;p=7%udKzk^`u^PE|*d37O-}*(WnRhD=Hm`HDqE z&&5|JUXc^Xw4=-^WF}DN3}l^&PpZzL>WEu4RRm|*t(qG82Qp!EqxW!X=tW2hl540c zY~uAy4ZVd-eahTJrZZ*kBQuOL50IHona9X1qs((;j#B0YGWRI+5}7xYd5=u!JpU?! zGwMg-)FOHpcx2A8AlXQ~8TAS;L=rpWP}%uN6J2SXjJjj3M7qesClU@BXCmKm712Jk zP2{_>p+3kek|dCWB+1a{ii!3~j?6R4WI-m@d}nmcdnH%&*AIGVw{(Qe>8k zY?g=oHm`{8>Uk6SZQjt8kn1FCag9Bts%_{KXOX|pF39I3hafdbj-Yc_6CLX~GNUMS z12T`~9orp{$S9XeM=dNy_LzWrm_Bj+f4Vn3rSq#}l@(Vhj6LJ2s>Y>n;kejaj zX7bFH6DDCxqN~oBByr_}Nmf@bo0M_ohKR1Bo{7ANmu0>+@rta*d?uPiimZjKq|AEA zHp={o&eu$|^A$+&FVTO+^>*kjRAn{MvF;*Ml`=0g&6gQA5^Uutk+Kms`5bw zi|A*$+9wTUDoMu7y3%DQ==LJBduJWzlPo9d-ekq$XZZ z?67N)%qBjOJE+R*R{2DXiA2Obg1y%A(h5cgn=eqJ92HnIu{CzF0(= z)Tr7CvjLANF|cmsA@u0O_1qE znU=^*q)c1LDw58Sb0l3MPe=wsLRLgSCnOFVjj>Xh=nSVIlZP_%vkaA0RG`cPRMipb zC=ab#2pLYY3^Ipg1!Nn^D#&G$)sXijYaoeNI%7r3SQ{aENH#;NkZi>&I-1Dq>%+D~ zz9-oS`I%%tu8rL!2a&l-av1V~a9@==C$s&3qAd8Zu90r#yU~JSL}HDI%g*_(K!$nY*a^zbnUGnl}WxqRS&9agUn3Iv_)nM zWjY~qfim48G1vRo-UC&6OmwB+BGZC0J&_qjnLfy@piDnxu8O>rhfn(Shs56yEfq!d zEaxzh-zc(7DHC}Gde|Uj>QiPYq#em5bRI%glOdBtewBy3Zar)<z$A2I zbX8*!{Z4y&lc?ZkCdFO(T14;DdM5IjnTW2d3&|SD4**C1l}+!{ z8zxb~y}~A=>XBR3M?|Y)Zg=M6_4EmwicAs{dAEhI>5!}>Gf`EEs(yqtHt|W-98`61 zs|K0$Az6f~|G9kzh5d}G>6BTH%mT`+L}ocxgt8&FcbOe$Ydr-B>HSJ@k*xl7y68Sj4~}Dk4ajgD%tMn`78?i z29nK{B_^d@Sz}V)mGvg=T{$bFckU3AsNf4GGhDeWqU&02BKNt;S&|OOd?e`%Nw&wC zvsQJ5IzKYe87_l(_WI|% z9Fm-5BP1`$R!BvX{g7rP2QYdk6P@#M$Pki?sG31l|3H?I+=1*Txd*vLavz~mJ3 zV?977gNd&6H8O=M^AS>)#Pg-zU%g0zAY)15d^u09jjblyIsD7{BBw|qAU8=8L*9@i zL+9ZA{yC>X=hP*r5NL5)NElBc029Okhj3@aDoj023SmhwcNh+Y~Dpgg6 zydQe`@SwzQ@_j3qq3OVdbOs^x?T?sRJ z=t{WBdspI{B>646b4rshUCCrp)|G4~EnUfD(%Y4SCR1D~X0pJQsv`Os$a0gY;F==3 z^Seys-Rew!BWaGzMUs}-jk_lDu6N$H$h@LVdr0U}XQkS?GbAlZSM0(qyx!Vj5W+eM;`~7M=}YrlOzgqmSi&I2FWyx_0mM=JQtGi_vkCLmUkf} z7s(<>agrtIT+2jf_$%Zal4YpsNmVN$BTXWuYBj2sP}N#w_EObW$XSx#AvZ`)pwA2H za|#l1%zp;|L{&BuUHfHZzM{-OkQyX+QPrHP9wF0_GEX4=NS;9^ki3A*CwU23N%96` z?KROEzD4FZWj;b~ki^cR&wd}NDlWu#+<#6}~)@RSZ&sq$H}UQdI?HT2ZDl zGJPo%37JaL5VDk{C1evxd&n`7Tk`P9e7ZxtC!?j2i0)x}6M5CEWr~`3MS3Drn=*Z{ ztKU+lA3Fa}WSKmCQZ*2A)Ri_OI@Vni`5vW+p0AKoPL;gRq<1i?lAFjoMtX-ra=Fr5 zMEjI8@p$@KrkUHPpLZ%Uy(zO4eI`<71x8;&vL02NscIACl*lc4=vX_^C&p<lT2#6GTEeqD>F=nxUxh< z&+?BZ^84i`n@Qs2)ZO^Q#48ye(!2DFVqzQXExPOteqQoO)$;A}NEa zF;rC%nZ=Z;jLbI5R7K}=l!=7gCTWa5uSlArkN2E^&aEI{khFmmCuxU1^-XjY-H>Td zneUJpLz(`_%%{vC%y27Z#v*f?GSiXymoh&g6MEi1=XsFiB)_8S3lp8;a%758W)-9o z$xcX9l3nQ2mHO;OW(Z{tATyCNzacZ5GAAMHNY0|_BvqY5<`!lCgv9v6ztYQ)WF%M7 zC%=iV^cpgiDRT>%wj!hC;gig5$Wm9Axr;tYFF2jOl6iot zoF-cJ6q(YLd4)_Z%DhMBYs!2?rWa*AxpY3`NP-~?NJ1f7NWvf&Nn%4@lf;E2yXdS! z=bSK?-j(@HbX|#&sZ5!qx%4@qJ!O(3Gm0`PAqz>;qw{X6%8ble%H&1orCSH-hQT1FT-W9Fd?R^9(DgWijS(ApY zTrlbB${mwwuKa7V-IWg}7hDOA?Tq!rmAEE}{)!$wp@`m1c}?Wq>P%{oyuh5>naF$P z#SYD_RRbyGgG?q#kz4PJrBsy?vX>+WzO9lqrioHB2HU6A9@?Rkb0*Na~@_Pt>OgGAk+59GN|oX#qJ$(h^mVsH!a_ z{xxS6I_K_?93rLU;S(8vK21#I?~91&9=0>_iVQ;LTgr?;W+-JwA~S(9VbI`P-%9Y5JsFu+ zA_FZm1(_dBG&2>QSBUJBhx`_9>}k36`=WoFcsx5qbgWk-KS4roI8~aNhd#+od?E`V zSzWmyqJ2ubRj*9yk}N@04->EFRqS6NqexalW|FLf{6ew=vV&wV$t+j0i0Jo-)|f;EXE!j275%Wp#kN>Ls37IcRWcC!)_bWlW-i8<^B}rHM%=SDK6HN{5=rYm!ZVAgPVaFC=v#TS*!~ zj*&Em+$U)U@!oS*s$+c($w|@ z=_sOS@T!Si$Ci0vBHx{hlNy=W51h`L$%4)qO*E4enUa(#fJ|k|lt88qWy&MdhB8%< z=|h=FWX4mbPCk9ETR@rm$ZVv{H|TSOGCh&GK$%|XbDJ`~k@-lOzUY(qU;o+%B9qQU z*FGGXFGcho)cu)_OlcF%%*R;ODYF7q-;k_E)wfi&88X&HzAqZ*B&ue)RsBrXliWe( zG|2<>d1WHsy^QlOB+*0p8&|=4we*Yg6q3P}fg*ZsTMww*D?4nHa{CeI`Qziv64=Ixp68^{;OFL(P zWFz?kQjH`Rq&-O?$QY6mkX0mQAm>ObLOzmIgJgK@pHD4FX_AJJ4kXPWlSo=aek17s z347x2+znEWq&H*`$w0__k`a(YB;z4>Nv1%;pZdp|1<6OU2-1jTIb@hgq@0U2kQpTF zAS*~VK=zYt!g;@BqSwzBWS*JmS>6iKzjLkEn94SY{#EN}*$&aa`W-Dh(K*gDN3`=U zT!&dm_Mob&iFV$bf2dr&JxPwCY7$i)N7XNsIf2YB%A7>z0%cAi^O!QHF;>`f|C}$O zD!GZgNXS%YXd_nQn5^m7h#LxH88i@r&rH`6geuve=}cE5Dl5 zaAk$b*RHHJ>F>%0laa1$F`44Z4wHqh>@!*K${~|OuKZ?lQskyQu8^dJJf^DD z5YKD>3_pXUCP@b=ZK89|0BJ>;Y><8=UqYr+RSw7+5k1Sg8@V7yN%BChljMWEAt?Y! z@W$z*^C<+$VxpakLn@P$gftb=bE=urkRB%5rwn8`Wy(S3QlXF>{X72>lA7crBzJ(6APFv{ zXRz`oqI=lXL`NTiOgqZNDy&uCis*BlUI~tjA_+rgB1sa+9FkO!#R0N`BsDUJNIrvH zBS{On6CkfhvLX}fgMZH1AW2AaK(dqMf)ospiX^#_X-|?L(x0SQVcpd!Cc3L7ky%BV zs*o)t4I#giG=^LuX$pBr(hTy3q%|bYNB`Q}LXrna4w815bEJvRxjU-9rA+_A`rPt8 zWxhvd24zM=){y)Ua+qWy>14y<( zejwQe`GsURY!0g_k9oFsVzxk2(4@;E?3g8b`xhjqm<(RF=5RR+q$E~3vQxk!>gijyRT zR0xm;B*~CzLy{cQpCkojWPr>dNm)d%=S3zu=gg>DOPOrQ9H7h>$eg51F~}8?5|Ae( zB_RKBs6khLUD ziszd?qQ z9ED6G`5m$-K-QC-Mdm2U1;}NRzaY;^u0uYM+=j#r_OJaPNNSQhkZb``g5)kT6$7Lp z$vtG+l6Z^i{WX9jDI|&{8Dt(w2FON|%#i&gSs)ilvO?r9cDm1OeIf5jeuTsc@n;r7 z(vd8I>{}d z`JLn*1Au(e4cjE~pDaljF=OoV|g-BjNs*=2fG$e^rOs|B_BncoxNfJUP zlB9zyBFPL{M^Ybhgrq&>B1tdEW0L-m&`|%{M?x}^jDZv<`5&YS$v8+ylF5*vB-0=> zN!Aq8>t~6HUO)dLbC@!ZAXiAfEUr}#sH#A5-PMRN|0)VYJ|`)LssbiDR!L+kQ06O0 zdy+DcaU|s-OGqk0j*wJ>{6W$H@_?i%B!<^N=a!JqN!mj4k@SL8A?XWgMbZz_fn*${ zFUeHMXp(7=D3Tu`^GRkwR*=kt>?TSancoBCKFJ1T zVkYp<$C30T8<8myAT3EYAu}{Uej(Y6%7&27@qzlP$WX1%@GLjR>914(oBqxyxN#>uABbiA~AyX=3z?PyGMMBl zGE)L%HOVz(l*t4cM42p@&s-7bXRL?Avq6@U zFysSCQAqe_(O&@_4lf2tK~f5mlcWr!EJ;~N-2mxKQVy9BB;_G9Nh(9ulT?G8AgK=d zlcXl(AxR`e{^Fs1XYz1(EnFLMN$MbzmZTmeFG&MPd6I^Z>Lg7eO-Y(VI+3)13=EK| zBrTDdOVSatnxq?K4@q~(VUm%M^CaUSf0K-dJRq3_c}MaCBwjlI9y*eZWHK^2Nftti zk}QQ(AXx^fO|lNshGY}&l)ffHVEALsF7Fg5)N738@qy?E+*#fJ`TOg+2>O-aLP9h6 z*A)gy86X7$q)LFaCGnz<{M{?}TsSg=BsMbgH=Epy53+(J5o9Y#Qph2aWRO!NDIhmU zQbL}Qq$(XG&+{Km^oq(0N&UGqAC&?S`Kv&fp-K^m{LLL#N}%%u6MgP24Vgz$0kW2) zBIGnl6^Q)37BwAqPqNLoSmHguEdc1WA(F zzplZM&q&5Ya*{-0&V@~M&YK|e7ZcoTV=JUT$u`I=lI;-rivVubF33HSz0M4?_-D8u zl9}W%BtOaTkjf;-ARS1KL&lMufNUZ;4Y^Em4)T%Y4@ml~{uy3^)F8PGk@x6!ukbsN z4kFHXK@W#NgbXD~@s&Pn%_YeN*+G&Ua+ahi53K+2HxLZ*3u z3?u1{jJ$KKeXf2u+>v7>eUSMlK*GN8SAB;}<^ZWi(ifSo0WyQ6A2Q1VMBZD{one1u zt_Fy_m!q2*fJ~+UsZBBvnO*@hhhz{k+XLh}$zWuHv-?MPBnQb5WGVzmTauy33=NP4 zB*Tz77$8qXoUdgLhkuVuP!7M0gd`&w^_6}E$tfc5LnOaxc{qGDq!G#3uk@>c9wz!M zF%I&*h<=8DB+udS$&iUA$3)gbrjqPJ=UFD_B(oc`l4Kubv&kvR?1${7%n@`xNOA(1 zqb7Hy>NMme$r*^e4-e+7nX~9~T}1C(UBx+M9*F4g1ghMIe4xw|NRpiXsuz&FBrhQ~ zNnSxZk$i-V5s4lvsEnQqd9M|BKH-p!BncpANK%y1vvXfWe@|HFoC=vYB6@aorP+{) znadgLjYuwJVvFe2qE!WvNluw!$b2rM*M^?=(vS)!R}vo%FAHhv%5UN2ApKnVJ-j?* znn|SRcz6ZKW)rVSCCD|AH}bfWI9lT84)Wxd$CbnPjIK zd7Z4yxv0qnS4x@Oa;2=vD_1I+#K;@ui7OAEr>aQ?S8AH%aHWn(F;|+JRCT4LNmEx^ zoAh+0t;rZyI-308N*9wQuJkb3?n-ZyWsXT5R~DGGbmeCgdA+1(ygYoKUriRevfN~oEBj53yK>m% zn#gl`_&n!K66BAT3nuAB^tspP`O_r7E7weFxN_5^jVpId`iYE@htKoSL|&C<^4dgR zgJ$xd$pKe_Bb>YPyenZQH(iM^dFx676M40Zbxv-Q%9Ye6d0ok1BCpi2s>~+xnhSj1 z;`3xTY2iw4lisd0HW}qg50lxh^fp=NNcm6`9tQ=?3ZciD=dLR5b{h36vQJ`SBCcsuff<2`k-f z5*55FVhXDEx>fs3&U_-;=f2x#U&J)@c_*UJ*ipgzB4(gZjKYq{XA>szKN0Pd(Znm6 zS?H5TM4z>yf{#SZL!Tlh@*DCdl|B*e)7-=>nfd6`+3oXN!~*mg;8qSF#rHz3(X^mAkFd<#-eBzg}W(bpzN%Rk68 zrOaK(02AGf`;Zxwc?8)+nJ17llz9z#MDi9AR@^_I_mE5^A0d@R^d5|q(LH7LYH3Fj z12RTLKbmVM7_xvQ7Gxty7~~*HY{(swa7e5Y{>~AQ93=4})kzXSx{@S(ucRm&5mWbYQnn_buza|PQ>4;|1B9p>IGZ~R7K$*;C^{%WT^1b}O z{FQ--tdJ(3i0*SY6YZQ2nE@htwP;mI$jB#iFU4vOfAaPgtR1SfcbQ%sz%5Rrc7&OqA1e=nMIW80@*>*74x}fawN}< zh;GQdqs$Ow;+1w*s&gKSOj;A&)iIEwB;z2>NhU(NkxWD9(I(n?Ix;gTGZ*VxVxrFp zi;&qsnO~9FM}3wnMj$|So=cCv_obiWqLtQk@SZA6(EmD`XCcp&VRnXgTx~l07*kK z5R#2#5N251L{}jqXRxA4rGhsi2BWG5RgFOA8xuWWBa!JxnW@N3GST~MIx;^~W+pPr zO?32m$gHKzuaMm&OCcvd5xvH4Q6DGs?30Y%JD&3X9b1aECo<8|MP%)1O@_+aoj%#A zY9%s-MD%lGU3)}%t*R!XAI()#mDjQAQdL?=dy)*0{v=f(<3ABy*GvqYdlre8&}RM7cs6VZE6r8HzONxcf%=M+g(WNwg*LZ(Mc=k>7KXFBALW%h{7 zhdd%#hCa`!&sIpx3jX=7I&q0AuT9V zsFHT>O_|6_+Gh}D8bKzB=;yRgq;pHi9Fh^}v)QWNNah#F3CrmIY=WF4IgUP8tV%Pd zA$Lu@g>FQggFGj>h&~@obftG8aVt72Rr!FblqT9IS!G?<=O#xalL}ItBu!=AjjB|Y z2_pON?%@}Z<|ew*cIeYiME6I}MSsX3lAV?Hnx7&P{j45TMP&&|49I?xSXFdBr%dz; z_abwJGI1eqNfM$eypl7PR;5HHwTV8@e-6nVAk|4SBGZv1a~0jgktW*tOJrtJCO>37 zNdZ(Hq^eTL{6U#2kjErdA+JfAU|pe=optFmNmFDZOmtmcAad3`rR1T~71Ag`29k8c z4Ck0==N_oqM48@@3nKcJi+1h<`I}@Y zCVDPrB2$Yp3z2C`841ev##NsWxRntwMk zB9qoccOx&P07=2BdY@J`*&}DU5HgJ@Qx4LOq!Pv&Xrg;q1(~swsRfxv(g5-+Nkfdj zk@_@5X748%-JkOTa-XCrszR&#@15qDVFr`JvSTffDM*=ika8rQP}Rsp_qhu)Z7I_W z(vzeQWHiZlkXa=CAe%_~Lk^P+gj^#Tg!w!$(W_-7GBIlSS2_im#3p(!W46AZ184p{jw2u6+wK-%w^Zq{kOouO`|Txe+1HgmT_v)ppjdvI>2CCVCfaf}|tafvQ3#xZ@xdOmv@r zLsbi^x`51J6Ftk9keN-HE12^yCLd(&A~M6ZCQ&j&M-Gs@LFOFE2gofFd1jVA&q)$h z*E=^x9shYxhfE?9T}3)%vQQ=`q!39SRMjxi8RkW%8D$DVdXN-D)p)8Zfy_J+{c2Qq zz8qw0fb1u!fXq3PijdnRl`+;wlV0*Ue-&gR>iWm30ZBnp8hL25j zU2l+iPZ>`QeLhUw$bY_KLGqJ$A>~Qp)X+PnnTd7|N2Uv9;zNd$B!J8(NeJ0Yk{EKH zBnig4ZldQa1v2+3^BFRp#?C7AYWWPAL?(JJT@hfGGw%tIzOW#%JOf->`wsZ5y#kX8XQfaDisW|J&~Z2m;_KHY1gb9OREDYG0^ z*GN`khVM=E8DJGM@mu)suXT`2BpXmw#zdbJHX_r2GFu^?Nw%YEjEPA&_{joRw;yNs#O$Qz2zZW(?Ge#pNhM z>^PE{qzW=6NNPdqkko^8B545`Led&Cm82tNIY}qX`JjmYgicr58JU|V`gLV@Wd5T} zZ%Ev4{8f&mC+UMeg-rDR`VLj)DANy_rY1Vp;K=#1V?8M|0#yS^#-M7tiFO{3%xcO+ zA#;Q>Q<1q&nVHCZpv-J!lC|-#Yd$ico9G!_fJ{!xEJCIvWfmh-oia-y-;gXrRbLZb z`zmC{QDz-7Ybmo0nLjAAADK6lIgU(J@(0L_5c-rT5M&%0xiYxAV^@UacUx2P>FpRZ?U+QYI~=C&}li8b?*xkXcBX zT*&OAOg>~TQKm35PbgCynb7t@p7`?6yWlHG<^ah~QW=>dB-J6MNNPf=kwiiok<@~G zO;Qi?ElC5&K$0eq2_(%RGf7%OmXWlEtR?9W*-bLCmY&n&Ci;`vQP{DwCbLV(PyZp8 zNtU7NI>}~aZj)?>JS5o%c}4OY<`dMx`L3Fti&K!;ByS<9ND|i8Ip;9ZIVXV>FgYM| z?gl9*qCcxWA~FNW>q@6d`C;hs&AQ$QZ*U!HOZX1x~>jZ zrJZ*}`j}|dAyf@DxhtK|K*n01!jicKnM~rTr=!m!sSNqmq_k93hpeSc4aio?)T^g6 z+$W;Dq3f!T%n=ivb4$p1t7<6H6>^oN8|1!;?tD+kQ*SnM z?K}~Z-sBsRnUL%z+IbG7ILTZ{858Zi2U4BnIHVR;J%hA286#skGJxbcG83uK3&;YK zsZ!<08WTN(LG^WA2Ph-o%@et3l31!@LjE$*Ir|`YNOD4+naq@`()IPDRaj^LvrRcj zGLnXnEF_KU>sc;rqQAM<1er=A`WwIctkoP+kEAoC14(ztAd()CaU?w<^GSL^R+03D z>?i5(?2k!Z`T5QO%=xy-Em`~bsCr6OKSJVm@vmYQBpu0o^eJYdofjfggEGq?UwZW2=JM#LIq?oehOS%t22BQohk^z~MHcD5js z-$XyR*@8?(5$D|nqoo1KC1kpjynu`)c?FqI@*1+4m38_jF3294G3o?wPHe?n_9mpn|^2}xr}H-5{q)dO+@x^n$!6=?973(?9w^%rJ$B-d_!6 z&VwL1NrphGkqm>hGr22O!y(_B=-NkMta&2QE0v#a$l5niW;EoqNlzG> zkvxO+CwT#xNb(XZohuT(^RFRWP4o(X2RUalUiRlBm-w%BtN7oNkK?QlERQNBtm&^!_eq*#^w%bO4>}Uu&l&59tg8j8!cBDaK9IB|-$C+{^oLXnkk+4w z?$|IB{hXvf<}<@2?pG?h_N7!c2y5R>G6I>CB-0w|bIZRbx~?CQiP7J`hl?SpNPb1< z;v~x;wMbS#T9Isk^ds4V&QT=WAj?R$Lw+aOfwf;Y(K+uz=00WiLShVX-hV^S#Xd;H zC!%XlXQI1$05kkjq_jM=>JX$M$zk;AN^%4;gyb}22FZEs^BNN!>jE-+M53?Ne;{W+ z5uM>f6Ro;~`FIBUtL{QllHA8wc}%V(mY<13%8KYKZS~cH|DvjmiLUe!WQfR{T+Z5` zK&Fs9h0GxdZse62E;We?mY+&DnlIPkRyXsvh-OZ@nZG0AHPUPKiJSSyB<7&#(N%Qq zsZ6|{ehO#4K1^wm_A8JWEz`t`fK zE-vB=$hl8Ms~(x?SlN*Y8XW!g#Xk`_AxQ%yA4xULxt59csfDVxl<5T-M=}nwmSjBo zoTNVEk@=T0KSL4>@y~E6s&bj==u45QMwwNRP9&>QHJqweBl8nw)_pWRs@jRn2FmP$Tp-zxs^?U-ADMW={PQ^i z$w6`yRpm`|hDVWUN||Gj;Up(ewTP-tAhVA$ryzGo{yTj zD`bA8%p1s7lJ}@OLsjpQxlft@AmJnYGnC(Bkvlh&iO$f|Sf8UxQYHxUHAyh4hEP>7 zGP5WX3fWHLMb$Z~@*?vuW#T|0M*3&yLsb?NouLnz(v(RGX+x3{Rl}(&B{K6V^BLqQ zNm^7rq^h*Y#2@9KPdZ3$k}RmIVxlv2q_s#ldH6(fA~V#L`zF&|d1&&pD_P??RhwMN zC!!xyPMJgn7ZTC)^_PjqQ$j>P5op!B_PE~BGI{`iS}uM z&UHvSqN=6HKzV5A9*}7ylh9`^Rc%D(fQeRZg`6ZggsNLq^*iJ>$uUUq7-wBN!wcw> z)I>X9MJ7FE?n3gD+=G-RxesYf@(9wKszAY}?6Q;9NVkolT2Ws&Jcnd-<)r%VlG)=;J)GRG;? z7@3=tX%Bfr(g9Uz{^wssM`Vhc=qmal(~vR)Ast2Z>h(!xC}gNBUy10B%`owJ%9$)B z8G)+3CSJ+RfSe(jg+BL0^jv74waA2yi#|K$;vIx!B{>JFNg}_cCg-aM$qUE?5>Hc| z^AZys%iC0|_ERPkcounCLCP{C|K9Z4;e@Lc5!YBC0S`5iY zvJtCjXrik)h)f^KoQF&&xeeJ$@)CW{QJ;6ne56cBGu^SI6a8l=ZZqAnLMD1n;~^7C znWT^&B*`J;NK!#olca&1AxR5)Ns=CtV3L1688M$CCOV(Y$TXtNmyls3*&z!_azKug z6lXp<)?j36ndqG|5;BZrG-MgcSjb-_;~@W$On{`F>RD#;p1XOeZ0Q6w8N!^I{# z!_CO-pv*4FWs*IR=Op{kC+T$m&L2P~kBRR5?~uAA$06NGPC}-WoJQwECOX5j$ULIV zpODXH`1j`uq$0^xNPm*+=se#N(9%nQ&B9B1wp<)>M@U(nn;RJbcne ze&<|9U+Ky`5gq+^6OZR-lUpR2Q57=R>Eo457F4A+(W<Vb)TFIYrZk#L@q@rqPJ<_iJY`lPvyw7vk=ag}&Bz?3%udJ^lEbKa zO;sl$zJ<<8brq)|8A#4Uij({SsY!AP(t+epj6Tpr_waAXRFYe$T1r*7A;(DWK<<(} zgv43opYtPJy_rmOtXGgiB<~6+^>fc;1iHiUD@y{OdO{)I7_AJn=^9(LV!X+EK4V(e}i(5AIR$KqtpzXl+7t z(OTz7Yn>ylb&j-FkGS^c<(Qrk({u)}+@p`~QLHP@zjDRjgJO7wpyHt&@rs_ti{ZJ1 ze?29&&e2sn;x3w-Bu^vthCII>(~jP|N5MCuE!;gyYDe59#>ybi(U{uBYe)RACzb|z zT40~gx<`MxM>pN0M|Q-udS(itv(`FCBbG-WO>mE<+Y#5!6)TR~)$Y+AJL2526+xbZ z$enSIF1bfH+@nYC(MvmWy7;f5c35SI%-J~#caIXfM=9N-jP6km_b9&|@%((UrzbJL zr0!7~_vmx?=nFgITD?<#z@3t5b@Wkn_ek#){a3Dtzb?pACq&O>BKIhz9dT~hnjp^| zbRO*vLrx<{+rqs{KoUiavvdvwK)c#OkqgFIz0m*3r^lXk?pit}T5Dp%1t*L9B? z+Y#p`6^!8-fZSB~DBA+ZIJZ=6IdUuQi2wEUycnKx_}64IhI5q3Jt}NR|G%OXDsD=x zbM(YLdg~qqORe*-;daDb#%GV=i7cqAtWqobsIDDxPTx_q0&;QXU!9}o^1P`>oO>D> z!}Aq#L6UQhV!21{az$I=n$8i|CYD@P)PCt6m9`_!9o!z|xe=yw{@p!VD0i}B7hLxUJVV`-0_3aM`zrl3wFd62Rp{}c!z4m z89U;C{r+Q+r{FOC*V5Ty+EFDta&rFX&i(RPZoMJ;QO!Bhk7~}*EB7dDuwy(%tqnn* z(66+%q5P|J)ZRVn>mH49k7l|@zq&_T{*SRYkMp^D|Noye<24Kh*|RU%B5Nfjgj5Jc z5|N#flt`g$k$s6KC5p5Wg)C87%9N$DWJ!o(NJ4}Z`CgB6o$E1Y=KZ<-Zom1*-Tho= zeV*sOygY>^Hz*Vzy*>dYmzb5{si}8iT<=B+(bA_7H;~l2rn%=j#QW3{Oidvz@f4Pa zrIk7qyw(0ntKX!U}kr4If_cEQh86A<2Jjvk0e!T18KLX#Hg;!1I*pTs2=H& zj^?6DN@2-gy%ZmnZH&>_>qxbj+Q3s-GGYnBk3$D%3`T` zNTo?Pk?tb3B|S-+<|%B;wb|mMyIosKlTKzemqb_7Q|lkG>f#%Q&?Ww8*;XI z59Z__o)V*7q@RSa=4p=fb#Rx@hmu^dQP_{HmM@YDm zpbl3TK$&}V!5tYLdmDa?zxTg>I% zEL$_BU8J8$zkAA@x3SCnk(8{olC+WZt*0DYO5m+9i})YLFVSZgKT~ozn>W0Cm_0 zDCHy-Az>e&sn`dAwB+p;m_p2PSdRS6|4p%hSO! zq*DRnFf)nwma0PPo)L^W!3=^N%Gs3ga*aJ6!vg zOC3sIkiH?kB4-$yy3M<=Em#M?b){@bhz)uPwITKO6xO?5 zN~z)M-Qp=s#q7Mzr6NvgucyRlWOJKq6?V#fV3~E9+w!Tnw!^DQoYEbn)}%*0h4l`R z^X~QTjJ}gxM*@YZIXWanpSjfb5~uVi=_yh%#?>J;A@%YUmW*p7a}v?!Go<#U%cR%} ziz`eT$kaDTRhU|j^bqM8(rD5=Pnlaa&9w?`QR+!Tz3N^fp#|y|k=B!TdkX8oRqR(^ zM9;BpQo>bikjACYu$Nt2$ERf*%T(RIAn%Rt2&(B}rObKjxYS&7+@zGxQ`i>lyW6-p zoE0fG`o^fRh*+6QU1ZK`&2w3R6+?VwZ~RLrP~QPU#-H zD|E3REEU(0G%ne@%q1^#B^QuXr4pn{q+3ZXNDq>Fke>FGxsFw?4vdBp#y|<<0?M4@ zbC+Ydl&3V2RI+=#cVp$Mq^8bf>Ksp*%iG|}!+u8TJ&99VOj=IbO8S*_mK3+k@?JwK zNvcJq)gpbxC)UT96*}q%BBaySKX*be2@5!*Z6d)R%4;3EvCX z)X8*nJ%xQ+DsHzc`Eyb#={wRcPhqPLi2KRq{f%^Mm zm?{;Z!xyaJ!n|0Ij=CIJf=XC|N@tJ9c`7ZXz=e6si96x)Rw30O-9oBII`&Y!%Mtb* ztum)>df>sb>^9SKBQ+zFOXg$O(ms}-XOhAT1Z+>`kb_$w28Exw2$;N={V_6(q&S-tN}V| z*+{uag-NAIWl5Dt)kt+ncamC>+L3ya9w!YV4J8dHy-1o!nn9XHdfQXxnOM}#4Qz*$ zaAc%(N^&US$Vllgx_?R0K8wpn`gxn>$VXRCj_|aUYw4~dRVCFX-9c(W>O^|XQ`n=Y zWb0kZ_2}(yjRtxb#`S(WA$r3dcj6+sh%L3{Clw==C)My2=6!L#yd&@OP9VKZ!qo~*eVdfCZsc82 zQt?~N-Ji$kL*`gU+DQ6=bd=PTdH?Y)Z0Qy`m&}nDy~Ot+m3DX+#^Ek)*#e0B@1Rlc zpN)!n3UlD>y`sxeNm7++cnafCa-00F1*Eg2_yd-j&r_K9z*7lP|4}Y4=_u(p654{e z#OT-W;-a3pK);brlg@hz>%h5HYC+V|l2m)0IgFpCKFCz;FX6&c(1I4Olt|)~@{+D2 z-RvpMizBGnh0p?A!&AaFJSAMi10_afj>#Quccr(wr?3>9ZBHqJQm#L1bTg?j>0VMt z(o>|Nq!iLT(nq9qq+OoEwzOL&&$YNGr#h4Rl7@Q9kmH=(V=0Q(KjKMK(~qRTcc}-? z$3;rGUZ-@D6nDW~R#GlfAyN%eV^V8RVXLsE{?*ls@{~{>D2&57UF~9M{bbTRq*b26 z90#NLXrRl1)`P-SYzdFMdVlg1rmoE*PnwiKZ5RV3^jry7FF|3BFC|A#mt!kwFX^bK zFb7KBSR8erWF?dg3gfnl+w9_YdJ0oMbGEkU`RxNU=Xq6ILrG!=~p;by~6(}s_AF1PgS4u)2qhwNE5|$C-!n{*^ z$aivG-kiOZ!c@$I3vQ`ylQC7=OZtU$+*4w7M(AJ3kr-VfCCJ$^Tv+n<{P9ul@)(yr zq=TNqxINPPldgSu3RCG2-Eq=s(m$lcYb-CG;X~fAWIT=bp=&`C5}rnbON<6eDVUv! zQ7b-=)K&=BF%zRMq{m6mlIF-A6V3agxFxPUJl~{w@q7~~Y)czC>N{Hrqwy%|Dbn+# z38Xom!cq>1yX;E2NQ$bd3*+WX>O~j#8R;9+c28lB{Nny_IVzAaJJr>ot3ztEGR~)t zldH8Fhhtl%<|I7Ju5ONx3+o+pgKUdky)TmR)Gk~Y_k!f@UIF8WYr{&YS7{mvb-;yr zKbP`;bai}7LL6Kehdt-_E-pplK$%mIyVOlp;v=PPq&=jAp2EEEOL;%Iyh}ZWsi^m$ zOZ`bwl}?eal5)tHYAV)qP*_S6nFj^0#|X70^&|}@y+oQxdfQW29-jPup)$(Dliy0O zk(Q8FkXDm6cnZtIY#QLodq7f^x_S!Z9+Y24e9px^C8>>S4DpJ={>yjFI3QNI} z(YdOq_e*(-L1_!=d(uu%Vcxys{&sn>pHadw4JdQm6~-yyC`bu8l#WVypfK+|ag$x% z_erZgg>iSbjE{c15&gKwQ<#cx?Qe0ZyIRD1I!sFQ6z0GY#q%!5Qb|?XNW%7BUCP~> z8s^2;aiq(;v!c;=k{3?n(vM4yxVSTts&ti9TKb``mZ!{lPcg4jbBP0mZNW0Cb`!=W zODmC+TpFM@zw#9i>(zoO7zfnWoZ%OzrTZe3!(vr90`gys4tD8Qp!P zwxn(>r7!7O(kRjt((9ymNlQqdlQxldkq(nik^Uj&kY|&%&DWADkZO?XlA4fOdD5qz zbt{FV0wp~4tc0hYm2mX%|0gb0=FqmAF%Op1mUo-r2M37J%u^2*Zs?t_q~*?gzbjXF7Lt|qr`1-Iq&vdydWj;>Cn{Z#%#}dSwa7uU+P6=A;Bz_c(wm+%Z~8IAS51%?&!{V%o-A)!i3{t%@#H2KhdPw-1gz4(k^__& zJy9z@dhZ_4d$Z)+)Dezt_52dYwwaF)uqI!1CF5FwQkE%3S4i2XnkzsmN-9mNNUBP@ zkyM}5oOC~_Bk3{HlcXV}v82hQS){q7_ehIK%SfM+){#<4TS+@ehe)SLmq=Ghv1v9| zIY`%#3Xw{Xt|MJfx`kAa)SPrbsWYi3=^4_Cr17Mwq!iM8(x;^Lr0+=q?<|il6sLwk!FyVkam&Il5)RlbyOkUP3l2(`dQ0PaUpSDB(V_5=K%9M?s*>wH@X$jS^~8!Zkr9ToY8nH9=73Qqow8 z5=v28Ncx17>M3(6`&o(-N>O^1^p>a0c~@}Ml#o{m%T4K187rl)NxMnMNS8?2-mn~n zN##kkJ!Njo@9c*X+MnU@|dswm(N>)P2N_puDk;;%NlWrp2PP&uS zmehkZkTi-kmh`fxu+5ESgx0tvgEMs{yi1|u{*_iKi;rr#(ZCf~C0wHbg>fbJ#YgSiVf-qSs(T9KaHaRcgNVbGUZsscDur=aKmK%a zlO$DXE(z}*s$1k;n77!^@zE^T=F*3exQo}{fgP`93L#K-EwycMMd@4B|!KsqK*HmIvbcPpt0X~KIuornzy!zDx;M`qhrG4#s3oZ_sROAqsXM8+r?6zKzvJ#jKd`QX!qi^kCcD%Dq~Rod-3h5-j=7RL z+vPx<5@rb~jKe&A&&A=(9!mJKhZ4T*0Sa?q)TX-}Xq6IL01D$ilGJ%FZX@YeQnb)g zi+Kw3;y&U`mv@5XP)hL>#-S~V_hHl~EH`?YgySJiok=%`^fu`O(nq8fBpg9$DI4gv zdCJ_D=59Or+gkYwl%vz6^Q6n91lgWyTz1kmq-#l~NtH-7J!Nh|9*&06UTLY)&!pp| zQ>1@L=s9v^E_o13R{D6QY;&AjP1;D>;VCQyb1jFx(0=r4SlKvv)S!!_=New-PHJT0+`H+T|%M8Oywkyq_#@Qpi^E<66sF!KIr6#GR-O{0 zZ=@d;q_)IpH|e*7+LpxVggCsxofusqrRPXW``^6z=>ES-30u|alDrq#8GY+X8b}&J znoe3oTJ0$;Z%LMfXh2t#x586mv_`0hd)DgPQ}RrQq=q?uh$TcbT#ln8Jj<@`FS=Nw z#TE4wmhxuygy`MwsP_ZXG7^@wreaAe;piU}mV&1>XSh;u$4&`PYbxPsO(h&7DdA~N zkd}g8>hq5Au9T6|0;O@D!rG>bo8sbbYcFe~qnX}?af!JTqTccxU)$luNHs}!liH9v zlb-PumUl2$Le$Nbch*ywI!9b5m--RuGtw4MVGexbqf~FS58tl?g{kcdCq(63YIjm^ z(lF8j(l*j@(kaqkp29kCo#A>{$3Kz^3RAItDe6+!6_9sK9Bn84PWq2jxS+*VBh@9f zBMl_IM4ClfMcPdInRJ?Tg;czd)q5N1KGMUazN8mOlSproJ|*oVogpR2Sm|h#A~o_9 zjvuzv)!eAXu9a^}IKuOZpu}jIjGC_9x2&-HR&`0AF?EKl`?{@bO{$SI!MpoO{e^U^ zH{Mg&mab(IqFs+-uJ!U1reYtk#iin{P*9k9T--L7dWn=xN>NvmbZm(HHl>TZnXZ|q zu)Kca5*|Za`g_vU^sT_7Zp+&6VtfP&^L7;XgiGyB>PzbHDa=tuo))R%a(sSXDNMy2 zAMpsHOH6yhowIy{TbtCohl)1JstW9a1#3_A6+DzI`+D-b2bc}@B zP)g?79`A(Zf#*+^@cbz#b6f?tROiT8DdCH9O8BCj62?ynUzAhA7v(@}@vUcMOf zIF`&2c>`JLJSjUh7`&eEj2>g*md{m=GOswf$37DNMzCZR=clO(d^U3s0Hb zyu!s@yeT09g{3U3oDet$OR1EpRhv_Kv5g2KEDZ%v4%^}~|cK-xu0^AzT| zATGt_$bFkpX;KYOVGhi&i7v-f$*VMzG~ZL014p@K+>*gpnw9XCW>6Sc^PYt06ZZwA z8}Bx%PxoU}bAOR?HZxa-REN}p)QvQdG=cOcX$5Hu=_u(6DOYo=x45Uw{g~$Z(OX)t zG}u$-xOdoJCG=OR1!+79GeT3}r~8VupLCv-N5)EX)FE{w4I|C=l(~Hq**+z-PYLY< zWzO*yb0{H)5^^Y^M@s0C5_+VB9x0(mO6ZXidZdINDWOM7=#dh71j^jL1#F)Z+NXr} zDSaw=mC!yVv_%PRQ9@flnd|t7bts_@CDfsWl0ljC&SG9AND~iBaX654ki5dfKoxavZN{` zyfdnCH_=_U(MqmEhqh=OTB?MWD&c;QQd7FNBz!4EQ@fISlb#?AAPpvsAdMr7~KB-|&~e&9Z_?;8pCiPhc09Ji9{lIoEfkQ$PD%8{0q(wMFZ>26X} zQgc!ZQY+H^r0y)a4P9@#pKi5!@n(d!0B=wz9bjr(=Iu(td!!oIk8U7oIB5bYg*2D+ zA!#LP1L<4RUed3m19B{{Ex>n)l}<7hPbsTAPj{Jgl@$M+l@cRmBjq6FB3(nuPbx$z zN-9YzOR7MsOsYnzMXF7@jZ~l1h;$dJ8L1_yHK_}!H>p4AdD1vi3h7PK2c(Zlt4X*k zts{Q+zT*7l*v^7XTqu%&*4)W=g8mpmaMdez0{Clx1EBvm8TCfz}5MQTra zl=K{FGHDKJ8R-ksH>91U1Egc5KS@_eStnYL3X#f@YLjk~d$Zc}dUP#Gok@?A29w5+ zrjp(yeL!05DID?D;@)s0j$i#y+CaC3R5+)_?WQ|O`i+EhPA%mxx+^4n?@Lp2kqVPa zlPZvKHmfJ5yw2ZWww1@O7>32_It8m5jl4}*7icrGUcqQBi1BE#b%#d#ek3&DslagLBSHx48 zqw>sz=uJ05wLNKS`cYLeS047_O7}`Bps*Btp>DUEIXg&)NXJR1NdJ-YPO-eDNL4(A zb<~x5^SZV)_LRA$2`&}iCQ!n+36z?8N{ptp>^1Z)&S}5MGp^;~dMq-BU*6HUest-n{bgJ<#|Y9?(ri!R*xxOsY?_R* zYDvP_!-a9U;`N=2!?sE3LCFCM<2s4k>EbTRceg-cDxL$#G6l5_k~pPtq&G+(k-jAD zA)O>$CM7Sn@``&3>pdgC!T56u>iySKnA+#Ce1rW}q+-jj^c>xbq$#9Xr1_-9q|Znj zNxMk+CZ*Q#n|EPbdLEH)L(W87`jLi^CU{DWaNK^YY=`8_BXX>#gyV4~9Ls~klJUjV zhM%Kkd@&Uiraqk~OLTG`QiqU6cnafi2Km+!#Nk>!C`?^4D@#;tDN@&a3R97{v`fXi z;Y#@8u@b(f0Sa^Ax1y@L9QgexP?(DHYPnSONC~|Jg>iV=YtScX6`to(!X8@*zorEW zbKqHxp)N=BPqH`)Q&HXsmx{Odlu$A#j6*Mfc5_$;=QEDUgDs>|D z^%UlPUfiFWmxOng;len)mE7o4jKR&HW^ojzqDS3aDtZJ8Q!%=qyK% z#n~|^OvSgP{#=H7k*b7!loHOJl~4*O%)2ammMGEnZ69eqX$xuBGK>3_gkSH}y!d@i zrBgmNtOH}8!`1P(q$*{VkpzWt1;yoYaiu+lsTIT(aH;sluTmB7!Z_4c#Kl#YRHa); zjY+Rm)wnP(u6~T!j*)!0bj(qhiX~XsrQ*vsN?4YlFz(%wv8bGj!&Mw5EMFy@?SR4@ zI1in+5%uDYbtQZwSqZ;WsDxh>1BH3_N|R)HD5a1JF0nW~ zS*WSAnL3ZOkks#})rMng&G9i)@hw($E9usfHjx@VX|>_m1E@E&A$>%`uS#l;rF3gZ8%g+0IE}+vp;RWx#%~+r@GBFVx|c5R?G{)0ytVHD zQ;(2Nk^Uv&*J-r8_!U;ldlk*$DukxyWa^k7%@w8_yVjOMNxE{R8l;wToUG;H%tomm zQ}H!Kb@;ZmQZuHuCUqdy+hL`2ql@h{_ZS_1=~T;miVnZ8tL|C4k)(+v{HC|YO{05_ z^Z{up=`+$sQm*4x+b+7FNk>ShNcasNtryR{D_vx2!b)3O*+>ORB}i3Bw~}xaspU1H zdw|rL)RXkg4r>9vPOf?Jb#f(qyIko>=6Ieojx>#wLYhljMB2O7YFkOSmh=s22WcDU z-;1QZOg%>Wi*(^y8^5?!Mmb0~{a`)HM^~IwfmDlhJLzsxuCrDOexq4Os5MhNlDd-m zlAa}vCQT*1PI{lToV0=TEomR=DCsomGAU7x*R-X%Nd-wINEJynNM+<`6L}M(#`5(f z{Y9rTa<%8-of+M^hqCxod{al`t}P$S6c_H<@qPJv({WT#hE#*pfYg+P>p7aE9bFI7 z6QrS@!rG9xk*jUIq$*+FgTgrcR^BCd_JrTh1BI!0-}Fy+286FlDJ}Xzj-NA~3*qR$ z<`?K2%2Pslps+k#QR?L4a776erk<0MySdbR<((-d?0b~1_|z~5dfD6M$i6F!rvaPg zsa@v^(Ul`rC*9&Hb9sGT-UgDY)RfeU)Ry!xsVk`u=^4^UPnm1$?`p&QZ%Wf8PH86T z9a4$K^4^%_$Xv=GSIQ!ZQ(EpRbKFoDhmw^(_mnwqgp1oKsY+WtWsV!;;_wR#N;62i zB!{{Kq%==qDL4x}<4T$IV-`<%I}g`|SQRJ3ofOYJPFO8rS&f63xpm}8iv4s$uikS2Hv<8TJ~&<{4IN;vye z!kB`>960mumsJ4qM<|$0ADXy+dZRROV zy_6#s4RNV)IgN693ggy_8}8!1_7tY}&K-*$-GVWAoHW2w7>6&qzVaR7#+HbAn(Qfz z!<(nCySS-yvUqw`;?&{IQzg84s)TngKw&9!B}dEeQQNzuMWkh(!W^H8YvXckARz}_ z7>C)u)Wv-xsY*LNg>eVOt#om}cnVWd%4aTh!XNTWb&h_MIHf;5WzMnQ#a)$DrChQ- zP%7yu%yFZ*RF~sUPhl#agTKqo@md$Nc*01+g>k=KlKsrr7|B0Le|rk!>RiqejdpQ3 zp8^#gyBuw1XK@s!qP*cO zPYLBIp*&ES1NE+QIgqM^Qk0Na342aZm=|v-KdmmzF+#4#9+`{2jVGme z3gd7E_cs@Z>$^%DNVux24%d7^VP3TKg3F6*>q@w`4hrLNANF4thkLV1ze#yY=Sc}U z%;oVEmV&Q@XLt8R@C%Yk=n*K4!<(YHU0h{pi&9A`PpLMkxu-BMj`{PuyzM1bsk^5z z4kL7}i^KRSVf>UZYDyS2P?#6rHK_YKmJFW5Q^J!CpfK*{KJv>GE)G|Ply=jNC*f+X zre3OMIq+Qwb(@)rD`V>L)SuE$rv5~FkR|_28bsH<$Nq7QLOTIvdZv(0OkFF3) zNtA1rnwo=zCm__N9+5Yy+!%bx9QhenoP;Z%8dr^kJA3MGqr+OOt^r*$(tRX6{`?pqKpqxO>HY1h8qq-RJYNE1nKlU9?ClZyOfeotW>wg=Cek8r+)__R~ zo+`*PS2sM$;t9`@shdETLOLyTTvOknTTH^z*VHw1n@CvZn))3bevMWge*aPlb606E zaZ7A!X8@*dvT=-w;5F?)gsj<<(8v= z%~6Py-WD8ZYbuVj)7yvR?8NAKdHN(fj^3h~a&D!B9QsVr|J8zOtoKRQ_J6hNHpUHL zTz$Gmq`OGZGVcHC(NLzoNJ_unIY;)+y4(s~u&bP7FWc47Q|GNmS4r6=4!sO#1ZLQz zBbZ_H>&84S^c2P|xj7c?Ka9AIp2Ad=((6~GK2s;=X&C8`H{`8Lmx_0SmGCVArO_W+ z-j|tUF=-WPBk2dyA<`MrMN-yVtu2K~B}f%WXRo)oT6A}k9wc=o^&<@V7PX|1OZ9&{Z z7x%lQg2GgsWtBgMQt;&hC4ARF>8(aFPxyv`x<-YKRx=g9KBTEz>3%0&A>oT{8kgMI zN-j^TPr8@Xh4eIOB!C9JDTSXY&>t}0<&Rl>TegmqO3>#7pgG9|2K zN?6O3u$C!dEmOi;21<-hH`KY782v}WJjMJ=j4)4?{x>e1SN&y~M{Zs{M;b;NO`1rW z?kOwHU_O_Ae2CAGB1hJx^3H{$5~QtJ%vJR+%!}X1tuzgJhpjc5 z<|&N3W3imuPeELBPhsjKQu0MtZ$Hv7(p1u1(o)iwq(h`Dq$10#j+Aw|)lrmGo79@rk2Hbw9%%(>Bk2dy zucWi2xD{4!9#TnCRnqOG=A>? zm~@epyv9l{OR7U^N$NowLYhTdL)t+)OUnD1)lrAkne-BA3F#-&Wm5Uit&~=z!KC@5 z&qzOzPLi^GVWku!-AHOq>P{L?dV{ozbbypqws5+=DoLtK>fkBd!o4o8x!X=ICT$?? zCY>N%AjPk1nRN#DvZW+G1iQj=eJIw9&S|A})#-rvp! zBac!=vRik5sjLCK3{-l1sZ77%RD~&o#m=oxM`d zb>5^V;TqtLQcihqbO}}#Q^A|Gr1J8$nUZ~?s1gm9*9Pgu_1>hHT-h5fxvZ3PgEv}o zVKLQMPJJn7yp&Uu1|?4wQ;Vj(m{-KyNb`Z16=H7kCcXBXz0umsON<=k$)7yC;`-jJ zeH7KnVDd@Kt=^<1T_ek)i^Ry!oyi}TPDL@rB<6N!Fz44u?OVmvqj^Tm0x@^cw3A#l z#oS5rq?lX9++`-&Mztx8jcPL*>uGZu8!5Yw8OB(A}D;n$9eP&`M z<*XI6_kL%j?{OIoW>lrY@}`5VI~oIXx0tWRw6=1R9}%-%OdFbK#9)n+&pNxm)Z|fO zu#IX<^RgIh6XfIF?k_c#UA8SpC09H5e=G~D{UI8wT^5=AA;xO&Kx4H(Ok=foq_NsN znTfO7aiMyf5T83Z;dUXl9DRh)$-#-YToa$f=S1q0MuooW{~--BrVUBnETi zWgn9gVGJLTnCUbapNGY~VkR5L=Tvee`(ylJ|BmtLEGw5R4sS5>T_s?qnFu3~T(3EU zHP^=Qbs8JPSu{3=Z_wBn&Ze<3oI_({_$G~w;afB|hI46b4Cm3<7`{zoV>qA2#_(Nd zFsf_)9DC23ln84I_MY$4U`-h>>xXt1U%6|*#h`Bcm&8O(YyD`~K% zY!$P{8H~KOaIKlx!h;DB*0^;v+r9ac=67#W%_LtHgEd8NOt`<)caflO@q4DWsjmgG^p!cF+VzkZOg|CE5Oad2wp=f2B<4&8(@M;_45qV~i!}F3uBXLZ zcE*khu-CilO#QY)u z%Sm%c%wO`qWST$3T$TUjqPZ+4Cfmc@G&vT;MLEUfp(!FJub69SDv7~d%}aBm7;IPb z(bN}HLQH;|mSV0GQ-J2a_v4~R<$ncf9+8;J5>v<-tY44GjKatlrWq^-BY!Q;CRu`r zDMB;e#}suYoEycwNlUVl(~Xr}oH15%2^uT8q%&w?J*jJ`w7C?`U1COxDNWN#%s4S+ zXgZ3SBBrb}VGFPGCN0TIPB&I^ImTGYuIc~m7PIPH_IB= zP}cVhpvfaf z4!0t?aqM#y7xTQBS~S;-87byQnmS^}in)pAZZT8D+)UF>%qwDQ)ASaDx^AKAF9vnh zp&9C9Zl!tA$K2*jxCHBZla^#7mTqjsZfA^*SUnmWvHCPNVhw0)#O|Q65o<_eBi4w< zMyxT7jo6(uHeyX^Y{c%Ou@SqQ#zyQO8XK{uG&W+*oWYE;?Q?S)+dkh*W83EzG`4+i zNn_jRRy4MKzK_PX&-c^V_E{cH@pH_!&uwVt$QE*o{14kZ{G}$__PH&MZJ!^cvF&p^ z8rwcUL}T0M_B6JA?m%PP=Z9%*``nSnw$GhtZ2SBOjcuPh)7bX83yp1`yVBV9xf_jb zpSwGQBM=-F%#-a{j|^ssnBFuvD)>^&;~C6OF;8YNa+4|=NQ0w-%VLIPFiEmjzL3FO zD`q4OjtZ)XdC3_puN{kZ?=YU`s5cX6E_*YPCa+vE!#-saO?8RcB_&U$Y36fHF%#=0 z2D4=<%?o01OfrpTl8;F@ulbmlEhf3AuRYyZ?b8|ati)g|I)ldA^NJa^Cxyn^^D2$C zC*4?kW?Br}lWwf`*BE29zi!6Wj=s;LvD(v()t+vw_BUKEoD*RQ;+ki=!4ia-%@`~} zm^n09f-rA-la^#-_!f<|d9Il_TY~dwtj%xJSew(0wRyh9B-s*7H&**QjIlA4!x#C( zv8c7@Ju_^N94cu{oV7~(v7u84yQDR?MXLQyR4i(#%h;UNR6u4Sx7$S#gBDOS(3qEZAv$|YWChucP;Km$+gKD%({9~J6gDz=7jVeTR)7x&dhrx<{HVhm8Pv2)b$-rPccO# z=6jj}K4!a_xY1&8rm(}Clx(xal$BgN8DrNffAA)KoXzMs%d23~Zp)Qqe`+nxKat@k_OOO^~E%@0PEYrPWawZ0bS6mNSOsv@_a?Mj(m~J*ymEW}& z^NYnK+sOY)Vanikv}QzIY~23mOGaDA2jp* zOgLpGwo=SjGGeD`HY1mqGiH(x!^r>sq_KXTH4{50F<1-EnMsb5H3f6yFPfraaO8EK z#+J?nGcj8_7tL^uOE)$X{&q3pvHB%%(vqz2>Bjp0kHy4U-~XktzF#(zWPQIvV}1Y6 zOq})os+lC~yWZHtT4{ZclM!*-pKO?QcgymMcLwwD-CFTcOS#1$KhWU*Qj?d6c|c4S zn#DKD_w2>sJRg6l$z9~TE?vbW(mXAuLLs^LM>9dpqY@(zXZl=k`xtq_)|=HnCOge` zF<4$XXnqxgWr}MGx+SqT%V+kzu{P(Tu{O&?a6ZP`EH6xXV{N{M#@dXl6DD4wdW3I2Wa9 zDrT0%6r<@T24h&9W}q09it8!qV~F;Yq`?@XJ*8-@J*8BHV>pBBr{V zw)7??LJN1^97Xbv8?lrKEj%iwEe%@ux0ntzXkiYiy)zA3SV9b*3B<^!WJ3!pi|I{+ z7UBx;3(w?xAn*60VvuS?vW{xw~QyfdYnZY!WnIIb!`Lmb@#K?xynY1Kp;RiI< z!UZ(e!i6-}!VhVzg^Oscg^OuyR6nAzQT>?4Ms*2|jp|ZoFseU%uH&H6awc56_n3*@AWQI=tf%s_zxzu~ zUbs?zHA~EoH1#D0W*25gKdHQ5tJcnwdCj&oO5(KK0~88O!}Qn$}`4pHI;A7W0<$ z;&+L64i;1VnE2g0sdF|Ziswn1OG4d$8H#doCCniSITnzf2NYh>n`ks}h zw~xt2GtkH2+OhU@q>sr?GtI~3pn1#3$Yc3F*HRyoO!JkG$wjlr$H>bXKGz8!lZPf= zrV8484NVa-=vQ8vnm#5Ujorn|Pt(-rD&S4}5p_Yv*xHnCY;7vU7+aeP)7aXCYwJ2< zwl)vw zG)*MeJTbWXkH6Fy%m-qsW-!ad)S#InF&o6x$zV2#xh;d)DW;w?;ria#o3uDr*F;?<3G*qLy+EF zl4IIxVusLIT|;TCE?o1)h^6=91#jeeWB;5(y0O}aF~({iPGhx?pt0IKZHi!7((bYqFS^Xsj;WmB(Ldveh-tnXsqhy-7>5+S85I zEiTj+9%Rj?eYNxA7iyorm@=bOaT5;ll%EIj;S;w#Gt3sXr}v^mucSeG1F=6 z++haIDj)L-jh#)T(0uP>UZt_~i z#s@Su8VhJ_G!{C8nP5j&AJW*7)uMFcw~&izUh!MVkDLid^<=0nu~RfQVy9_r#Lm#zi2X@pBX*X?M(iAojo4o_He%;#Y{V|m*oa+p25X#Mm-w5; zjw&zF*ctRcGnCodq`k2Zz6TGQHGu<0JF^|906{rP=OHHJSt7 zRCfkfI1z&_Ukw_>z|^Ecn_+6vpv^Eh(xA;SH_@QYFgMen%`mlT&}NuhoIx*ai&Tfk zwh6b=VC~+QQ_jR`4y5WFt4s5{7>ug?9EJN!P0l9|zuZm!5jmEt+H%Lz_%hkIUG&UM7X>&UShC4>`IeU9zw18Hn#K4XR>KgbM6{y8%o`N1?#Zj`$NGR{M3@GH~{#5_-f-&w-U98QB@ zW0DK1(Fht_UNlLzbVgcClC3GDXl!}CNMmctXc}AYV`ywmd5OlB@>m*MQ^wKQavx7) zYsv&?u(z_O=_XnX-vw5K?N|wU^bcFebhAbtmRu=j63f9`v|WbX8qKq^l#%OoGqIAgo}Lvm%S`euVsIq$hMCxdVz744rs*sulJ>kw(^pJ(F>^DR zd}8L&43?PUV&>C~@wwiic}+}3iFuc1k&k(g=2J0sB<6jZZ^Sef^8w8PF{o<+&3SJY z(qK(FBz^zTOfp6+P0S)18?nVSQzREg>?4|Y#at5eG0i41IIdet^Q)NbvMiR-{OMzs zn~7m2Tq`jvXmZFNt)!S$G?n~5ZZ%B}G1#N6p}ED!d}b!OiI@sf&gW)gZGFraG#$m% zl9;tLy~NxqW?cr;M9g|;uqU!P_9cyt*jHxaY>sU-lVo!&)l8htv9D=tj%}i`IkqK( z!5rI4V{_~~8k=L^)7Tu_Mq_hqJB`h;9W*w_cGB1!`+>&h*e-9=Urx8*DO;UsSsJECbX5tEo!O>vMj60`>Nu-%`P`-jLA4|bA>v}{~ zMsgJqlg&&Ve&-S6BR@`}F>&^!oEq%)4)jTIb)}oX#pIIqWOum`lk@R}D8HB-G^NB8 z6(c`b;{H;TtBNTtCYh$Ln2KU@(Xi{&*iy8Ek z+{>mJD+bSA=BJq<1~az+&1^B_;%vEBr?KT;gT|J7O&VM7 zH`3U0zlp|{yL?Jm+Z<=hT|S=bjV*WiWUDu}+~rfD-q>=N&u@BT%UwRI>5VOS`Dms$ zw%l*0vE^Qm#+G{n8e8sn(AaWsNMp;rF^w(vJ85j~ZsJW!R8wY4U6~1LFneL%7lY^i zb-Q6(q^2~sMQUb-TcqY@xJ9~`#?Lt?I#ePsul zxnkPO7T{r;gOoUb4Bq|fNpqc;Nm6?+n(E#>N>fkF%M#Ov zCLwElG)CIPvhH5#l(k$|3CQX;yw4B#yo)v>~X3=~pxduvIZ_w-!gQJ4kG-=+7E4L7U&ANtRxqu6Z;i#o+koZJHXsr}Jr=`dsgtiR&q5h?M-EnWP~;*ZVZneXa%G z=oiVxNUnuuvSH*WiusTRBmc6PMKl=s*TgKQ!N}uC_+w|V4Y!eBLSrMpl*UGW8I6tn zavB@?6*M;TD`{-xSJBwWe@bH`znaEI{xcdI`Oj%=fctY1yvE$vqx-1RJ-yZ9>#q%856VR8L}XjutZ$*G$Z#5|fz03=@+hgP9>F zw>K#f`ZZTf-VEk_G5MXrcFgW~7of4b{{?AqO|OWIMj@JF@+wAWX<=cS!&29E5_2uh zNilt;k40$Wd+V1li<*hqs1~EKQ7u7Zqgsl_Mzsu$jp}tYHmc>!B-^M~qGEJqEdY!+DGj{BUBfT5ENlUVl(~Xr}l`&RwH5x0qx-*!W zw%luEFj($4XE0dqw^})IGiBr#i@BZVC3y*NrI>md%oZ{AX+Dx%hs89^VEz=-$V}2I ziMcFmZWCwFLaXa88msH>3Jd84BBk9_n@)bd(l|!y=koW z$7rnfJ~UQ)Uo){RjS`|?<=WR1G(U?uE9NPhLXCBsFo32<-S{X@KG{0Z8Cis z?thJ;SuSRm1-P7=^PsC>6r*mnnr}Jp6r}Js7r|-~MPv4_CEq(9)yxbq8`ERej|Nen9m>U+efW~4LS}u35 z_DLz{Lo-QsKX;Mka^I6d%wjXi7W0wi;vMIYErxfcY4}7?y0P(DV!1fSmeSZbFQch1 zeaBw-6Em^qV#-JhmzzoMAf}R-l{EdtU`BmPGe*oU60@3Sj*t1wneZu;&uOg9U(ncW zSxaMWUPohXUT-GO+PuL`lC}9O8f$YZjkWn}8f)_=8hrhJsPt>IGnffxwlJnZcR6Nz zSk5nKt`k$ZgS<0q#?6gqq@3?qj^+BE#&T^l<7NwTZD%?5e8LXK{Ey+>U`(=&^G?f^ zyj)uNzLfj}O{$p1Vs_CS6oaL_hvt%)wGy+JCaH(U?4v0r<~xb`$(eAu@29c$9H6oG z9Hg=K;HfgbmTT=fOk?f&g~r-*gvQ!)lm<&Mw;W5PIb+Kd<``qzN-wZp9H(jDIzGxL zU%>c{2G@iyNKa4DbSxpqKVp72)XpIV~nD z%^)!s#AKrxDdw`6Bxl0o)$HELyMex^>Bf4RgE7|AoHW)`ynC!`iuE)XjrBA)jrBAS zjrH^z8tZ9Z8tZ938tZ9(8tZ8RXE5@1E>n;O-#r*5cQ6Z?alfeYVPiRG^yTQY5Jkll z^(HOJ$|+7`<&?;f3ujv;Eyg_;H%CUEhR?;7W{f?NScV4AUA!Z?uA{+oaZALMqp|1W zD$>|J`bso-F78vwrA9_0hBKf6Vy<^FFx|x*Zzyl$GMB~R8CJaxU@_HcET$&QDJLIF zDJyq;Ze)y^o6NYr(lJ>rhysW$G?N-n8fsya?;J;VxALoCu8ht{9R^}a%I)u z-?`fvj5EH~&_Krd9y7`7hQ~)YifKx-OU#2}n$i3&rlXkVG*`vo4mjSx$6so4Hu*pf zObeQ8#9)imlBSe5t!S!yb05uJ-rR2{_K28nQhVzR<_R%voWWMz`qkb{lJ%Y z45azPn`daQdNYV7&qyu#S(@v-dCpAiCNVe2_HZywwuJcT7BNFIm?mPLcLsfLEu(=M zKAh$$F}I2tK{Hki=ITf@aj%MLATgt8-V@VI%!@QO>&BSjtb2*ZX5CmCn|0%8Y}SpZ zu~|2P#%A3_8k=>KXl&L^rml*ZkjhK*|3x^=aXk;X|R-GX3}6O!@Nd= zr3~{r4VE&@EE+6jm^Wy!lwoF@iLjK%N_*zeU@1=*^JWG!SIk^zFf(l_&!@4a{0@yR z<#)}*Y$?A-V@vscGs*qrBVL&E3uuOWvykRxZ$6}X+nYr+%e`4llj_Y!W@7uqV1|E8 zgT6l`W=RI~xR_69O3O#ZCW%=^bB~xgV%9i=wc!3yI_E#9!4`6>jNunF7(=Ly z?5)<(j1+^XBi7T*5`%ST1I+1c1Yvg3UrM`ueqzv`oX(&ZmMfXYa^YQi?SYjg?%4#!4m9jMW zCAj|M#9*sco~DbBsX+6rkEuwLGpAlB!8cs+mzrE;on8;W-b`!_ za!Ku#%_J8e7az5rCg(de4JFq@Vs0?w&IfynsY-Kjrqm^-x-)hLjcf0=|P2q8TSYtQ}8U_IS?B0hS$qnstt{C*`q8r?E;RdnuC6p^yy-@hC?kgRrtUOF#h^VsXsUSAlO{P! zeAGqi>P1sbK2nZcy=m^0T)iabQD?BNv-$IwnPeM{J~TEOkJH#_^rf-Uc!I`8qaTfp z#{Z-1&f{*X`mlkY<96btQg3-Dw;^M_qz63*LB+O^S(Y$f85{ax7J?6Z?C=2K6~$TuSKKL-J;RxVbN&x zv}iPXSu`5GEgFqJ7L7(!H6l)XbFDP`|aNv7lBLWyyh)0}9v8RnP)h~X0u4_frj;o+81h+(#juuOssI~VW8 zlB7!EY;!iY^>8HI-?jBeEZX{`7Hxf$MOzMYAmL1tUJLgu5?97%E{$vsbe8e`1zd2A~%_H-6RfM3C41r=Hg>Dz)6AQg67P9jNEG zTky%(@)Lw-!f#s&0fYRk$H zv&OP9#H_V2S5HShA4yWX5W{_Eon=o<{=0u=V>t5adrs8%4N*OeQQtqdsPCIB>iZ`a z_5D+e`u>?kecx(P-?v%R_b)8!`*ulEegD#;zGsCw|MKYUx|);Ur)AImc0{EZQ)GJf zsk)u2C#_PuEGo6zqEcVEo^dm>+xprv2lCSuxI5IP6jNYP%pR3W)kJ%CG{v{BmT^IT zu*`w{g_xf#s~|^WTfbPghEfMDe?m@0%paCAPZmm?1Nqa!n3|BkEsSXlIc#YSX$i^0 zdmH(0WvUCL10-b`0qFuMVtE>JFC=Z@wz&19EZi2iezfIn$Y98^7WVyNNJ$I(&JinZ z*^N?D5mU}`9_C^Z=jSxTQtl3jfZT_n&mqzn&mDQ&2l%3X89hAX1Rw&v)sp` zSsq}~EDy41mWKw(-OvAEknH{ZTk&aqL?m2oF7K3GB_6WOEuXzs!1to^-^$F@1M?C) zM&S1yET2QZfjna2eR{m-_E8J(>g2Nnqa@MQgIU=6Xv?^_aRvezYncsM3>hDZa+POs z`7!wbF_U7l0Wu{fJQ7U{Qjk_pbE2M3cZ_=aq(wcQVNp-{_Vy?f((38VAh|aN%yNvj zo)c|-wqvyQITmgGX^XbbH^s-dJ}(l^m#&;VBZ;o|^v3wiw+z5I4}&}#lW~yeBhkon z3||UTkXFr>=sF2&UZ|L)YF-=@*1RMVuFpep*Zt-p_;w&B-#}isY{v6?jCm{6lb>Lz zzaT4OQfw$5r?;>aV^+JKQMkS_8L~FSWM_w0)z$?mNWT=GNndZNgFD7~{=C7`{p##D z2p>nnaaO5~7M0@L_W5sRMx{Qn=o|3O7T$q;P6=GYx9Ht#pILTn%6@*|V%Za9tK~Nc z@66g}Nqmwm^?4*bkJ7fjuxMM`E!q};At0M$+SU$>wzbouZS9JLeXoN%HhJx0x1|+? zqxzMlcaX1Lk4k-GQK&Z%#63;q7Q)F~vl8+}#N|$~CK=j3ljka-w?pTTt2d@NH47=NQ!--DTPb zQd}`<-nB?M)}k3KVbKg8XVDCnjD&m2NyuJ)3v;|hzok{m!e1v@idCYtr3Omz$asRK z5ro%m%2--J&cU}&Wh43Ts?OiI%Fdv+o)c}oykoTW3KnhsM2oh5l0{pu7zyW;&(*fW zh@I@1=2)ZH_fssFK=>*9RLg@9_Oz0vD}+6*Y#AL!<21|6FdC;@G&^TlG&^Tnv~KVh zce3O24(j;`BY&3VGYCH~SGD{E`4TbbSdyP*W6rZw+?-7Oh#3BIPqyYuAgrgF<#?1z zV0y7g6w6-5~ji@34mRy)^YKoaLElVOBWrjN#VnM={KK&3jHX?+qNIdB4n}d2eXZ zyf?CF-Y>Uk-Wyvq?@cV4_of!j`xO?=`&AardozpX{Thqr{aTCWy}3p6-om1J=UDR} zepd)1&w0PWqIthjlG41lwrJjYB#!DyQ8@3GjOP6&#bh+^Z6ztq`^}aHSbK+}J?$gW z+A!`|PK!!)mH2pZm&C`5oM@fzrkLn>@dVm@ zcO*DR^8MKNNPN7=iR!smG0|P+tf#wb&M518Sd?`=Ej$)X#eT}S@kX-~9c7+^^tNcf z=ws2o)7PT?;y#P^oqiJMMt{o(VO<>%6Mk1aFedfUojdF}e zY_vrqHb&xAbgV@q_E=2V({VB3h)s~BHDdXaq(*E~Ojyrki$-j!B&`w4iAHRiV>DvZ zEgG>I7G>sB7G>s4i!yVTg=ag=%-NA}KRt*~k(~EAmaX%$$K|IjiFdLwe8xMQ;U9*W zd6uI?%rlnq5FX#>Tlznn&9Ma*z19C&OBIyjJLR6U4EiYhF6HMf)k4e*mimw`=*5ec zYeLLRmbM{gp`}ZRS!5X!VisGbKzKZT+42^oCAPK1@(tu0d^&!`auD(ZWT_>!0?%MV zmRU}K`~i8@@-Tjan{OC?&C(0Pw>`fuNu7mKd~?q7m>fnuZ&>Ogrr3CV?v6=m$UBys zLp|@sg!Q~{xi{3aDkiLFwS`ZPvps7incXPGjQYs(D}xA(F+_L*e}gfUwzkB6A8 zmS;oEHp@F9=5x#D5c7p)Z;07$IUHiXv?w=rSd<$(Ey|5u7Ujln%kl4L$M7plbqL4s zYfH-z^Npovh$*m)3o&~v3q#DeL9$n1wqq{##^gK5{+Rp@IS>=(#$Pev%Kvweg0xno zoM=V*$1z%w{1_m5&MQsbJBHbW%)M&&d|8NR=dMtw@zET9Hn(Xhk~Rq7~^3 zi&msFEn1PPShOOY9V9=|1p9mO;`pR#X^f|A(i8Ao;V~%#InQzfN-^ewAO+EtijUFL zYLW2Rt+nn#i`Kg87Oiy`S+v&GuxPEj*rK)W5{uTlnij2fwJcieYFo6{)v+k+>ROa_ zms*r{^(@M|`WCHq4J=ygF0*K@YiQA0*T|x^?sALPy2g^!>p05XgpqGz`3}+*a*d@J z=4%k7mE{D;a7b$lGl8E4+gq3k6A{C=&GO&M6lD(NRtqzMF}F*i&lk*uJ0juArtIx# z>4YDWT7sBP7CjN)SrUETc^ffZB4I|Uo;xk7r>jNv+$D)Vf3co!k^J}b*WHfM6}%%dRY z0n57~W=JILsp=VOQ9Tb@RL^jW>Uk(gequLj<~5>+Exbmw7+cQ@vzIYEnvaZPD2(|O zF%~~Z|A=Dz9Q~sf{c6T2%N|PW7NWl7Patki&~g(Q41$o)WXRYwQx!#%qZq6-)lY9(gD5bhV|kJNvb=9 zBR|bD{C{M^|H!=mkxqE7b{FO=R}Y0XPj}6uA>6-mG9|=38O3P-Vw-cKHqTH@Qf+?9 zqBiG5ZO)0>oD;P%NDZqEe&Wq%~S@%qkg0yPRiE5s&n51f6U{TG_O8l1H=Pc^Q z^O3Np&m{0>D&)@#mRHbI_Wec6njkM(wgy>f*#lu7F0$;0FgF%k4u+VQE&qm?C6*$W zW$SsxQXIm1mRia{_FxQ`Sx$rOgS;w9Rf8OWyk;2-DSAFWFI!%R91D3flK;-dJ3$K4 z8lRkKd{#I{4X+jAdemrJodyhD4p#O?XYqV{}kQG33TxIG0Hwa1d4zBrkfjcw)R47~kp z31p8-MQvUQ`PRZVZ-MNUM02_q@}0zO{@$WC|6oy@_etF5{T8)3D?FDNTfb0ZAolK@ zJO>#D`6(*Jn01g*kY6lcLMB5FNHRY{xYqsVZK>u%7S;TRMK%9rQO*BI(yIBeMf*hp zSMjn}A(V$niT8^_5|3d{G=_PO(HIt%cnnh(jbT=}^0&p>yB?#Fle-|BAxEfGS}{c| ziYXc-cV}8UNcPUO7FZLCsZ{bRWXpx9Ib*p4QU`L3Bs~nmBgnB9J!w+H@*HBWLaE~{ zZ$O$uN?O)IZiF0f`3AzX<T>dsR;Zi|V<|qIw!yR8ONw*ycj5vrm8U7k9F~C>f-&<#Y(I?l!UTy*-=m z!xM#(usyuDhwqcQ!lL)mTq#NFy);)@^j?~)C4Mi>wGzLV<~obsOVeE9_tLbm=)E-8 zOZ;A%mKMF2CMS9?O>4*Ky)-vT{9c;27LDP}7L8#$i^j0MMPqnNB+Plf)wUN#wS#3N zWF+LanDG4ocUWfJn3tG`n2wgEkVTMAmi3S~Ae}9HARj=wM8X-oU~6`-ywmbetL!%{ zT`enCWn=ELd<5b7b2m$E)WiFT?zR-cwwU4fSV}{9U*)|PJqO+0qR+xTEZ3lB*3;8+ z8CuACdRa1alhN{VnTPWJhCwOq#~h+(M*EVqPGgDw31clLdVg}?vKz7Lf|@0w=*46`VIhR1~Y z^N=L1QGM8=Q5|W?V4OJ`k67NCl^xYbEsM{{$|#HGVzgy-8qXA;g5OoNd>Uk|MVauJ zMVTT6iJ@ zvolTN`I>Ige9edn=WC|K^EJz&`I>Ffe9f_3jTz)8@uw|qA-GX6G1sCwooCUUK4a1B z%(rNE7FaaP&ssFg&spxo)_D%_yk!W4d%+8q$sy)N%QGS7B@0LO35@DO%QD2Y!PW0Y z5|8s@i^h3LOgPRn&QbH(0b{e{9i;z0sl-dy_@$#wQl78=Ea!H$Js!-T2I+bz_S~>&8}#){Siz zts9?PG(KNgG(Ouc%BU|b+Lw1&v@h?pXkXrC(Z0Ofq8a?kq8a?!qJ8-ri}vLLi}vL` z7VXR5TC^|kwP;`d&Z2$!dyDqvA1oTNeHM+_ev3xzM~g<|CyPeoXN&Ui7mND-t3`c3 zV9^*Jv}g=}vncBhS(J6ZTa8R;kL>}!cPj1-i#-n`r}s}9kZ`(UgEsocps4^4>3~_bCM)o9x@klvgHg2fAQfI zOAW|E#GGnr2H~}f%0coI-1?7$ajhT{wntm%Z#nbd%9OT#rX-`SpJmb3&$ejmRV~{3 zxsl*=O7h?4d5Ok7aSuaGGJS9lgXQQJ_|+A}RF6q{#MH1Lux_l zT1H~)XQ7^YmPwFWkouO+5dJ=O1Ixbf+cB5LF5|j0aX=+JbmzUTA zxl)q;?xpOfiK{GwT4z6%G_!oLH<|bfrLMMAKt0@>u8}0GLiQr&T1!QY;g#rDb4ztd zS!6n)8C(;jkzr5mI(#8X=mYFjD_41 zlR1#vEu5XDkd84~3%S$6`Pu>D9RS&tWEHmcGvpr2PRQ?&?v{Tbhao*Je52-H7{lH% zNn@|<8@HW}CWr8I? z$VAJ6Adg#?2g$d59AuJZN07;u13{)(ngy9^sTSl3%N;?cMZz~CQW_4xH_jH8qC9C~ z&6F7y_LTCJg*~Orw6Ld?Sr+z`GTXwQQs!9LQ_9m8_LMR=60Wpb59e95`pvg6hAZT= z7RGQrd?6BE|7ni(ryH_vp+(Q1E|MhMBW4hCY_X*aWE5nHh0oqjg1i!waTnto)tDT0 zBkni0JdaX^%i>;Q%X-MusOO!Sya0JOCd(izEn7o9Yb;uO*T#fv?>dXt-j8F#wRfXM zYwsr#uf3ZsT6;gWXzl&XqP2I6#B1+X%SG6~_+E|AEe#<*p*>$%wAyTs3HSFMG2#Bc zTjJHGASbA~8|HnFMXSxX7OggWC0=d5iwU>>Lrl2!A1zvKezj<|IUw=c@|)!)w2;@I z4+Y6jY`zIOhSlbG%a4%92IGlT%h6boo`mrHhO2shq7~#NNCHo;W~CS8y}@`}rey-; zQ%F$@_Z@EQC=2%;u60LS81o{exP>uqLXL}s`{~m-Yubx5t5PARAgQa(r7gPJT*jhr zPs&PM`J@-g28-5~R+5a41vgrBENCrB=~&RlqGLf@i;e|1$Arg%_A%kH z;8u%{1syFq7IcmYj|F$egvWwz799(^TX>ejGyI+wtw_BsT9Nu#w9?)e6RvgrW5TuW zeo02>bwhFzR@$K!t+c}|T4^7Yq;y_4JSN=wLowmjACY8qhBhV=?t{8ZaI8fwe9Wb^ z(vGvJ)Od?ZO|W#nC3~%VqNNIc3$pqHiNxcUnvhzMe9IM(ZV9}b#nLhSg5+e&&=51l zGAYDNwdi@YCoK9k#%Y%4P^tm8KHc&rqzU9n%Ld3bkQtUQA#CAOmIIJBh?yx#744FZ znPoX1!t2|?d%I>{B6kvQZWnEg5R@NP9QPvf+DC;s7W!=#h zWnFPeQdxJbMOk;8MOjzUqKrD;qKqmX6J}Idi~3bg;(nF4s9zN<>eopY^{b*q{W?YB zew}JjzbaeQuhT4=<em&;#`Y*ah^rJxIp4wRI{iT)h+79 zMUgP;hTWc*sEA*ks}W-I6O>8#6};Mx(e&rH71O?!_pNoPeHm^ z20&hbbhV6vyau^D5`M1aXncmxdfj946{M$yqwx!*PfY%X^s{g@7;}G27&F+y(MaEi zYkDy$3mIYIXq*EX8IwAYQ5KE{V;+kMV*ew zFe4`KW5i}!I2ujPz!_0YHX>%8g`>fkXJf*c7c3l&?T|$=`2q5>g`@E=WNA!_;S=j? z7LEpE-i!%j-m!2r%0b?@a5PSbtg>)4&WEgtM7dG5B%V@_NgG_jTW{fLbb@S*$vu$G z7LEpEw#I}pUsyOA{UJMJG7_@e!qIpF@=Z*hfqZM>XfWo7m@wu?3rAxaBeND(O~=%O7U=H z^lt*@Ns{~pz^f2b*m5OGwSuH9Yj!3Rw?K+oHUv4+vK4Ya?z1||vK!JFr81Vi5T0Wn zZP70Y=A;F-eh*6JsQG8HldF?B5qAUu1o7YRRQE2h3hF_%e_8s~;F;W%Gz(Kt7a3CHuir&mS2Oj0>~)KCdh4&(H1_(+66MkvIjBuK*m~%;kz5|P2()5 zLKrjNa!H7pC`p}xqr(w6Iy`Qv0Vx5QY-t8L2{O&n4RS7IW+b|n(i_*%=EdXz$o!Z* z0(mYblOZn!DM<2j!92*4n7j&EX5r_!)sRw)ih(+H(r7il7 z<4B9H>KBU%ud8Qb!t3hACI0@jWKP0W{o^gVs$a^YtNNuSNqz5df<@mul#%$G&~g@C zpD%CGo>IZ0J>^7;_LP$>+EXf8w5ObG(VlXOMSIGr7VRmOE!tB~vuIB_L*hHQ&Ws7a zBRk8Y@5s)H3BMyd&!XdUHH(hR)h#-j*Rbds+9ejQW4!uQ)4~;!S8{4uv=`Kl3HO4! z7VQP~W5T_lfkk^kLy7l-Mi%V_ms_+KG`46jXd>}m&@?CEexxg7!VGT~6K43e5@-1J zISCow(xME%!J-UrB}wXf?~N8+?`<6uUhi#V(e>W87G3Xc7ZYCZZEw-_-VPRB@4d~U z>%F&ImNjCjlo){3PJx7Ci}=FY%LrlPr1? zaI(Zt0#32$Nx+=w-i+yv(Y+ZnEGqSsMfWhwv8bM$sGhlwQK@+nk6}(UhR-O*V>sWU zF??3yF??R)F?_+IF?>Q?CE}77u=&5w`Z>; zx)R7I!oIWc`WUZVesAHGz@BCB&Ib#x1X6yo=t|%(7G4SDcm2OwbS3bBMZL%g$N5ie zJtw>p_$98C9&#!6G>Nn6-y`8?^Y7Z{CB8)0DNJ>%zP!I2DC}f!j;rGjVl8jnd z*rFDuENbBq7PYX5MJ+69Q47W%Er32(ReA>!b`aW`}x;OH!{wI2y-FJcA`Hn!)2N8lRFDjnDBGjZZ0y#;3GJ<8y*V<5R|> z87wPFRk<~LH+Z>7bX9~`w#x@8NGlI>qFz*RjCygRMZGx5qFz+As23+&)QeLr>cy!R z^`ep_sXVM~Q68QaBzJT;T`_63IVWoK8IDn#&$Ot`RV-@rSr)bVY>P6pszsT}U-yYV zFQ=86=USAR=UJ4Q=UbGS7g&^;)g(z}=7m9WqfuQkp5>fqmM?OQMy!TKBX+SxBX)^J zBgWsH$o5ntR?DIht8LLN*O4TZt92vciu5ktzR3H8FSXnbX@lQ6swc_*E;)p6UFX)b zeb0w93{sF*J(pWlPh-`Ssk8*&K%rC!QshQ9adB z>grfMT%)daJ^BUG>r^W9Chjig%GTU5k`|8H9b&Gx{1&98ODX0Ci(*>2)Y5V&PMethqxZyrQUW-D=Uc zZnJ1xw_CKWJ1p8(M~k-ADH7(Po>uN`SrA&-#iHl3@3g!cV!B#Z2D!`fNsw+9KD*7H z-fiKt+mw4EVc*rBdo5~DcZ=H7!=m=|w5UD3ENV}0i`vu2qW1KSgyW;EM1A zKI6<@^tbSdRLTGgpAM!BjD$T^&G%bW^B{|Ae!!xd2U}G0kVx3(jyTuiwuV}I1{r1< z7UV&TY94MGA7VyC!Zxeshb*f3VT)=WX;ICOSXA?)k+98tVwY_mWzn;@qb(&ud&XG! z#4byXweXp1%3~Hi`8&>X^*a1wEbe?5Z#fM${|1?0IS2ALWTNF_NFkhgK5l6MDGJHA z+=`lyhD@^X7v)MqCP%{Ow%F5M_^x(}g*~NAwXmm@CoJqKWtxROrA)W5r<5lx>}hRW z@t9#@Pa8mD7=~7WVXd$ZQLH+6FSm!k*p&c{)h$S&z9vvd?-v_#l2| zJ4ivgVTVG|J8MVQgm%zVk1gjY$*j{MqOg51i2qlQ!cQ)>EH#7F zwpY^LcB{ErEawp-I#6RZI-eS#@uevuK?d+se%}8y`v<>?EMSU>gn7xoL zmXeQVe?{m{%R0;;Goh=cE=t9v*|~TQ8ujF2njz+Q$lWfLLCp!QHr*|45K{!w({eYY zIHa$o4ptJ*X+O(g#ITkyNZ3m|PEGaXY4lB$g}Sc~?`xt4~A;R^7Kr6q(jxImJrFtSi$2x@-b(%|j9#6yr5 zEPQ|F7|4r~)U%tQ9(cPlj$a>Hx+13Q1iaJ0QW-Hk z#;vyuKuizBY_N=k@Ob*MWjciKirZ*e2w}fAS(ZcCuTLziLd<5%#t`$VWjlmN&(AD- zAv}6+v25v`{iM0oau6{b=WUkMY8+1|;5#Xcp633-vI}p;VX5tw5-7!9d}%om!d~pK zyoBGxVGDO!svw3f+-0c|>e+2+8tVDV!Z$&&p06$Zo{{x@W4S5RQ();5>e*xI3t>Iq zT82Sb&tA*eP|tUknW3KVEsI0U50-aA%s$Kd5VPO1BgFh@`4RHK1bicA`4=)A^0Os_ zRdf{O7fU(Fc*w7oH}R%W9#alj&O{84j0YvD3n5cb>NgA5XC9XiS-2j~h5Rnb48ak< z3RaRoEn^|)LH@E#hj3K?wk(7&H~z7#fG{`ywQLG8hb>=+m_$h(g%3hlbJ9|HT~-QN zN+bU}r3E{TNStf^=@|I^p zOa;p_2-|a_Wi^C-KgqHU!a1!dN$r7jpNRLfS^k3XC|t=>bVIg1IpKb>1vOW8ObNsc zL_McjxTib{sbb;&#k0Y)EoD$@JcLgxMQ4?%b0Je8=SecBw$8547g(wVsb*;qlwQPa#Gg>`KY7e9ewpHKqE9890Ws&I00FOkCf)pe_Zc`|Fi_hg2e%Ift4!%pW z@UDgjAWbE{tKmvXbpOT(#9U?JeFbA7*96I4E8y0f$0UV&4_c^HT65acqB*_6qB(74 z(VX6B(VVunXinQ$G^aONG^cGXn$w#tn$va`&1rj!=JXbe=Cp%Fb9$>qb9$R3sX4vf zqB-p-Nsq(~GFv)ZW(DaYNq&7}Hs;PC`H6iHzF(@VEveg{r}%Q4Hdd%*xnO1V1F@)K&l5%mm;gx_E2>}#+^ z^$c;TKkK9tjlaRSCz8yXUfC-i4_dwpGF*~M^v+AXjw_`jEGI(VgFI}h4%rBK#L@*) z02yO>1abiKm?ZN&q(d=$6Jc2e;j<_ClGN7_zFTyX<@X?yEl2jr#!Ru43o_MmKBNNb zdBSo-h?y1%zrWyU>_^OW3rBkl7ZF#%+*!7LG=D z$b3mrj>g-#Kk9i4M}xn@{h}nn(cm%XB@0J`ve3fOpe(X*G$@NL9F5`F`pXuM24j{) z!o8py`p#cTenpZR2D#-VJi}`l58?abmRaUNj>56~HOo1W=P~cgEo~rN!{3aASL_*6 z6zzG-!WfSHJCdSo56?qaND^#MDU^EG!uFJhyk}v1DnnLA!hUUiCYczGt$$$o9x?&4 z+ER3W_O};54D}SGRcft8r9QH#)Oy#`<>_RiJJzTTmL8D4kdG~+A@@TzTGI2f*P1q2 zilBuYu}>`e1?0^Z{ciH7k#J2=%x4zGY_X_?TPm=A zqIb^hu<$qQd!t`FU5`rbvZ&NtEUo2|R zuNJlEfJNInXwmrm775#Y9Y%vIz#+#-ez$1re^|8jKP}q&Ulwia??||XlsupeQ9E-Mfu0`8A&!TOe9|^bh7Pd75+q%Fp zl4=%h>q3jRRo$X(U1ZU=YDB_q{flia#kMZC==TCHaVf>rv?!*QMeV6=QG4oG)SkK) zwdc}E{yWR{EW^Y8Ro^lpNCV5$kgw2-%Oc^brBV$oD%HrMQkPrQi^dl9qKQSlXlhX} zu84%a(AKZCXzN#5wDo4LN2RW|sMIwUmAclVHeY8^o10tI<`x#U`T9uM=G7R(A2Eh4 zE!x%%E~S`O7RB6XQF~fj)SfmLwdW>_+S4|Y|Bm6!7L7(bi?-h0^$ZWWaf?NzI#^Wd zR*Twvn?-HD-J&+%VNshqM)Kb_cd}^foh{mW7uTaU-)T{)t`?QL%c3@Sv#8B?Th!)z zENb(;k+99Gr@N&!jv!p;d$^ROr$yW9Wzn{JTePh{k#JiFapuqz$ELoHk=$p|Id(sb z&awMjwDkcNZGE6cTfg6;W96Vo*q-n2#iwlChxUNwFl0Mqu;sY!_=XoU#8Me@05a54 z1Ckhq|5>hv907SS60S(v)^LlqHNv88J!H|g9=2#(BQ4t2BayIQrS8do9(>et7Nkre z+%svZ7h*YA%mhmXj5E)KCt9jP z&O!?xx9B|s`Ib6};kG7O@-fb5Vw@*iUWA+rnG%VvRq|@{)F1_EjZaQAK2JDC<1@{o z@tJPX_&jOR_{^|qe4essd}dlSKC>(upV=0T&m4=!=V^<^XRbx#GtZ*&c_tEMOKL4f zbsA=QeoUT$JZt#^F-svY#N=JbOOf!J1M8`ckzX8>CXgi-*3$~IEGD->UW< z@)}}RSdM`(<~>UV2={{bEoVWPnJXi~{+`s zZfD-xyu(roF>4XC(^5H<+HI);Va;Dz8itr}EPNZlHpCQ261PFv<~^1b=Ohz5A>Uf= zN6a3`-XI0(!;lkko%TD+(eEV_l_1|+%0p%$qxM;0b=5^6!H%0aZE;U)jp_F8IF7l#QbLA$g^L+ zTR8H(YW;_WBhQ$>EFAe8@gC{FB`J=4HVlc#zz%=xj1DJ)4b=chtak_>a6y(lV) zVkl`zhWp?U$dMNAgR`)$qatCy_F*noAtvJ(<=D{{<=8P6<=C+n%%1mQcjYf4fzAbi_#Ez1=_YDdD1(v{LW zlH_ZM>4;KwW6}*$&+-Xk`a&+V@Jau2cmlnV#NRnv>{ zeB*fYAlZysj=s0B%t6cw$n}=x5FWd4h{*?t$q6%o^|W%#7zp3$dSfKWvCLAet9*}g z8%gS6j6C0#a8oE%kXCNoY*B8svnV&(OOncsTP(_r4ngvZa_fAv>8+9kw_Y4_TO@4Z zJ_yg*?ywvV($UgyeRkFAWVta&XG;m>{2=tSOC-_S8|t~!qMEx}RP$XH)!faZn(vN; zZC3u=BS|TL?u`laCnw6E?v7FZ^pIqfKRqqVpI(v_XZa9n?rq_^!9471VMg)3i~B6h zC}w#7n6QO8VMei@0gA~q#W?eKEe2XNKKEO04|6fdqEUUo@(^M;%Y!AUDG{=?@ueIWv?R7Zd&l%lJtCyNXVW7l0+@!dmk5C)WSs)w{WqAE!>V$FH6#6A(!HK`if;XglBro zBuVyy+54)*y?9;XUM#mnZ;eLHZ(8`K8ouZ3EsNe%v%;cxyu52+-z%b2PSl?F6yx@+ zl(;>sEF9INP|s?MYW~o|yT$q-X060EuaiV~i`|cy^%jom2*^eYYvwz;Hd|QpWMsmp z64$&%64lIiy>GR!=4T*ZSfWgT?6By)Jv$|?dAB60nQ!U&%EFrY=9~fxYvy}$_C|ue zDRmy6ncaq7d}p~1@)hI)0=nq*kq8 zBVl{Gp`PDR>R^b;p8pibndhOH@S5HqG2zkS&maX!^(!ap*WXbLw>1gd;yZi(mH23$ z#GNtxw=$z+ZXt_CBhRAIC~VPaq%0bZBP<$?B9fFwqi7`mJqI|_qV^OEl6xMOck}SO z_3ZPo9F3zRVK2IVo=osg!<-C-@Ji`1ju`{lhjX^#lGJ2Kdz3oXGGQA^L5{Qhg_vHD zQkJv7z*!SklG2tI5dOx&36Zd0CvC@-0hB6hsRrTNTh3B1NO{XukfrEj1xtGf@0vN$ z(gVVkt)gWWq#H`{>DKJM2ZdhG$|;tuh~YgTr&{)fQk5*abFZ=`@n!bu*V7_lMpei7 z@J_nZEgZ2KkSZ~G7IL=bOpM{{kn3e2WO-nblhx=(QOQX=j+7|Vz zjzztw8_9pO_fm_px1L4WTVLYrZD3LMHnb>v8(WmUO)SdZrj`lFXWn;trA71J%%XX} zHYS|+<`&KS4U&xJy_H4dbE8G`-rAxOYh%&=b(2N=S6hqrubVB}zuH-}f3>%0|LPD4 zb5(PCt3}(o&7zubcRea~hef42T2!i&Mf-ARi!!r|Mf>ud7VXPjEz0@3EZUd5Me^T% z-EC1l_gGZVy_TDi;f1m1c8`SFtDg3-sGgn{)zizOdU{(_PalhNqpwAoaGymr_p@m4 z?r+f;4zOtN9%#|teZNI}_aI5CFZx~_eSaVles{zDf=?3;v2ee55AtA4_>A2M3-=2? zRrZLaD34!!j_OehR{-8+I?BQofKMrnmLz!mDvUjDjD=f28uFNhD?k~@1PfOH-eEh@ z!WEz@?O-_kSdUcmP!yFn-*F0wy4FH`XT0J%XLAPSlR`7 zB@*tHYR^)O+Oy1}_PlCQdtS4sJ+E8Tp5+#`=M9V6^JXL*AAUE%-(G&plJ^nv5c0OA z420)4?^w=+6vBwDh=l!8J?~mn&wCct^S(v(thDI&Mps$xz_vISA6T@%ueJI{R4WL_ z`AZA0&r^0-Iv|Eu`F2{mLYN!7EPWuaU=`hMc>uB;@>L}Nz4zejAO*>5(88*S$;nNS z3n2xL=?LN5U%$2VfYd_Fca}krdXOI^Y4vo!B&nYMXi-mpvZ$v&Th!BEEb8g67WMRi zg`a%+9pgcXKlvV#L~pF+_kO=y_{Q2ie5(7y!Z+3)1^L^;H`Y@Awdjqti4!nsyh}OB zH`bO!Owyt^))unpYDP}@xw{-n<%DmntprKA6hDcd4LKqR-XD&UuK_7ynF*;2Ne9V& z7jTs8S%a9i=zC7KKzPU5(T*vA@Sd;YmV=N+kP?ll&5GBjPqXlv z6|eQ4ZqYTXDi+Q1Sr*P9uhHg&bHO{j&UOq(p7&3kYvDLggj`_ZT=0&e>K2YX@5i~= z!jWG9sTCxfEt9eJx)x>&uXomq1Z!`K8O7YV%)*!tAdM^&P&4n;XkwWQ;oTEgSe8Lp z&sCA|Xr(pbYKiCl8jI%rT8rlWI*aDLxkdBd!lHS zSlBOKm27KazgSPZNH}8Jn{KgaZ@Sf@z3Fy~_NI;&?MG38NzVObmGDNEw3Y|S$*$3R-(crwd!B82a=nr*2D;rp!SSek^Gr!DP5%v_7!g)+~g zccDCEnTAq4mzZx^3gP{k3oIKUypHs&r2xV!2hT}T3H0FuY|p9X^5DrkR_HDkZO=uEVn=|fh>*Wzh^tkf)u1R@;TASzv>u`{A(7C z{OcBt{Bny%{tb&p{!NQU{w<3}{%wm!{vC@(euYIN|E@*3`kqC(`o2ZEy3(RtU1d?O zeh>*)wwrh1dL8zQ)sjqK2_iN|sn{Nqe;_+tv&Lt)B(3rJ+M@CK zCP;pQTjy1-f|&5y&$kwCeK6$vnDCm!zDU@MQMlKLXQn?{+J1vGSp4-%D3!aGdoU*a zmi)IM1<89*ik}jGxAcPWJpIo|xGlx}V^Pdu%a-r(lplW0p%DJ#zm=&2kc;tGVN3dZ ze5;7RjJkuw&a;Zu&0_$=;NN%Y;;M#Pk`@ErSd z$nh4Qk9`d}LE^2Kk$CH6Ez{5*_O!fZKICNlb)x0n5L3~z2{IVlI>oX(NM*}`P|q0_ z^|Xq_Jw03Eo>sM}r{`JJ(`rF-p9?NjO!{$*{0RJ&lbMiFkm`nwE1R&*87ymL`zJ_^YnvLCEX)tG;C>WCi}Z%(4c;9BX9x z7P13dk}L<=fWNM=G=XfvU(GBxLfEfsE&U)n@mF(6y4v3C^C>MY z^&y?`ndk<~HIPHtOIlglLiic~MoSk6_pR2J`yhGvtBvKM5Ob3yKS*24oFF$_mIY~N z;V+$WZ)-0}eg@$hev2gi4TSqv2TAe}g!|2{mMYl0DR)>JLAV!mwsa11r)4OFxqO!- zJq5yNeD1a^2y%~QS&(}r$#)_APO7^k{SkyCZ%JxJ>Y2E_0k3qynCCw4+6LLQ9CEC}~Z=5zK4 zvKTTlChtHVjf88j+B`;*QJcqF)aJ)5%I9$wW&re#E&oeE`=Q$ST^IVJa`58$@ z`MkiQe16uVeC7%m^)#h?eqNGMK3h^J{fJNWcuL|0$LPxTLd(y{AMV|YEdK`K+8S-k z*XLihl*5Y66<~?wnC01=f5mbpVwlfMEmxvF+%J|%Qmr7-9YK~M5T0*v9gnu28UtZH zZ&;p$@c)0)@&@Eeok6(zXY0|*|DGlF6Yjo7sg;(JkeeW@Ema{MAZsm`Lb$DU zmgW#19r$1N2%>S`WYLIyV$q0gwrIpYwP^qP%%c5ki$(j_R*UwpZ5HicpIfwlePPl5 zwcVoq>r0FFuN@ZcUp&rb`>y?Km&C`5-4Y)!zLNNO@wG+!*B*=ZukS3{zkaZ2|JpC{ z@!}_o_OG8U+P{90_;~TF#K#MZj~53NWy$*`yPqCmxo}NZidgDExK|dnC?;)D z%#k_4n!t1QVvANz3u*#l!fkv?QbR z)iM^Hua>pwe6^e;rSsMD7M-u2XwmuVNfw>2o@~+i>Zul;ubyVn`RW-Kty)zqI$u3o zlF|9jIe0Gc*vstf@@heH?&`j zv}nJ0#G?J;QH%DAQ5NkNqb=Gm##pppjFou5cueB`Vw}YL#dwSMi^nb6FD6^GUre=V zznCWR(fmn^_KO)7?H5l;ykE?ec)zfCzu;%5>%mRXb=uS%R7 zuSuL6uS=X8%Pq={w=Bwy6&B^jdlu!!N{Msh1B-HFwMDtHM&jJ~P~zOMI5*ZR#%ty} zi*jRwMY*xbqTKjY;@tSmqTJXbN$N~yt0b*+tB#JBzaSdyBI72aB?IpGDcb-=ggO(W31A$)fE2*`nZyY*DVBVo|Q1YEiCMvM5(8Ta>G(S(K}%Ta>G3Sd^=0T9m6*EXvih zB+k{dCC=5V66fkU7Uk;s7Uk-N7Uk+i7Uk;260fv1Ey~qe7UgPfiF37%#JOs5uGUqI zbG4pDx!S;@Ty11gt~QZ4SDRXtt5;a`$@fZ&viB;BvbUK<$L^~w%BX8B%BX8C%Bbrs z%BbcRWmF4`GU|GZGODFT8Fhn28P&?7jJi?cjA|`$MzxVRqi(V&quN=NQ5`JGsM{>c zs5>Ois7@ATRA-Aas*A)Kb*ID`WpPGzRg5#Ln?)IQk3|{P!=jApEpbNmu_&YZT9h02 zS(F?7EXs}k7UjkOi*jS2MY(amMY%D^qTG1EqTCp4QEm*eC^v>moEyU=&W#5p&W+&~ z<;KGn<;J5H<;G}>a$~H-xiQY7+!$|BZcLCkHzrD)8y4rrQ=veuzMaRnLEjm`dDDkm! zkww|N*rM!x*`n-SVo~-aCC=VAB+lM9CC=Wr zEXv*$7G>}I7G>`$i?VmM#M%3yMcKR7qU`-h;_O`~arRoAz3Ua@?EToH?A>Hh_I_$n z_HLCpd$(DXy`M+I>&Ck8;tNSi_g!qa=+1{77Tx)<%c46UzOv}fhi@#p^Wj^I?tJ)O z;`Z#5xIOzNnQr)|hM$RkvJ8RnPPv~gk3;y~)-RT)A-u!wSId$RbHK7D#2mEj2r<7| zeho2)EJbkt2DkOQr4oeO`a_b^_rib1gx?GQWzqM-|3vcN``Hc$DM+jDIZ@ve<@Fgv zeNS4{_d*u+JA739n-p4c~DbXVLc{B`rEqA8*lGSIVNbuCzsK-3b=0b!9AC>&jZR)|Inptt)TQ zT35lMweCcV*1D4*`pv*44Ere=fBsf9hHEJz9N> zGOB?^8FiUO8P(9DjA~?2MqO@EMm4r5qncQhQB5t%s4FbWs4FeXsH-H-sAdvp)YTGa z)HN1mRC9|ms-;C4)ykrbYAta_-DFWlwY4atZk9Ns+DV*I7H3p@#Ww>S(H&7 zEy}1a5@*z%7G+e|NVu}?#-bNvc$LmCBU=HT%tM zPmA6{+)Jg>is@}pOdpq0Okay)?z5bUZM}g*ML*Z0QvEF|HNc`$165C|;$j?gQ;Ed= zF&PPYASSILLu1kzGCY$19^*y^DM+g3xUl9&|EJWLSSfBRF5K3*D2DU(#$U@|+|+0#Xk0 zf@L=3WXOw_r4U~Cddc!3g!lg}w5VT;Eb7-{%ikz<0qS{Kk}P=uzv2N|5))qOdBsu{ zF*iV##pHI#YnJN}!%y>XSVlnj$@oo4dLLvAmlSxv@JY?AKQo_3N7;xf$G}m~@rD zk-hk9ujLX*5zPB{mNn01_rdQimxoe6SoqvA_tSkr@{3-Nn6vQLe#h{Q96TTS(ZYMf zuE$?LSrqfL<%@rli3a%V7t3RbLQ$z-EzdxfVvjoz$$vBRpd_P_KV;F!|8CL9|6$R{ z|0!`s{S_0A{NEOh{J)Y6M}y;>sDS_QZ)N6%AW6$>K?+&k4U%VB7o@OdOOTZ1s~|^M z_6I3q`6EbCOW}XAElgXE338;RY>;A>(}EmjIWI`YQY*;Omdk@2W4SI!aZB4E$67iC zDPidmzzSsJ8_{wsce}P<@C5rPFWO7M^XnFGy9(xFF|PUI=oo<^3S%Sw0DJzGY943oL&Isb)F$P_{i6 zTFwnp-O@D3MV4EG)UZ4d~HMTT|@N+{`N%X!Z z9v!Z*=;&~zMMsCLEIK+gi-hl>V9xX1HCJ1h^OS2W%z4VS7Un$VItz22(%izFr?jvz z=PB1)nDdmD7Un$V1`BhZ(#pb|r`%{^&Qn@jnDdl27Un$VCJS?(($>P9r`&8|&Qsc1 znDdnO7Un$V77KHp(!s)< zEX;YzofhUirK^QGPr1v&oTqfNFy|?ETbT2ddo0X(%DoomJf(Y(+;e0-f)pgR7vw~H zK`+m+B4I_UQlLP*bB;R3wuGCV_`2SPg~dv z%G^kJMy+1Vlcdy(XDsT)d<(B06kwbeSVp5g{Iv00Bpjcg@cDvQGG4G0K@3OZMGJo; zjPv!9g`YU)Ll#<2Mk&f7N%CR{uO%#w2|tCu93*>vgXa;iSlGgb_-k1t?7Ld{nnf*q z-J%vQx2T10Sk%HdB`LM=t(dTdZ(EAy;rHnA*NR9uV%pYwmSvc)V)*NQN%A8|Y5cX) zvIoMa7gq(zPq1dL@mXO{RrBg7hN7C+NK&f#LyKx&E6FS_Tqyd)niZZoP%505NPOg& z?b!M*{I$;V17r{WT5m~&dNx=xK|Z#Whj4G&C`omK{DHqVMWU;G$71VSf)u2+^)D>i z`gV)9{-s4*-(k_#cSeE{OEG`OVg}ha{>xtXW1qfqsgmd^k1*_Q_72-hko)o1w~}Oa z2v_U9mU|#vpY{dG$L~%Timt`|Y~da^4}bj{31?8-I%LtdewU=QEsh%h;pzLZt$!k6 z*74m4P4R2pNsME*&ApB&lxPMiBuU;6X%5M=JPBzHNlDT#L0C@_N%D44srm-4 znd7f(ENSeglxu_JCn`c7#b4LOWD@>rVQGw*`S|OGn7oX?TE%1q{%ReQb@=Nh%k`*d zC;n;|lLGwJJ|;inuMRQ!4S(Gh30G0J`NWF&{1uZbkj@sixi+M0Od3P(ib+ez-7)C^ zx!1xr_k?it`EO;4(ywA7(JLlHA$?*p5^|r!zhXAPqD&ZQQ6}7PQ6>zsC=(vAC=)oZ z{I@ctOc-KOCJePG6NX8ms~MH?*MpI8A7su`hC5~-&H=b)jIbPraE*G{QWAN{QX?Z_ zJu3BxMWserRBCjP{KRRfrvd&NW2pw=e)E{6HRO8yH9ivdou%?B;xmYarH+K;TUhFN z$Ye=|Z}ooyGS#AE!4npZ^R!6VFO`~ZQK=^_Dm6nA9YH=iIgxlu;v>i`NpuAH1TnKM zJc4Y8%(d_cQUKwe$$!}+NHNF)i`LcWEL>O1Bj$OF*3}m+Tvr+Ml11z4A`92ms)$)^ z(Ym_C!gZA~uUNFMF0*J|eO2Nk$ZHm@t6Aa5^9aJ8=0rVR9+hH@disXt|Il{l;WpK8 z*ueKb+1Rp;kty>mGGxpwDkLIF#zM(hNog=8lA%P0$XJm?ri>X%9Ydi(DkKe#C@Pgo z#d|+%J@>us_xH#9*L$w3>&oYP)^~i?`mVM1-fOX^+a&Dib_siG$FlHzj6K~UVNc(e zu%{Uk_H>toJ>5;w3bIGSo=TKsNnwtCz^&rUu@5Q1TClJrt_xhk<9rW{m>rR=U+ED$ zLOuxjBt<4bK9kt7?j^{VDY6W5BoN!<>}b3Kb=i^K{xV`#@{W>t8f}Vv4mlyQl7E8y zm?Hl`&QP>ho|Ulgze(8l-zmY-Zz0P0Lt@X@>QV+z%94ysq($z6{4Gg`424{fY=Vq| zWWo83jaYbp?BUWl?@f_WkX$J;36d{GW<#!Y$&A-s8otS*xFmrq@hzyOgkH@)FiwLBiTAN?3a(32Uz` zVeM5Ur7^14VpQ$?IIR5|NCQY!NkhmN=tVV2TS!yHTqCh(JI{ht55)F&+rM^Vs~VDX z==)wsO-YuVVac^5S3!;<=2}S|h^=UKDA8LXrx8<^67S(#)sqbMts1z5Ps9ETTU{53 zjWb)=P{I~AlCXt#Z4izRTi8Ux7B-{A*uv(N1Y6ib!WOm+#72yB(MrO(xIx0XxKYBn zu&d3mg?+Gp6~fz%TT_B3+LeX0@vXvr=Mjiq*@nkeZq<%kCHlnEB4sdQw@4m>*j5-#1@x(BwxGSt8%zie+jp` zPr|JRsGQvxLwgSSK*>RuL6Yww)}FzVUp;1sY&`93JAgqYT- zYnY@3q&?&zNq0zR$nZccd)bSJCG5o`686IGO@vv;UOXycFCLSy7mrKWizg)P#YhQz zF-pQ-jFzw$V*;^x-?1tD=G9n9PK>HuGd?MKcUu@UPIB0{dP>6f*gco9r!0Abge5;M zVaXFEEcqD;OP&;nwRtf1ohH}|CQF`xw1iC2R*ab{Va&7I%Jy74&OfIZ$~48;F>^DH z^Uo`WV)shyFC+0YR)?jCnIX9>7gk2d3z91#mhSI6!{SH5+(66V!ndRm#l}_Dzi{xN9;3*StQ{R`;|a=jIz5cuexN$ z+4rQd?~4_~zAurm@2^SN_oWi{{dEcZzKjxO-`_|P>-%y_oPA#@Vc%Cv*!MLO_TBDM zh55V>BX-MWxSEihf^>nb55zKoF&iX|*(hm;{mYKnn?2SiiaUC3a`KG~}qtxgu})DZ@7sd-sriQ|?=dy>-RpJ4vxT;a1;ED!Uw~ zL`$LMUom2tDe^DmgrqTIvX{gC`4q_yIVI_Ym=chmQluQ@v}71!u7>=aA~hkuNYW8g zA97am2BanAcgYS&2go_e1xRnmc}l!kzO=~wkPDLL5Zk*WB|Up}7d`3{e#$TwTcyg= zkSvO^*?A5UcM0DVV%bjD83C08)q&+~KtL6p^q!MJ4u2$z|B87)7;TC1LF)C9J))gteEWsP+mH z)?QJ<+AC31yWKGi`^DO;N?7|f64qXm64Y+%#kG=Ap7XUOlObD?;dLb3Q|d~%r___o z!B+2KtNIeV{<69nNLbf(64qt+J^dU2^KM%;l6>OQSi<%+k+3~YCEsEz`-W{Z$saDw zCE2eCV_Haxxm+))4zc#Ml-M^3Ou=Y_B);?Nd-*r5PJ#LJo(ocBfFl4M`3QD$^Cna+s7Bfy_ExZVMDiH1k zHap`boSg|09@U?wXf7s7I2V&8oQtUv&c!rJaNMxkr%PD-3<+z0fuh>eC9M5L32UDt zVeRuM2_DB5NH|{$C7hi_63))c66VG$66VIM66VHY3F}%SVQ#!8VeLyLto?Nfb7Pr= zx$%aCxv^Zr+*l!DZoDbUQ6OApR!WMxtdd;ovRZPB%Nj{fh#h;^N-}-5dP|b`%CN3= zlF|^{YCR>kvtU|eYGX$6^rn5~lT zF54snA^lMDc9-;swP!Zu9f`GPA!J7&wtulb?@8F6_a$skhJ@|eDPendN!XsF=n5HF(0|4N6z4^at6xzSTU^YlR(hZn8mb1%%>ic z{Eq7ZZN-dA3Nz|6#W14|N|;ffOPEn#xFqZPQZdXiN;2kFc6&J|C7-yQl6>v*qvR)-pCo^{oR*{&4eL51$?fv9 zq_E2`k_s-rN@}~Dl{9wwP145YcS$FgKP0_f&PfKl{3&_ZhiB-y~}@+?JgH2dtEL{4!J~1MS{PK#CI-H$uBNxlK)&TlU!aboQo`y0xmI0374#r zN-o(XwOq1G8o9(JH@f7IbaS~}GSnrfWSmPv@~lfP$xAM|CCgm$NY=UJm27p%C)w?i zUvkjp3dy%F1th0k3Q8`xTq((URXEOtBn4dxOG>yDkyLRhDyidQ-x9FDj6`FXt0b*m zic31Xl#txzQc`liODV}{m(r4HE@dPyxs;VGb}1)W<5FJou1f{UUYClJLoSshr(7ya z&bd^PM2m;xe6=LIi+vv=9I<>Z)g(n-u91{+sV=GNQbSVTrKY5%OD#!9mun@xTxv@O zxzv%2a;Yns=2A~G-=)4}g-Zj;7MJTJyIdMd4!Jav{Or(X3O)un}`j?49w*bNYSvti3X_+9IVu*TgWv9-zMMv1LWCO1iJZ8B*sv9-yhjl|X_ zleQ9Dn@nz&*xF>$PGW15$t@CFn@rkEY;7{>AhET{Bwlz*TboR7m)P25(nVrxlgS+tTboR}N^EU1xl>|mlSwy;txYD~CAK!1^pM!vWYSY& zYm-SYiLFg0y(P9bncO9@waMgeiLFg0eI&Lvne>&|+GNsCVr!GhJrY}+OzxG~+GNsS zVr!GheG*%nOa@47Z88}sv9-x$ki^y|lfe>On@omCY;7_bDzUZ6-*xF?Bh{V<=lMxbIn@k>+*xF?Bn8em5 zlgA~tHkmvjv9-x$q{P-HlTi{|n@mPaY;7_bBeAu~WUR#2CX**6wl^F zYm>=y5?h;0rb%pVGI?HNYm>=ziLFg0GbFY)nYcCbJ~AHkrIA zv9-x$w#3#ZlQ|Mwn@nDk*xF<=S7K|E$vlazO(ydtwl{Q6AtC8RB4Rt92Mqugqhgj=naaH};cCl`9r1?8+&4CO7w z94LfuogrqOU9J0)iz zUqg0D3ZsQ5A$ugPAYF6deOr<{Z44oMDe`Wa$o829{vxK2@uQGlag0F=9J`ZkNJ@jJpi$HH2)+y=5ktc z8nQ8p@7zkxL&jn*l2WovT4XBZ7sb?u%!ZtmbcVbE`JECU2w4L;CwT&5nedln8st61 z{4IIKWB!qB@|b@m`#k1?bhRpv^`KQ4tNpL+`n zOTLE;#J$QQlAm3QO3u3!lf+Q6ZFQBzz75_sFMgdT$>X(`kW_)#%2-m;)?-QqV*4pS z@hL4~zsgA1ud*t~R?i#Jo^q0UmBM3qc}d%^!te4`khJ!gijrAd!x;OXtNmpp+HMG? zvZSkTRYfwqVp!MJlCdsT1F?Q_^3^3A`5F?Ad`$^QzLta|f31WgUt7YF zuM>#%lw(*|QrUY^Pr@;*FKOs84J0?aTqn8RrJ>|rmqrqfb7KidwTXnI+Eg;d%dzjv zhVwPcrMYCWOAE;wm+K{4U0O1l9cQ|j7a8z4MdSY+tg}JhlH8gQ^L&bC1GavmM}B#lCT$d zOW5W<61KUogqhh-!pyu!!pyu^!p!V1VP@VZVP+1HFf#{An3;nl%*??Oj_MEzGjphf znR&m2nfZW(nfaiEnK?|t%zQ|~%p5LZW*b7*T<(erzPygLPGo3`qrueH;7*NehT&Lb{|Uq!g~>W=e)aDne#S#z1h8jJzmW0I_VDP0`u= z90||fUy|_beXe91%BhCBlJXg(He{Y+{(&@w%$JlZAId_>b&wko^Rk3j0gENP3V4kY zzZF}x$5yXP20-kb{|(6mNN>a}mn`&{Hzivk4_N|gR71AOX zAloFXA(x@#?UX35Sl^L+ikLWJc1U=A`kv%_#9V=x3`%e%UIemJ!mH8UF5#8<8pQ08 zSWmY?K9KNAd~YCjJmfyOPr{z=m$0WFN!ZhmDKYl+6A62IK*FAWCSgxMrv%sC*3&N} z?CBv&?AmMat@6r|$YBX*@T(MwBIc;10JgGc&KwKGelu(36h+Lp5{}RJDUus8$0b&d zJ=^(2AeLh#R!4*D?voyq8BG<7xwm?FZ63y$41wH}z8398I{}<*Lp2c*UyTf{GynP=;>jc0{<#0iZ++VR%azuA$Cmo zUFC4AKP24hoP=BbrE<2QF1tVWw`8x&dC6hO2dL{GmBX$6m2j*7B;4u(%ZaT-IdgJG zA{RX-Jz~-U{fd?ePWkOTp%$KQ0l7@F*d>c(6(kceF-q)h$Z1H{K!TOpx5_SIIdKWg z$w7&-oXZ2T{WSZvX^{%J|C5jua>*sB2$_QM$t`ID>4>fJNIFCEREb3LN(Mj*Lh?~! zqajy8@>3EoLCQi3NLIKMlx%moQgYCxkmM&wWt3A`l2$t`xrpRSNDagkm0ayoOws^S z7co~+VmCq>LyA)p-67d98YLw|TuMpCKy1Y?Et%mlWhAe=l$C6Rv_xIyB)dGOyyOd) z3X&fnR#!#I-yTy*lBg55xw51P#OkUN$fX%|wS*Z}Rl$`cS>eK?CiapWI4pny1PrZx%80ifmknk zN?7em*q5SxupdSH;Jp&=gZ(Ak2k(<`9~>az zJ~&XqeQ*#(``}=T_Cb46M%XXzgZE3g4?ZB_KKP)7``|DM_rZrG+y{qCxDP%o;Xe2X zMf>0giuS?BB-{rdmvA3^Lc)D;q=ft6C<*t$(Gu>1VsJc1Zo zFES+j{rgS{e<`4+%oct` zNw9?4 z8^lKbsDved9f<9xlw%Us^^JseeJf#I-$_{4_Y#(ToD$^52;@d)An0k-M!r4d1Vy>= zgM=f0Qo@lxC9#q3jBH?h?*v zdBo%hgmY@OUry1S=9IAZgoL%{lCbvN64stKkW1$@pJWu~)b`W-k{K>nNS3-3kl3hN zn+pbV=?q>eVabIgEV;0RB^QyfdzOF}I#RB1c9Y981MbUf}mvF>NNH}68B{pJ* zP);ccN6en|WM{D9eEo=+vVm~EtoCvg%~yE|Yp)<-?G+`gy^@5rR|(|O`MO$?&F7-3 zq$H#n?mShK)P~p|ca6kG)!JM=kW1&QhJ+>8l(6Jl5|(UFxw5}-|FV*6Q-b+=4f9ne z5YE>qNL`BNtDb}-R$syqYap=^dkW=TC*g=SatY_FGLD&z1L1sG?eFvkE8zeRt)}9+x4!62V!mV0MxK$g;*Isg4$qAR6 zB|p2gll0C0Dw1l$3DkB-!C5-zM4Z(pj?K<#x$uE?ok# zy?{NvL&BbRm9VFGO4w6-QcpNL>}huid)h<7p7xZmr@bWXX>SR8dY6Pfy<5Vb_K~os zeFL#vwKKh+ksJ0bp`gvd`Nj&!JrwOb_ez+({Uyxa`y`gVYf;Vs3A1;QOStdU#=bK+ z5birx`w)tbbweer{eB5+e?Y?8?TJYCmyuxY4+V1Rv2M6z0y5!a)c&w!Hso{2BNDFo zBP6z`SeqXW#OmVy^_YYuKQ3X(Pe@quNC`_GMG5AsI7V!AAa<;4gT3Gn)INq1?+y6} zGFI{k#I6Fyxr8I%6y-b>h>bkU8Ba;DoCy+^GttXQo`*jpdDYu9Nn3F=CQBGIg%Ug) zY7pjWYKlBo4d3UN*cIYf$h1Ig26;U=UBahW&ye(gH5w^`tzMu+`!-CAl!T;9YBfoV zRDsN-#9KnHgUph2gxDC)mh^$NMa&$@Fprt*5YBm|c?L5PLr2ZpmcG z2Z-6@k{+=(&qeJYO03PxAp25e3*-}twfO+#bC=}r`oDC+zSAhY!;qB9kSCCC&+BH`723($O6bw$w-g+S~A^Zj!9ngm~SL&Jmy=;R*(5ka=>H059HGP zIZlajb}}WLof8ty&JPmK&PfSp=Tsn;3Dc0z_8XR;DAD6qnzxRu)TpM;;AU!X+ov-Rbu z>!PH-WfY!x6S4pBmyuw z*(A(Edp2L#X69jB!aU3&VIE#CVIJm`Fb@+F=3y=g^DwuBd6-Ai@`kiXp_=%dTGA0x z9FkAc8&VEp&l3!LF#=Kra)o3Xq$Z?*WIm)Gq@ZLu#NLg2rDOx731SKb!lyynZz~GB zWX9RTq_BlW6vGx4m9T}yBy8bT61K3oge|n^B!=h4Y+=bjkae-A+oeT%U5l$@j|q=j zmYHQz#ClQIB{O~O~N)`BVn7XOW5Wb61Lf%BWZsb z3AVYGgl)c7!Zz2Iu+4QOY;#@7h8x2it0&2T*cjR~E5q6kK-NMUNRC6cK(3RV^O%N` zY&V55jRLteR~x%z##wt(SbG!2u=b`B*4|9Q+M7#Qdy7D93>%_7AEC|HOWL@!lyq@v zB^ly!gJh)3jgm<&H%VS`X)Rgq(nhkyrEMVgdl_rtGGzG85^JGJJBhW>AEsp%P z@T+i1MMxvaNJ%5ejgV22c94#c(ULxp9*{ATMeu_*J;1E?Q{E zv2l{-5Zmf0$rX9SnDG*OHm_|pL2{dy^R#4umorgv4Ql@owLc?i2KgK^Nx~LR4#f6T zws4AsEu1Q03!jy+h0jUY!f6t=@OjC6w8#2BU9t{hJ)I%>5MrOzz92c`l1_;&{5l%R zf{dCenFPrVnH`9oRocUv3X*4OvBlxPgOx(xrCM~SnA^CfKI0ts8VP{I~2a={e` z+S4C-__D-WI1I8l5F2?OjbD@4vDezXRANV3lh-9bdDdCG?Jpz2JbZ%^jL!n(>T-$I zz6`Q55E~!XzFNZC*GO3VS_x}^OTyaMxrBZH2t8ddvDyzqHU(mBF5NQh*V_`FM{SXu zM~0uroNkp|-Uh#8MLutnRE9**ukDg{kmZPZM=}_a6*2DyVtvnp+AZsLNZ6kDB()JU z9Ob+(;Z_+EZnaaAXLQ`!xltUW@v+2arxN6VwqnT#C7hklC7hivB%GZuC7hi@63)(H31{bsOPD|F z(dMrt*1~ro#{#kZ;okkNgnRdQloS&!GD@5?m_@=F zj8UST!K{=x-x!+|j#xIvsIKgkI7cilVZU-n*ssea9I>1fm7JicB`l|wglpWj5^hyn!ma8^SbJRw*SLBVeGXDzV%G&_ zYU7$Z5IaKlz9lX48;*VrCH%agkz_bx{zgn=$@38V{Gur(x(bpVB{!4su48kTw zb9;(zFkdmgjrtY|-$vbmlHl8@J5pkN8+9iM-$s2KCBe5*cb4#N)VE8DeTjQkXipbP z?AD9XU?03g@(f1obWvRSO6EfTgLI?l6Q3TEuYbcT`DUu)S+kKKwXkiJ+z!WJ5 z86+8on5!W}QlutisD$rEc|gK&g>K#vs@u@fyB>Y|N(-Qu!cA|t&#YqZ(4?9UQ{5|Xx37?Ad zEG0M}v!~)rlkhxhx`a=~nIYj*andDxD$Yy^pNjLMgulyPD&g<4UzfBf7p`c_ zB>Y|W8xsC5d%0u`wknL1>J<|HF8fW2@@J)l`LjyG{8=sG@3ND^-({~+41brsR>I$9 zuaoe1*&8Ix!_5-r;TB5b*7D)+vbRb2yXY|W2NGt~UI{-D+eeAlmpC2BrT6g9 z{C^fZgSEG=JXs&#TV{I_i#vtq#y?YHn;>>S>KDll$V6=QtK>t7t*2)t2O;(w%-G6%8=l1;J{@(v`sWCLUuBre$r*$>Gf zIS4rju_yY4y*Li}3X)Uu2jqK5LXxF(TI5GaE=eKCSx9b4ImmyIJd!$)tPSu9ujB?u zZb&}KZID8c{F1vMr65;GMnMjvu>~YALaHOio=G zT!*U?$$OCOkRFl)kUWrHf!O!eEqg~d#1pC|mc8R3cS|gLCqnv4EPJOy?vYsbPKVfg zJM2D5dc?AK7G!|LvUe_Iki@cg5oCzOvUdsOeu-u88;}Pjmc6SW_B_F`F3a9^kcTCf zz4k-}d$Mg9W7)eIF^@?sd$&WLkXZKahK!O}_I?BzBeCrL9P*^ZviB(DDT!t8amWOT zW$#ari4x1+vye#=%ig~rQzVwX7a-3{EPJyw!a2XhvNs20y2P?K599@jWp6>qOo?T0 zG02M&%ihwEITFj>ijcVy%id~``4Y?CYat6Imc0!iFH0ap zlDsRTk(JnrlKi&VR*wn4E!GtGZMFwueQ(eaD_UKAx+G~0$x;uWF8Nl;(XcDGpkGmL zl@xCEe#%z%t(c4y>51dU&J^hn*_|TyLq13mD`#Jd*jD>f#75)e6q$mURI!*(QeysB zj$*6Sm>H0-Qnp$MIhG_4Ig(SierBh}C}T{~?!S&rOXvjdFfW*=il+rxe)+ z`8h={Kz>V+k08INh&`j@j}(ca_H!=D_gDTUv8UBtaSfiJD=FPHEmGuC(NlvIqq~Kn zAV(7a;M=O%w3SI5<>Z3=9h7XjdL_h0>^$p=S;~5UAk4Q31k5F_kUPda39k4<$o!$Hi)?&F-fsbNeo8zmk%egwbdPDJ+=_vDKl7 zWH{sjhK3rgzYIdVhvKH5RS%_WI2?uu7NmjY4|^NHD)=TSf0AD*GzEcp|%8~ti0NuaL%kXt0>AfG|(`H#VQOT0eBes|m<5L;794Z~+- zh`H5c!m}M)%{yr;j^S+*j$vmB$MALu$FPfpV|a&zW7t)~F}zd4G3+Mc7m^auOtI8 zb{^he@-<{1a{j(R?7OK}*DS~YiPdE?P-1nN43bz~CW9qbm;EMdh{WnzI1ZmT1!5!C zxnG!d_e=V?JRlk3@}Ojd%P`4!mxmTf*-(QgAbxD^LcbO@v;4({6-Q`6|eV5si<}Pz2ZCqZG zbaI(1>FzR5($8hSES9|GvP8oD>ov(% zk69|&>GFCYw#Qi>T4pYjSRR_ZA+bC(SuU|WG+80BJT!SzVtHt?Qet^%vPxokXtG*j zd1$gmVtHt?R$_T*@|MK%&}5y&^3Y_x#PZN&gT(UCWTV9L&}5Uu^3Y_n#PZPOZHeWf z$rg#_p~+T><)O(oiRGcmc8TSo$vYCuLz8zUmWL)gB$kIJ?@25VP2QJS9-3rGEDud~ zN-Pgec1bJ`O?FEx4^8$+EDudSknkw_p~UjgV)jZb4^8$360A*r6x}cB;qsBBpUcOR z!7iUjhP!+!8R>FBGT!Ag$yAqvl605PCG%XqkSuojQnJG3kYt_9VaZmPBa#f4uO$0i zj!F)?d@VWZa!iux@{Qz-%eRtqF5gKmxO^|kdT)4qJ}$}Sk|`fu%wT(U^A_7C$XCduWJRZ`F;o20l)c1d{`dop`iS2dR$k~%JzOB%c6 zl(ce5NZPsNl5}>-E$QKsN7BzFuVk=GKFM&G{F0F__U!nu7vo(DNT#|Jl%%^{DVgU| zNV3?auw;dcJ*z#eYn@9`$yS$Qk_?xtB>P;7OAfk}kQ{X>DamvxB{}0#T5`^%jO2n# zSxMIW!u%;G$>maBQqZM>q_|5(NqLt_l4>rMC3Re?NE*9bEotRaRnpF-nxwPKHIg1K z)g}F0YDfmV)RYW&sU;cda;;>%OKr(impYPkm%5U9F7+gfUFu6#xHOQgbGc5k)uo{% z!=;gApG#xOL6;_yqb^M)nJ&#FXIz>~&bhRZTyVKwl663sKP@G>Tv|yAy4)Zs?qcs% z3iqAzE;mW4xwMwlacLuI?9x`!%H?KBJC}Bn&Mvn|dbqTg^mFMT8SHYaWVlO5$w(J_ zcTU)^@h-PXrn+>Nq`TZMndj0)ve@Mg$qJXQl65Y3O18RmlVrGbm+W)tAvx&MQ*zYB z-mn$+E7PU7QqAQ)NgbB~ zfduzJa6V?|#`e}dyUUlJy@$&nNk5mtlEE%RB*R^XN=CZeFB$LhfMlx6gOYTYVUl?+ z4@nlg4415Md04W}#oqf8_G_!l2uX&^qmq3tk4X-?JT5uv@`NPQWu)Yc%P7e?m(h|7 zE@LEFac*OCF;B6yyNs7qbD1Ei^?OY~FI=f7k z^l+IX>E|+4GT7x=$#9qFBqLp>NyfW8FPZ8xU6SrHLo(0h1<7KUbjb>rnUZxbvm{$x zUX*0G%$DqPnIk#q@{;7J%UnsO%RI>$m-&)&E(;_VToy{Q;@rmaXOSeA%gd62F0V+6 zySyqX@3L4@&1H$Cj>~J3#x6@Gtz2H0v~yV|>Fn}`q=(CLNk5krlEE%-N`||vl#Fy) zB^mFsS~AsTjU?S=tz@3dTav{t>m(~&)=Sp8Y>;eq*(k|y*(BNLvRQJ_Ty{tby1XYT?()8*yi10pn#)c}9hY5_#xA=h ztz7m<+PQon>Fn~Mq=(C1Nk5l;lEE(fCBt1ll8kiuSTf$_6UkJUPbKLt2PE@cK9ekV zIVf4-^0{Q4%NLTZE?-JATnhhH&)8(k-jLX-Ob1ugu7hJxPWW~9S z<jrElEyA4C9PaeN!q#mDCz9-lca~sX-Pkq zGm^nBKTC$Y{303Y@~dRL%UQ`(m)|7mF276Wx%?qn>~c=B!sSoNI+wpBTV4K^WVoD{ z>~r}?a?s^p$x)a8B$+N3BxhVMO3t}N@O{wmeC&dYy`e1>I}^72Nt4)_u*qc-I}`d4so5aq9P3#?V_Lq?ufX}k+^V7Iwm`e`Hc$dp1vt4pZ?pqfA zz91o4?lHL}Z$rA~z<1**u@MiYMJhGLcX9&ZuRrXQ^n58|-#*Ikk{M^4lfpJ%p%}Kg zfP`%>C}Eqgl(5Z(By4kGm-NU-=tZ79_?Au}7{i!}eLu4pCGiFNWusbL!n#UGSXW8O z5583?N-QfrPq_)>V{e|bzl>N}NXMr5j(s4Pj#zn@%s6YWAYttlC9J)Ygtb?uL|JOH5Nn~u*l1LzBrL{8qo#zPyTfD+5|1HKd37++$iBnBhqWk@5*NXSx1W686SHzD@s zLi@`|yaIU((p0hrvKi7$vIFuCq`BlX$WBNLNulH6-gLd>1Y&Fq?ahVuml4a3Z?hD^ zw@_M1N~GRD-mU^nx^o*f-R}avq1YhuAw^LYW2W3F#_%2QnIB?{u-FR`MG! z_6C=vltV9urbu0F0Th-dx4en3bJLH#L6*wLt^Ea zESFe0CMzhxUTH0SQ_>vY$=QML>hroFT8{8im1$^D4gf);L;JOQybzfDPuhh$5U=`QwGIs3~< z%y-!;S?RJ(vH@b>(B4joZFhM`vKL~_xv7Vkw5o^z%l*Hp+^52qlm-CW0UH*~mb@^9v5Mu55j}rUZ<$~l4 z#M*OF@(;w?6Tz1DmyyVIS2!AJlEM%x`7%nZtVSM}ul;4jzJXZDc_qI?tmJ%> z#NGJKBjgH6QOIG4z2(>bGGbLA-$Dve5;Y;#p2Cv0E=44LU5ZMcbSWm8?_%!{4(dv5 zaw#t1x?DnX2r>3clahh(%<6TtuvCid%!O~=r^tH5lur>`K`OaqM!8ldg=?j~hd4No zigK-#=*%i9Tq~<^t2o!nt0_^gl~pBNE2~MkR$e3FT3KDfwbI^#9JY{aWlag!%372- z*UF@Dt-Mw-Tq|o!xK`GYaILiWD~Gjnt*j^ET3J6uEDsw{;#?~mO1M@wl5nlGH#Y}$ z#kp2Ck#MbSN{Mo0t-MddwQ>L@%C&N!glpxX6tVUUro_2c4wZ1NykEk#@&O6g$_FJ}D~C~{Tq_@v zaIG9J;ad4HCC;^SgoJD5qm(Gu%Eu&JD<79|t$czK=UO>R!nJZVCCasOjD&0DSP9q4 zCn<5Rl}|~yR*t7cxmHe)aILiWQ-+zzwQ{0_Yvm*f*UBjpu9eSH;#@1AlW?t^CgEE7 zyo77zbP3nW84|9QFG#pnrc1b1&ZInVw{kjo((B@G}O(Vk6`&qjn#s@W|05n{g* zeOtnEwn$jcR!Mu5Y`>h^Cg}mOx9M&Vgl9W;-tvx1W|X6m6pqFY#c(vN zuO#fnQ3>bbYYFG#SRl3+*j=nq$b@fFWE|wX6qyJ)F1a1KVOyP$^oH10CnWF@H%$ z|0Fzrz98YT?xKYE>mpZ2g1?M}<)K}t zL?xDo)~_^4^ie!l1S58tBtIkrl0{MuVr`B|>OcykUs)-!1oqPl*eY8f+)s}}a-@ju zxj9{ucV&~p*-0pdvy)50*|E2@hG(aoojelGPF@LTC!d6~lV8HwxkAF(v3K8wb#ZnI zN;o@LN;o@(B%GbXl;Ccv?FB_r#P)(>DKZgKT*7^)q=frUX$kk8vJ&n)_IBQIedoSY zQNn$vG9}LZxmv>fsVZUqRFg1&u8}Z*s!NzZH3G3C$v)&yvu60j$78}Hq~%ZT6tVoN zt8#dsHYv=XdWvEG)R!=S8c3Kw*GZT^4JFKS66Vj%66Vh>66Q|_3G=6;g!ywDMfr2P zg!$7&!u+{I!u;tfVgB4HVg7Ur#Pa7j@~0j0r@O}_^QTveSpM9la+p6!VgB5$80JqO z3G=6~g!$7?!u+{M!u+{c!u;tkVgB4FVg3w|FnzmoR@GkuZNAl`wxEmoR@uN|-;RDaxO*66Vj766Vi13G?SE3G-*Xg!wZe zkl^@(740N?`n2Q}@zE$!Q%&95zAYz_%$&4?=S%F<&JTF-RvFnTJ5@y{D3A646 z39~L;!mOJqVb;x(Fza5FFzaSZn00d`%(|B(%(}S}X5Bmqvu?hGS+_vKtXoJ?)-6gA z%eq%m#IkO&gjr|r-VTp`%(~Yl%(^!u%(@j4X5C5&vu-sdJ`3kaZ=iO2qi}dsUkF(Z zd5aQ#9b#8N>nO_A^%Cal1_^U@qlCG-Ny1#+EMcy`9SCwY!5rHnVUBH;uov4T?8SCU zjJe@1w+6@_tI9A-+{^`{~D$RxY0eV&55H%%>8@9N<>r(}&RJ z&pal1W%oI^3ZB?z{Yr{GuPKVpslQ~5p5bP|8BW6-cVk2f! zMq(poQchwcW>P_7BW6-bVk2f!MPegnQdMFj_6+12iH+DaNR2=&=U@3g8d-wp3D=Tr zf(*jUT`TzzvK%q?4*2k>&aLW5xK&*Vx2mUdMqpPOgc9mYSWW{8W3H1hrlI6V^r9kq z(I^l*+HkAJ5^mK*!maFm>eh?o6P%j4gil}m4kfn;#Kwom%$Af`Rb*6S#Mm3M?Jpx% z57G*9lcYK1R!AF3H^`lkc7bqpuwzSm7raRjF@sQI2TGK6**m<$wVQR_CShH-Q#2Y~ zB^-@AU6Ot8<`VY(F0`;mAeZ*N7bWQXHe^C?iM3}Zq>sef^C_gC#QJ^&VsBiwUL?;3 z2e>5rK9Cah-Rc@7VO>Kdtm}b5tj*6%36J6SE@%78NX&%PZ-uuyN)|(G$fFW_O4wo4@faocA+~CZn8zuJ9uRvb;Yi5<7klEo{beMoxr~;y zgH%8{V*;@ZXTQcu*smug?AJI6`}LHB{TeS}za~i7ucs+d_G=;~&VEgjuwRoUZ1WTe z+iY*q4v!>k^Rp7R`8f&OJWawjKQCdMr&HAC8I(9jHC@6M&Xll)vm|WcixRfb-lrb+ zf-RgQVGCc9u!VCeYT-PJT4?WO4@+hX7fRT|MH05~WeHpOii9nERl*i7mav6OC~Dzr z6t(bm30t^K!WO_?Cn%Tqj`**Gt&K z4HC9+ql7KoBw-6TQ`Ew@DQe+X30t^L!WM3qu!ZkP*ur-uY~cF`u{8qvien(LYzo)2$ znG&|}goG{pLBbZEl(2=TBy8c261MOs30ruYq86T^sD-}-Vr%82%fjbu|0?0HEzU}c zVfD1nPk)neh5bE{OV`ssB<$%q348jdggyOB!k+#uVNcIX*wcR~>gm6fIQw-$!hT(p zuwRjCTpif2XdpH|TPKI-KWUQP5IftsO!Ae-WKlWXDkkApStZ;m8_S7h$2iCEiF0<4!O(pFR^B}frCg}-z6w+MMpf-Mq18E_-8ZrTLy<|^KynhGM zQnC#)1JX(|6eZ7w+#neVSqQmNG8wW2a+72xWCf(PWD#U7q>W@HWHY3#WGmzy$jy>H zkX?{=l7kStD!E1Sy-Rz^S%@7)J4j-fQ`_oR31_(@CB{tX6bLd?xzU*t=PY-TaF*|o zaF)ADILmiRILqB6oaOEk&T9xUN350P+|hX!KDLz}NbIQrc$31$cK zfW+p)Vjh&($eRq4*f^U!B(YI787{FgGFHeJ5pjjH5nzbo|=r7SWivHNUWzOV#50866>kS zc!~AYWP-$cYVx$idTKIJVm&o^CJ>v`=X~#;Z7zcIgmo$>2R>^n1zFE>;@oNjCCaTf zO1RY~m*id0%`V|x(Cs(j$+v-6?QG#zm6Ix$wmFQktu~;|7m#DyRF2i29c_M><*3a& zC{b?po`hTNWI2hRd!mtCC}$UA;*{NtiJd{rx7eHZNTS#a#+Sga{Iu2br_&(rKdCX}^FUaR8=Zxe5kNHJ10dfp6ze?tK%x{v_ zkduh{UGkpCoRfSBu{QrH`Q2mwc1e$PtA{tHA?Cc~+H3H}G{`?L$&vrhB^>!u9q9YuCGHH;bE5&!R!EGL!{(*ZH|t|R-)h;atv63$>w31=`N;SAavl7ey)oWa}@ z&R`x1XE2|HGnik(87v^-3>K7d1`A0zgM}rW!J-n*U@-}2u(*UXSVF=XEJcag4Ccqa zQ(9s(SQt`>`B+2nM-e`%sDoZN5 zTun(dg)Bl$HA!C+>^s#ZQy{AlQ$w=KV`>Fr=Lzh^wG#HCwuCWtB#f!+k{+?1+WA;L ziS^W^zQlTJ(m-N8y%V{5oy2--(uk7XdU_Y6iNt!kI0vqLCDzmX5z|~^J++wY1F_@b ziS2kBEMi)EOlF+YiZQVg@8b6kop7C-A_X9=B~1`h8qzLBu7-37#74CjV$Pzj+ax0) zHaoXdqVpm15YvScABYw{3%Nrw31VB_Nr^6p*jC*Fv3{|x?h@A3lM-WHy(kIR)my^4 z?xw_8SD!%a`w2Ea@1gd-DY6f8uf)dZFl1ng9ES`E#M*ooF}-n){h%cKjNlHO1 zX1Jt=$2=mr-eX2cZu6MOB>g?+amfge87Z0UF{30)JZ6mKeUBL{`P^g1Nq+K}rzFw$ z!hTJV6oy#8o|e?~m}eyIJZ6%lug6T0jPjVNl4&0EoMf@bOp|Q(nCX&FJ!XdFl*gn? zvb>MappoG-CHWzCS9X@96vVDrUzA+qF|#F&J!X#NW{91=za+U6V&@5SCH)~)5Hn9Q z9MT^#^8>N#T+68K*xwgOETilQut;JVWic;HETb&uRf%Pk#VnRsMp?{j63ZxySt_xN zvY2HO%P5O^Lt+_aF)JjNQ5N&2#4^faR!J`+-So87UaZJI|8xQlWqQ0!Zx3k zu+6_o*yi6QZ1W!yw)vcdZT?fjHvc7IoBx)u&F2HLan6N)jm(WRe8o`yRZN?mxQCAs z`%f{H3yK-^NqF?Ts2ED5IyS{$M&dEAD;kK67$r?H?GE5Kp||5oLDCCi=Mpi=Lmrb= z^0dcfm&}7yK{;{B29LR1@)@KdVsc9U@R(eZLZ9IZ5iz+Xbs^TCyplU0JrI*ma=*u1 zA(;#rf|vr5#U68|WCz6hUPyA-V~R-5c}!7B_Jd)2uA;=Qf{aEv#U%|P_KVb#l3O9R zFPDWMuBuhU0f5#-Ujt=*C#UxH5 z##ZyPY)|4mq%hXpa*~{%hnZPkQXFD26(rR?rlO>|$5fJZ@|em=!4aSfK5MH&iG8{# zJknk*IqFh1kV}uE)m-phbYz{)ds3M5)fK~>uOVU1*OD;juaz+8>qwaMbtTOC`V!`R z0||4!p@cc#NWz?NB4N%ql`!X33L8NN|ZT&lY}|nM#7wLD`Czj zg*kt-Vwm&oB+U7wFz1uPoKFgKJ}J!kq%h|taprtdnDe)=J#prIdkJ&CgM>MMtAsh< zQNo<>Bw^0qmK4wV&Xg!~{&op-zDpo>&y{=&v8(lYf!OS@uK5zywNS#k7D-swD-zcAs)Thd zb_qY<`3HSpB58(mfEBnxd@T^0Q~M04AYzhYF?Kv$%9sSt!;{hp=jwKK^SWaA8;xa> zsfd|?yCQE$9`UV~2V(anOziq}g-d3f-{5*v!uzW$B@>#?yiUTB*GpLP2FbHW(<1dy*G9=)NDIg&2}fgdAeIS~w>BN{K!JxfP!!ZIjG{+yQxq5?=|iPoQ>CqFcP2_ayH^dLib0N_-#0ay3J8 z$Ym!bIto{{mK(byClJ#Qi1Sfn0jtd(b5_%94}9lD}X~oFyNUu;jxO_5FxTdUl)l5vV;W zHt*vgUj;Fib-Xq|Dp`a(40b&HIw`(i9FweuSj;z)cRl7?$zG57E)dHo*7d!FbsbNN zmy;=BT_+^0>jw$zIvL2N{W>LKT|Y|pg#G61(4W2={+3Ncuu*K`u&itW1mKM#+&H_z!;>iQ{7AuVZXu{6ZR`xu$2k>m0iMq#U<=l4hj2pxrF`7DPg}7 z680+>CCYx~mat#>BpkWwNoS8K zF1goZN=P2{n39qy9#cxPz+*~F)_P1C$u5s6EBVG_%1O?9OnFJJ-F}}$QW|3Yswk=F zF_k3kJf^awm&a6*Jm4``OD1|uRmlR6sV3RzG1o{wfvm*rRF`}YvGc>4lD{GEAf}ci zu_uhF9f<80%#At{=0;r!bEBSwxlv!j+-M+SZd@l}ZZwoIHyTNp8;vE*jV2Q2MpFrM zqnU)c(OkmZXdz*4TrXj6w3IM6T1l82H%OQpH%gcrH%XWqttHHjHWKDWTM2XHW(jkn zorJk@i-ft+Uc%hCRl?lpC}D2g<`SN(FTj~Y=Rk0@3C_$r;b?O^C6V@V_?_)8k~|Rm z&h{OW;vUmgQq5!T48-z~<#dy1n$2}0q(D$Q}u8_Wx!HBsR(ogabr0bQqn;|KSt!%ZrPh!t}cmP|4Vn=NIB;s+5 z;ea5<#MUoca|cRVei*K~gCrdw7Bg6~8%KWow)_yuXAm3tp^|Sr=6=apk9k0H8A`Tt z9+c#RSUJNar99>#NiB~VPKkAgRIH9~O-qJAX4c2IrX^z_^U(JZl4UMWNH)5Rk?e4J zN^;m`Vj!2EV^49(jB|XF!tt4^7>>`g5{}Pv5{}O_3CHJo3CCx;gyS(09CPxM=77bKR?CKn}^&nA~7md_@aC6>=7ze_BiP2we%&nACJET2vOlvqBS zT#;BloBSoQd^Y)8V)<-xRbu&Ua!q3SZ1Ru9^4a9N#PZqXhQ#vO(+2oeQ^4a9J z#PZqXj>PiW+2o$Y^4a9R#PZqXfyDCJVVxNvy>3*(8C)^4TOHv3xd3=!sn~ zGGd)igdI^LNl_<>B^8|nCAFO-ku-7goTRmrq>`>qLXv(?l1WB5NiLb{B!wq7KGxgHk)Md#M@Qk z%4p-9QNl6IBx&tpGD`+K$s*x6XZ6HJqY+}Pu51$aG`qw~wwMc3w$QCofBKV}<+=?aAlKvpdE@P9i(T zh;VQ7iek98DJk`%aW<(av2kt)spN@eCP%EQgd!V#-3;fTFX z2?S8`r@<*Y zb{aZ~^Vx_c#E3PLlz}9NG?7@}P2QAP-%XlItnVgod1B|6mHZh-teM10wlQqsj*8qb zw{#Nz9-`f!Muh!pr5N_BwS@g@?HE-su@ng-@qDL8=s^*iRAojmg6t6B>eVTwA_9J zpRFsV3t}EaK9S6XB(8;fYRP&?8pz@($p%>_NwhRv*Gfq`NCCvGl9YgyhI}Te2dN5K zFPREy0Qo|)1kxO`NwO2t8M2iUJO+6W@{Qys#GV^(mpp|GLCg+GrDfrmoszbY(TLe4 z83>sG*)1uDZ%R&s?4kHSMvQ%4uvfAI;(fv^`35ozM|~&x5wZaCz2u^c*)O@{Vh%{o zuMCg#LCGzM&Ca1HvDx`il44c(sGlWSm&f=vBj%W-D&%{}uab_ClaNzU@)zWcWISRX zLoP^GL6RUdFG-F<(nEfi@YC%pP9hmj31|2oWai&qj9qh||1|vk@Tw#a#GW5slaz5W z|43@NnCp^Oklbj`4M~4ULC8(X6i6}1Ey<^lvXI-7Q;^z_JCduAMv%LbCy-{4dy-Tu z@J<)xz9-MF>JOa62ienzu&4hjhCO{KVNV}P*we=n_Vhmqd-_Deo<5bZr@o@$yRG;j zd+L|4r!f-tG}aSapSdC>h!R_o0uruBi6mT+l1R8Bg`&iAK81uUQW^sa?$py$=yy;z0^1#JZk}$(7OPJ5ENv>`Tul!Xc z_aN57suJJl_!ccPyqY8xq%=NZsZR0dge=5<>~%>s$XZBENo&YvNG(cmRdKv$-Vnb& zBng!WOFhZm?O~}e`OirMNwOW`n1+%(P8vyGane{)+DQ{hWhZY+-f+@X($vXY6n{I& ziw&`#mkfgBg|v`xd|F93K5Zl%pLUW9n=v~{u@9HrhRlU@q67n5Vtj+^xiq;amwz{zSr~=1F+edCpdNeS@2V3&mV1-qlf_DK6Aye~LF3Gv!}P{M2X zAqlVDKS+4(J}lw2`$q|{-A5$6b|01S+WnJ+*Y2MsymlXx@Y?;0gxBul5?;H1mF&lL z@MZ&iA68<&g!ve9k`j1%Q;aXBA?|=Y@y;E0)Nc|Vb%x^SQD;4|S&l_HwktR<>FeZz zB;Rqr7jsdP6=L_5mn6q=llC9La;gmwKTVO@WF z@@&7ZN?6x5$r#tue?IO;^6ZEOC9Erngmpb9VO>cjtSdzE&K;{OnJ3To zD}|&Sc5&Hoo~D#EfaHUuq6At(3PVzR@@$*aN?6YG5|)#W;%7POJ$bf086Yzj8|0o?H~K7uKGa zC_%O-kA&^XD`9(HmaskfDBgTod-8ko?D!Ov@GK}q2{c7di(r;tp?KqC`;8(JYmZ4$ ziM7Y1n8ey+Qk>$APid4~!josmr<8>4DNXUSJ!L4~_*luWO4y!q61Jzjgzc$7@y5s6 zQ_+)W$EUKy@~|>uUX$1i)`nD}cp23YQZ-6iK&n%eV>Kn5(>ElX(^?YFX>E#ftd3+N z+GD>sQO}cSN436$y=Wj|FB($3JhWakiW2KZ6N)nPEeU(kOu}9?m#`NtD9X&16856C zCpH%^YztqP+eivR>?+e%@|ufjCu!|s-j)n>*(bdwOCc_9yyfE7H4^zq@WI0>Kj%#`qH&nyX__ROXP__Sw^gim`u z@x*3%W;)~;W^g{m-yOf$HWaczVt+|z6l9TP0Aj{LmPkfIra+c?V%f{5J)cVWv}c8c zPkUBM__Sx0gim``OZc>Bjf78oK9lfi&sqte_NT`KmRy3^d(>Mb_uNriCCM?)b`SCu#s3zbKD~*N|5`E@ z(gw1P5}XII6=1t$Bjg3Fy*nh|K|127ZzZQ8-5@(9*CDnd?UE#RZQd=(?)tTdq89Fz zu!Y}I)WYv2Y~g+hTX;ai79Nzag@+_;;SUnF@USPAt2_&Sqy%^t9Fg!W_({UE;FyGG z!EsNX&5aWh+YQ>U2A!1HHP_^n#ICs}rzMjy?v&v;_J;N9q13F|s1VO{4X ztm}e=bzPLOu1k~vpZ8vt@Of`MMeX@h!t>&agy+Ry5}p@-OL$&fmGHc{CgFMU4<*3! z;<|)ccasw0d2vg^th+5?*4>dX>+VXJb@wF9y89Al-2;kR_^*U5d_++TA4}N6|0HbT z6A4@RRKgbeiesaVfB0^oJ9GUKwlIbgn1s)p0?4}9D5=#5pCL+CBc?GVag?-xJSX`L zF&!bvqogk+l_cqR;h5*6#A05MWOp%{qr_seNlLhwoKa#ixjlJy@0ZU>yq`Ud7VBvN z#jvNZM2YpZsDwQ&86{SG83}t@K1wX6l7v028YLFjg!45}!uc8`;d~8|aK1jEc)y@x<2;n& z{ocFH;4leiXSifKM(i4XwPS?D-V!wVP{LUrDPcLIB=)zEY)(f@IHw;;IHzMIoYS!q z&gnP_=XAU$c$3*z1z9&7bxmMQz+?tw5+!tcP58PzMREbzV&8wCDq&sIB)4&t#Y~s* zS35qI>_LpZZ8(Dxu)p735fbMKS2lY`ah8+#Adi|YVGHL-*uuFIw(t`PTR2a`7S8v? z^3dwCcO4f{ycUKa3*AxS)yCeCT&!|<)Dj6>xKzRxE|ai@%Oz~#rxLbsg(ud+1o*^o zDaL1|Bss)Zt<{nZc-Qeu#H^8Qhgi&7$zjMo#H^E?bTJzwe?Wdg%tpy07xRTA)w&p8 zJYv3-6o6P=n<)YNt+V@x*&=xx@&vM#66z1Jb>l0^G)Pj&*OG=S{obz>ej^Ft{W^Q{ zwoURGjt|mq zn^AHUaw|&iLT-D4TnlVLM$LrWk^BHz2)W0j^d0bjDf$lhBZ|HQ{#e5AfIpG&JK#?x z{0?|b37kOqc2&He-vN)6@H^mPv2`rVXZSTFamd3rUz`$s}<&%GQ?Tk|hvZTT)2YyO@-c zT`ne-Cw5QGzNeP3?`b9M`|}d^J)MMoPcLELUy!ix86@m`MhW|#Ny5Homay+xB;a}$|=U~FKpc?Ptk7xR^UR&p&$kR{iau;e-vKTEFbiM840!q(?{6!o;e zj$%*4Vn+=?3$3RSnd+p0%CT|2j+lllC&;53NqAIaiq|hYstL>ST4>jcHz|Qr=Wz#( z`?#i*kpBYSafP&yWPv<}wDiRCuo1-8x>k}7ki^Y!pG)!gha`ivQ90etg)^$H^lCD7_J-Y#x|-!SpS z&fJlI;1gBIN=Y94O~BlcRTS@?+X9f)lIb|gWR0W%&L+#l&m;>F6D7gr5PJrqnBY2y z{o?Uj9u?&Htdnpw)=Sv;4HEW!BgOwMO159!{9N)Aq%7L}B_((TQVFt2at~4+vRRTF zqdEwqx<$fK-Rg;D%a`#nzK1yKE5-bbk+)I(Mq;Cyqb2S}Dc-2&g>0ADsG97cXvDsi zaKv^>IAXgb9I@RJj@TXvM{F-eBeqY%5&NE^5!)}}h#in{#1495$ZQ;SMsgam z2y#|(-^HAhq{i7~G3Pz8vx(1bE=WfGjx(h>etSeR2T~Mr$qD`vH>3>YvL`lTIgwGd zAn}q{Ax$AyBpo1KAXlSgDCByS#6fO*!s~^tHV>l2J_q?XO6<&iz18u8e)7#IB43B+Ql%D9V;$5@ySA3A1H{gxT_; zgxNAu!fY8OVYZBxFk3#7Fk8k*m@Q)^%$9KyX3Ka9vt@#W*)mbWY?&lswoH~VTc${u zEmI}TmT3}Z%XBAkK3hfCVlFeZFocIghM8BKIF1nai6#oOrbkwz4QUbNxGmv$X zHzBr)u9tL$*e)(2n;>&h&PEr5-)4cVf^7E0`p#Z_C1EeVmarG!NZ5;Q682&{CBR340+4{ero$r#<@^6S@i6g%5#XpEb}^B4>}SS=n)_qDHbyODH*R49VqNTdXYL+ot&TQUJ+p9Nf{gl0l)46jL6 zLhOF$A4=d9B!t?pd&2#O#oTlfA7p!ON!Xs-6hGT@N5b~pr3BfYdlI(iz9)8m`C?;z zY0#br68j~e43K|y6k{Gr81sln1u~$V{5a~dgujmRL}DXf1~Cz-jH66^rSRYTgpTFJ zNLWq+C*c{KjiVxB<(MS&Vys_jl7#0Xu_PztUM_qdCn<&}wAdtd0CRhNj^%j7-TDs$}edQvCl>eO1eUJA*PUI zqKhdkSpuhy@vh3@QN1KQs<(tk^-(!5CyeziM2@|u7)oEoR7r%t28(|6lhlFO z8TY=VpNknF8R23ENt(Nu!IDlc<^#!8NNvTwi_HR`6EhfzSz@nj0t->#yiS{Jsm4yPsdBx(+LvxbdrQUoh)Hbr%KqK+LC-36PtR6_ikU^eYFlZk41uBrjyOgy-NINgbTat8vx) zj1p*+Fvj-^j#}%9{mQPDoCw#HbrLH%1X(Y!lG8voNUY=xkc||dm7E>&IVG`Wg8eP^ zFC>-;ZE!#MrNlD9Vm3)E6D(%4#4^ERwn!`!EM}|3GT}ljJ|~h`CfMJ9|5{?1kQ*)h zMq-&z0J4qZvkbSt3AjBFDza)Do)_W7Kg-SOENlVXr#-ch`F zD2I|yM9FKAQ%>T89E~#)j>cIDN8_A?qj6rs(YPStXk3(VG%iv69F5Boj>hj2jz+wM zqY)9_1%$gl)UZaiewPVnTMZXYGB|-}yNZLa}kbfluAa-~BP%;BzcgK$;8z6S>JeC}W z*qcuON&be|Ts)CHhS*i_DJ75>@&;=6mBxSk+viDZNGv5ZHaTVo8Jf#Mm0uSi&|pkp$A< ziCHJS?}=YL6|$?u&ZdKqcO+@B9@@33n}p|AcZ#<{+S$}2N^JFeH%gA89G5{~mI3CDS~ zgyZ~?glEba3D1>K6ba9isS=(k(VLDt1lLLBG05{~mH5{}P237@yj_k=rG+X*jl5+7tfM}+yj zP%+HsMH1%oVv2XYuzX$;C6>?2qQvrfMU+@Rua+>M*Gae+-6-MsgvEBA){BuCvCUqL ziS=R}WDCVxjcvcNRl=*)*OXAvw6VS^IBL73Cd76Q-+J=w&S9s7bFoXpx!CO_a$Vk| z7`8bgZ1Y~m_<4ohCt;hvrv%yNgA%s+2a2whhb30>R`fJlc0-ObCdmBx#S>o9?5N{W zVn>~%gt%^;k#OBOE8)8t=Op~J{k(*qwqKC&)Aoy!!I+(biST}%gzLs-3D4!;!mLY0@xB3SS(iq_ ztb3l~o$r=)>7v9|{ue0TXKj{0676X-Fvib4ZAMRQUFGf~lZ3mA%n}=)BWPh3iH*;3 zNLC52DcL-+Okl~`B`oU)L^p zOHeY(NfpTyNH4@xm3#pi45=lk($B41^w2)le7B0D^dfI;9xAE!I6TY4BwG>lAI`zy zlJ6lwlruu|tBd(i^0$i_>4}Xh>l!6tU85ze>mv#48Y5v{VoTLOfhvJwr;GWg!sw+dP(6GeqUc4 zwL$VWjv55nDCq~WJE<=u6Cn24&6kq-5c>>hlVm+)0?OG;3G9SSgKUvpgjfr=N^U{s zBjzhlILmgm`o>9okSjn$xB_fb3|D~d60QI{BwPW$m2d^vDd7sROTrakw}dOe9tl@~ zy-p%m*nNuOc@Ytw7vCv{=f(FDo)`Ni%;y6V=JP=b^ZAgIaC@#}-S|N<{JnxBl9o7A zN+9N_#6HI_2l+|T88Jg}ck{F41Bl%L9h2}(`9;Dr<+y}r%C8hZ&x;cho)@PiJTERw zcwR(==fxGp@Vxk&66AStRl@V)nuO=YKN6l7HzYhSZc2Dw+>-FTxJ~i%ytpIbd2v_5 z^WvV9INvu|TlQiu9xx`zwdJ9NtJWh=Y=>q?*=qAxvK;eO1LZuSgqR62WpP5|-@Xtt zAy&dnNFZS*1SHIagp|O=^L}4T)Rjnb8MT`vmRvzhdq_}n9Wf?JB>a7n=O}7nMA*Wl zim|^uVwoB81a~fewkMf{?MW_Sds0Z)o|F={Clw{g5sL`hlUgxsPa2Bfer4qWdYaZr zWZih4F+uK5Bf{NjI>m5znqI=)=?fC>PBTcj$Id9>9y^nSd+f{-?y<8-xW~>a;T}7i zlSsd^D~5aHh;VQGqGGr=&LLr&b4u9eToShVB?;S{Tf#Qyk+98qokZIFvSPS1j|g|> z`4qzz=9jRA1te@?K?z$}NWvDrB4G;)JBhTgh+=qO5E0%N6jcoG3yMkD=He2zxrBsm zE-7J~OG((~(h|10jFU*4%PNMoM})P%su@v%KpZN;#KbtG(IT?t!QPr??~m#~EmD1NrEq2zK?_j#q0IG>H!o9IOo zPizb)qhG@zZ&5-?-6x^VC0QVL7uiDciW}9IlBy8vX)6goCu%L}?#gK+;paqcC2_8t zc9g(iw6G6qf7=u8Dhoq8JHdOfILhv7yGhvQ?h>}ShlFkJDPf!6m9WjdBy4kU3ESMq z6T9aA`44_y3vYVAC%NaOuVfX(u4w%v-#|9|aPKKua}DL-uH=2mc1T?uH9+#K31S9H zZa5hvNrIBw;i$oqtPm?_h$oiMY|jT0wr8l0iov(58spnl!z9m}VBUvIUUV`-Qq0MR zlJz(7t5dCgzLAo{kUWr4lJ{|xot2|0fiaM_sQn|!Qiwf)86)`u(g`tRCHt%#$T&)f zXYP1P;BUkXK+J?F83mb42_^m;zw7~-?um^UN8@7&M`MPBqY)?JXv~ywmS;&g%d;h% z~gL`4b6ed7fkm)+o!&`I2v)ERg&LvCLd3xdmB@99tym0I^>hSxoWA+`#wR z5VM357eRnkZzuCzib&)m;*f>TZgk zqq;}JQQa%ysP3a^-oKM@#J-ns#P&-#7Y8JaIp~RHf?f42GY?7ZugOe9*8L!$@ne2vkr%xv(>mk2EPDu_z{(}5Q2|a=Mkm2Vf`LT-H)1C{SSiiW6UZnWBie8d% z6}>FsD*C&Gt7tq$`=383ey*Z_Mv1MWe^Y{7MXyVErreP5Ot~rHnQ}|QGv&5~XUZLl zpJ&Ql3D1;!5}qmdB|K9eQ-aJW->X;{d^W1gD8Gam6(gyP)us$)CstAqVrxPIPb{B@ z;HX>vG3-}r3Hy~s!hWTduwTzh*spXF_A9-F{dz&d zer52)=3)%`WmmL}lt3IL6MCA765`b}vxHaAED~Nlvr2gN%qC&BWTymp^?cD2%Q3bm z2gT3!$>fso9^@qn^DwuBd6-8M!d1`KsJ#CpFH1%udu@-MPcju!595=c5?Bmr z0V&`KbHm@p=PT?aKFGR?Nmz1m2}>^FiOtSa{HBWS21`nkVGm$;9Hk_@ewCIKb}?ln z$K0oHWhGTz%&U@KZ-whBCu!hf%1c^9>^!X?c^_iuaz)8hNM)>kl_V=5uR|(R0<|&n zy)g2xN%}*ELaIvQoK*9KqiSbdbtmybj!#55KCdf=<5NSz@u?}{_`D(E_|%ecd}>QL zK6NAEe?Fvz#IE=&AuT0##a{<$C9y01SCG~cyW;PKw2{~q z|7S=$N@Ba>Ux9Rx*cIQtJ=BTfvy3W+{OK&QjH(RjDzS_*dB+L|iT$o@anv05_9Vhl z5wZ3pgUr)W)*f4X=Tp?4h_F2i6vOr`q^LcMBy5i)$Q+9Zb8In>3Npu*NSI?wCCss9 z66V-)33KdI33F_PlgRVlm5lK-f1<_mXSHIOKWiyL=Fd6_^Jl$;`LjX7{MqPIPzB|9QkV!j{H9oj{J2ANB)L{BY#uEk-sJ3$lsQ5X1 z`FoyV1qkfMIIqB5+>eq?kbk3OH{`L(;TZbLAw9i2dY0^$oOGEGBe@2#9E+7ahFFFt zkfg;qXcCa*caqRaoX^_a2<=G}CG8-=DCr4F>WQs&Y;y_;+niFuHm8!X&8a19a~cWT zoL0g%KQCE>Rn+>GPO=qZ=X-hy?;T!{@ZKSVg!c{^CA@dYL<#Ie$#ynnriA!c!@|Nd zt}*^rT^28fVn=0n5+7unBf>Vns2H|6hlFj;DPfy)N!aF>D1Np%Hzmk6hsAPrI{I}V zD}Np@#^em7Q#0H_OYHBtm=us)K#UKWP*Cz0Br&A0Br!6|q^KkVBn_mvC(n*g2`BM> z)*cboUQ#ivy_AHtmzA*gauU{F!AWH2P?0gg$v^qM-zksC5{Ny$tjrjHb&ST`q_{h# z=UD|z-JDgB8WQWNWp6DB-vg;Fu{S!_7#&aWUb3rRnDLHQ-U+ZqUw@#u9#>+eFe9<=8&qO;4=ka*&cJxv7f@mmEaNEp*gN zh{=kW))HoK8;SiQP%gx@^#mn*?+sde+DX`+wtn^R%@JXS&rl3AJWj$4pDAI6 z&yq01XG_?gITE&cu7nx>iG&$GPr?kJFJXo+kTAm+N|@n`B+T%|5@z@k2{U}Dgc-g} z!VF(7VTOMyVTP}eFvC|$nBl7=%<$Eo*t*&zf2{8!QfiH)3*;ZjTFGPN#skO(O6XTe zk{SS5>tFOVlP30o;;h+&qAXKPN9rK5&vlGR{d(Nt}~hlEqG5lB{!*Tk?&QJf7HZ zlv#T&U=NU2V(l?`Sz_%m$tSV)nBx#?mmN>UXL*HuYU6jBsJR@swhSAf@?L{@-^ zu%}fN!=6@^u&31|>}hogd-}SBJ*^>OPisop(>EmSX)OtRT3f=N*73x$X#F^(A>B<=Wu>!jor5tf3Qp#^Fki2up6H7?#{v!jhYKVl8Bjy(!_^ z+f>4}_bmz6-ewZ6z0DTPx6RcWoqND|+tz;%*IzZm` z#IDplsza36Q5_{bsN}iq zV?BBHY#QeT@4>pdBEq`HD~5GVkg%?a64o`z6Fa}y)5(&gNyB@RDUvd%y)9Zel@h21 z=?0l5c^Pxj8FMk+6ZXRH<7POC53;T}3G13EVO_H*e%3YHNt~|BUM3OI}6sv*guI!fjrOx<2!S zZJvd?Hc&$4%ZKkqzmznD*cfh-bcWbdh|QG1TuAkIabFe>o9AhEjkLVobXa*X$tKT`q&%7kk_79|6F;*LWy z%*Ff~B_AT@geTSumVAohXUV6d#7h26!jjKMiIsfL6Pq3TCYO!;1xaVuo{Kt)F_$Ea zxy++N$4Z6wW4}wblnu{dJSFfQWG-s|LvjSN6mo^4a{iKhRv}!@-;_WxjQmk#)K!U< z(;IW~4@KqNpy;TZ6vf<@T&NVT>kcJw6JmAUrRb>plt4WCegH8KB#$9>)Waw_1$ivV zSUMc@G)m$THsl-Oiq=m#rtQw?^#73+sq=Upp%v$)4 z#74|o*h69?)*aH@6U(1`D7iHH-p|Fv2YH^pFX4GQfa2$QI#9y%bg+{+pOw4{bq(=^ zbqzvYLwS_y8ZP0vJc8oqx%{Do=kh2g;kr(t&D_Jv2|mqlW==(K|b{a?Fn_p`Hsu7Z>8j2C#xg_oUE3Nbh1V=*~w>~*pmS(+3uIu zN~~m)brLJtWWB^nHrXJtl1(;xVr|ZjbMNp&YTC9Ry?lJs?QTQbJU9mzZ=cO@I0-1EdT)5g$7^}fW$ z(By%{#?a(niH)JjLy3){$s>u4p~+*3jiJeZ5*tI4ClVV&lcy3JLla*`{P$U#Z46EP z5*tI47>SLcNvy=i&?JGx#?T}nu`x7BD6ug#NhGl`G)e4<ApyYCB0T>EI-VWT=yrlG#pDNj`UyTC(3s8p(MlX(j(Ud0vvL zT)1E9Jh9oa(XjDJFR{@uc|l^MVUj^&qhXR!VxwV_Nn)d6l38M-VUk5+qhXR&VxwV_ zO=6>Al3ik>Ve+EHM#ChB#74s;r^H6XB$vcS!{jATkQ;#nui>v|VE2_ZG8gKBOaJ3VXt*BKB!l(I~M`&5AjR_p|nhu=Wy)VeO?Pti7x!)(iW6fbOWh zyd+y?{KW@IB}pO30QCJeNfpQkh^ZoJ3KfL)RHW7F?A$g zLFVJAdXkfn6_AFWATzyRIYPhZso|uzq_vYik~I+foajBtE{J_j)K_u>k{fsH{UrZD>~CcBmn5hfF6Vtoc8HZT zKvEuJK(Y&B?+6W*9EVt4!z6bgR@ZPz zs%qi7Mo98Qtga6!fohQCz43bmk|vO}kWrr4^RZ;r!+jqu$pp!Un2#i-ATL42NE$)% zL&i$_LyADgN#;XJLB>nIhLnd)ko*Fv0+}fJ7g7^4N%F$$_{IukvL}{fZ1WTe+dNgm zHcykV&C?}p^T!gld4_~-j+3y>GbL>EED75@+Y_#bw))L+g7-X;hnBq&VfM~d472wW z3A1;egxNb^!t7ljVfHSRFnbqCn7xZ7%-$suX75r7vv-+<*}GiA?EO^2>|G&Y_O7J( znZ2td%-+>bB5yjaVT|`4qpd#?;rjELVz~aSm2mx8C*k_DUc&WfgC~}Un-BYa$p+xQ zTQP|sc6NVG@o%dg>pRv5-|UdwfMidH=krl=7BO2W!PIr|dzFx{B)Ob?Eh!Co9Ks#6 zq=u7ilIBjfOL{`Cq2wKsp%8n2btlC?4Pv>vixON4sgX4zafz+(k5SHUFUCfLecwX~ zu$kCB(jmCDs@D zMTKKtOsp^biwgDL!=0~__~3}<;dTC3$x6{A+#qP1IA8>0kMM z=~41&NzS@>!kGwnzLG+aEQmQn@t23Z3^^-l53&8&1y5|g*uskvw(t@qz!qNi1lJ3H z){TBIH-1;l|44|vP)vxui04ru_Tmo-d+{eFz+PODuoqW7vFjJ#$G#@v``Fhhe!h== zgQEAbZ&CC<_H7B@$G$7!``Gs+d>{K?3E#(lDB=6ql*p>}h%xF#MA(b}7^7Z1p{N(W zNds-c3by>{wl0Q&aN0gjS!jdzpiMj&g|_yFV{A^Nk1~lq$~%|c8^}B=F0sAi;oT3iu2A{j;r&J~PwZaU#QrwrONz1I zliBeR?gu3)`h@qHc_bnH7WX#fTVBcJiTGw&X}r%S`NT;+$=8t2P;!3B4^9e5&Ou72 z!zWpi>rM(uoISFeoFJbK!B&@xngtb?aaK0)_IA5q%I0eF;l$ zAYsW3B`mp-ge5nY)O9)5M8X_=>&{EPA zd1&{itt5RWg?|mZwPYN`e&wl+NW$^>mW^ZsBq^k;q-ByA?|gqpvL7)M{dk{^ z5;zG-jib6pNhU~7N~rQ2+_6G>N$j_9bK`vPE&1|zc%1u48qElg>U)y@AH{gJ_m%WS zjP1wzNvdMLia&=Z43d$E$vzg}ppnEuazh44W=#%{{6NWSh|TgKNx>;tf5zYmgQOxP z1Q{a90I?PF0}1;zloD8h+PC`ggh9echh zAbP5pP$tM?95tFpg$|?S3W)hg@(;vf#!8k?#d83}jFWr=v6u;x1e^W7wuqT1;a?}2 zEZL40_D0MU$&U~#XPV>}l>8xLrb{lkx@JgjxR^M}Ll-kk(g1VuG0K@O=>oC3=1M+v zF`r1{T+DpQ8W*!bvfafjlKkvq7E3O>n5B{jE@qkJIoIY-CD|d?<`t6SE@qXa-ZXq` z12L;5?IG5$&m^^6Icp{DT{-I|DdS>&n^4XMNp^^p^SNXv&dTo)^M&MBh{bI3#O?xa zOb?$sn<@STALH9_$lfiIM%e8ffNYgyL(Fl=HZ#N6A&h?2)uZjGa6CoP>AFs}Mtp*Kc%u&!fCw{M(3_{SvNG2P9mh z4obL29g=X3`a!}q>ac`s)Q=LbQAZ?PqmD|rM*Sq=8uhb;Yt%6b*Qj48ey&l+C0wH- z!Zj))T%%6tD6UbbBwV8;L9S5|;TrWDj|y^)IwRp4bxy)H>b!(&)I|x`s7n&AQNK&L zM#W3GM*S(_8g)g&HR^8(*Ql!!u2KI;xJF%Cm60T7X zBwV8&O1MTnl5masPr^0oiG*vEud=%r4swn1OSneGO1MTPkZ_GkDB&8FNWwKLDB&8F zM8Y*HsgpQgF|2GSu#SZk!#znd33qzQCEV$ykZ`A$Qo@~HDhbO;EnzunB-{JSvlfM`f09=b1&q7G{;OoNN-7lU>5y>5CHXPIFNF z+@0p61X*$}2}^!S!X0dG33sr0B;3K~m2e09GR4mwY`!S59c%%L+EYlv_PiqDp0==r zy(l8#QAH(Ody7eURB;K9D&YyPQ31>6EZF6ibTN_VqNSXKpNrZxuFU_$P{J{#(9>64 zOnfi}_Vaf2Ea!>c0TsYKNJCtg%S)IW6(r1!iV|MUD@k}Yf6WuyIk4m^5|&(5!jh{= zI6l=S9G}-cu{Lv0QiBrUo}{LPdy+RK+>_Lygt*_RC*gjhJ|)2YMuRA^{YFCx_Zy8V zA&zrcY&1AxO}rQrj#yJ2#lKwhmc;ISZBNpS5;!mmdmG&AHJ1$7gCIm&6zl0)1P zb&znk(^10RPA7?7sUILSJ4<+_?n()82l9@DI}l0eIqb}>rxD>EsT+?9ac9+C!ktwQ ziCxXpU@m$}cs1`Ov8%bo^p@~y{+`6H<`&ae!mD|IiCxVt=6wmT<^v^mHMf{S5?;-R zNbG8EF&{{HH6JFiE49T8m+(scAtf*rF?Po~k`l80SboT83HM`TB({$#i~BJ9w04@LLIIaHoVbxJ$wr+#}%(?v-!` zzmsqVzn5?Z4@fwJ2PK@rA0(W?!xGNm5eaATsDv~4vxGBvOu`vFPVsa7`IQpn`g2mk z_2;yN>(6fzu0LlbTz}3muDSn6PPnH%Hza>R?5XTc$!#aMB(t`MKPA5{SqwRd zwfBzXDUM16xhqLOGuBr%AO7OGq~Ab12}FDDO9~@q0G^OPkko+K+gblg+PavBlJ{NA zBgtgQxzTvLSh5WAJLEq~;A=YywLg)Z#Tf2}JoSX1C0W1xuZ8bwBcC0|IEfE(R3pMs zO`sT#YCytKO(@~0CX#Se6H7R%K?z4SiG-v2oP?vARKigWNjR#>BplV`5{_yL2}d<0 z#m`Yq<%#XXIXGpRC?B`d<~Mp+4udR4-s%1IbgUc#6PlKe|zeNQI%d=(`;s*;39RhIbY;+<{W zQ@7s;ZPkBi?>|d;RCNiDdR@}X9aTfZa%xIyAtobAenY~NYe`sgZ3#=R zBVoyPB`mp~geBLPu;d03meWweavDikPGbqnX(CyJPZeumoZplTM^Ek3x2BRA5Ieu# zlB|T-n+DA!TOf0B^=vNr&c(EloOLlRC3hiKS1UlYhgjb`N!CKF@0}&vA=dXUlEW^h ztK_DOc}J4wlW;lRB*h?BPIpNo7t=%1*TwXd#JQMvC0kugFUfB%rnls-i|HdtHZRXaMju<;i~nygsavU60TZbO1Nrml5o}9 zEa9rPMZ#5UtAwl8R}!vTUrV@ZeIwzjwN1iRYrBN2)(#0*t#2hb8VO-H|Znu7ol7B;1GJm++_u5+3!hg!}M^5+3zP!lNEbxI6t%!lRx@c+^t~cgwyi z`~;lk_$A!s#zekg(){ge51Gu;fG%mYi6^l7kYKlSIODo|CYgq!N}Bl5iiM z%oDq7+qwd~l%)83f0Eshy^s`=A0X>+SCUe40`es!m4u(Drk1>iyFYuhlW_I1xof-A!@=_KhP7L(o+-ih1(=LIM6LG~gd>_rB}uooF6>_sLCdy!efUSyH5 z7g;6jMK%e0kzK-Gyy%IIJZC3|-*=c@GZzm_#U)mKja)Ts)!^2 znTS~~Dj8Ti{CD4qNzNh0a-+E9D#UWE1SRkYQVMmIlvFdmBuyc8(dNpM!H}kqDw2tiwvcL) zB{+9%RA2Yx*>k6clXyStiU{kfsTkH(OTxP9NLW`rPi&SsV)ZG39GDCHo%RNjDv+mW zVMCS^AN z2x%qB2eI|1t>iU`l@pOB5X-~26_e&vjBhq#+Dm>s8RJ_9=_rZAQ5zwhCG2Sz$ybQk zj+m~VJUgfFIEmL7O8gv+ZjAABG`dST8a*T&jdvv+jouQDMqdd>BO)A){)*vfyf5Ks z43uy*21_^^LnIuH4?MA~hiAT(IPoB+|8BXGZY)?eko;b$%*`Apawr7@v?U^HCdp?n{J@Y8a)ddvg z>Ou)~b&-U*x>&+oT`FO&E|)M@S4xjfAE9eFJZ23kT6#_N|-;N zOPD`jNSHsHJ+Z4p$4~Jaq?pq!5_>DJJ>)Bi#k>poMq)7oAv-*=t6p>LB?>@xNw_Q6 zE$NOJdseweG6XUp7JuPRGTzBPiT%c}eGmFO$xOu9dicG>{(@3b)V|+IoX^^P0%zO- ziM9D0QBQ0In2MOODESyAFb^^r@{8na$Q;NCN{FLzO2W}NE#YYV zCgEtDk#IE5N;n$lBpi+N5{||NPi%I$*SaV<>&EbsjB{OaVEVZCgqYWgyf3Dx0NMZAok=xk0;OW0rEPD53=Nlu;iB&!;uYg(QcZydpX4q_E_!lOmGj=fl^XqLLgCo3CP$(oTv? z8n~lMNIEzvDS6LHDajZor73~AkbdY_8Bd-a!&jZ)x8>1h>w84l_i~D1-^)wb_X-mB zy`qGDuOwmLD@)k-*CgzF6$$%ZRl>ekld$jADSr0-bx$zM0sfXnO~piu#n^9R%)@9z zVkmF0oY1eA@Vz#~)M7cogP(@qS*k5L>7)RzNo#KgzafAVS8Fg z_Ti}EII5+DwYQS6_SO>C-bTWb+e+GEG?Js_c9J$2L+kt764upT!n!(0SXW00`_)Op z+B-|$LG2k(dlyN4^t214tAw?`BVp~`B&@x=gthmOu=bvkMX0?n>Uvkgx_U`iS8oaH z>LX#v?@2bHvvuY@J{ld$Ce5|;eFge4D<HBrL4CP`TGWJx*n>ooc`Me?STsS?&TO~SgSOIX*(64o_CQXXez zC)5=u;TX=8u&!AW)-_wgy5>k&*Idb2)U_IQeIj99^CYZmzJzrxkg%?W64tdyvIBK3 zKwXO^tn2?MyA!CJsyBY%7w^scrb7rxAtKRWC_|A@6f$L=XUdRJ2~oz7p$tieNXE!4 zL&!X22xUwfOwpty3IFeN&-4A>-(Bzeul4`GYiYGU>)HG4Gu(ZjbM`*_ek9?xW=goN zk0spJED5(YTXG%ST8VAVk#NO{xe{)Do`hSUFX7fdk#Oq^B;5K!$zcB!d@331vPkkV zUw&*u`h zXPsmR_Wd{P`+5ntzCpsRe<9)4H%hqmO%iT>vxHmUBH_{4D&f)CCSiNFOW2+r61Hcj zgzecSVSB!musypaY|kDE+p|}~_Ux0eJzq)Kp8XQG=YWLmIVfR!zLs3VH`+7kMZb|S zXFDWe&URSBtsjwa>qjNr`Y{Q6_2Uw@=UYi5^y=34o{(@`-$}TwlM-(0dkJg)!6p8l z=8rDnJDB5+Ad3SVC#0j z{Ex)eHav~3Ur{|Q^{<4bu1fw|9Ikx(pJd$9G?D#DnDZ|wv?N>~^15USVqV8n#~YG) z5IgUY%Jv_-@BR|9FN(JSBxfLY=bKJ)8DdW_lPIxccm$=QF5#Mu<#6P0iizFJ@TjI& zsYJ0DJI;146qCa9mCSl#YrJekOp1i-CuERh$8*tLh`B{l0AhQQQBn$W5HXn~PkKyd z$*;J#`W7)+B>zFIp4(z#E1TJR4mq)>*(BDUSs0B2V`xUc~(B``(cWg)(nG4A$x$lSYd1ih|X^71ry+=~T zV+u&>c}zh`8;`kH(!*m4Nd|h%eUfn=Q&{pb#GXPFk*tN-C*^+00grh=@}tK*DESj& z&uJf$WWn*V{VFOc3bFjT7$sUAVk;RIkBNN>cnlww@EATK;V~>J;V~>F;V~>N;V~>D z;W2zv!ejWDgvYR~gvYR)gvao436EiU36J3u5+1_}5+1{f5+1`!5+1`RDQS2NpOSC| zl`1i@Pj?DBpYj-w3&qwUHz|iVnyY)M`1eI^m+Ek531e@c4YZ7Mo~KGOZ2oB43pJRwpU; zte{(}dR|JX=g_i9q(`clmlI-sLd>f!@uTsY%juLlZzjb)?{Vn_v7^yjF@qoVk&-x`%0Ji z^)t`qbjq4M(TI(GQR3~HpHNR#)UzN}J)f$ceW)irzIQ0`dKM+r(+~A5Nmb7>)x-A0 z%z)cEsBkvks3FHA|erpiGHKg(ZB*q(1(;@djp5OCVl<#IMAmJQy9 zZ&;g~dQOth(!(b;*M+Hzbd_ zM5^E;j=!zJvo2{Qja|}8I=ZBjyyB818R8O^yzg?8WR6RE$x4@G$tIT+$$pocB|o}k zkX&-PMUuXMc*FupPM3_5LN1vkkGR|_dCDcTq_#^INlTZklCCbdN&2~DlZAt~qbu;f{nMTXM~%jwI8- z@EATP$?Z~Ca=%MG$s;cHC6Bu_kW_JLD5>w#NYcusvE+G|CX!cOno0({G?R>XX)gKD zrG?~EmzI*XF0CXxTv|&Gy0npe=h9Yk-ld)7ic5P*`a$7w?jX64U0#rs zbm=51@6uUP&83T^zDrk0dzTj_Jzcs<`n$X&8RpVmGS;PsWQI#m$pV*`V`9%CEz_$q z6mNV>EYmZ2RbrW*NiT_IdM2+)EYmaTEwN0`q>schJ(Io?%k)fMmsqA}(obTUo=Ja+ zWqKxWNG#Jcc~fGUp2+}-WqKw9C6?)#43b!;XEIn~nV!iIiDh~wLnW5!nY<;jOwVMP z#46wg{Sf*z(Mq-(s$vYCu^i1BBSf*z( zR$`f+$vBB+dM4u~mg$*HkXWW?@}9&pJ(GzN%k)g%msqA}GD%{Yp2-Ii%k)epODxkf znIf@F&t$5^GCh-N63g^VK9pFdXEI%4nV!iEiDh~wA4x3JGnpx|OwZ(FiDh~wvm}=3 znaq}0re`uoVws-FT#03RCi5hg>6y%zSf*$4iNrEJlLZpX^h_2?EYmajRAQN)$s&nm zdM1k{mg$)+kyxf@vQ%Q3p2;$aWqKydC6?)#tdLlyXR=aanV!jK63g^VR!J<=Gg&RM zOwVME#46v^Xu}sfoqr@^jlT8xK^h`EO zEYmaDBC$-*WUIt7J(Fz`%k)gPODxkf*&(q^&t#{>GCh-B63g^VzLZ#|XR=#jnV!iW ziDh~wdnK0Xne3BTrf2e%#4IS)yaeAX-}(k~N6{E$@Yn0&@*K84AEn}Q38j`n@~M>l z!rfX({+QS~{T)ZcMy2nOq}_<)gKZU%+y=3jf|9%*bFbunh|TydBqIQehRLl#IDthkV+D}R&ziqOYB-Td0N72wW`Ff)jWu)CgHVO zUBYWME_SUJM5(ygwfYdGrb^khS_)DtCU&jP4{#lRfcF9<%OM?czUoMt4@-)?`6)*2 zB{#PSuc*3`oDjRB>PcF9FHv9e8a@Jc%{Pz~-XH$DXhVtpnoJ6gd?ShdnoK50V@bu$ z;TdcqVGEl|x+CUJlxjwao#p(H<`lgd-AZ!*?csj4mXv|mezlRDeJO3^$B!`9FR6@} zbC7nD%ZS-g9%KEIdWiWQF&!iYx~GkNjhK#-KHIUb>{yKcO9I5~Ma&D5PKfD*m`;+m zsM$u2I!j)I*ow7XB%>hqsq8A509&ZPwBywrS3G-X>@>Jv#`h?QDM z2}(ii7%rkj8+)n6lAc~_DJ2-?rIu5o3%%3|$rdm586`OGrB+j-|3K_~t&wEd9-gny zDM4G29}V2C<{DjS{T%QadQoLlE26PRXwj zyQ03N1koK~3-?f>c_6l}y^^93+tycNOFz0@y~iC*eAN-)<;{XvOt@=_Ni2ffr^l;D(?`kNBH;iWE1Zrv5` z*A+@|H^lbqDkWMLVrTh3NewS`of5S4QjuqnKHzU_w2zlcBN^$X(ouqGUMfn7uJ%$l zNxt+_$&}!Pm%5n}z2c=ZNHTmG?pHtw?t<8UWuin&Lu|ipl~naoStvnMFLfIw`l^@8 zCK=|Xa!`T~yi`s~bcL6?L$cjV-AM_Kda2x$=p`?eN0NSbxL;R6$D6&`TAfM0o|k%n5?$h@9+YhMQbj4jH(shZC3+q*0)0yf z$z{km$Rm^>-JWp2N>QS@A+}$oB}F0jseF_YRP<71Dbe~~s+^>imnu&QI(w-Kl;{XA zRZ%kCOFc;mR(h$*l;{C3RYh{zOFcsgu6U_xlxW7iNs+18_v(^6AhRJgC_zDpo#k4T zXnDwD#MGA5gsg@h zsF!L%iT>lIT1tX_VX4-XARol`t1Ts33UUbTX(y=!ISJ_y6MJrB8PO9c^*kkF8BrD7 zH@zUSjHm{rGbPzFA}iIE60wZv708Pc%ZOfwyhKU1jL1s$phPSqs*jp`N-QI40eOXz zY#EW2>P3lIM)W*lUXxfx)E&}?l581~m3o~Lv5d%C*iT{^k+tv*O0s1{R%!qxVi}Q@ z8Yr=h$Vv^SBwI#grG`=>mJwO0wa&uY#EW2 zdWRCRjL6Q{yAsQY?0k)*BwI#gr6y1!mJwO0_av4PS*iCa$(9jWsShX-%ZRLnlO>iB zSqrC9k}V^$QXf(xmJ!*urb{d%vTc1tNw$p0N_|X;SVm;qnkBJ}$hI|yl581~m6}J1 zSVm-}=1VLivQi5u$(9jWsZS{p%ZRMhB8g>0R%!_)*)k$4wTu$6jL1qYmsmz*rB+gs zEhDm0t0)o6h^*9ViDg7qYAq$%G9oLrjuNqq$V#o3SVm-}zMv#qMr5TnQ6iQRS*gtu z%ZRMhR!XvEL{@4$C1M$omD(Y(jL1suq9j{JWTkdfB9;+ZsXY?Qh^*8;O0s1{R%$;b zVi}Q@Iv}x($Vz=pNw$p0N*$s^EF-c~hb5K~S*fFxWXp)G)NxA0G9oMWt;8}SEA<^E z*)k$4^*tqG8IhIxL1Gz^mHLU2Y#EW2I!%dKMr5VVNGv0=Qs*eimJwO0^OT5XL{{p8 z#4;i)^(!UWG9oMWJ0)Tnk(K&GVi}Q@`je7u8IhH`M2T2NWTpO=SVm-}{-GpWMr5V_ zr9>!~7n3DN|mo|X)Nw1PY%84Iy(Rh3MG*tV)k`1HHFgipVp zm8?gp7g4H)%tnq) z2})+d-3{8)NKyeZ3DQ_n9bzqPBI)YVloIU^xeqlrlMICvg|wgqqrFrsN_3i+YAu=N zrP@-01zxH>CAtAp8Z~#2?1YquJTI|5%?s&739<}J8`*;W>MHpUr8ZYXjx9-lEA|vI z-6UBdUqN1y?@0;lJ-cJ*t6!D0Ln#|Q=_TR2fv-vUzD#e) z`Wa~>f1o{mB){)Y8@UYWD;bKKZOra<$vB9OMD&wP_n7{Yg&y;UWR1tXDcJ?FeIFqC z)@7jNqRXI|a6~LS#xDj_G$J;X5*rb_3o&m=Y(%UOWSGQ8#EL=Qme`1x$tVd&#KuT$ zM63*A-jQ%b>|F^*#NuKjVo#t{Tx>+_8OV5*vJtV`kO?udzOG*8@O{SjBpo64KI245 zACGxoGTdd7WDdm6;0Ka*5IcjDB?lpPMNN^MgEU2Zrb=$gk`!qTnI_2vX_WzY6OsoZ z_9pub$&()Qk)(mgd`yYXh1kjrvm~osW>bP}S;MPkj-;r|TuSVdQVXAyd6b|F>aqP= zAnD~bFO&>~*q(kWnE>esStObMO*mq>STYh~Bk4;dyHLum=cSSpF3TiWT$WQ}ZEl1% zub>3^vn55|!PZwv9)Z}K?5ibDLu|ZhjpV-@;ah%dCG`OE|ILxRkLd=ZoXU14vN%jp!hIWBDTX2r10TO@4rRtej@O~N*Bm$1z{C~4T{oe5%X z-W3!3H1RFS-4c8I-mbbml9||dyAt+FK7-hmuut+OWG&54Jpk;ui_e z#jg^ci{B(X7r#q*F8+}4TwIj!T>L5Fx%f-M(e_Icj<)|T;b{A12}j%ik#MyAiiD%> z|4KO8epSNJ_WvXtZNDbrX!~^uN84{mINBaT7Gi%}1CF+*k#Mvj#?2CrZfB5ibo&+wN4EnBN4GOdIJ%ul!qM$pB^=$(Oo?5YJ#l4b zp#+~`?!jez3bIMIL9RivOMZYP;mznAl1q@AA-7ACeIz}nq=?HM682-cB<#oTl6AyCCXkRkA!_fK8fY4L$Id>Bv#6Li9!-9Wm1@;@5=in{H}aJ!tcrlCH$^@ zNKzFw+w7X6l2#D=t}G_0d?ambowwqWUWoY|F(o8#LSn1PO2$Ae|9M0*&0|VR7I{o5 z$rm0|TJn|0l#zT7u{J*{`3+)ieoS)BW6DZ`yTh1rlDi;Q&*PH&J*K?mF~~~9JRzw9 zv3;)~dCp@hN?LeKC5f$2ofBv9Ny+2G(?;?@o|1Gzse+Kol0Fd2(4LNo&3GA@KWxu4 zlF=?zRf@SyH3@T@>XK2Y+47%fB@0|?NY=U3lzi<{OY*BrZOKjf!kX(y?sR!h@~}%? zNi~;xk`^xYB{R=q-WS^3fD-E^M&q;7kP`6tG?DQ5G?nmftC@s%Tg@e0iKT^vE3ves z#I`;WTW>`P=Hp!0r=YE5Kg2!-?Ic$qwioRwv3jPXo(`1Y%R;z6#g*`a%M#vOy(+PLtGbBkCE>l* zYZBgD#l`NenxIr%?B1#^q_0ZZy;Wz(>oKu!##+CH=e-{#dI?A45RO=X$$yX&kT)qo z1}`;`5>0nsSZa_YfLN&^l%S=TdW#ax;iZO2@_DHdlpwd48cB&h;H5@M9`jOTB-Zoq z!PehRkkgRyl)&!e&f~mKq{Ob4e-QJ2f~1*)J48xQGZ{|?P->dw1#JBqhMNHfTE z$xuie$PCFONYX5fE=iU{ZidX1@LT3%3BP4#N%o9j>=OLDd&yn0zIQ;C)mE?ff zXJ=ka{x=Vw?{YfLyrD^v+?Zub*_>vD%R<%@J7PEE_$*FU&ob7N!Xp+J9q!5mwo#hRZ3J^QXUr4U( zNE^wFbGlIy>`WW`-q{=z`wX(4EfUtVl@eWrnhTrK4Uy1x#^+s`SV#xR){@+J}1cw z*;gO$??{S4p2W7!ODaGtbNEG47xFA(ewDQKnBOIQ!uf}UPdG11CZd!b)juT*T>hd& zpD36VS%Pcq5+&GJ1bcyNy=ZX{D6cHRR@ z>u?imE?rj(a1-M^7Ecw!q0mF z2|w@mO89xdPx2~ieiPd&BAEsm4tYRwCVkr2by!rg6EWiv6PGiPDUjld`43`OZwblE z+wc|=V&ZaBv82c+kVh0#1hN!TN>UkOrOL#_?j3l19+U9+l%u5K@p)XrL@t}`3my9BvJx-IOGLM4v6*qohZ>$5L*+pvn1Wa;kzDP zC3zs(=i=^0QqJWiNi&F@!5)&%klZNMQ?d+F2=a>LwnxHeu)QQzA@&Tmw`3xuI7;=U z1ScW(&Dc-!k4t|^=8|E|8F^pGC#edt zYizuPWAqaw9HW0v!e<~8C42_*zT_%uw(~Vf!jbe3B;65XeZpkP>kzx5rbym`SPw8& z@&UwpfN7G25c}+WDA^3L{hBT*Q6_B93`u2|k0h;JW=bOEl45Jdek|#@0l(ve^EFG- z8}d42HYJ+jKscTCVL$43&&pNFHKd5nq4Sjd6|3FcuujuNniOC{FA z$tbl^jNKkB1|(>m_$WEM|kGtjByIX$qN(J>4kj4fzzZNixw&K{iWfK`fKmDp?6x zkC<(e-5#@pqO-hH!n3?favG(!qn^0fwQ&IQC1dood5?sj?!6Lzy7x)=>HbQ>PxpQa zKivl;yy^~08a)wShhIy2x_l!U>2gRi*X6KeyUP*D4=zU~H&+O^bxd*`8NPiAj!XV^ z`BswkfiUKTg#FKV681kQCG3B`r^G%@N%-viKndO|AASl>NoGUrQ*c_c6>x|?_ zh+Qq`DA9D-Q!Gj!`I!>1XFD%p&vrq=p6wS2d$wOC?Ad;kuxI;Sa^8>X9}@O;7bWcL z{*m|}k-bakh@kl3`39+6e zNwUaeqLQ@`n^$m?ERuGROX)FRRMH!A z9deswG{oARP4Xecj%s$vVu)=khh#m(>zEK3&Nv+3hvoAvxtW=aO85Sex&ZWO*`_ zyCj7mw)NbSauC~k9!VWYWgM}*lD3fQkh>+XK%Rr-lMIJ6g5;M>h1^mT?^{WhL86cX zlAVy2C{<8$2GSmKuO#Uy+;Kn(N%BH^K<<;2h1h--mehjSv!)`FmJsWa9+33#mLm=cneUeCjl10GXSa?xW-NitOq+fzpJ5X9R2sHBR=l$ErG^v1rI zll1hM@{(bYfrxoR^1jDZlzalQZB>%2^O&b32Rx>- z{EK?tMhoLHdq$*rsNn5WB|W z(z|N-U0Gi-eCpUhGS*`nN@lw>lB{=WEIH`XL~_QZspP6lGszv*!uB+mly+$$sq4~G z^1Mqc$q<*;l9?`TB->otN=~}8ll=$Wywb_uSkYI6ZSu^ zN@hc>U+pE~v-j5|eD>a3vd!!1BRTB#^rb}4LH6Q$ew`9rhgdGrPm&AQnB@}vC9`UU zN8=3%pR2zq+2b(-BxhU(O8A={gCzXTj=_==bupqbA7h#l&W#@`;oSJQBu}7}_2I)L zwIFuKI$Y8bVt1?~V!|=#q*Zt_K+&`1QIy!T5lK9N+0JXHku?~+$h%D$TxN=88JyL*vj2BbIk zVzFeE$1J5pd8fII5@c);9-p}6cUi8OvMwtm?Oj$%_^jzO3GYT%Nq9H9TEe^0H4@Gf zUMt}|;m;*^*T=Ux_H>=39Ap?|y`&Muj{FA6P>3D*FC@z$V^C_NWIe==>ShV=8MjDy z&$v~>Imz23NB#J0mt1$*A(`1QY~fDHXAo=QF3Fc3^QGjd$LyAz^_V@9%O0~=V)tlk zu&4VZMH+?Y{VPcom;I7vE(a*FPs%pbbC430_%{6Q=|hr|w_;Wm_TsR_w!ROgjz|`J z%||7NAYJf@J0>}0F*p~;CD**vx0G0Wj-%!il%N@Aaoc(SUQz(7@L79)kUR{rm>(sT zJ?19~SMxh1;c9-TC4EuqBDQ`;G7|C+Z|j_7g>UO;$sUh6FZtPHE=X=_k`%dt zntzdGg+xEW*s&xZBm?9(Nim4^8^22`Ki)e@dSBm`f7&Eq_bcxBMe{?e}m- z&=pBeUxDyn3D+dNDtXpp{*$zKxh5Ina$Pdd6A*j)R8GRa?r{nGx+f&;>ncdt*Hxk@k9tzF<<)eN7HCgg zE@A7>LnH4&hu9)}!G$r8bi&Z6DeX*K^bN;JKIOqRa3FrLRkZ{g_O$q1x*OG9C ze{BhS<2sT9EyK_Ia}xI9btN33t0&<~v-KtET7~sAknoLzhLRG#twxf2yi{XJJ&$Q3 zsp2tBC0wtvnPh8=@VQ@e$pMJv*exV{Pobsc68fK;alTqf*w43?u%B-u;X4s+C448M zorL{-dkOpb4w92-;TT*$9VM3_6Clq^7WmP4LBjVYI!V~8cb4#Ni!KuO>Rl!2T8HQB zMG1R=ZW8tYFG<*Ib(gT$>LJOBHh+Y@=qX{J@UnzGz$+5=0Iy2;>Fz~|@)P%(grB%R zlz`XR>k?kQ{Up4``b&8IydmNB^QMI7Vt{06q44eCfs%jy?chO@GC0oGM-7%#f!GuB zA(DC?GgQ*XW8RXy)`yRhJmoQ?B`rK= zjN~l`4@+%B7O3siaXV>6l7-LF{UYx94q_N!nAJSNSPE zaUW2E$J*h35HeNL4DtnJnxwzSd?=abG1DdMA@+?wLvjpaSIb9|%N{dRlDT~t^Rc7| z#Oj$PsqHbdC9itS9LWbBGgq?SW9CVYc+7mspC0pxBx8rLJqslFL99IsB^5p9Q%MuZ zb{w%qlAe$~kj0Xb9NRhdut(Y<>5drtrShGUL68rs;hBtN zg2#L*nd33LC96GVk7NfV?E<_REjbR!0NE$G0I_@X{gmhph<&;bNN#^2l!KCoAlAaK zC6yr7M}0#H8ba)Pj?1eM`Q= zrg}QN9G8r9`Bt*Z<%Hz8%XgBiE+-|ozZh=odr5JZA0#zgew4i7@{?qu%PGlHm(!9x zE@vd?UCv5!bqm{bPV%tJ&ypH0=OrCoE=c;j{34m;@+&2}88Q~v&u@}+FC|4LL;j!y z_dqNM_>&T?4zW^yNrrl22xrP5NOi@a1i$z?BPBjsVKJ9~uNN>7PC4Y6${OGZF!TQ^gJgGkyq6D}147Zh;5`7F}+sY#846$w9MhS*^sqB>KY%i5Va?nfVqy!hd zR4z(1csVID3+L-j$)k`@A-O3*9f+Ofyp-rmUg~biBrlbp5-jpk1t`%ikX5L;pyViI zBcu=|IPIkhQ=-8u;n64}sSL5B@c<=g3$YeHM2U{@Qbi@3y;N~Z@N^eE8TbHC7$l7$ zHoEkPq_fAAl=ShKQj*~wQ(7|7W6DToL26=8AC;_xSZ`dG65R!9hL~~*(gRWqxk#&q=tabtT->dXj%%4`;^Km!$Lyr2!>c9MXLu=JQj6S0FO;v3=B(nZq5rK{v+mlq`yT)IgX zySyafTT$I5d@HJlgl|Rll<=*nmnC)H4EN#{NhgTy#jBD*kdJT-dr8JZ?ESCTBr`mw zw`7IK^pQ+l7p^SSS26=)BS)`G{za(@=r{UFG7Shk|eAmOOlLJ3FBK9z9PY>|W`P>UrT zfm$L-KQufSOC<#%b}p7lcuto~curSHTB4MF3RX&Zd_JSZ_B7k4xEGf2E%mh$zNNli zVxNmbD7BFiaI|ZSgri+sB^>SACgEt;b_qwjc1SqdwNt{;u3Zw2c6}+~XxDBDN4xe& zIKH!2!ttGb5{`&{CEqiO4wtkZE$@VD; zpKPC&aBS<0gkxK0C4BmQPQtORpCugIx**}$)-Mu{ZT&{k*w*h7j%~$-&($w7M!&oC zmxQBKmn0me`dh+Ls>>3NQvD<0IMEde$F2UAaNO#ugyUBKNjPqGO;W5**l%2ya4g`4 zgdK;0%u*E&2q*(B@} zvP;+}5p9@OZKi@0ie567W&PTdW!ud#rB|rOo zq#_c|KDuAR*+&mZZ1&N}Pa}~BC7gX!RKi}Xn1sDn2?=|xhb8Q_N>ZZMM@7rxU3&@V zI+l^F!x@}__DBNu0A(2yaAspU3FkFEF5$eU@)GtfPe|A!RgiFAQ$-2qHC2*uUelA5 zSl%)fZGMWP4DD$NGqh(U%+RVzn4wjZa9&e&3FkFED`BryL&9FGriAmFYDqY+skVf@ zO&tk)o985)*Hl-+c}?{t%qkm5m{m5Ea9&d*3HzwV63%OCB4Pj2RKoQJn@PCdU~|bw zBf<=}h2#^6Ww0$JoEh6n!t>Qy!t>Qe!t>QuvK%$rC}%s#CWwu4wwHVbvA3Q(NX|g) zt>=!CYhKUul3U&m>v=(v3u5(jk`#wnJ)I@7S)I5tyGWivjLkOeDyavt``m7n=zNIX z)xIQI4zbl%B~QD& zF5xq@ev&cYY@9O-jw`^Qpa%&2T1;a`~Vp!xdE}Kpo1h?M}<#8 z2TS+_Z;0ex#8`WVO6+`{L(OkVl2)dPov&e%Ob|O?BP3JNW;>^EOXfl>W|V~EGNUCs z5MyU&jHD{sWAcuqx68W{j>3$k#CpH0X!AHqz6m( zoq(9%(4HxhxsZP#(Y;e0| zHd<&`!VbwhE;}WB=CDih6SifgzLeZDCY0ThZeGtG30FJZONp&^Xuq(qPhzVb+Al2Z zr)agqgOu26hgRxqiLG{Mr4CW_o6$!k{MC%3627H%Ov1Ocj!SxBzw$1^8rqVPkb;mC z624vaon(d|jgu0tZ}UARYHP)mScKX8lEWxv-ylCp&O+>b#pNo*uHI9M$?{H8z~@mvOZYtMyo6Wg1qrXrUnJ#GbEQR?nJ;Mpu|D&6N^~luI%58y1bm8h zQNkIx-#7sN&||D^=`KfrVBC3x3f zauQMra!v9p#GajAmqaFqaznDJHs+JyUA#zb-Y;)~T!o~Odvz zwWpjHcbCMT_a4T1&r1nr;ri*932*UB*1OyzIqXtEavo9(^%Rs0niAG?ujGA~LXuA) z_W8Px60JKYDe^t)DNG4iPf-c$DMpEoL8)I*syHR!)ly2rtEDt0x*4VZL8&s7z_Qc9 zkjEvKosNK%msoz-Dg)lEmoPu9D6u@#Vk$|PXFer4f_=A`%92wM`@BC*iT(v?k1XXG z2}i`LN-|7MioA;!N|Z5HV@!|>G1dcAr$kFaZdr;q>m^S^vO#J}8bfUBwIz17q(e*{ zN>Cif(4HFAlT?@#p40l0wk{1MgCVx>4J98#Y~LG8wtGwy$!U*iMv10J|C|Q<-ds`` zax0`2C79bcU95%eB)0ZQQS3!~$v@Z&lMa&Px#50wlw@~#Uc!BULBc+>lZ1U{X9@ev zE)w>cT_x-@UzD)V>?UEK`I3ZvW_Jlc1wADE6!es^&wN?JKJyid`pj1)>@(xSJ~J-t zGvmTOGcN2i@(xSJ~J-tGvmTOGcN2idudPEXTC;J4%t`29P)Ju z?}htGcrV;v!n5;+g!j~MN_f5oNO+$+P_jM<-;p0A;jg?6mb`(h*LvC^l1UJ|Hyxa0bm*o5;lm(I}Tt1})YyB&3E3vO z6Jp=FJ0!gS+9`PoF}4@GB+XsEl<*ktmVAVmf!Nj_$x4VFvAvQV5IbV~B*!3jm-Ln7 z0>ti;_DimL%mGQJg<;G=$=#4HsOM`*DTs}TeIt1mG8!#BBzX}s5pq~!BQ-N1MXyPS|zcKJ@y*5xE6ItpTUtlv|DW1obpmi;LC8C$nL{3ppT z7sGebPf=o@f@Ro?)0BX7!_G-K6YOURe-ZV(guj1!LBhFVzexDYS-(o|SrmTn{3a;@ z`5f)}T~Y~R*WpD;eaKeC{3&VcF_$DSL-r!(Z^=-P`G*pn46!FCS17?Z5IbLSi7XCh z!Tqb46o~!y>s3h>h?V+JQg1|f{all@f!OtPT~ZXK>^t{{qyogwSELU9;cshD2V!^q zX(Y`db~MsSx_C^Iq>snkBzfCo(o3d#ObR8s6Jkf>W=hZpZMOZ2%K^lgWME9}`ZH?&i#7bR*)Jl+hr$i!k6XX#{LrTDTuuUb=2%d%^rWqw_ z+jd53u%)e-60(k%f{cO8O^~UO1qt#A zWO0IQhb))azJCK*C9!=!16h|KmmnJxB;7RhI|-5*vNJ*QK=vfa1Cad*@(kpg1Zf93 zN(t8FiAH{X63@dW`yiGBd?#VdNy*P1^SvZ*-e}}3>iI!Z0#fHItY#y50%CpUDM>9z z6U3aBwDFj;lGh+@5pzy5#AD7=q7xwYT>XM%F2s7#UnHv`T~JS4_CV~}`)`Ul>!tpn z1cmR8#(G*wtfze$^;}d8e!=#OEJLYs6S)bw$z* z@*7J1E8#C}UX`%ae-hSwO~S2Tm(-qETIERteXX%O>IPm1LK2O}QKr zt|=E6wppS!=Ts@S@D57w@vJYaP z_xzGmF85HP5B`}Hc^&l>h)KH0o3|I6izm`a_&#;nn$l%4esu+JNj&5-Botx~+^%StXz z#99`M@#a)aEYss}MLjOzZ$*`t*ci~!HF&lx;TTXw34c$jl7!Eio|N!e(^HZ`8Nyt& zvg93z<)T$2eE##agwKDfO8ESznuO1Po~1-rqGr2mt0CFoQj-$!iBK)cal}~WS(_5; z5C6p3sY3}WcL-N0tS6auC+>G}CDfO!Kb$sF5IuGSNugVkBKJcYN}h$-wi-!VxHOh@ zb7?|}wdZHFrzs_1ObbdZ=0C)=q^QkpBy4kA3ESLG!Zx>;u+1GLY;#8m+w(jn)}AOv zz+a#QpJTslrO+;tT@YI-w5#NZ@B53CSUnk0Pd7@?>9(XupO5gHCX)UxJtf6ZkM*=K zOUgs+s(VE;9;NJDyee7j(u)$?dTVU`HHzkM^p$Y_#_N(-?g@W`rk`Xq#D0UOzl3u< z-jK{ejJ4-YN^I-%u=N26vJ^6y5?no@8Z%g(eE_ z{+KS(4OhYp$$t?0)|)BWgi@~|=3~izh{ep7`~(?*m^qRw9y3ppxgf?65i?(MFU0Cu zK#9&pYGL1K3nhzEiT$44IMfr5X$Y~aZm~*rg4k8Jgc6)H!C77^x#6-*lI`9wX1U}+ zmlcv)E-NLSTt1`3&ifXe_f?c&6t*=PZC)#x?D9D!_B(yE5wngGto9ael|(Fv zPM3X>hahF}eeso~BBUZ@zoZewu9kz69*}B?`C2m4V-8WG^B{}y#N#j};C#^|63!Pr zD&Z60W0JM^hu6k&34e>^TM2)Qvw_WAmi65G=P z*wf!)!WF9D!}+>M(F)anQDQ4pPesfniRJ2ZA%9EkZej`Kip1_FOs-0JH*rm3cN2Cc zT$k`};)aBG6LGN>s#l}txY!ESn;>cH+I^hum)&jcf~1RyWx345lO%l4E-K-Bb~j1* zep7nM`ZD1-TC!vx#D0M^MZ(YN%@Tf2Gf2KiDeL)fkz8^KBpDtJV=_wex@3}+fINj+ zueVC7LaISBOWHtcL$XNvLK;G{N+v>@LvE8SgV>lR3!uQdhkZ?X^1qtUvR+Ml)WF-mbLp~|te8{IHycez_;oD44OE}l@ z842e)R;9%DD|tSinI}kQNR0%!15%q3?3j@@k{?o6lJZASEFU zBvl|4CgE;WQqN-=N!oi%V@h-sqyg$_BAM#aRPqU=Ibxbog3lrL-PByN*QJHzluJuW z?D*6`J*_Cg!#mSNra{_D%0WJcw37^J7;dXQC05T8#B`tpWe$c<-d>Q@f!McjCrKxW z<+Pn8gCLgEc9HN+uC5Zk$@QY-H9Uv3db&vl_CX6#&r6bbAeI$$m&}7$dwNJVc}!2q zcOLVyCdi;Sn1m8S2MysAMW+5=y-# zVX0vfmKrW$sS%PExPCrFJ#R}`&qxXD86{yoqa_XBPZv2i9Piz@#GehmqnPgwgjYgb zSnAzajO8t3aD42OGFGzKWt@cX*^QU%_m~Nivo7yRQt(94YMw}meJ-BI*?FH5aNj3O zxbIUW-1n&xmYODEsShPAHC@7epCRG#`AEW;nG$a6V+pr4OTulep#}0Xi}sYWFaN^6JqNYE|R3Y70O~s9!MpWS|WK2VxPEWlqhRnP6;L; z#?IGD$ugJED6tkcMa`=y!A-;Po)l!QBr~KF`mjjaT zTnQ<6++pM2NZP?bglz_kUcv8aO zdHi0|=3TtO*9@balKznP7(@I~@&TlCfZ0BhrI7B3IVITwu_J#*aum`BF=r*`J?3YL zJ;fS?nDY`o#rlO3y@66A5%a6Wo=4ep<3A)h#)j9}MM{wA{cykjl<;@f{*n|#jGfa< zlBzC$OZaT?vV_kD|B<|it=lz!Me-(O9NPS^WFo|l&wr97kdF~_O|r#fZb*(nRv;!) z5C8DDHTd0Q(o&*)UYAb7XL@m2?a%b$!r#t|OY%6(%ty}_mwO=Fu=S{FE(tjVNtU#L z`~XRj423-Y7-sTNg4K}qx8RpGBws_eKr%^whg?8Cw@Q-7hes@nBtOKCYF0^kkI5!! z4zZ(}UGj>@+%9o^)%M8a|W`z0L5e?Y=g52lib zQb|$CPZ(#kKB}06Bag);JrQGlZwbi|FZHlw2E=-{M`nAoR)Pm)VZ z_$0ZEWR-uGAC(+%c}#K#wr-!?vXc8C_H9*;5-km}C*+Sy?Dryv;ao_9s#Xd;NqNQu z+>0ktNd*ayPelojPbCSD&yy0?{FH>}qOyeNqKbs2o|Z7?83|*mN_hQLlkobfE@7!> zB|Kj>Bzz`QQ^IF5wIqBdQ(MAkGIb<;M)aJ7&xqCB-53)Pi1h#Jb zK1^~QV*5T^l6yuNGeS}nVli(^DnhL99VzMRGD<0Ox`jF&WUnIL(^`rlO+{hrbue%4ogjy z^m3Ud;reVJN?Lk7(oW;^tyL2CTB{}Owbn@3Yps>A*ZN$-UTd9%z1DgOd#w!;_F7*^*lTT+u-DooVXw7W z!d`2OguT{Q345(=682i#CG53!NZ4!bl(5&@C1J1irG&lKZV7v>Jred>dnN3(_DR@l zeI;S9wO_(s>wtv4)0SwEXcv-jX7zm%&f6(W zi5=&w`y!DdG5Oy)w-335b8e5}C=^Q-Q#>JN#8;S4>oQ35a!b0LPP6(e%o$jX8Mczn zIHx-yr6qrDNQ&%-JSw>Xu~LsoGJX+CIZDb?cnJAO2HfjOeqIzl=YK-N8Fv*VoN-rC z!Wnm!B%E>gq=Yl>o|16JU1bSp+*Ofq#@*8ru3h|$gliX9m2mCiY7(wpTwTIB70*gI zr=o_0&*y7O{>1x(c28YPGO2m^o07F9T${I!q~GQ+<~hk|m%5ZRQz0MVIZ{2B&1u#{ z>~6h*%Y^8-AAK`$B?u4&LYRjDrj zS2>-+6{;C?I)%UZ+0{#(PT?ELsZR9d! zq-5x=;obTu$vBAJt&f&W_n0w~g&y;cWR1tX>oOsE7sU2!tmIplagvKJ<5dq=Rhl5- zs!H!kxT?}b30GBmU&1wKCZ&=OBwUqZvV?15Op$O+jHwc?i7`#WH8DPva7~Qq60V6c zL&B|pB;lGEGbLOT<71cjS)QdB{+4K5_*W(nW!+$!PQo!caQyK@I64d3qEDdF3lyCi(OGcJ6) zbGKsncIRG~3CZ?$r(GMA_`dIBsT95u78kw|_LXAzM%aD{XTcrRw(N~C+t$}E@ojyh zQucPIeZR+r@5>xg4BwYIEaCeyM_eW(+xs%Mt)miqU&iE^OStvIxGy-adU)sZorHHT zCndad`QBwhvfa5@%|E!r_v=TM;#|kLaIWJ|is4+xQ>xkKI$F)A71MJUa%0FDiLDi5 zcR*()w$6#kIhS~Qe*XWE_#1^R72a)KoQSuKQ`Pg!|FhT~Yu#1&P22T&6FFAOWC&yz ziN$n>Tw$r8@jNQqc` z{)1$aSbJ_-hxynNYfmP~Z4zrwc1U)KwI?4Wr^MQ0F?YrU`xVq&5oREHDAAfnk|Is8 z7kMR(A*~_#B%L6gAq6C_x!fxm=yIRL+S3E2ip0c@hHd>4+VdbKVq3ooc}QYgPmA+j zOk!KV1@f@Owr)~VVp}&UEwQawSV3C08?j$^I}?*1xK zqT?Z7qtug-LB2ywb;&P~^N^a7e;^kjwI%&Ch4P#v?YE)SlT7oN29gFl z(nPMHo<e;K^#qU>l5CKikk$!eG3{bvXUFz^6OKklO2qbk2jqE)?fU^p zS4nK&AumZ{`wruGPm*;BEpnPm|PvEQicgDT^6|QnMr$GYT@FrGg=uqmj&C zA{(Sc$3k*I7D_fi@gqVXdvHh}b-LnI$X;C7!t-_GQ65CcW$We)H>ru#YiEYc|gv7R00dg`Xw(rxX zCPnfr#k@Ghm~32vZ*#`P&e!!__@<^re?%W%0LSoWi5>Z3kY6NCaz`UoAlD^!E=(c~ z@ehAnqt7Fz1|)4vcupHYk|+_|Rx?OcV%vHik}R=p^@rq?*tSe^No-p~Aa}XMGlx7b zVdjttD<@Y;sHf|PSUp%Vtf#7k^;An$s=8vhDrpS~*C4Ga;W~=7BwPcqwoCko)kzf- z7p@cdoX5nk@VYMH75)%<?3MS#l9E*-%dxmv{@ix`Zv9juv)H71KQ-W-elSriytbA!adRdZmi#oe;AMF@00T z^h=1Dw>J`bBUQ|RgqS-qZZ#-X%#ehb=w`g1k}76+LQGD?yqzj$R6@-6h#8YA=G}yt zUlB7dRm_Bhn7F&1x85cGN!j2Mep2ROEOMhuxOE#x+pK!h zuMg+1ZixxHq)u=T=wuqi&H|h7uujC>l&nB9sh`Dw&e0%rZns5)xO5A{C{K8Oo3b z8Vpf{B2zw^TK9_xMf+54P*_IaQE+4mge_mD+MrTJ+M zKS;!L8*jz&Bkb)2h_}LJG2*RoS%P>gTs}g)6)qnm-U^qch_}M!6U1BL@+so2aQO`J zR=6xfycI6X6Y+DQQT=m7GdW)%8s}Fa8t1=E#MgCetFI7k^);fczEL^F9j$L{HOcZ- z#NVR7*q*6ZN=h%V7|(WAAy=CCJCs&Sl3(qY+g59k;r86U(&WcPD(AB6V(ov#%aIiF z+SjiUQ^;#yzp3QXp|*El+=uNKg!vZh@TzRc{8Fq|BI;3xz2X5{S5|r)wu{!ohu=#b7e$z zu7aq}TOg`)RYY|zNyMKfv^pY>Xmvz2M5`l85v`7>foOHaR+3V!j;NK0wX|qY`(5}1 z%lWqnDJwa`WMDIU^ME9`&Q?%#w3zLYz82$BI}xw5_ulo^>+1YRem1EWTV?&Qeu$l& z_LXwK+gZ-!5feYl`zWT!-(OeB_O-8sw`A-mN#2r?x0wAAe@n);CI=w?mW*9Z4o3Vf z87>VGy(Qx?#NU$fh`qJra71s(XoTo38JYN7GWN2PGx4`%9B6VRTlrfu8ksan#E+rQ zMbn5$kCIxw+DVGNZ{%!WCn4T9TuzmgY8L%WM6>9f5RIap5r3PyJ!s~- zApSOW{~N=u$dcmp-Phfa2W{{E4Uz81qbA;?dPs`Du39Nsh0+tz-&65ThENi>QX@A*$g8k|Ncx526~T;^#tlnM`z-xiHzvWBf1l{ci*N zBK{Zp{Y@^C6t}Qhn&oz&FV?>DD)~}GC0~Z9M{A(#75?+0x|dC?^{?t_dk5W5N?l?D;~%m~fpW855qim;s273DZrkM|@0}ZE_Rh zV}i@gh{l9Lh>r;iE#_84W5R8S#)M3KO!&~Y%EZTnWhQs9m5&MEm<&n8kJ!g{d@i=D z;7-NlB}0jMcxB~W+mZI}BFtTp7~X#IMQ+k(LoNN>cpiY&$!))k8>K+t&aqIgF-Oddv#H@Vm35u}UBgC=8;ekNl~#v(&aCYU^mOfZ>Z@)$DPi|8!Bhv+Q7kNBGz{4Tr*IrN#z$#cO6h}L<2h-jVX zVnnN$mLOX3@)6>zs{HSpK1O_1m9LmuiujrwkNE`gH8~#hDWX+XpCMXRwG7eftmTMS zXMK)n-Od+C?^w690@3=PFA=T(`3m{Vj(n@}x!l*tR!h^rrTPZh$Hf1Z>RaR}lTIcp z5v|z#4$+Fu0-_bjtB|iPYx22*)yQd9vcG?I4bs!Z&+_-kWhR~t{(zjf$bM6pV9$EU zWhVXxr=O7ATj`VL&xqDT{(@*dKwh$~{O<5KGC#`sM^db{#G8xn*G0Db zG>zE<@wLsqRXt?Hn)G`&dm@L%R(l~QhSW!V4X~H9w$HEowXHj zhUtRn%`jb&+V^I-@kxMM*1d|JpE4^g9$Mr=tW?qE&c-Y>y zN=2E~Dc1IjlNj$C`tA5KNpdbaSxi3(^AcAe_t-J?zd5=R(J#(dA^sISui@2_q~y!3 z4zo{u$A|p&rHe^@#8bg&X=!HdJtJ0GE!UR6*CG^ z%tLIYV>lYAWUGeCtZzJw{JVSluJT8a8gpWRo z&TrZe#G8DMwxiYGm&RZyyQ2Lw@fY_ zm&?sUJ~p}1WH$1h$@jLeImkMbwI*|sqOa0@y@k{=@qN9G)QgyTNRx<}k93Hb1<3gk zvk(jjSDRe@ABW0rIzrKiw=wK8~0r z$k!3`F|zG_m6NBfrAS>9FXvO_kcjyVIXYsNBi~sKceMI^j;u5Ba#kQ!zD{GlL~5CM z%-2Z0i1`LNIAT^J$3)C`NZW{6h5U7I8>&uXMvwEcTzNyPkstTgfZ{DjoCt-PF{ zk;9{$waB0-=U1dG%2|g@iJ0G!HzMXwWM!Ad^aVyYu=#J*}Eui92;T1-u3d6cs?a=J-Ri>ZZN95LG>%dF%+ z7PB3)Hukjxve~xkZ!tR}J3gAWYiCJu{u?XjM0*-Vwl?W#Bik-WJ(B@e&aTL}_t;Fb z$?ix)i}Cwu9i*+v5R1vApUHhD^@zF2T}8fOz&*Fxe0B?CTek0};=@TnQ3F(YH9?}Jw7Sa{@Afy|zDx^D- zUzP6bETn!&52SfWPo!%|FXZx&vymYoy^(Pt=OD8}&PBcqIS=_K^{1&48c^;ztc|M~2c_E_w`5i?0^LvQ$=l2oi&mSPlpFc#DKQBR)KYxTMe_o0x zfBpnf{`{GwNcr;~GR6ACQ^c6q{j`<+LiaP`Ii$-k zi06OU4BJ8hjjT3@f^}+9pX8p%kPNikS>29oQ9xhjb}HJco42Bc4OLY>9Xd=~4~x9MYva z;yI*CDdIV#OAW+xNSB(3=a4R2A)Z6JY>jvh=~4^v9MWYQ#B)fOZ4u8QUA7C!epTE) zq>$H2l}xl!Wd~xkQe{U(D^+$vv{GefL@QNlBU-7l3!;@OyCPbtvKyk6D!U_EsZs~g zN|m~ZR;uiQXr)R$L@QPHM6^<6FGMR<>LaJ0oz5-qjcBFHK8RMT?2ELqt$hBu0iu;E z`ypDXvOl7gDhD81sd6Cl+^qE7Vh15wsd6x)l`4lITB*_y(Mpv=5v^1?4ADxJ!x61i zX@qE{N@GMTRgOTkQsqcQD^;2xTB*_$(Mpx(h*qi`g=nS9F^E>G9E)hBN()3QRazoi zsnS})TkqN+TB*`jlGiGN6A`TA~*@rDuPoaMOsDBK4fl@R)(C4Xl2N0h*pN2 zfoSc4q^!i(9{8BhIbzC6eD#P+7esH*>x%g55s&GH`05dt?ug!$br#~QM?9tnqBmvr zMD#YTUWneabT*=QG4)1#^@x{z4&tjvT+T)GX1wzdUp?Y6=Oey)#N`6SSC6>#LG%W> z3q!KsSo?+)@@wrH^c4b`RGMwi@Af2q5i#4Ec+AB}ort*v+26!hi(QHwVX|K(`^!zF zrOCWk?e}h^v&nlV{gF#d{P(ZRk=spt{J8=d6ERmJlOyIT&oD?z;=@oJ_Qp@V&d%qTw=QdA?A z`;c8jMj(fU+>iKsfW4dtkX|8WA=#0CFeF{O@|M*n6JNVB*Jl1l5>wUJm|4syWE+zY zO&$s7MqeBri|C8Pk0S4GXTK&t zZokMQt4(H`j6?KRx5ts%+o$JZJfe5lPC)by+lh$YVfzH4ci29O=pD9`5WT~8GNO0b zK85HVwo?$j!*(j7ci29S=pDAtAbN-Gvxwed`y8To*glU;+0lNhwIlWdGS6g_$u#5} zlPb3I;YH*RlPyhN3YlBf&yMN>+v;WHS(7Cu(?iNiN_I+n%d5zKA+I5N``PP=e-GOG z*c(XWkeNu=kT(&%3wIWxcj3-P^e)^vh~9-e7tyDX5y=q7bE9H%ts;F_5LxU>wPIQ(zf#R^$9XH~XZ-}|1 zX1W!U^S4DkVf*@4F}cAePn&!vDY+-MS|!Q(`=flT)yTxy>U&Aa)Y$4rN$yRPmu#z_ zkcB3%oBR@z)%n+uLjK)-Y@D~XPnmpave4u=l~dCGmo#TvC&~R`F&|jW@5nzUpP2k9 zDXA7){Uym&-Z$N915#?@TWyq-^o*@GNpd^HR-2JMVyj$tyJ;k|8N0<+l_a?XVyntX z)7YvwBs&^aLkjteYo&h|kcqwpSwf7y1(`?mEyyjA!;VOMT{Ywc6Yq7^5oH(t4MJ~4 zA+PMB2GZZQ@;hTqsu8G%YTjW^#)|g*A z+ac$KY>(V#;(txB12VzH$Bmtk`4O`-QizycBt=z6SIHGUZ)*mS1}0mX)CsW}sw2~@ zX-}ke$X-aVkot&!(bBKny%GPSrOQ6ZMr*svzKF7>1|eDB*e|4zKm0iR9oELfOj?`x zh`m2CS_6ClqBXz=B4^rGew+_NdYky_tb>tDBjym~rjUlnU9r`n$biq%zZE(R8D%m4 z#Bn$>-o&3u8X?a{Ok?CVld4w3BakH_M4`DCP4%T!K5_A&9jw?~?r_})7pr<%03BX%lsj!8R{j>uIe9ZgO{?lkFaayl}` zr1~kg>K>V9QfzW2ve2ZbZPf``WpbWLXQWCidu}r6g48j&+@veg%*5N(4QX%UIZ1b< zr-_e0J&?;IrYCYs#GH-XZ{qn+Z)AMLoQu31<(!8siI@wJ-y)_DQnPhhpT5XJCSK=@ zkTwx>339f{b=LMvkt-smA2P&bkj3;zMn%jO$P^Rb*OkZ{5py-NBx0^XzKfXaBt`m* z_yNd1U#5T8pUD9g6<@~Q>Z$=u0+={fd zt$h91U`f7eL^~GbZkX0e0k&Ph_BRij%*5?uAh>$VJX(3~gJ|T}Hw}(82j1L)y%nNxO z`6^^Q@_WbxB;PKr;Y6f<$P-A5kSCFDA(Ie2xlBg-N6b^meIZkjXF{eT?}a>#d>`@* zQstzy&d(xsLY_m83V9ys9r6M)IAj{~c*u((S+?_1NFiTxmfZ_%m3t<8n4I#cJ<$`R z4E7a78SHdqo1Rs2k6Sr2kp5PVkLs@?`Xy>QdTn6YUo$fTgagyZzIYN=OL#@%>0n-7%m7YM_Pnv9_a%_^GF{ennzlUXpU$JqB)|Ekn6kH+n(*& z{9|O8$zLW*k)hpfWwo81PmqUAjx_lc(bs=IL-h5ZWyn<9>KNNiUYh`t&0HKJLyZxGF@eT(QyS&8UM`3`9oeZGL4Y2x>$Rfw*O z)yNQw@n0*}Ai7e%M|7q9fXuM1I$OJbMBWSe3DMQ`GjdwjG;{a`>0{!V)vw67(=AJ} zv-}$}-Na*lmlV}%p5CedK;F8#a;}HfClg({>xt2oyFtP?j5Z?rhS5KWuI^2UuI|l< z<|_Y1G*_8B%MNYw++Ft!%dD(jMM!g#Atsd&&5Kq>G%s2O`P7b>k8H)rFD8DLw?MwK z@#kJU8dZ@$Ov+43Lb4Glk7!8Mo=(QImUq=R2OHnNo>mCsJ42BLYV#w?f8CHme!JdjPsro|6YmLo5YsAR>LEQM zW>4f=6CcO+LWYFYM;;2<8<`Ta527~=?~CXS!wryCww2E{?T4&4@wuk`B}G-wNw4k$ zkQxPJMRq@ldn2BJ@1*+H}Ug+C^7ny`(cQ_JTc0D+9Jw- zPC%6ZoQNp@X@@BPISEnzb26g*=M+TwPkTgn{0@lj_@^SukvbyEkxoODBb|;YM>+#h zj&vrX9H|qc9H}#+9H|SU@AP#=^qszLh`z7a9Z?>27NR_=2ckTxC!##67ot4sY(#lf zZ$$aeIf(L~a}i}b=OM~=&PSB(T!1Ls>4PZSxe!sd(-%>;a}lC!=MqHO&ZUU5oqiIs zo&JcjolKP5T%nk}@{OwyM0v}Ni1L=3 z5alfc5#=p6hm@5lC%FaDv(+F(nar(-@|N2We>|kDx--*T}!$T$@x?4>|R@%ONt0$1^ z_onhBa#@r!3DK{UlO@Tolm4sgQ;7dM>A$*8m6Yh$$!8?VuamyjvxxsX>03P?lAXb6 zA=wvWGtpY37m3jf=SzrYIA2Dtv6j|(*4~7G3^S>3GCicML^G2!ka2N*US+G>8dk}@ zX|v6*h0HDLewaP=TRE>IpW0TQ>CHq|oA?=&tSs7Sa)Gt|&4^i9RBL#ZTvID&7E<4& zxS758AS63JZ-r!8cP7fZ-zG*`_dG;d_k2WI_X0#&_d-Nj_dAHP?spMo-R~jFy5C2X zbuU7cb$=is>;4c?)}4v6?o5<*XQHe-6J_0*DC^EdS$8JNx-(JMor$vUOq6wJqO3a; zW!;Nusj}`RlDu-`rHFFlPY~tCpCZbQmm$iHmm|uJzmSj{uRxR=e=Xrz?>j`ju7If5 ztwPl6RwL?lYY_Fi?-BL79}xAr9})GspAhxBpAq%CUl8@WwGw*WuZVhGChB#WsMlqp zUYCh_T_);vnW)!gqF$GYdR->!b(yHwWujh}iF(~{v{b!rorGTZC!$`r9#OCR3sJB8 z8&R*@h^W_XlF;imBkFZUJ<>U=Z1gJ*De&x>iJm>TAV&A@s)+90CCJe>(zdX%H;?o% z@maoVA#;nyn6$H)>LJ+^Vkx3~ZVlvR+sf~`H6^*FCdW^=)hx)5CLK&_NlGf+mu|JK zB)6-{RaVY+A=%N`Atbw3W}KG2Eqz+w3Axt9pVoIqbT!pR-XE4`O}ikvzIH|S zzB`TC4VhV*uE5zH(Hh`7$iPW4YlJ*xlFS+*`Yw4rMBgRf3(m&Lu`92|KB@3-& zKNtHV3#{!f4UmnOq_Q6}^3qiHN3^>50Oa#1`M{9u>>LzQ$ZNfNCR(q4Fy&~)_#tei z=kA7xp1TiaE9L5kg=Bj_oULB3p8i&w$vY;#!oLyad}iWDqj80Dj-Z^4d#3aAnH2Ap z{>8zO#OODmCWz)hnj)G5X@+PHq&cEFkfRXIfgFu!4&)d_b0Eitl$F%98hX2qL-Zuo z0@0IHOGHmntq?s)wGPRSbDI$RYP_w^^0ld%d|={hQ;#P`BT`#LBhm@T*S3|ffjJTR zBcvTttw|bl5>hARWaLnjR+H@8rpO5402s(#hmhWTeSiCLNJ!CO%Jl z8Zy_!pRG<0DJwb7o?QIMpMhwEJQL{}F`ba>Lpq0K$GJ;LcAPWOaqdctj&nCe$GJPA zr>(OPJ#FJo zO#G`56HKn8oZCC4ee9|VRO9;T_0LCg)lHGXxoJ;$H)~6M4a; zzr_qi-ZJsyGYnZ~GQeW)Mt+Exdy$nkV&7^p!;uXpUd{+f(Z9CUFpIe#Ii`MkM|%+2 zVMKaw8Y#(luyXwO%27yVy%9Z7zM$;|3DlY@M0@|MYS$Xb&ht(@nPk_XZwHVvs~;z#vGiw-~7(TP;CO2>B=^8>2oBDdcr$%tUv_rNrpY_z9vrCqPu4yBs;3BLJIlk$E0IaCQD8HnP@dJf14a@S>+m}bZq)}qu(QSOg!cXh}nn?kC=auCnIJPvM^#cBR@vWzevr;()#3jrgImC zd_xm|E+|4yHu2|zO2~yKo>5muZZz?Xx(ae%#1tdrB4!KZ`G~2C%#WB76CV$^K`sf|78w$<9Wp6od*scK9gyWAJ0gFE?1XIdc)ItUk;6l3BWH%}f?O4{ zEAl|dZph4#-I4D@>L4}7r+cr9Gzi%PIWD9g(qXrBt38oxLiR%Rdt7~_XOy!ya!1HM zA=#+4Z%8(3Wuj550Wli2_Cqvk?T={GIsnnAbs(Zq>mWp<*1?EItwRuvS`876T8APU zwGKlxY8{Sf)M|ui)M|`q)H(vusC6WwQL71}QL8DUQL7oEQL8zkQR^r~qt?-gMy+EI zjatVd8nuo?G-|a#G-|a(G-|a%G-|a*G-|a$G-@4>Xw+(pXw*6Z(WrGIqEV|IqEYK4 zM5ETph(@hb5RF>x5sg|M5RF==A{wU(-DnYXCNB2&O|h7bwV_1bw)I5 zbwM<0bwxC4bwf02bw@O6orP%B>Vas~>WOI7>V;_3Ivdfb)f>^Mbq=CY>s&;m)_I6V zt@9C$S{EQ1wfZ0$wJuD=--hjPTJyKR_C+2r+4&&*OC?0#alRPQ_bV?!^!>_95xwc? zGGwZi{Kss2UkdV?$wrg@iIjg!^W`ChyvoT$;_s2}W_3Q#T5&IOlgTwE4=8s25{W+HyX{A;=0t0RWHh6|l789dZEJ4(Yj}W!uV??c3il`NzAZo>@h+6R(qE;+RMCamNJBG_8rB@HGlpAJ8 zYz6Y-(xPNm?MuYpZ{zO>`U>&)+xUu?uaST4o2|Q5%jLd7^gZ!!ks9_Tua9l-E0JAH zd;};U{@dRQi&=%}x4$)rzm08`#e9$GZEQaxv#b?sE#@cW6BFOpFOuRXA4q5C)*?5( zntqQANxs>-!OBU+-*TWM_G_}0i;mcDh>qAgL`Up*L`UooL`UpTL`Q5rq9e8e(GmL_ z(GmLx(GlB(=!pG`=!oTdB*}3eWU?hP)MAF1REvFO&neYI<`$_ONxJv*ZL6&#rmV!vx!9zZN=`rA$hly={;Qu1w`?UBQ_C{DhuvjgJaxAJe|?1)@pZw&CSOYDRkWn1}E|ISEz6MyQj zjht=bv(~#H{Y-pDXjf#Q$<7Pydx*#glR755BNI*h4pIksC8RF0AY>2Z+mL$5-ywS< z4_7Ttj>cZd6DIzpq58=45wkb)dc^F5%#WCTktGq+09j$;t=JFwHDrIJN=X`X05WDp zI=gZpqIb(5gmkv8{JTpBBj=keGC2gfGGZDcLnG!;MBfxR40+6Ayv~OsFNZXeBz^4d zckK7~L@Jm28e@}?LSC)NM6GB_j9SqQQ7f7wYQ<5AT5)tpS&80idko^O@ca9*h_}M! zxRC6@sr6ztAv_S?$%<;(Jh-r(Ah?o!ze;nim7IxxmF6Ooer)AmrRi_dKN0WGC+E}q#pTFtYtwJB zU4d*@Jw3};B6Ur?hF2j6M9kI5kr8tZ(#php!nH`Jkn50(LIxoIyYR(!AHQBwJilgf z?o+!?Z%9OE(6i;6L(;dp`Bt}RtJ2|5RLCs6G#d%+0Gl zqa;PD&qIjn^GG5Z>%OsLI95`s@p&Ag@%eE?8RK|l=;!ui_musfi!`vdd*(0^(Ou?= zL_8nUzMe$1uStmZH95rcAKTYMcI2Nzd|y95mdi~+bT611l8y6EhZOSa^O>m6KSPZA z{IiJq{Bwx<{PT$V{0kvvCEn-#PBabiKJW4(;(gxbrI4)7FNdTf(ks?>gb`^vF+L*A zw3r!)k4OtmUPXLFT4M4B;vq7f+*ACZ<@$(i_ww9;fA zTlt9eqsjb4d_+3W&gpuS1<2(ln@koW{!YRw)_dPU23pLPChsD{OnkI?4;dHoej*w- zrWe`U7efkp?L8Ci{R3jO_YV>6eQ`)xiSOOd=@P{E?($J0-qO!ZcC|WxjC^lW&txgG z(WHUNCrGs##kqq`K1FJqG&cDRX=KveWEs-Iq@~Gnq_@clCZ8u#{%Cv=lJ>fR7K701 zz9hzb-C&FP3h`cdpUKyV_qx$0D-rK?E(JurZZ+b)?s1D*gQ(YikEqvW;=OLNZIy}l zx))4-Vk_@;ubTXvh@Xoq?Pz#!`31QLh3LF*Ky=>!Ms(gcB0BH?AUf}xLdr_K?cOstBi?qGe-UrHOYUs@XV27S zCEj+IqD1@{PJgm;vI3_PGRMSM;8aEqc`JS1se%l!ySe8Q#mMa@elE5^Mut>PqV&ZQgtcmE&u3I5` zvuiCxZ+6`V(VJbjL;kgr{b+2D?6+0=RJ#Mx#KfO!cSPDo%udJ|5wkOLwTYKp8@W4V z7fJCvli#gB@0v*YBVXq~^4oj4oTQLf4flwcLS8kjhp2{oBC6qDA!Q|ALqGEM5wD@k z-ii3R(7yITw6A>;?W+NzeeH+nXzY*ZXdIA8`L-VzlC?Aw?foEPwD*G%?fsCDtfdVR zwe-+Lyrr7kISkR<&f$pWQW_!KZC#w(Y-g}B(!iw3yY^N|q`isvgd>qpOt!X|CdfA? z%}kmiKgCwfkeaoMb1f{UIkJmMTa%*@ov))29kFAOeQm4Li|mOWX=LIvOUEHCBBlk> zK4MxXQvQ6k3Q6y1`9=2r1POPvHj?Cfqgz?b@rd8iYMZo0{EoJ#Njt>vXf7usx}&v6 z{EoK2#dJV)M>`eK9W4{TqaA8nW#V_VW+tbzmEX}?nw*h{_m*qyX!toj6HyQEgba(A z&d9isE{T*shFwDnd7b4pnju?Jdu}Z{Ns}&|CUQlHT%)#axJZZ<%A#7xCWmuE`~c z_ZFAS5cQV+i1(I{Eaq}Vz2yo-y(N<*>$a^jNwRK}tJx~ax=pT0#CwbK-fI!%z1Jb% z+Yvj%uH^y9pC;W*u1A!0-+*knP1+A{Or(5|x+x^fx--$<2NI*b-;8MQw}fO__aMag z?q~VdknAkqMmZW+GtszuJ29FwABBO=0gz8ncs$GvdM27he}EXxqL(3> zMSl>{Ec!@9v*@Ej%1V3|-RtuZ;D@tMelvg}lybCOW5MC`ZR|Y$ARY z9B948=Pn*ajyCb^^f9D;#Ee6FMa<(!|A-ln42qZu$o&yB5g8XTPaw}m%#+9)5i<#S zH)19u%Od6}WOc+$K{iLsRAk$2)3!g2G%)eDKZ6_-G0!4rM9g!@MG^Bna%052fZQ7~ z(~xly^CB`WVqQYtj+mDbnmIEN%t>zQsPwV|HW&z@N zs~b!fB7V2J-Q+#Q?^Z605Z$dlMEq{$&mfBt-K~}&x?5%9cdNUtaz2lkvJx-HN1HDw zSzE0@wAGi0_Wo6rlkNTMkZkXnsGM&iCfobBl&rn4M6}g+i1uEHa9o(uemBNIJw{6NXxpZ%!*SfQMsLJE0}#+hg|{+Sq!#=jsM zjn^U?jekWn8vll9G+u{jH2xjYX#5AF(fCh9qw#t~qw!yeM&k{LM&rK`jm8@hjmG~V z8jUw08jUw28jb%&G#cl6r!zT)yhh_9M5A#fM5A$KM5A#PMCZLYq^!h8V?WDVAU+zq zR7HF=b}2!8GHM?_iEPKeeO?2Kq#LG47!-wSpL$#S+# zwD(x%Z)D$-czsm;DBae%ap-(J%Y^Bl>0k0Hn3; z%QMCUk@hB@H64WL7x04-{Q`an(lc7o5K#>eMO4GX5Y_N-L^W)LXzf8`L~9R@K(zMY zNJMK7njmULQ$($3hUj)8SQq5dkgkZo+00|QNs>`?n(eE5BISQQ=^0YUs}-536}^a2E6zsL zir$D?aSozZoEuVB;;rzJ|2)K7;c`Br_p@CPl8uLbLJIkvN2Y(foyoo?@7M@=p<;@T zF!A3a`y&3$jv>!wQdV+;#rWPYs<5w%wN+lfO=P0qCN3dHzfD|<=(mY}h<=;skLb6F zD?;pVf#a8vD--cPcH+GB+e23&r`&1ZHM4eIjcj1yX|5xq(EIz(?$ z9e{jkC42w59$655>;}Z&^yo1+CQ|~cGzw^I%d$$HcsA?dT;7xqkq@T_+yG5)N#(qe`p{;c-}YN z58}^yF2fN$>y1GCS#OSAr}raz)_VZavtB0tte5-1zLr9aKkMa9Mk4;Kx3$TrM7&2$ zvE%c)?du`rWfR}~=-4VdJ`by$ytc|jTRl=?t1)b)ds8O5H;pAm_ohb?-J2dmbk7}! z=$`vHqI>RmMEBeYh}Qc}M6}-T2}JAtoOYyN|GZ9&`p+AP`p-;6 zS>>CEvdUQ@*>RqY=s3?oJgf9N&kf1i{#HmKuR3RO2ooo#!L!^9vC5`Gtu3 z{5y#H{JSApyWT_8uJ;l3pGAoJ&j%q{OFsIKEs^qB!Mc$2ySH9)CMx-NVpQ@U zA!Q|6<@IMGUc&`V(r-boM^@SW>!o`3UI=7S#B4x*ikQEVbtaz4Y($E7PUW9O%C}-u zNFlGiXQI7tCPsVz7t!8x=V-N$@7;S{5#oDysg#Jfbk9HIO%X^#6K`o1O=Pi&w`(h;5VAGmfBV+%ZTtHj#Q*l~Op|R8{~J1w*%tA?q4SvSkf!VH zou4M#BgdI|%nnFflj(D8MG(@>WTweZ$fYK}%3^2aE|Z-q*@_@!l8Lu#7i31ruE>Ir z-H=a1c1PBQ)IrAlRV8n2*v-iVKN z&zbCl_*gf?WIx2mI+p_wjdcehKGw~)n1d0Gb%!7t>oW1NZh>u;iH~)QO%7u#AM2Kx z9G-|@Upj`35Fda1omY*KeSa)UR@@zdyky7uIxFW$WVXpblP1XOwUv{z+!T4=V*I=} zlO)gPch0l5J&BZmHa{lBR)$1 zME$S};@9#oR_CsW>eCHTeYz)7{-~Z6l3vTD*2fU8<(|a&wY;sx^g{ev-reME#INOj zOwL98T6Q@f(Y4$M@oV{Di@6ZdwcHocwVa7x%Z+WTO#E6t#^e&V@@x5clS>mRe=T2z z__gDAnSO|0JARkxkLcRD9MQFN1)^*DN<`Q4Rg&ad9%1#lI+60%@^vBUwe0oDMD-a! zjOueeqWatrl3mL;BD$7u3du6qfrsk^uRrM4v>nbb1z8MB*-`OSKrU#GVq+G-G@ zt!_nj*^u7NZ$tJq@#B0u(yC3RT>Izko3=^Ch=?gG@p62my`Pe`)dPsODnqpQ z2cw+qoQ@31_MVB#85J?v-XEgmVRj6=*pVNNJZ#d__?7!I($~aGeg(NT zWO^dyuZtNWg}nBjiT3^~G1~iUi1z+^NLh*R-H-emi0|EHW+HwJZ+IbX#hb_qi}6;> zLdqg$HnKiq<{&jTrrG;kq`rw~?{6VTnfTFo8|e`;54ka9K62zg>78f+vc*4X4HqKY zn0U$WBvSsUz8g}=tDHEQZM6i^Rv#h9 z+TMpBX@7x*bTsi*OiPh-Bjyw2>WKL?k@9W-EToWE$(g9+WyGlD<%mlDyh6!e{135n zTRg$)ruVd!vl3CJ z_Z^~4uMj0?n-FDsn-OJt|4NecKEuve?p*tqE1&6A4oNdTuTLhbPZeTRpJGJy z*&-y%^r|At^h!dqo{&$(kB{ybndpA8B{9`(^z+fC8sg7ii*K=c8^oW#zA!08{Q1jc zY9RjnTpC`H9~v@@cT|<#IHEN?;L^XiaQd~71spO z2+$PK2+&NDi~x(QZ!}M&{0MMNNIC*|eKJvfjwMF*ISx^MT7+aHKubg;K&y~!1Ze#~ zC3{j(Od+o;t_>yYIpz2Y<+M%2&$7-=COSJO5TktTL`3;mJ4E@|Nr>{XlM$WeQxIie z?Ga^P9T3&l=RMuZMMw4Qq#PF=!`_IF z;W>zo;kk&8;dzM8&iROr>II07YM(^PAD;_}IeL?QSJ6hlOinVXX403Kt|oq*FRD<^ z#UX{f%E?6KToN&5C0>pn=SwMBTU~}|tA2>~-apF8uI0-^vb|@ba;}J&Z0}c6vi5!z zqOGn*wD)VGoNVvchGcusMCDu;G1=Y+Q1T!<8lFF2kBs!=Z29vI$W)W9CfPb7lyeKR<>s`UK}c;Aug|T>Atqj*+mJRUUZ2~M&QZ=_q_2rz zxpyGfoA{MG1Q`}FcOqjVW+?JZ#N36eWdD#6NUM^{6q3dem4%J?c?JJ?b$;J!%}H9`!h)9yK0OkD7p}M@>Z3qn<$2qnS;th>KQ~m>RCiR>N!L`>Ul&x>IFnSY8s**^&+Ak^%9~U z^)jL!^$MaMH62lpnt`ZCy^5$uy@seqy^i=ghaK%+@P?%L^(`tT>ndj=`r6K$NbgF; z$(qtk4*0Ut|B|&A~4Zl-=EGeFA(!h@DQe>&gAts+nN|j42 zlN7Ixt(GHy##Ub-RVo+fj0G~*605~jyG9u@+VR{u_$>*^m?S@q@v^<(SIRl*jC=s4am7B z-qOF3D@A};X42N=AEeCWQ@iJGLMEBCx0ubydCwQ+dR4P``yf}CjI%lyooAQ$ zf98lPh1d#qE63N0WTK-{nHU|7Du|9oF`}cf1)`%-717ZsL3A|oh>pgVh>k`zL`S1K zqN7oY=xEeHbTqaKDJ%KH+Wxc6&TWnSZPN2}Tgij$P@JxY+6Fl&WLuiS7=W=+Y~C zqPxRxA!Q{#Li#fZlJgO=gN>rQD<yYfow?TB|k4JRm+afyhCm=dLCx&Flr(H;TpJpC?^w@a~d&PcX2wRbr)wKT6b|KqIDOYLdqBcIwQXB!h3HQ z#MfQ8bPdVc-Yuk%SKBjDox4+x+J07ra(YxKCli&^vqCw&DwK0}g>o`cIlU{Cb54bF z&ZQjvLYIkp%X!48x13MO>W3FpD7g==fY6lJ%%-LelHhe}&0JHN2J> z)$qCsB@d`j^7U+`zM6^p#toFCzItPYa&D?nP9`d6V1;sSu29Y`70Ss(~(euUah@LM7hh*3L9f&_)_|-iG@#hPdJ43RwGc+W--ZN31@1h(X!(kQ5xw}F+ znW&t5h*8_`Mb!4;h}wQ1qPC9+$=ZHDqP9PPsO@DTS=%2BDdaUDm5Jt~MiQg>s8NXK zqaH#uA2k}$eAL5;=A#}#G#@nv(R|ccMDtOPBASnS4AFelI7IVNk0Y9o8jol`Y67D9 zsELT?qnV=A$MfnvZ%4(R|dDkg^h=kMh1c74i8fm!}b*k8*hi@%bp1 zXAz%|a(NE%`6!p?5ucB8c>(eHD3@u7&qukui1>Vz%S(vQN4dNllJ&7yLb5)ViTc=d zV${cGAnIeUBI;wWA?jnVBkE&sAnIc?5%sY*5%sZIi2B%UM15=yqCPekQ6GB?Q6GC7 zQ6HO!sE^G@)W;Se>SGHL^|5yl^|5ym^|ALtvOe}cqCU0=Q6KvNQ6KvdQ6F23sE;i{ z)W<$T)W<$X)W?=0>SLcE>SLdVWPR+jkZcUkL}TwVVl?(HM>O_+j%e)t0@2vJA|xAo zzeF_leuZf4{W>J8^EV+`oikCLza>U9T`LjIbbW_trmKKxrfXG5R_E1-&vf~fy9V)@ zE|>2U@wrN$-|)Ge9}u74@R_b35ue}i8MB`dpWkr#8S(iImtPQ{-*8!r`22>;uZYiY zxcnwbRxEV4*^G6Gl%Gld^M6VqufGRTOd+qo2U#Cm74rIfkiQW9J;;WTvJ(G$5I;VD zBmVawE*nF#v-}U`Xcbc?TE(=9a(oq&m$SJ-Isa0QdT%D`y}9$#*||bqy|)Na@2!Mr zb!cTot3#`Vl$EGI7bEJ=TOc<^W>qyLYkNsZA+NS)qPFKLM{VD-LOInaM{UnUZLdy@ z+FpvN?KMKOcGX1GuB}3{R&4!0#IK8*+gHl=CXE~O^B zA->hXX1QD)ZADA#BKtpHIk)*PThoQ8hV>BDa8C(s-z$;wSMJ^+S=%$wzV;zT``Q=L zz8Xk48v7;UXXjXJm(Oe;fShUKGusDAiZ3&1*V_JG4_SP57)c?oa@w;mmD52b zCwH_Cw$-VU(hJ*H%5@%W?_xquxU+Juhso)Pu7WcVT?J<*;>S?sbV5{4XGG<6K~zrH zMEq!6_r85)$-a!)4SCjnU-mVD-H}s9S5ESTvykRCN^CbQm+OJFGpTLT6Vcv#A=>-d zh{nU-iIg8V&Iu{xRl`hF!*hvI4bMYV!}Af<@B&0N?1QL=7b2=*-$cqEv5OGZ=VC^p&nrNauX|ZjFbKd+mJrU2n9cc(lm~JA)4=QvRrp{f|_8%f5ydl6@oWF+_VG zhiLDQBij4;M9TNo35c$*iHMHs6NrxLlZcM$Bt*w>vV`mXsYJ@RRFd_dOjMsKu~i|j z`b~3|zIGc|`=Gs}FXeGabyl*naWICdD%|O(yR}(3J#9j-r`+L+d6V>o_VpPL75Y=!d zq8h%5sD`r;)o?bV8qP_?d(;i%E9b7QZ0~eJbS~aP9<&&LqJJCtWI`(QkQH`(rrYtE zk8~PUIk(3C24MlB`Yc3LpLZn1=RILxeX?@iMfzAd^G)7Q#IqFb>jOml`Vi5+79-l% z5=oKv^%0_dEltFakB-Kth)VtpQOV0BJh?1Sq8b&4|8N@-L$IwC67Hc^f~fdcS%RqOYY? zLiFbL%80(qQU%eziV^K=3q<>>ifCUYi1w97^wrBP5qeUOtwZ^*ctSgTFA*J9Ma0=wtdM{3!*@GEX_ zq{E)+)wBW7UH^}{0&^}{0(^}{BJ`e9Q<{jeFLe%KsQKRgOi zKRg;yKRgCeKRgyuKRgamKWu@hAGSo)4_hJXhpiFy!#0Te;qi$2VOvD~@B~Et@Wha^ z67PpTXWkC+e&})%;{DL&WW@WS%PENWLzni5_d}Nsi1$O6QxWfnE*%l?hc2ff-Va?) zNAyPMGeWZYs5Aek6!N;~D#q56#C@<+Y*onXp4%DGJ+}*@du~@m_uOuX?z!C&-E+?h zDJ$`NuD7cP;`dyao`~ObU3wvY&viLFBx`%`kV0N};Y@TFK8JGrF6`x;TcMouC`Wh3 zOmt^FpBUX4FF>=TlGHS9vf?~K0pz9CsFE}|UmJrnKyVq&!SOAzh-(vWQLmm%7F zzmRP2{V7Lx>P&Q}zML4{sjonEr@k`8-f&($ZRu5rzD9j@BA&PGzhgSLd<}A>iQlcR zMOOE#l>7E^ds`IJ+G5t23_#Xf%z~rs@9dD%EoQC7+<@%Wzf$gFi@6aQFyG!MGs5O} zkW!0TWHAGgz82HhVs1vxv6B6LGPfYtn)v%<1|fHwcy@6s@`#CN7q=lrwbQq(+>X>V z@!v)VBTI@aB~M#-AbZZQl*9}{cD1d%K6fGwOuRlrk;W$bjkmXRBW+C%F&T#Ry0lX6 z2$Q>!t`>8Y$vw!3(ki)=trhnoV@*yo8ID|FTeY&S?n4HfoMj>#aCDac}zJ58n{pPLLfc^diNWTeS6NYSoUa$`-NMRqrtX!0C# zxXDzL=aIH1(@b7KdYQaxG7aey@*;A%$!v>x3Ar)kW#mqi1s3xPQWi2D85c4GnHut{ zq;#5z{}TEdGT+4Csq(s{_;ZsFY+r9AQa&4eGo+B$SeJ>$x>>|%tecH!teb;qtecBy zta}U5Sob!fv2Grsv2H%1v2FpPv2G!vvF;s2W8J%m#=7?qjdkxM8tWDz8tXnlG}e8H zXsla|Xsla;Xsr7P(OCB}qOoo%qOtB1L}T5jh{n3l5RG-q5RG-q5sh`9BO2?zKs45^ zKs45UiD<0*3ei~iHKMWZ8$@H>w}{5Nm59c=?+}f3t0YAl>sBKg>(+$KEz(%`1ER6+ zM?_=YPl(34pAn69zaSdx)*>3~enm9a{f20)TZd?@`yJ6(_Xnb}?oUKx-Fif0-Cu~t zx($fNy1x;PbsG_lb^jn5>oy@8>oy}A>;6SF*5&&6d{AZk`&o^3MTo|_N{Gg~${{QB z8tbYc8taNBMH=h22q`ORy;GV|mmpn3@<{)XEs-H1)sV3v)sdG&N|BF3Y9Q-v?DdSg zCNgz(`i|eNkkZ}Kn5~gLLTVw+LbgFps*!HBEz%)kwnMH7*&f+7w%P$H3fU1^V;P9o zc_-wNC}(G6dPwb%ELYzpq>!&(y>fDI%4Fv^(={i%5;K0gD!Fc!3GaryVse4W?#R0) zubI?AR-4Q=sf$$EzDn*=%f9wNYMWeXQV(fp;=lFp88Wx%1e3$8pYDb9Gg)9I?~Ocb zvczQHkg}4hJEX^FKcsfZ{z&7H1CXvE2Zm&CqB|(0kY7F}&8Rc^{^>O9KA3WT`Yr80 zhlFHDzTy9rLjK}fX`Y~%LjD>P&l3)1?}JSITpWg!nfSRl966y*`i_o9NG}tAM@M6% z^=FlGFWZ%V1aghVylyc^A~&0OcG?8F*TkPMnj&K(rWx{V#56}{Ma)sihY@o$^0mpu zR-a>#UrfBt$0C~|<~XFZZW_}9+113$X^HF~F|ClMCf@eeNE;JxdmE%<#2k zgr@c+HNoD_jU07nrQGf&Cn9}qtNJGGkO3yX?(5``vXXb~4EnWv3bG=kJ#x2gOFq z6!KeG+kdblRxze~g{>ro{8cwr$qjzmRs=;%AwSq;n8{hl$cX8IOpchI$ZICv=X)U^ zn|Pl;8~Hh6dLu;x88CsvchDO$#uw2 zCO#$%Kq@y($BpZeolLshRyQCAoAfrh5ou#mWundYAm^EEX)+MG&E!pM>CMQaCVtnu z1$o`X?|OrfWhQUiR<|N+Og=QZ4apr^CHINR?Z^%$-V+8Rb4)f`%pH=V0}i%X2$Lbm z(Iyv}3`IJaTy8Q9ImhHWlY2tu7JX+W``XmuNae%Qw>*tNb~o96lFi8=%|ptN?k3(h zMj{uP>}FeyLZ+GQV=@}q_VDzM{|It|iQn8EWEV=4;3}lk4m^@z;^*5i?U#RI7P9 zX1*yQv&ux7)huF^Sq(33XbAS)5?VnQebDh&Ve^#O7Wo*^` z-*g>OCVO>BkLq$_4m0s1|2fh+V!lBBAA5HKZ&TU-jeqZR&d%AiNi>Ke5t1nsg-D^4 z2o<4}LK2Z=Za_*zbW)l~<_wjD3}q%{NTxEBlPD@vBL1K6TG!{Z_CB2G{@vZr^LzgH z@v8mW@AJK`bxrG9>so8=eeQBWV_@oh;3_!Iw0Zxbx^|n>yU)|*I^0wuiquyzm7<_fBhlh z{&iHc0X4PWIVRZ$vEKPp!hP_#g!^FVVN9I3P7>^cVF~xaBnkJyWC{1d6bbjih@@Uq zf6SjH>EizOP!>s^CVot+q^y&uvI|l~lBbm)Q&dtBVll-ejUf9V zS4f_K9E22?3~@16N+!9O5|X7Zrle$>izy}HXD3TbUVp&9=UYZ{7^&=;rK=>_TBn4L zp*&?JU0kYi5`N;cykw$_xmr>l`B=`^NN#aCSCBmKQdN|6KupC8aOFhO8#25$uAE5H zTudd&SQk@SGSkIWkt~HIy&no)FWCag2B|9f31aj74V3T+h}{#fF1hewUv89?f>;S} zl2nJ-+Oq~FdN;(zb0D1|wx8BiOqz?SC7I@8ZkE()i?d2x<-0}F7-CON*OoluVs4dm zb1}C`UT`sWB*R?H?UK=u+tEICCDS3+K6g;U%OOn>Q$ImELhf>smO8boKhrjmEO*jW zvcpL;$qkSCsqU3L;^aQbP$$hLGo0Kn+2Z5@2|o+mLULg{e_Ibqu5$8_q>hu8lBb-s zlJGOdttB72n1>}RowSkcaq@^HZ+pKyZ6)QLJSwT%q>H(5(of29Gc>?+Lko*bh0qI3a zy|9D7t*0rWYay2E8A)r1rRq&dea5BgO9@SJsh*P@cB!7Hq~`1BZ>v8gR10F;dQs9J zV%r)>NuA_U4Wfj;bg2eQPPkMZ7WUk2*kEEjFQ^drFxwb8skz8 zm#lNC-lU}dV9l6nWkdU+Hj^q5Qap5%3xY78ZHic2+) z5?TnEh@8huHbJIACQ?$2mT={}M#7cvS_xOa z>m*$HekI|`cfEuw->)TH`EHPK<-1YBmG34ASH7DiT={O1aOL}rgzMaIC0yrjmDoCW zz+|k%C0yt3kZ_&*orLS$of58d(iD39tK&lwu8t2&xH|q_!qxE+30KE| zNVqya<|J4h|0&_>__&0t;}a6Djzev@%I4}gEaB=nNmAwxe}7Mw@Oo5=ge&NXge&N? zBwRsfk#Gf_D&Yz`D&Yz`tAs1)Y)*pN=4>bF(Rcg%XVigAgxDE%OfkH=l3l{9D>)<_ zKj%m|esW5tA!mCI?Oe%xh+U1(C0Pxz`!cyDKS1oh%z2VOT|Vba&VJF)=K@Jyh~;yk zqB?*fp!Xl7;CL3jehjt-Ydra|lpfk2ixDWI4wP6|3n zOZ^FAN034i-iIwL;aI&~@~2BxM3QTOpHERq87IXgwVYhxBp3GcdLqy+Qf#d6Mc*f+s_6R6c8l zt)L~LH+-onnNbhdQpSfuwImB6MdN~kqz5y%`!aqI~b+rNDjN0&JvrWW=+5v-$`0(ad$7N zi=?KLu9Busx;Y7I(cMXUv>#Rzc5N__w;&!di&dYR+1aC38{KZE{AM`^pWtHrM?nAv-F�#ex=)lX6vV!iXcq?L<# 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%0DtzaKhWg411ohUfXXpUaoxPhFoM_57UY*Rak% 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

    V$L7S+9-UJ;hfi*9XS=iyYXqFr8N^FU8&sb`R|R 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

  1. n3 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

    D3N|% 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

    RDxx~&&t#xf2Z7K%ZpD$JT2H<*R^umo%)Mv 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 z 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

    4Pv~N~oO>CS@Z_FI0MlAcfiu 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 literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/bin/Debug/Windows.xml b/ModernKeePassLib/bin/Debug/Windows.xml new file mode 100644 index 0000000..d5e94e2 --- /dev/null +++ b/ModernKeePassLib/bin/Debug/Windows.xml @@ -0,0 +1,75761 @@ + + + + Windows + + + +

    Provides an app with access to core system functionality and run-time information about its app package. + + + Enables you to detect whether your app is in design mode in a visual designer. + + + Gets a value that indicates whether the process is running in design mode. + True if the process is running in design mode; otherwise false. + + + Provides information about a package. + + + Gets the package for the current app. + The package. + + + Gets the packages on which the current package depends. + The packages on which the current package depends. + + + Gets the description of the package. + The description of the package. + + + Gets the display name of the package. + The display name. + + + Windows Phone only. Returns a token that can be used to retrieve the thumbnail image associated with this application package. + A token that can be used to retrieve the thumbnail image associated with this application package. + + + Gets the package identity of the current package. + The package identity. + + + Windows Phone only. Gets the date the application package was installed on the user's phone. + The date the application package was installed on the user's phone. + + + Gets the location of the installed package. + The location of the installed package. + + + Indicates whether the package is a bundle package. + A Boolean value that indicates whether the package is a bundle package. TRUE indicates that the package is a bundle package; otherwise FALSE. + + + Indicates whether the package is installed in development mode. + A Boolean value that indicates whether the package is installed in development mode. TRUE indicates that the package is installed in development mode; otherwise FALSE. + + + Indicates whether other packages can declare a dependency on this package. + True if other packages can declare a dependency on this package; otherwise false. + + + Indicates whether the package is a resource package. + A Boolean value that indicates whether the package is a resource package. TRUE indicates that the package is a resource package; otherwise FALSE. + + + Windows Phone only. Launches the specified application. + The navigation URI that specifies the page to launch and optional parameters. Use an empty string to specify the default page for the app. + + + Gets the logo of the package. + The logo of the package. + + + Gets the publisher display name of the package. + The publisher display name. + + + Provides package identification info, such as name, version, and publisher. + + + Gets the processor architecture for which the package was created. + The processor architecture. + + + Windows Phone only. Gets the value of the Author attribute for the specified application package. + The value of the Author attribute the specified application package. + + + Gets the family name of the package. + The family name. + + + Gets the full name of the package. + The full name. + + + Gets the name of the package. + The package name. + + + Windows Phone only. Gets the value of the ProductID attribute associated with this application package. + The value of the ProductID attribute associated with this application package. + + + Gets the publisher of the package. + The publisher. + + + Gets the publisher ID of the package. + The publisher ID. + + + Gets the resource ID of the package. + The resource ID. If there is no resource ID for the package, this property is null. + + + Gets the package version info. + The package version information. + + + Manages a delayed app suspending operation. + + + Notifies the operating system that the app has saved its data and is ready to be suspended. + + + Provides data for an app suspending event. + + + Gets the app suspending operation. + The suspending operation. + + + Provides info about an app suspending operation. + + + Gets the time remaining before a delayed app suspending operation continues. + The time remaining. + + + Requests that the app suspending operation be delayed. + The suspension deferral. + + + Represents the package version info. + + + The major version number of the package. + + + The minor version number of the package. + + + The build version number of the package. + + + The revision version number of the package. + + + Manages a delayed app suspending operation. + + + Notifies the system that the app has saved its data and is ready to be suspended. + + + Provides data for an app suspending event. + + + Gets the app suspending operation. + The suspending operation. + + + Provides information about an app suspending operation. + + + Gets the time remaining before a delayed app suspending operation continues. + The time remaining. + + + Requests that the app suspending operation be delayed. + The suspension deferral. + + + Enables an app to handle the activation parameters for the activation contracts, appointments, and extensions supported by Windows. + + + Provides data when an app is activated to add an appointment to the user's calendar. + + + Gets the appointment that is provided to the app when the user tries to add it. + The appointment that is added. + + + Gets the activation type. + The ActivationKind.AppointmentsProvider enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to remove an appointment from the user's calendar. + + + Gets the activation type. + The ActivationKind.AppointmentsProvider enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the appointment that is provided to the app when the user tries to remove it. + The appointment that is removed. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to replace an appointment in the user's calendar. + + + Gets the activation type. + The ActivationKind.AppointmentsProvider enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the appointment that is provided to the app when the user tries to replace it. + The appointment that is replaced. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to show a specified time frame on the user's calendar. + + + Gets the duration of the time frame to be shown. + The duration of the time frame. + + + Gets the activation type. + The ActivationKind.AppointmentsProvider enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the starting date and time of the time frame to be shown. + The starting date and time of the time frame. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides information about the activated event that fires when the user saves or opens a file that needs updates from the app. + + + Gets the letterbox UI of the file picker that is displayed when a file needs updates from the app. + The letterbox UI of the file picker that is displayed when a file needs updates from the app. + + + Gets the activation type. + The ActivationKind.CachedFileUpdater enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets a SplashScreen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Enables a camera settings app to handle the activation parameters for the app. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the object that controls device settings on the camera. + The object that controls device settings on the camera. + + + Gets the object that implements additional extended settings for the camera. + An object implementing extended settings for the camera. + + + Provides data when an app is activated to call a contact. + + + Gets the contact for the call. + The contact for the call. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + A ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the call. + The identifier of the service used for the call. + + + Gets the user identifier of the service used for the call. + The user identifier of the service used for the call. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to map a contact. + + + Gets the address of a contact for the mapping operation. + The address of a contact for the mapping operation. + + + Gets the contact for the mapping operation. + The contact for the mapping operation. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + A ApplicationExecutionState-typed value. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to send a message to a contact. + + + Gets the contact for the message. + The contact for the message. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + A ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the message. + The identifier of the service used for the message. + + + Gets the user identifier of the service used for the message. + The user identifier of the service used for the message. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated because it uses the Contact Picker. + + + Gets the letterbox UI of the contact picker that is displayed when the user wants to pick contacts that are provided by the app. + Gets the letterbox UI of the contact picker that is displayed when the user wants to pick contacts that are provided by the app. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides data when an app is activated to post a contact. + + + Gets the contact for the post. + The contact for the post. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + A ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the post. + The identifier of the service used for the post. + + + Gets the user identifier of the service used for the post. + The user identifier of the service used for the post. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to video call a contact. + + + Gets the contact for the video call. + The contact for the video call. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + A ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the video call. + The identifier of the service used for the video call. + + + Gets the user identifier of the service used for the video call. + The user identifier of the service used for the video call. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides information for a device that invokes AutoPlay. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the device identifier for the device that invoked AutoPlay. + The device identifier for the device that invoked AutoPlay. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action associated with the activated device. + The action associated with the activated device. + + + Provides data when an app is activated because it is the app associated with a file. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the files for which the app was activated. + The StorageFile objects representing the files being passed to the app. + + + Gets the activation type. + One of the enumeration values. + + + Gets the neighboring files of the files for which the app was activated. + The StorageFile objects that represent the neighboring files of the files being passed to the app. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action associated with the activated file. + The action. + + + Provides information about an activated event that fires when the user tries to pick files or folders that are provided by the app. + + + Gets the letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + The letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + + + Gets the activation type. + The ActivationKind.FileOpenPicker enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets a SplashScreen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information about an activated event that fires when the user saves a file through the file picker and selects the app as the location. + + + Gets the letterbox UI of the file picker that is displayed when the user saves a file and selects the app as the save location. + The letterbox UI of the file picker that is displayed when the user saves a file and uses the app as the location. + + + Gets the activation type. + The ActivationKind.FileSavePicker enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets a SplashScreen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides event information when an app is launched. + + + Gets the arguments that are passed to the app during its launch activation. + The list of arguments. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the reason that this app is being activated. + One of the enumeration values. + + + Gets the execution state of the app before this activation. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the ID of the source that was invoked to launch the application. + The ID of the tile. + + + Provides event information when communication to and from the lock screen is required. + + + Gets the arguments that are passed to the app to launch it. + The list of arguments. + + + Gets the UI that handles communication to and from the lock screen. + The UI that handles communication to and from the lock screen. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + The ActivationKind.LockScreenCall enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the identifier of the source that launched the app. + The identifier of the tile. + + + Provides data for the Activated event when it occurs after a picker returns. + + + Gets the reason that this app is being activated. + The reason that this app is being activated. + + + Gets an identifier indicating the picker operation that was performed prior to the activation. + An application-defined identifier indicating the picker operation that was performed prior to the activation. + + + Gets the execution state of the app before this activation. + The execution state of the app before this activation. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The splash screen object. + + + Provides information in response to the event that is raised when print task settings are activated. + + + Gets the configuration information for the print task. + The print task configuration information. + + + Gets the activation type for the print task settings. + The type of activation for the print task. + + + Gets the execution state of the app before the settings were activated. + The execution state of the app. + + + Gets the splash screen object which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides data when an app is activated because it is the app associated with a URI scheme name. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the Uniform Resource Identifier (URI) for which the app was activated. + The Uniform Resource Identifier (URI). + + + Provides event information when a restricted app is launched. + + + Gets the activation type. + The ActivationKind.RestrictedLaunch enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets information about a shared context for the restricted launch. + The object that provides shared context information. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information about the activated event that fires when the user searches the app from the Search charm and the app isn't the main app on screen. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + The ActivationKind.Search enumeration value. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + Gets a SearchPaneQueryLinguisticDetails object that provides info about query text that the user enters through an Input Method Editor (IME). + The object that provides info about query text. + + + Gets the execution state of the app before it was activated. + One of the ApplicationExecutionState enumeration values. + + + Gets the text that the user wants the app to search for. + The text to search for. + + + Gets a SplashScreen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information for an application that is a target for share operations. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets information about data included in a share operation. + An object that includes the data included in a send operation. + + + Gets the splash screen object which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides a dismissal event and image location information for the app's splash screen. + + + Fires when the app's splash screen is dismissed. + + + The coordinates of the app's splash screen image relative to the window. + The coordinates of the splash screen image relative to the window and scaled for the dots per inch (dpi) of the device. + + + Specifies the type of activation. + + + The user launched the app or tapped a content tile. + + + The user wants to search with the app. + + + The app is activated as a target for share operations. + + + An app launched a file whose file type this app is registered to handle. + + + An app launched a URL whose protocol this app is registered to handle. + + + The user wants to pick files that are provided by the app. + + + The user wants to save a file and selected the app as the location. + + + The user wants to save a file that the app provides content management for. + + + The user wants to pick contacts. + + + The app handles AutoPlay. + + + The app handles print tasks. + + + The app captures photos or video from an attached camera. + + + The user launched the restricted app. + + + The user wants to manage appointments that are provided by the app. + + + The user wants to handle calls or messages for the phone number of a contact that is provided by the app. + + + The app launches a call from the lock screen. If the user wants to accept the call, the app displays its call UI directly on the lock screen without requiring the user to unlock. A lock-screen call is a special type of launch activation. + + + Windows Phone only. The application was activated after the completion of a picker. + + + Specifies the execution state of the app. + + + The app is not running. + + + The app is running. + + + The app is suspended. + + + The app was terminated after being suspended. + + + The app was closed by the user. + + + Provides data when an app is activated to show its current view. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Provides common properties for all activation types. + + + Gets the reason that this app is being activated. + One of the enumeration values. + + + Gets the execution state of the app before this activation. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The splash screen object. + + + Provides data when an app is activated. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to add an appointment to the user's calendar. + + + Gets the appointment that is provided to the app when the user tries to add it. + The appointment that is added. + + + Provides data when an app is activated to remove an appointment from the user's calendar. + + + Gets the appointment that is provided to the app when the user tries to remove it. + The appointment that is removed. + + + Provides data when an app is activated to replace an appointment in the user's calendar. + + + Gets the appointment that is provided to the app when the user tries to replace it. + The appointment that is replaced. + + + Provides data when an app is activated to show a specified time frame on the user's calendar. + + + Gets the duration of the time frame to be shown. + The duration of the time frame. + + + Gets the starting date and time of the time frame to be shown. + The starting date and time of the time frame. + + + Provides information about the activated event that fires when the user saves a file that requires content management from the app. + + + The letterbox UI of the file picker that is displayed when a file requires content management from the app. + The letterbox UI of the file picker that is displayed when a file requires content management from the app. + + + Enables a camera settings app to handle the activation parameters for the app. + + + Gets the object that controls device settings on the camera. + The object that controls device settings on the camera. + + + Gets the object that implements additional extended settings for the camera. + An object implementing extended settings for the camera. + + + Provides information about an activated event that fires when the user manages a contact. + + + Gets the action that is associated with the activated contact. + The action that is associated with the activated contact. + + + Provides data when an app is activated to call a contact. + + + Gets the contact for the call. + The contact for the call. + + + Gets the identifier of the service used for the call. + The identifier of the service used for the call. + + + Gets the user identifier of the service used for the call. + The user identifier of the service used for the call. + + + Provides data when an app is activated to map a contact. + + + Gets the address of a contact for the mapping operation. + Represents the address of a contact for the mapping operation. + + + Gets the contact for the mapping operation. + The contact for the mapping operation. + + + Provides data when an app is activated to send a message a contact. + + + Gets the contact for the message. + The contact for the message. + + + Gets the identifier of the service used for the message. + The identifier of the service used for the message. + + + Gets the user identifier of the service used for the message. + The user identifier of the service used for the message. + + + Provides data when an app is activated because it uses the Contact Picker. + + + The letterbox UI of the contact picker that is displayed when the user wants to pick files or folders that are provided by the app. + The letterbox UI of the contact picker that is displayed when the user wants to pick files or folders that are provided by the app. + + + Provides data when an app is activated to post a contact. + + + Gets the contact for the post. + The contact for the post. + + + Gets the identifier of the service used for the post. + The identifier of the service used for the post. + + + Gets the user identifier of the service used for the post. + The user identifier of the service used for the post. + + + Provides information about an activated event that fires when the user manages a contact that is provided by the app. + + + Gets the action that is associated with the activated contacts provider. + The action that is associated with the activated contacts provider. + + + Provides data when an app is activated to video call a contact. + + + Gets the contact for the video call. + The contact for the video call. + + + Gets the identifier of the service used for the video call. + The identifier of the service used for the video call. + + + Gets the user identifier of the service used for the video call. + The user identifier of the service used for the video call. + + + Provides information for a device that invokes AutoPlay. + + + Gets the device identifier for the device that invoked AutoPlay. + The device identifier for the device that invoked AutoPlay. + + + Gets the action associated with the activated device. + The action associated with the activated device. + + + Provides data when an app is activated because it is the program associated with a file. + + + Gets the files for which the app was activated. + The files. + + + Gets the action associated with the activated file. + The action. + + + Provides data when an app is activated because it is the program associated with the neighboring files. + + + Gets the neighboring files of the files for which the app was activated. + The StorageFile objects that represent the neighboring files of the files being passed to the app. + + + Provides information about the activated event that fires when the user tries to pick files or folders that are provided by the app. + + + The letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + The letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + + + Provides information about the activated event that fires when the user saves a file through the file picker and selects the app as the location. + + + The letterbox UI of the file picker that is displayed when the user saves a file and selects the app as the save location. + The letterbox UI of the file picker that is displayed when the user saves a file and selects the app as the location. + + + Provides event information when an app is launched. + + + Gets the arguments that are passed to the app during its launch activation. + The list of arguments. + + + Gets the ID of the source that was invoked to launch the application. + The ID of the tile. + + + Provides event information when communication to and from the lock screen is required. + + + Gets the UI that handles communication to and from the lock screen. + The UI that handles communication to and from the lock screen. + + + Provides data for the Activated event when it occurs after a picker returns. + + + Gets an identifier indicating the type of picker operation that was performed prior to the activation. + An identifier indicating the type of picker operation that was performed prior to the activation. + + + Provides event information about whether an app is in pre-launch state. + + + Gets an indication about whether a pre-launch has been activated. + Indicates whether a pre-launch has been activated. TRUE indicates activated; otherwise, FALSE. + + + Provides information in response to the event that is raised when print task settings are activated. + + + Gets the configuration information for the print task. + The print task configuration information. + + + Provides data when an app is activated because it is the program associated with a protocol. + + + Gets the Uniform Resource Identifier (URI) for which the app was activated. + The Uniform Resource Identifier (URI). + + + Provides event information when a restricted app is launched. + + + Gets information about a shared context for the restricted launch. + The object that provides shared context information. + + + Provides information about the activated event that fires when an app is used to search. + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + The text that the user wants the app to search for. + The text to find. + + + Provides information about the activated event that fires when an app is used to query text. + + + Gets a SearchPaneQueryLinguisticDetails object that provides info about query text that the user enters through an Input Method Editor (IME). + The object that provides info about query text. + + + Provides information for an application that is a target for share operations. + + + Contains information about data included in a share operation. + An object that includes the data included in a send operation. + + + Contains the Appointment class and related support classes. An Appointment represents an appointment in a calendar. + + + Represents an appointment in a calendar. This class is used when an app is activated using the AppointmentsProvider value for ActivationKind, as a value for AppointmentInformation properties. + + + Gets or sets a value that indicates whether the appointment will last all day. + A Boolean value that indicates whether the appointment will last all day. TRUE indicates that the appointment will last all day; otherwise FALSE. + + + Initializes a new instance of the Appointment class. + + + Gets or sets a value that indicates the busy status for a participant of an appointment. + A AppointmentBusyStatus-typed value that indicates the busy status for a participant of an appointment. + + + Gets or sets a string value. The string contains extended details that describe the appointment. + The extended details that describe the appointment. + + + Gets or sets a timespan that represents the time duration of the appointment. + A timespan that represents the duration of the appointment. The duration can't be a negative value. + + + Gets the list of participants for the appointment. + The list of participants for the appointment. + + + Gets or sets a string that communicates the physical location of the appointment. + The location of the appointment. + + + Gets or sets the organizer of the appointment. + A AppointmentOrganizer object that indicates the organizer of the appointment. + + + Gets or sets the object that describes when and how often the appointment occurs. + A AppointmentRecurrence object that describes when and how often the appointment occurs. + + + Gets or sets a timespan value. The value declares the amount of time to subtract from the StartTime, and that time used as the issue time for a reminder for an appointment. A null value indicates that the appointment will not issue a reminder. + A timespan value, or null to issue no reminder. + + + Gets or sets a value that indicates the sensitivity of the appointment. + A AppointmentSensitivity-typed value that indicates the sensitivity of the appointment. + + + Gets or sets the starting time for the appointment. + The date and time to use as the starting time for the appointment. + + + Gets or sets a string that communicates the subject of the appointment. + The subject of the appointment. + + + Gets the Uniform Resource Identifier (URI) for the appointment. + The URI for the appointment. + + + Represents a participant of an appointment in a calendar. + + + Gets or sets a string that communicates the address of a participant of an appointment. + The address of a participant of an appointment. + + + Initializes a new instance of the AppointmentInvitee class. + + + Gets or sets a string that communicates the display name of a participant of an appointment. + The display name of a participant of an appointment. + + + Gets or sets a value that indicates the response from a participant concerning an appointment invitation. + A AppointmentParticipantResponse-typed value that indicates the response from a participant concerning an appointment invitation. + + + Gets or sets a value that indicates the role of a participant concerning an appointment invitation. + A AppointmentParticipantRole-typed value that indicates the role of a participant concerning an appointment invitation. + + + Interacts with the user's Appointments provider from app data. Call static methods to display provider-specific UI so that the user can perform tasks. + + + Shows the Appointments provider Add Appointment UI, to enable the user to add an appointment. + When this method completes, it returns a String object that represents the appointment. This serves as an appointment identifier for future reference when updating or removing. If the appointment identifier returned is an empty string, the appointment was not added to the Appointments provider app. + The object representing the information for the appointment to add. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Add Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Add Appointment UI displays around the button, not overlapping it. + The Placement that describes the preferred placement of the Add Appointment UI. + + + Shows the Appointments provider Add Appointment UI, to enable the user to add an appointment. + When this method completes, it returns a String object that represents the appointment. This serves as an appointment identifier for future reference when updating or removing. If the appointment identifier returned is an empty string, the appointment was not added to the Appointments provider app. + The object representing the information for the appointment to add. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Add Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Add Appointment UI displays around the button, not overlapping it. + + + Shows the Appointments provider Remove Appointment UI, to enable the user to remove an appointment. + When this method completes, it returns a Boolean value that indicates whether the Appointment provider app removed the appointment. + The appointment identifier. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync call. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Remove Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Remove Appointment UI displays around the button, not overlapping it. + + + Shows the Appointments provider Remove Appointment UI, to enable the user to remove an appointment. + When this method completes, it returns a Boolean value that indicates whether the Appointment provider app removed the appointment. + The appointment identifier. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync call. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Remove Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Remove Appointment UI displays around the button, not overlapping it. + The Placement that describes the preferred placement of the Remove Appointment UI. + + + Shows the Appointments provider Remove Appointment UI, to enable the user to remove an appointment. + When this method completes, it returns a Boolean value that indicates whether the Appointment provider app removed the appointment. + The appointment identifier. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync call. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Remove Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Remove Appointment UI displays around the button, not overlapping it. + The Placement that describes the preferred placement of the Remove Appointment UI. + The start date and time of the appointment instance to remove. + + + Shows the Appointments provider Replace Appointment UI, to enable the user to replace an appointment. + When this method completes, it returns a String object that represents the appointment. This serves as an appointment identifier for future reference when updating or removing. If the appointment identifier returned is an empty string, the appointment was not replaced in the Appointments provider app. + The appointment identifier of the current appointment. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync or ShowReplaceAppointmentAsync call. + The object representing the information for the appointment to replace the current appointment. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Replace Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Replace Appointment UI displays around the button, not overlapping it. + + + Shows the Appointments provider Replace Appointment UI, to enable the user to replace an appointment. + When this method completes, it returns a String object that represents the appointment. This serves as an appointment identifier for future reference when updating or removing. If the appointment identifier returned is an empty string, the appointment was not replaced in the Appointments provider app. + The appointment identifier of the current appointment. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync or ShowReplaceAppointmentAsync call. + The object representing the information for the appointment to replace the current appointment. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Replace Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Replace Appointment UI displays around the button, not overlapping it. + The Placement that describes the preferred placement of the Replace Appointment UI. + The start date and time of the appointment instance to replace. + + + Shows the Appointments provider Replace Appointment UI, to enable the user to replace an appointment. + When this method completes, it returns a String object that represents the appointment. This serves as an appointment identifier for future reference when updating or removing. If the appointment identifier returned is an empty string, the appointment was not replaced in the Appointments provider app. + The appointment identifier of the current appointment. This is typically obtained from the async return value of a previous ShowAddAppointmentAsync or ShowReplaceAppointmentAsync call. + The object representing the information for the appointment to replace the current appointment. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the Replace Appointment UI, not within that rectangular area. For example, if an app uses a button to show the Rect, pass the Rect of the button so the Replace Appointment UI displays around the button, not overlapping it. + The Placement that describes the preferred placement of the Replace Appointment UI. + + + Shows the Appointments provider app's primary UI. This typically displays a time frame from an appointments calendar. + When this method returns, it does not return a result. On completion, the AsyncActionCompletedHandler specified by get_Completed / Completed is invoked. + A date and time object that specifies the beginning of the time frame that the Appointments provider app should display. + A timespan that hints to the Appointments provider app how long the time frame shown should be. + + + Represents the organizer of an appointment in a calendar. + + + Gets or sets a string that communicates the address of the organizer of an appointment. + The address of the organizer of an appointment. + + + Initializes a new instance of the AppointmentOrganizer class. + + + Gets or sets a string that communicates the display name of the organizer of an appointment. + The display name of the organizer of an appointment. + + + Represents when and how often an appointment occurs. + + + Initializes a new instance of the AppointmentRecurrence class. + + + Gets or sets the day on which an appointment occurs. + The day on which an appointment occurs. + + + Gets or sets all the days of the week on which an appointment occurs. + A combination of AppointmentDaysOfWeek-typed values that are combined by using a bitwise OR operation. The resulting value specifies all the days of the week on which an appointment occurs. + + + Gets or sets the interval on which an appointment occurs. + The interval on which an appointment occurs. + + + Gets or sets the month on which an appointment occurs. + The month on which an appointment occurs. + + + Gets or sets the number of times an appointment recurs. + The number of times an appointment recurs. + + + Gets or sets a value that indicates the frequency for which the appointment occurs. + A AppointmentRecurrenceUnit-typed value that indicates the frequency for which the appointment occurs. + + + Gets or sets the date and time until which an appointment is valid. + The date and time until which an appointment is valid. + + + Gets or sets a value that indicates the week of the month for which the appointment occurs. + A AppointmentWeekOfMonth-typed value that indicates the week of the month for which the appointment occurs. + + + Specifies the busy status for a participant of an appointment. + + + The participant is busy and so can't attend the appointment. + + + The participant might be able to attend the appointment. + + + The participant is free and so can attend the appointment. + + + The participant is out of office. + + + The participant is working elsewhere. + + + Specifies the days of the week on which an appointment occurs. + + + The appointment doesn't occur on any days of the week. + + + The appointment occurs on Sunday. + + + The appointment occurs on Monday. + + + The appointment occurs on Tuesday. + + + The appointment occurs on Wednesday. + + + The appointment occurs on Thursday. + + + The appointment occurs on Friday. + + + The appointment occurs on Saturday. + + + Specifies the response from a participant concerning an appointment invitation. + + + No response. + + + The participant might attend the appointment. + + + The participant accepted the appointment invitation. + + + The participant declined the appointment invitation. + + + The response is unknown. + + + Specifies the role of an item concerning an appointment invitation. + + + The participant's attendance at the appointment is required. + + + The participant's attendance at the appointment is optional. + + + The item is a resource that is needed at the appointment. + + + Specifies the frequency for which an appointment occurs. + + + Appointment occurs daily. + + + Appointment occurs weekly. + + + Appointment occurs monthly. + + + Appointment occurs monthly on a particular day of the month. + + + Appointment occurs yearly. + + + Appointment occurs yearly on a particular day of the year. + + + Specifies the sensitivity of an appointment. + + + The appointment is publicly available to view. + + + The appointment is private and can't be viewed publicly. + + + Specifies the week of the month for which the appointment occurs. + + + The appointment occurs on the first week of the month. + + + The appointment occurs on the second week of the month. + + + The appointment occurs on the third week of the month. + + + The appointment occurs on the fourth week of the month. + + + The appointment occurs on the last week of the month. + + + Provides info about a participant of an appointment in a calendar. + + + Gets or sets a string that communicates the address of a participant of an appointment. + The address of a participant of an appointment. + + + Gets or sets a string that communicates the display name of a participant of an appointment. + The display name of a participant of an appointment. + + + Defines operations classes for add appointment and remove appointment requests through activations that an appointments provider interacts with. + + + Represents the object associated with retrieving the operation of the appointments provider. + + + Gets the add-appointment action that the appointments provider performs. + The add-appointment action + + + Gets the remove-appointment action that the appointments provider performs. + The remove-appointment action + + + Gets the replace-appointment action that the appointments provider performs. + The replace-appointment action + + + Gets the show-time-frame action of an appointment that the appointments provider performs. + The show-time-frame action of an appointment + + + Represents the operation object associated with adding a new appointment. Appointments provider apps use this info to perform the operation. + + + Gets the Appointment info from the activation request. + An instance of the Appointment class that represents the specific info for the appointment to add. + + + Dismisses the UI for the operation that adds a new appointment. + + + Call this method to inform the activating app that the operation was canceled by the user. + + + Call this method to inform the activating app that the operation was completed successfully. Provide a unique appointment ID as the itemID parameter. + A unique appointment ID that the activating app can later use to remove this appointment if necessary. + + + Call this method to inform the activating app that the operation could not be completed because of a provider error. + A string containing information about the error. + + + Gets the package family name of the app that is requesting the operation. + The package family name. + + + Represents the operation object associated with removing an appointment. Appointments provider apps use this info to perform the operation. + + + Gets the unique identifier of the appointment to remove. + The unique identifier of the appointment to remove. + + + Dismisses the UI for the operation that removes an appointment. + + + Gets the start date and time of the appointment instance to remove. + The start date and time of the appointment instance to remove. + + + Call this method to inform the activating app that the operation was canceled by the user. + + + Informs the activating app that the operation was completed successfully. + + + Call this method to inform the activating app that the operation could not be completed because of a provider error. + A string containing information about the error. + + + Gets the package family name of the app that is requesting the operation. + The package family name. + + + Represents the operation object associated with replacing an appointment. Appointments provider apps use this info to perform the operation. + + + Gets the unique identifier of the appointment to replace. + The unique identifier of the appointment to replace. + + + Gets the Appointment info from the activation request. + An instance of the Appointment class that represents the specific info for the appointment to replace the current appointment. + + + Dismisses the UI for the operation that replaces an appointment. + + + Gets the start date and time of the appointment instance to replace. + The start date and time of the appointment instance to replace. + + + Informs the activating app that the operation was canceled by the user. + + + Informs the activating app that the operation was completed successfully. + A unique appointment ID that the activating app can later use to remove this appointment if necessary or to replace it again. + + + Informs the activating app that the operation couldn't be completed because of a provider error. + A string containing info about the error. + + + Gets the package family name of the app that is requesting the operation. + The package family name. + + + Enables an app to schedule background tasks to run app code even when the app is suspended. + + + Requests permission from the user to set alarms, and retrieves the status of user permission for the app to set alarms. + + + Retrieves the status of user permission for the app to set alarms. + Indicates whether the user has granted permission to set alarms. + + + Requests permission from the user to set alarms. + This method returns an AlarmAccessStatus value when it completes. + + + Provides methods that let an app ask to be added to the lock screen's apps list or query its current access to background activity and badge updates on the lock screen. + + + Gets the ability of the calling lock screen app to perform background activity and update its badge. + One of the enumeration values that specify the app's capabilities on the lock screen. + + + Gets the ability of a specific lock screen app to perform background activity and update its badge. + One of the enumeration values that specify the app's capabilities on the lock screen. + The Package Relative Application ID (PRAID) of the app whose capabilities are being retrieved. The specified app must be in the same package as the calling app. + + + Removes the calling app from the lock screen's apps list. + + + Removes a specific app from the lock screen's apps list. + The Package Relative Application ID (PRAID) of the app to be removed from the lock screen. The specified app must be in the same package as the calling app. + + + Presents the user with a dialog box that requests that the calling app be added to the lock screen. + The object, bound to the calling app, that is used to request that the app be added to the lock screen's apps list. When the operation completes, it returns a member of the BackgroundAccessStatus enumeration that specifies the outcome. + + + Presents the user with a dialog box that requests that the specified app be added to the lock screen. + The object, bound to the app specified by applicationId, that is used to request that the app be added to the lock screen's apps list. When the operation completes, it returns a member of the BackgroundAccessStatus enumeration that specifies the outcome. + The Package Relative Application ID (PRAID) of the app to be added to the lock screen. The specified app must be in the same package as the calling app. + + + Represents a background task to be registered with the system. + + + Adds a condition to a background task. + An instance of a SystemCondition object. + + + Creates an instance of the BackgroundTaskBuilder class. + + + Gets or sets the name of a background task. + A description of the background task. + + + Indicates whether the background task will be canceled if at least one of its required conditions is no longer met. + Whether or not the background task will be canceled if at least one of its required conditions is no longer met. + + + Registers a background task with the system. + An instance of a BackgroundTaskRegistration object. + + + Sets the event trigger for a background task. + An instance of an event trigger object such as a SystemTrigger, TimeTrigger, or NetworkOperatorNotificationTrigger. + + + Gets or sets the class that performs the work of a background task. + The name of an application-defined class that performs the work of a background task. + + + Represents completion information for a task at the time a completion notification is sent. + + + Throws an exception if the background task completed event has reported an error. + + + Gets the identifier of the background task instance for this completion status notification. + A unique identifier generated by the system when it creates the background task instance. + + + Represents a background task deferral returned by the IBackgroundTaskInstance.GetDeferral method. + + + Informs the system that an asynchronous operation associated with a background task has finished. + + + Represents progress information for a task at the time a progress update notification is sent. + + + Gets the identifier of the background task instance for this progress status notification. + A unique identifier generated by the system when it creates the background task instance. + + + Gets progress status for a background task instance. + A value defined by the application to indicate the task's progress. + + + Represents a background task that has been registered with the system. + + + Enumerates an application's registered background tasks. + A view into a map of registered background tasks consisting of the task ID and an IBackgroundTaskRegistration interface. + + + Attaches a completed event handler to the registered background task. + + + Gets the name of a registered background task. + The description specified with BackgroundTaskBuilder::Name when the task was created. + + + Attaches a progress event handler to the registered background task. + + + Gets the identifier of a registered background task. + The unique identifier for the task. This identifier is generated by the system when the task is registered. + + + Cancels the registration of a registered background task. + True if currently running instances of this background task should be canceled. If this parameter is false, currently running instances are allowed to finish. Canceled instances receive a Canceled event with a cancellation reason of Abort. + + + Retrieves a hint about resource availability for background tasks. Background tasks can use this hint to decide how much work to do when they are activated. + + + Retrieves a hint about resource availability for background tasks. + A hint about background resource availability. A background task can use this hint to decide how much work to do when it is activated. + + + Represents an event that an application can trigger to initiate a long-running update (firmware or settings) of a device. + + + Constructor for DeviceServicingTrigger. Takes no parameters. + + + Triggers the device background task (settings or firmware update) and returns a DeviceTriggerResult indicating success or failure of the trigger request. Takes the DeviceInformation.ID string and an optional estimated time the device background task will run. + This method returns a DeviceTriggerResult when it completes asynchronously. + The DeviceInformation.ID of the device the background task will sync with. + Optional value. The expected duration of the background settings update or background firmware update. Set this value to zero if an appropriate time estimate cannot be determined. + + + Triggers the device background task (settings or firmware update) and returns a DeviceTriggerResult indicating success or failure of the trigger request. Takes the DeviceInformation.ID string, an optional estimated time the device background task will run, and an optional app-specific string passed to the background task identifying which device operation to perform. + This method returns a DeviceTriggerResult when it completes asynchronously. + The DeviceInformation.ID of the device the background task will sync with. + Optional value. The expected duration of the background settings update or background firmware update. Set this value to zero if an appropriate time estimate cannot be determined. + Optional value. An app-specific string passed to the background task identifying which device operation to perform. + + + Represents an event that an application can trigger to initiate a fixed-length, long-running operation (content transfer, sync) with a device. + + + Constructor for DeviceUseTrigger. Takes no parameters. + + + Triggers the device background task (sync or content transfer) and returns a DeviceTriggerResult indicating success or failure of the trigger request. Takes the DeviceInformation.ID of the device the background task will sync with. + This method returns a DeviceTriggerResult when it completes asynchronously. + The DeviceInformation.ID of the device the background task will sync with. + + + Triggers the device background task (sync or content transfer) and returns a DeviceTriggerResult indicating success or failure of the trigger request. Takes the DeviceInformation.ID of the device the background task will sync with, and an optional app-specific string passed to the background task identifying which device operation to perform. + This method returns a DeviceTriggerResult when it completes asynchronously. + The DeviceInformation.ID of the device the background task will sync with. + Optional value. A string specified by your app and passed to the background task, identifying which device operation to perform. + + + Represents a location event that triggers a background task. This is used for Geofencing. + + + Initializes a new instance of a location event trigger. + The type of location event for this trigger. + + + The type of location event for this trigger. + The type of location event for this trigger. + + + Represents a maintenance trigger. + + + Gets the interval of a maintenance trigger. + The number of minutes to wait before scheduling the background task. The system schedules the task within 15 minutes after FreshnessTime elapses. + + + Initializes a new instance of a maintenance trigger. + The number of minutes to wait before scheduling the background task. The system schedules the task within 15 minutes after freshnessTime elapses. + True if the maintenance trigger is used once; false if it is used each time the freshnessTime interval elapses. + + + Gets whether the maintenance trigger is used only once or each time the FreshnessTime interval elapses. + True if the maintenance trigger is used once; false if it is used each time the FreshnessTime interval elapses. + + + Represents a mobile network operator hotspot authentication trigger. + + + Initializes a new instance of a mobile network operator hotspot authentication trigger. + + + Represents a mobile network operator notification trigger. + + + Gets the account identifier for the mobile network operator notification trigger. + A unique identifier for the mobile broadband account. + + + Initializes a new instance of a mobile network operator notification. + Specifies the unique identifier of the mobile broadband account. + + + Represents an object that invokes a background work item on the app in response to the receipt of a raw notification. + + + Invokes a background work item on the app in response to the receipt of a raw notification. + + + Invokes a background work item on a specified app in response to the receipt of a raw notification. + The app's Package Relative Application ID (PRAID). The specified app must be in the same package as the calling app. + + + Represents a system condition that must be in effect for a background task to run. + + + Gets the condition type of a system condition. + The condition that must be in effect for the background task to run. + + + Initializes a new instance of a system condition. + Specifies the condition type. + + + Represents a system event that triggers a background task to run. + + + Gets whether a system event trigger will be used only once. + True if the system event trigger will be used only once; false if it will be used every time the event occurs. + + + Gets the system event type of a system event trigger. + A system event type. + + + Initializes a new instance of a system event trigger. + Specifies the system event type. + True if the system event trigger will be used once; false if it will be used every time the event occurs. + + + Represents a time event that triggers a background task to run. + + + Gets the interval of a time event trigger. + Specifies the number of minutes to wait before scheduling the background task. The system schedules the task within 15 minutes after FreshnessTime elapses. + + + Gets whether the time event trigger will be used only once or each time the FreshnessTime interval elapses. + True if the time event trigger will be used once; false if it will be used each time the FreshnessTime interval elapses. + + + Initializes a new instance of a time event trigger. + Specifies the number of minutes to wait before scheduling the background task. The system schedules the task within 15 minutes after freshnessTime elapses. If the OneShot property is false, freshnessTime specifies the interval between recurring tasks.If FreshnessTime is set to less than 15 minutes, an exception is thrown when attempting to register the background task. + True if the time event trigger will be used once; false if it will be used each time freshnessTime elapses. + + + Represents a method that handles the cancellation of a background task. + The background task instance that was cancelled. + The reason the background task instance was cancelled. + + + Represents a method that handles completion events for a background task. + The background task. + Completion information for the task at the time the notification is sent. + + + Represents a method that handles progress update events for a background task. + The background task. + Progress information for the task at the time the notification is sent. + + + Indicates whether the user has given permission for the app to set alarms. + + + The user has not responded to a permission request for the app to set alarms. + + + The user has given permission for the app to set alarms, and alarms can wake up the computer from standby. + + + The user has given permission for the app to set alarms, but the alarms cannot wake up the computer from standby. + + + The user has denied permission for the app to set alarms. + + + Specifies an app's ability to perform background activity and display a tile on the lock screen. + + + The user has not selected "allow" or "don't allow" in the dialog box, or dismissed it without making a choice. The app cannot perform background activity in this state. However, it can request permission from the user to do so through the RequestAccessAsync method. + + + The user chose "allow" in the dialog box. The app is added to the lock screen, can set up background tasks, and, if it has the capability, can use the real-time connectivity (RTC) broker. This means that the app can function while the device is in the connected standby state. After this value has been returned, subsequent calls to the RequestAccessAsync method do not present the dialog box to the user. + + + The user chose "allow" in the dialog box. The app is added to the lock screen and can set up background tasks, but it cannot use the real-time connectivity (RTC) broker. This means that the app might not function while the device is in connected standby. Note that apps that do not specify RTC in their manifest will always demonstrate this behavior. After this value has been returned, subsequent calls to the RequestAccessAsync method do not present the dialog box to the user. + + + The user chose "don't allow" in the dialog box. The app is not added to the lock screen. After this value has been returned, subsequent calls to the RequestAccessAsync method do not present the dialog box to the user. + + + Indicates the type of throttle count to check for in a GetThrottleCount request. + + + Indicates a request for all throttle counts (CPU and network). + + + Indicates a request for CPU throttle count. + + + Indicates a request for network throttle count. + + + Indicates the current cost of doing background work. Used as a hint to background tasks about how much work they can do. + + + Background resource usage is low. The background task can do work. + + + Background resources are in use, but the background task can do some work. + + + Background resources are under heavy use and the background task should not do any work. + + + Specifies the reasons for cancelling a background task. + + + The background task was canceled by the application. This can happen for one of the following four reasons: +The task is considered an idle task. This means that the background task is still running, but without doing anything - for example, a JavaScript task that does not call the close() function.The background task uses the MaintenanceTrigger and the system transitions to DC (battery power).The app unregisters the background task, in which case the task is cancelled if it is currently running.The app that registered the background task is uninstalled while the task is running. + + + The background task was canceled because the application is about to be terminated due to system policy. The application should save any state that will be needed when the application restarts. + + + The background task was canceled because the user has logged off the system. + + + The background task was canceled because the application was updated. + + + The background task was canceled because it was active, but not doing any work. + + + The background task was canceled because the application was uninstalled. + + + The background task was canceled because one or more of its required conditions is no longer met. + + + The background task was cancelled because of system policy. + + + The background task was cancelled because the device entered the quiet hours period. + + + Indicates whether the device background task operation was allowed or denied, and if it was denied specifies the reason. + + + The device background task was triggered. + + + The device background task was denied by the user. + + + The device background task was denied due to system policy. + + + The device background task cannot run because the battery is low. + + + Indicates a type of location event for a location background task trigger. + + + Indicates a geofence location trigger. + + + Specifies a system condition that must be in effect for a background task to run. If a background task with a system condition is triggered, the task will not run until the condition is met. + + + Not a valid condition type. + + + Specifies that the background task can only run when the user is present. If a background task with the UserPresent condition is triggered, and the user is away, the task will not run until the user is present. + + + Specifies that background task can only run when the user is not present. If a background task with the UserNotPresent condition is triggered, and the user is present, the task will not run until the user becomes inactive. + + + Specifies that the background task can only run when the Internet is available. If a background task with the InternetAvailable condition is triggered, and the Internet is not available, the task will not run until the Internet is available again. + + + Specifies that the background task can only run when the Internet is not available. If a background task with the InternetNotAvailable condition is triggered, and the Internet is available, the task will not run until the Internet is unavailable. + + + Specifies that the background task can only run when the user's session is connected. If a background task with the SessionConnected condition is triggered, and the user session is not logged in, the task will run when the user logs in. + + + Specifies that the background task can only run when the user's session is disconnected. If a background task with the SessionDisconnected condition is triggered, and the user is logged in, the task will run when the user logs out. + + + Specifies that the background task can only run when a free (non-metered) network connection is available. + + + Specifies that the background task can only run when the cost to do background work is low. + + + Specifies the system events that can be used to trigger a background task. + + + Not a valid trigger type. + + + The background task is triggered when a new SMS message is received by an installed mobile broadband device. + + + The background task is triggered when the user becomes present.An app must be placed on the lock screen before it can successfully register background tasks using this trigger type. + + + The background task is triggered when the user becomes absent.An app must be placed on the lock screen before it can successfully register background tasks using this trigger type. + + + The background task is triggered when a network change occurs, such as a change in cost or connectivity. + + + The background task is triggered when a control channel is reset.An app must be placed on the lock screen before it can successfully register background tasks using this trigger type. + + + The background task is triggered when the Internet becomes available. + + + The background task is triggered when the session is connected.An app must be placed on the lock screen before it can successfully register background tasks using this trigger type. + + + The background task is triggered when the system has finished updating an app. + + + The background task is triggered when a tile is added to the lock screen. + + + The background task is triggered when a tile is removed from the lock screen. + + + The background task is triggered when the time zone changes on the device (for example, when the system adjusts the clock for daylight saving time).This trigger only fires if the new time zone actually changes the system time. + + + The background task is triggered when the Microsoft account connected to the account changes. + + + The background task is triggered when the cost of background work changes. + + + The background task is triggered when the device's NFC state changes. + + + Used to enforce the system condition object type. + + + Provides a method to perform the work of a background task. + + + Performs the work of a background task. The system calls this method when the associated background task has been triggered. + An interface to an instance of the background task. The system creates this instance when the task has been triggered to run. + + + Provides access to a background task instance. + + + Attaches a cancellation event handler to the background task instance. + + + Informs the system that the background task might continue to perform work after the IBackgroundTask.Run method returns. + A background task deferral. + + + Gets the instance ID of the background task instance. + A unique identifier for the background task instance. This identifier is generated by the system when the instance is created. + + + Gets or sets progress status for a background task instance. + A value defined by the application to indicate the task's progress. + + + Gets the number of times resource management policy caused the background task to be suspended. + The number of times the background task has been suspended. + + + Gets access to the registered background task for this background task instance. + An interface that provides access to the registered background task. + + + Gets additional information associated with a background task instance. + Represents additional information for the background task. If the background task is triggered by a mobile network operator notification, this property is an instance of a NetworkOperatorNotificationEventDetails class. If the background task is triggered by a system event or time event, this property is not used. + + + Provides access to a background task instance. Inherits from the IBackgroundTaskInstance interface and adds the GetThrottleCount method. + + + Retrieves the number of times the background task has been suspended for using too many resources. + This method returns the number of times the background task has been suspended for exceeding its quota of the indicated resource type. + Indicates the type of resource to include in the throttle count: network, CPU, or both. + + + Provides access to a registered background task. + + + Attaches a completed event handler to the registered background task. + + + Gets the name of a registered background task. + The description specified with BackgroundTaskBuilder.Name when the task was created. + + + Attaches a progress event handler to the registered background task. + + + Gets the identifier of a registered background task. + The unique identifier for the task. This identifier is generated by the system when the task is registered. + + + Unregisters a registered background task. + True if currently running instances of this background task should be canceled. If this parameter is false, currently running instances of this background task should be allowed to finish. Canceled instances receive a Canceled event with a BackgroundTaskCancellationReason of Abort. + + + Represents the base interface for trigger events. + + + Controls how an app is activated for lock-screen calling and how the app interacts with the lock screen. + + + The LockScreenCallEndCallDeferral object signals when the app no longer needs to defer the removal of itself from the lock screen. + + + Completes the deferral of the removal of the app from the lock screen, which causes the app to be removed from the lock screen if it hasn't already been removed by other means. + + + Handles communication to and from the lock screen. + + + Gets and sets a brief description of the nature of the call. + A brief description of the nature of the call, for example, "Video call with Jane Doe." + + + Removes the app from the lock screen UI. + + + Occurs when the lock screen interaction is complete. + + + Occurs when the lock screen wants to end the call. + + + Controls the removal of an app from the lock screen. + + + Gets the deadline by which the app must complete the deferral. + The deadline by which the app must complete the deferral. + + + Requests to defer the default behavior of removing the app from the lock screen. + When this method completes, it returns a LockScreenCallEndCallDeferral object that signals when the app no longer needs to defer the removal of itself from the lock screen. + + + Enables apps that use the Contact Picker to select and acquire info about contacts.Don't use API in this namespace that is new starting with Windows 8.1 with API in this namespace that may not be available for releases after Windows 8.1. If you mix these API in your app, it will fail. + + + Represents a contact. + + + Gets the contact addresses for a contact. + An array of contact addresses for a contact. + + + Gets the connected service accounts for a contact. + An array of connected service accounts for a contact. + + + Creates a new instance of the Contact class. + + + Gets the data suppliers for a contact. + An array of data suppliers for a contact. + + + Gets the display name for a contact. You can only access this property from a UI thread. + The display name for a contact. + + + Gets the email addresses for a contact. + An array of email addresses for a contact. + + + Fields may be altered or unavailable for releases after Windows 8.1. Instead, use Phones, Emails, Addresses, or ConnectedServiceAccounts. +Sets the fields that contain information about a contact. + Fields may be altered or unavailable for releases after Windows 8.1. Instead, use Phones, Emails, Addresses, or ConnectedServiceAccounts. + An array of fields containing information about a contact. + + + Gets and sets the first name for a contact. + The first name for a contact. + + + Gets and sets the honorific prefix for the name for a contact. + The honorific prefix for the name for a contact. + + + Gets and sets the honorific suffix for the name for a contact. + The honorific suffix for the name for a contact. + + + Gets and sets the identifier for a contact. + The identifier for a contact. + + + Gets the important dates for a contact. + An array of important dates for a contact. + + + Gets the job info items for a contact. + An array of job info items for a contact. + + + Gets and sets the last name for a contact. + The last name for a contact. + + + Gets and sets the middle name for a contact. + The middle name for a contact. + + + Name may be altered or unavailable for releases after Windows 8.1. Instead, use FirstName. +Sets and gets the name of the contact. + Name may be altered or unavailable for releases after Windows 8.1. Instead, use FirstName. + The name of the contact. + + + Gets and sets notes for a contact. + A string that contains notes for a contact. + + + Gets info about the phones for a contact. + An array of items that describe the phones for a contact. + + + Gets the property set object for the contact. + The IPropertySet interface for the property set object for the contact. + + + Gets the significant others for a contact. + An array of significant others for a contact. + + + Gets or sets a thumbnail image that represents this contact. + The thumbnail image for the contact. + + + Gets the Web sites for a contact. + An array of Web sites for a contact. + + + Gets the Yomi (phonetic Japanese equivalent) display name for a contact. + The Yomi display name for a contact. + + + Gets the Yomi (phonetic Japanese equivalent) family name for a contact. + The Yomi family name for a contact. + + + Gets the Yomi (phonetic Japanese equivalent) given name for a contact. + The Yomi given name for a contact. + + + Represents the address of a contact. + + + Gets and sets the country of a contact address. + The country of a contact address. + + + Gets and sets the locality of a contact address. + The locality of a contact address. + + + Gets and sets the postal code of a contact address. + The postal code of a contact address. + + + Gets and sets the region of a contact address. + The region of a contact address. + + + Gets and sets the street address of a contact address. + The street address of a contact address. + + + Initializes a new instance of a ContactAddress class. + + + Gets and sets the description of a contact address. + The description of a contact address. + + + Gets and sets the kind of contact address. + A ContactAddressKind-typed value that indicates the type of contact address. + + + Represents a delayed data loader for a contact card. + + + Closes the delayed data loader. This informs the contact card to complete the UI (for example, remove any progress indications, like the progress bar) because no more updates to the contact card UI will be requested. The user then can determine that the contact data shown in the UI is complete. + + + Closes the delayed data loader. This informs the contact card to complete the UI (for example, remove any progress indications, like the progress bar) because no more updates to the contact card UI will be requested. The user then can determine that the contact data shown in the UI is complete. + + + Updates the contact card with the Contact object and completes the contact card UI. + The contact to update the contact card with. + + + Represents a connected service account for a contact. + + + Initializes a new instance of a ContactConnectedServiceAccount class. + + + Gets and sets the identifier of a connected service account for a contact. + The identifier of a connected service account for a contact. + + + Gets and sets the service name of a connected service account for a contact. + The service name of a connected service account for a contact. + + + Represents an important date for a contact. + + + Initializes a new instance of a ContactDate class. + + + Gets and sets the day for an important date for a contact. + The day for an important date for a contact. + + + Gets and sets the description for an important date for a contact. + The description for an important date for a contact. + + + Gets and sets the kind of important date for a contact. + A ContactDateKind-typed value that indicates the type of important date for a contact. + + + Gets and sets the month for an important date for a contact. + The month for an important date for a contact. + + + Gets and sets the year for an important date for a contact. + The year for an important date for a contact. + + + Represents an email address of a contact. + + + Gets and sets the email address of a contact. + The email address of a contact. + + + Initializes a new instance of a ContactEmail class. + + + Gets and sets the description of an email address of a contact. + The description of an email address of a contact. + + + Gets and sets the kind of email address of a contact. + A ContactEmailKind-typed value that indicates the type of email address. + + + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Describes a piece of contact data. + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + + + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the category for the contact data. + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The category for the contact data. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a new ContactField object. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + The value that the field contains. + The type of contact data. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a new ContactField object. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + The value for the contact field. + The type of contact data. + The category that the contact belongs to. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a new ContactField object. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + The name of the field. + The value the field contains. + The type of field. + The category the field belongs to. + + + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the name of the field. + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The name of the field. + + + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the contact field type for the data. + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The type of data. + + + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the value of the contact data. + ContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The value of the contact data. + + + ContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactWebsite, ContactJobInfo, or ContactDate. Creates fields that contain information about a contact. + ContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactWebsite, ContactJobInfo, or ContactDate. + + + ContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactWebsite, ContactJobInfo, or ContactDate. +Creates an instance of the ContactFieldFactory class. + ContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactWebsite, ContactJobInfo, or ContactDate. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + Contains a field that you can add to a Contact object. + The value for the field. + The type of field. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + Contains a field that you can add to a Contact object. + The value for the field. + The type of field. + The category the field belongs to. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + Contains a field that you can add to a Contact object. + The name of the field. + The value of the field. + The type of field. + The category the field belongs to. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field to contain information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + Contains an instant messaging field that you can add to a Contact object. + The user name for the instant messaging account. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field to contain information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + Contains an instant messaging field that you can add to a Contact object. + The user name for the instant messaging account. + The category the field belongs to. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field to contain information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + Contains an instant messaging field that you can add to a Contact object. + The user name of the instant messaging account. + The category the field belongs to. + The name of the instant messaging service. + The text to display to prompt an instant messaging conversation. + The Uniform Resource Identifier (URI) that starts an instant messaging conversation. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + Contains a location field that you can add to a Contact object. + The address of the contact in an unstructured format. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + Contains a location field that you can add to a Contact object. + The address of the contact in an unstructured format. + The category the field belongs to. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + Contains a location field that you can add to a Contact object. + The address of the contact in an unstructured format. + The category the field belongs to. + The street address for the address. + The name of the city for the address. + The name of the region for the address. + The name of the country for the address. + The postal code for the address. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +Contains the information about a contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +A read-only list of the custom fields stored with the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + A read-only list of custom fields. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +A read-only list of email addresses stored with the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + A read-only list of email addresses. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +Gets the thumbnail image for the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + An object that provides access to the thumbnail image. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +A read-only list of instant messaging accounts stored with the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + A read-only list of instant messaging accounts. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +A read-only list of locations stored with the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + A read-only list of locations. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +The name of the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + The name. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +A read-only list of phone numbers stored with the contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + A read-only list of phone numbers. + + + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. +Enables you to get the value for a custom field that is stored with a contact. + ContactInformation may be altered or unavailable for releases after Windows 8.1. Instead, use Contact. + The value of the field. + The name of the field. + + + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Defines a field that is an instant messaging (IM) address. + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the category for the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The category for the contact data. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a new ContactInstantMessageField object. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The user's name. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a new ContactInstantMessageField object. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The user's name. + The category of contact data. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a new ContactInstantMessageField object. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The user's name. + The category of the contact data. + The name of the instant messaging service. + The display text used with the instant messaging Uniform Resource Identifier (URI). + The Uniform Resource Identifier (URI) that starts an instant message. + + + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Gets the display text for the Uniform Resource Identifier (URI) that starts an instant message. + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The display text. + + + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Gets the Uniform Resource Identifier (URI) that can start an instant message. + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The Uniform Resource Identifier (URI). + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the name of the field. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The name of the field. + + + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Gets the name of the service used for sending instant messages. + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The service name. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the contact field type for the data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The type of data. + + + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Gets the user's name. + ContactInstantMessageField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + The user's name. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the value of the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The value of the contact data. + + + Represents job info for a contact. + + + Gets and sets the company address of the job info for a contact. + The company address of the job info for a contact. + + + Gets and sets the company name of the job info for a contact. + The company name of the job info for a contact. + + + Gets and sets the company Yomi (phonetic Japanese equivalent) name of the job info for a contact. + The company Yomi (phonetic Japanese equivalent) name of the job info for a contact. + + + Initializes a new instance of a ContactJobInfo class. + + + Gets and sets the department of the job info for a contact. + The department of the job info for a contact. + + + Gets and sets the description of the job info for a contact. + The description of the job info for a contact. + + + Gets and sets the manager of the job info for a contact. + The manager of the job info for a contact. + + + Gets and sets the office of the job info for a contact. + The office of the job info for a contact. + + + Gets and sets the title of the job info for a contact. + The title of the job info for a contact. + + + Provides data when an app is launched to perform an action to a contact. + + + Gets the call contact action. + The call contact action. + + + Gets the map contact action. + The map contact action. + + + Gets the send message to a contact action. + The send message to a contact action. + + + Gets the post to a contact action. + The post to a contact action. + + + Gets the video call contact action. + The video call contact action. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Contains information about a user's location and address. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the category for the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The category for the contact data. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets the contact's city. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The contact's city. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a new ContactLocationField object. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The address of the contact in an unstructured format. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a new ContactLocationField object. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The address of the contact in an unstructured format. + The category the field belongs to. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a new ContactLocationField object. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The address of the contact in an unstructured format. + The category for the contact data. + The street address of the contact. + The name of the city for this contact's address. + The name of the region for this contact's address. + The name of the country for this contact's address. + The postal code for this contact's address. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets the contact's country. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The contact's country. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the name of the field. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The name of the field. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets the contact's postal code. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The contact's postal code. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets the contact's region. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The contact's region. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets the contact's street. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The contact's street. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the contact field type for the data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The type of data. + + + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Gets a string that represents an unstructured address. + ContactLocationField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + The address of the contact in an unstructured format. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the value of the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The value of the contact data. + + + Represents a service that source apps can call to access contact data. + + + Queries the operating system for a user's contact and shows the contact data in a contact card + The object that represents the contact that the app wants to display the contact card for. contact must contain at least an Id, Emails, or a phone number from a Phones list to query the user's contact database to retrieve a matching contact to display. Id has higher priority for querying. If an Id matches, the rest of query parameters will be ignored for matching purposes. If an Id does not find a match, the query uses the rest of query parameters. Emails and Phones have equal priority for matching. If multiple email addresses, or phone numbers, or both are provided, the query first performs an exact match, requiring all query parameters to match a system contact record. If this results in no matches, the query uses "best effort" match, in which a match of any query parameters is sufficient.In no matches occur, the data in the input contact displays in the contact card. If a match occurs, only system contact data displays, and the data in the input contact is discarded. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the contact card, not within that rectangular area. For example, if an app uses a button to show the contact card, pass the Rect of the button so the contact card displays around the button, not overlapping it. + + + Queries the operating system for a user's contact and shows the contact data in a contact card + The object that represents the contact that the app wants to display the contact card for. contact must contain at least an Id, Emails, or a phone number from a Phones list to query the user's contact database to retrieve a matching contact to display. Id has higher priority for querying. If an Id matches, the rest of query parameters will be ignored for matching purposes. If an Id does not find a match, the query uses the rest of query parameters. Emails and Phones have equal priority for matching. If multiple email addresses, or phone numbers, or both are provided, the query first performs an exact match, requiring all query parameters to match a system contact record. If this results in no matches, the query uses "best effort" match, in which a match of any query parameters is sufficient.In no matches occur, the data in the input contact displays in the contact card. If a match occurs, only system contact data displays, and the data in the input contact is discarded. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the contact card, not within that rectangular area. For example, if an app uses a button to show the contact card, pass the Rect of the button so the contact card displays around the button, not overlapping it. + The Placement that describes the preferred placement of the contact card. + + + Shows a contact card that can be updated later if the contact does not exist in the user's contact database. + Returns the ContactCardDelayedDataLoader object that can be used to update the contact card. + The object that represents the contact that the app wants to display the contact card for. contact must contain at least an Id, Emails, or a phone number from a Phones list to query the user's contact database to retrieve a matching contact to display. Id has higher priority for querying. If an Id matches, the rest of query parameters will be ignored for matching purposes. If an Id does not find a match, the query uses the rest of query parameters. Emails and Phones have equal priority for matching. If multiple email addresses, or phone numbers, or both are provided, the query first performs an exact match, requiring all query parameters to match a system contact record. If this results in no matches, the query uses "best effort" match, in which a match of any query parameters is sufficient.In no matches occur, the data in the input contact displays in the contact card. If a match occurs, only system contact data displays, and the data in the input contact is discarded. + The Rect is the rectangular area of user selection (for example, pressing a button), around which the operating system displays the contact card, not within that rectangular area. For example, if an app uses a button to show the contact card, pass the Rect of the button so the contact card displays around the button, not overlapping it. + The Placement that describes the preferred placement of the contact card. + + + Represents info about the phone for a contact. + + + Initializes a new instance of a ContactPhone class. + + + Gets and sets the description of the phone for a contact. + The description of the phone for a contact. + + + Gets and sets the kind of phone for a contact. + A ContactPhoneKind-typed value that indicates the kind of phone. + + + Gets and sets the phone number of a phone for a contact. + The phone number of a phone for a contact. + + + Controls how the Contact Picker user interface opens and what information it shows. + + + Sets the text for the confirmation button in the Contact Picker user interface. + The text of the button. + + + Creates a new instance of the ContactPicker class. + + + DesiredFields may be altered or unavailable for releases after Windows 8.1. Instead, use DesiredFieldsWithContactFieldType. +Sets the contact fields your app is interested in. + DesiredFields may be altered or unavailable for releases after Windows 8.1. Instead, use DesiredFieldsWithContactFieldType. + An array of strings that represent the field names your app is interested in. + + + Gets the ways to connect with a contact. + An array of ContactFieldType-typed values for a contact. + + + Launches the Contact Picker to select a single contact. + The operation that launches the Contact Picker. + + + Launches the Contact Picker for selecting multiple contacts. + The operation that launches the contact picker. + + + PickMultipleContactsAsync may be altered or unavailable for releases after Windows 8.1. Instead, use PickContactsAsync. +Launches the Contact Picker for selecting multiple contacts. + PickMultipleContactsAsync may be altered or unavailable for releases after Windows 8.1. Instead, use PickContactsAsync. + The operation that launches the contact picker. + + + PickSingleContactAsync may be altered or unavailable for releases after Windows 8.1. Instead, use PickContactAsync. +Launches the Contact Picker for selecting a single contact. + PickSingleContactAsync may be altered or unavailable for releases after Windows 8.1. Instead, use PickContactAsync. + The operation that launches the Contact Picker. + + + Controls whether the Contact Picker shows contacts as a complete entity or as a collection of fields. + The mode for the Contact Picker user interface. You can set this to Contacts or Fields. + + + Represents the info about a significant other for a contact. + + + Initializes a new instance of a ContactSignificantOther class. + + + Gets and sets the description of a significant other for a contact. + The description of a significant other for a contact. + + + Gets and sets the name of a significant other for a contact. + The name of a significant other for a contact. + + + Represents the info about a Web site for a contact. + + + Initializes a new instance of a ContactWebsite class. + + + Gets and sets the description of a Web site for a contact. + The description of a Web site for a contact. + + + Gets and sets the Uniform Resource Identifier (URI) of a Web site for a contact. + The Uniform Resource Identifier (URI) of a Web site for a contact. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +A static class that contains the names of contact fields for storing commonly requested information like email address and phone numbers. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Converts a string representing the name of a field to its corresponding type. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The type of field. + The name of the field. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Converts the type of a field to its corresponding string name. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The name of the field. + The type of field. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Contains the name of the field used for email addresses. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The name of the field. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Contains the name of the field used for instant messaging accounts. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The name of the field. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Contains the name of the field used for the contact's location. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The name of the field. + + + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. +Contains the name of the field used for phone numbers. + KnownContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactConnectedServiceAccount, or ContactEmail. + The name of the field. + + + Specifies the kinds of contact addresses. + + + The home address of the contact. + + + The work address of the contact. + + + An address of the contact other than home or work. + + + Specifies the kinds of important dates for a contact. + + + The birthday of the contact. + + + The anniversary of the contact. + + + An important date of the contact other than birthday or anniversary. + + + Specifies the kinds of email addresses for a contact. + + + The personal email address of the contact. + + + The work email address of the contact. + + + An email address of the contact other than personal or work. + + + ContactFieldCategory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhoneKind, ContactEmailKind, and ContactAddressKind. +Defines the categories that contact data can belong to. + ContactFieldCategory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhoneKind, ContactEmailKind, and ContactAddressKind. + + + The data doesn't belong to a category + + + The Home category. + + + The Work category. + + + The Mobile category. + + + The Other category. + + + Defines the type of contact data. + + + The contact's email address. + + + The contact's phone number. + + + The contact's location. + Location may be altered or unavailable for releases after Windows 8.1. Instead, use Address. + + + The contact's instant message user name. + InstantMessage may be altered or unavailable for releases after Windows 8.1. Instead, use ConnectedServiceAccount. + + + A custom value. + Custom may be altered or unavailable for releases after Windows 8.1. Instead, use one of the specific types. + + + The contact's connected service account. + + + The contact's important dates. + + + The contact's address. + + + The contact's significant other. + + + The contact's notes. + + + The contact's Web site. + + + The contact's job info. + + + Specifies the kinds of phones for a contact. + + + The home phone of the contact. + + + The mobile phone of the contact. + + + The work phone of the contact. + + + A phone of the contact other than home, mobile, or work. + + + Specifies whether you want to request an entire contact, or only specific fields. + + + Specifies that you want to select the entire contact. + + + Specifies that you want to select only certain fields. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Specifies an object that describes a piece of contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the category for the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The category for the contact data. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the name of the field. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The name of the field. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the contact field type for the data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The type of data. + + + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. +Gets the value of the contact data. + IContactField may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress, ContactPhone, ContactSignificantOther, Contact, ContactEmail, ContactConnectedServiceAccount, ContactWebsite, ContactJobInfo, or ContactDate. + The value of the contact data. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. Creates fields that contain information about a contact. Available only to apps that support the Contacts contract. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + A field that you can add to a Contact object. + The value for the field. + The type of field. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + A field that you can add to a Contact object. + The value of the field. + The type of field. + The category the field belongs to. + + + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. +Creates a field to contain information about a contact. + IContactFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactPhone or ContactEmail. + A field that you can add to a Contact object. + The name of the field. + The value the field contains. + The type of field. + The category the field belongs to. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates fields with information about a contact's instant messaging accounts. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field containing information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + An instant messaging field that you can add to a Contact object. + The user name of the instant messaging account. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field containing information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + An instant messaging field that you can add to a Contact object. + The user name for the instant messaging account. + The category the field belongs to. + + + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. +Creates a field containing information about a contact's instant messaging account. + IContactInstantMessageFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactConnectedServiceAccount. + An instant messaging field that you can add to a Contact object. + The user name for the instant messaging account. + The category the field belongs to. + The name of the instant messaging service. + The text to display to prompt an instant messaging conversation. + The Uniform Resource Identifier (URI) that starts an instant messaging conversation. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. Creates fields for a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + A location field that you can add to a Contact object. + The address of the contact in an unstructured format. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + A location field that you can add to a Contact object. + The address of the contact in an unstructured format. + The category the field belongs to. + + + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. +Creates a field to contain information about a contact's location. + IContactLocationFieldFactory may be altered or unavailable for releases after Windows 8.1. Instead, use ContactAddress. + A location field that you can add to a Contact object. + The address of the contact in an unstructured format. + The category the field belongs to. + The street address. + The name of the city for the address. + The name of the region for the address. + The name of the country for the address. + The postal code for the address. + + + Enables apps to create and remove contacts. + + + Indicates whether a contact was added successfully. + + + The contact was added. + + + The contact was already selected by the user. + + + The contact was unavailable and was not added. + + + Allows you to call the contact picker UI so you can select one or more contacts. + + + AddContact may be altered or unavailable for releases after Windows 8.1. Instead, use AddContact without the ID. +Adds a Contact. + AddContact may be altered or unavailable for releases after Windows 8.1. Instead, use AddContact without the ID. + An AddContactResult-typed value that indicates whether the contact was added successfully. + The ID for the contact. + An object that contains the contact's information. + + + Adds a Contact. The Contact.Id property must be set when you call AddContact. If Contact.Id isn't set, your app will fail. + An AddContactResult-typed value that indicates whether the contact was added successfully. + An object that contains the contact's information. + + + Occurs when the user deselects or removes the contact. + + + Checks to see whether the contact was already selected by the user. + True if the contact has already been selected; otherwise, false. + The ID of the contact. + + + DesiredFields may be altered or unavailable for releases after Windows 8.1. Instead, use DesiredFieldsWithContactFieldType. +Specifies the fields that you want returned after the user selects one or more contacts. + DesiredFields may be altered or unavailable for releases after Windows 8.1. Instead, use DesiredFieldsWithContactFieldType. + A collection of fields that you want returned. You can specify which fields you want through the KnownContactField class. + + + Gets the fields with contact field type that you want returned after the user selects one or more contacts. + A collection of fields of contact field type that you want returned. The ContactFieldType values specify which fields you want. + + + Removes a contact. + The ID of the contact to remove. + + + Determines the selection mode for the contact picker. The most common options are PickSingleContactAsync or PickMultipleContactsAsync. + Specifies the selection mode that you want to use. + + + Contains info about a removed contact. Returned when a ContactRemoved event occurs. + + + Contains a unique identifier for the contact. + A unique identifier for the contact. + + + Provides key application-level functionality for apps. + + + Enables apps to handle state changes, manage windows, and integrate with a variety of UI frameworks. + + + Creates a new view for the app. + The view. + The class ID of the view provider for the new view. If this parameter is null, use the current view provider. + Additional info about the view, such as its class name in the app code. + + + Creates a new view for the app. + The view. + + + Decrements the total count of running app instances that use this CoreApplication instance. + + + Shuts down the app. Do not use this method to shut down an app outside of testing or debugging scenarios. + + + Occurs when the app is shutting down. + + + Gets the active view for the app. + The view. + + + Gets the package-relative app identifier (PRAID) for the process. + The PRAID. + + + Increments the total count of running app instances that use this CoreApplication instance. + + + Gets the main CoreApplicationView instance for all running apps that use this CoreApplication instance. + The main view for this CoreApplication instance. + + + Gets a property set that the app and UI frameworks can use to store info while the process is running. + The property set. + + + Occurs when an app is resuming. + + + Runs an external view provider factory to obtain a view provider. + An implementation of a view provider factory. + + + Runs an activatable type factory to obtain an external activatable type. + An implementation of an activatable type factory. + + + Occurs when the app is suspending. + + + Occurs when there is an underlying error that is routed to the CoreApplication instance, as part of global error handling logic. + + + Gets all views for the app. + The views. + + + Represents an app window and its thread. + + + Occurs when the view is activated. + + + Gets the app window associated with the current view. + The app window. + + + Gets the value that indicates whether this app view is hosted or not. + If true, this app view is hosted; if false, it is not. + + + Gets a value that indicates whether this app view is the main app view or not. + If true, this app view is the main; if false, it is not. + + + Adds an error handling event for global error handling from the system that app models can use. + + + Occurs when there is an error in an async completion or event handler that wasn't otherwise handled by system or app code. + + + Represents an app view provider. + + + A method for app view initialization, which is called when an app object is launched. + The default view provided by the app object. You can use this instance in your implementation to obtain the CoreWindow created by the app object, and register callbacks for the Activated event. + + + A method that loads or activates any external resources used by the app view before Run is called. + The name of the entry point method for the activated type. + + + A method that starts the app view. + + + A method that sets the current window for the app object's view. + The current window for the app object. + + + A method that uninitializes the app view. + + + Defines a factory for view provider objects. + + + A method that returns a view provider object. + An object that implements a view provider. + + + Provides UnhandledError event data for UnhandledErrorDetected events. + + + Gets the error info object that can be used to handle the event or propagate the error through a language-specific error. + An object that represents the unhandled error. + + + Represents the error data for a system error as reported by an UnhandledErrorDetected event. + + + Gets or sets a value that indicates whether the error has been handled. + true if the error has been handled. A value of true permits the app to continue. false if the error has not been handled. A value of false can result in the app being terminated once this event propagates to the Windows Runtime system. + + + Wraps the underlying error info in a language specific exception, and throws the error. + + + Contains classes that are used to exchange data between a source app and a target app. These classes are used in share and clipboard operations. + + + Gets and sets information from the clipboard object. + + + Removes all data from the Clipboard. + + + Occurs when the data stored in the Clipboard changes. + + + Adds the content to the Clipboard and releases the DataPackage object from the source app. This method allows the content to remain available after the application shuts down. + + + Gets the current content that is stored in the clipboard object. + Contains the content of the Clipboard. + + + Sets the current content that is stored in the clipboard object. + Contains the content of the clipboard. If NULL, the clipboard is emptied. + + + Contains the data that a user wants to exchange with another app. + + + Constructor that creates a new DataPackage. + + + Occurs when the DataPackage is destroyed. + + + Returns a DataPackageView object. This object is a read-only copy of the DataPackage object. + The object that is a read-only copy of the DataPackage object. + + + Occurs when a paste operation is completed. + + + Allows you to get and set properties like the title of the content being shared. + A collection of properties that describe the data contained in a DataPackage. + + + Specifies the DataPackageOperation (none, move, copy, or link) for the operation. + The operation requested by the source app. + + + Maps a URI to a file. Used to ensure that referenced content (such as an image) in HTML content is added to the DataPackage. + Specifies a name/value pair that specifies the an HTML path with a corresponding StreamReference object. + + + Sets the application link that a DataPackage contains. + A Uniform Resource Identifier (URI) with a scheme that isn't http or https that's handled by the source app. + + + Sets the bitmap image contained in the DataPackage. + A stream that contains the bitmap image. + + + Sets the data contained in the DataPackage in a RandomAccessStream format. + Specifies the format of the data. We recommend that you set this value by using the StandardDataFormats class. + Specifies the content that the DataPackage contains. + + + Sets a delegate to handle requests from the target app. + Specifies the format of the data. We recommend that you set this value by using the StandardDataFormats class. + A delegate that is responsible for processing requests from a target app. + + + Adds HTML content to the DataPackage. + The HTML content. + + + Sets the Rich Text Format (RTF) content that is contained in a DataPackage. + Specifies the Rich Text Format (RTF) content for the DataPackage. + + + Adds files and folders to a DataPackage. + The files and folders to be added to the DataPackage. + Specify true if the files are read-only; false otherwise. + + + Sets the files and folders contained in a DataPackage. + The files and folders to be added to the DataPackage. + + + Sets the text that a DataPackage contains. + The text. + + + Sets the Uniform Resource Identifier (URI) that is contained in the DataPackage. + SetUri may be altered or unavailable for releases after Windows 8.1. Instead, use ApplicationLink or WebLink. + The Uniform Resource Identifier (URI) that is contained in the DataPackage. + + + Sets the web link that a DataPackage contains. + A Uniform Resource Identifier (URI) with an http or https scheme that corresponds to the content being displayed to the user. + + + Specifies the operation the DataPackage stored in the Clipboard supports. + + + No action. Typically used when the DataPackage object requires delayed rendering. + + + Copies the content to the target destination. + + + Copies the content to the target destination and deletes the original. + + + Creates a link for the data. + + + Defines a set of properties to use with a DataPackage object. + + + Gets or sets the application link to the content from the source app. + The Uniform Resource Identifier (URI) of the application link to shared content. + + + Provides a web link to shared content that's currently displayed in the app. + The Uniform Resource Identifier (URI) of the web link to shared content. + + + Gets or sets a background color for the sharing app's Square30x30Logo. + The color of the logo's background. + + + Gets or sets the package family name of the source app. + The package family name. + + + Gets or sets the source app's logo. + The logo's bitmap. + + + Adds a new key-value pair to the DataPackagePropertySet. + The key-value pair to add. + + + Adds an item to the DataPackagePropertySet. + The key of the item to add. + The item value to add. + + + Gets or sets the Uniform Resource Identifier (URI) of the app's location in the Windows Store. + The Uniform Resource Identifier (URI) of the app in the Windows Store. + + + Gets or sets the name of the app that created the DataPackage object. + Specifies the name of the app that created the DataPackage object. + + + Removes all items from the property set. + + + Returns a value that indicates whether a specified key-value pair exists in the DataPackagePropertySet. + True if an item with that key exists in the DataPackagePropertySet; otherwise, false. + The key-value pair to check for in the DataPackagePropertySet. + + + Returns a value that indicates whether a specified key exists in the DataPackagePropertySet. + True if an item with that key exists in the DataPackagePropertySet; otherwise, false. + The key to check for in the DataPackagePropertySet. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets text that describes the contents of the DataPackage. + Text that describes the contents of the DataPackage. + + + Specifies a vector object that contains the types of files stored in the DataPackage object. + Contains the types of files stored in the DataPackage object. + + + Returns an iterator to enumerate the items in the property set. + The first item in the DataPackage object. + + + Gets an immutable view of the property set. + The immutable view. + + + Indicates whether the DataPackagePropertySet object contains a specific property. + True if the property set has an item with the specified key; otherwise false. + The key. + + + Adds a property to the DataPackagePropertySet object. + True if the method replaced a value that already existed for the key; false if this is a new key. + The key to insert. + The value to insert. + + + Gets a value indicating whether the dictionary is read-only. + True if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the DataPackagePropertySet. + The ICollection of all keys in this DataPackagePropertySet. + + + Retrieves the value of a specific property. + The value, if an item with the specified key exists. Otherwise, an error code. + The key. + + + Removes an item from the property set. + The key. + + + Removes a specific key-value pair from the DataPackagePropertySet. + True if the item was removed, otherwise false. + The key-value pair to remove. + + + Removes a specific item from the DataPackagePropertySet. + True if the item was removed, otherwise false. + The key of the item to remove. + + + Gets the number of items that are contained in the property set. + The number of elements in the property set. + + + Gets or sets a thumbnail image for the DataPackage. + The IRandomAccessStreamReference that represents the thumbnail image. + + + Gets or sets the text that displays as a title for the contents of the DataPackage object. + The text that displays as a title for the contents of the DataPackage object. + + + Returns a value that indicates whether a specified key exists in the DataPackagePropertySet. If an item with that key exists, the item is retrieved as an out parameter. + True if an item with that key exists in the DataPackagePropertySet; otherwise, false. + The key to check for in the DataPackagePropertySet. + The item, if it exists. Contains null if the item does not exist in the DataPackagePropertySet. + + + Gets an ICollection object containing the values of the DataPackagePropertySet . + The ICollection of all values in this DataPackagePropertySet. + + + A read-only version of a DataPackage. Apps that receive shared content get this object when acquiring content. + + + Returns the formats the DataPackageView contains. + The formats the DataPackageView contains. + + + Checks to see if the DataPackageView contains a specific data format. + True if the DataPackageView contains the format; false otherwise. + The name of the format. + + + Gets the application link in the DataPackageView object. + The application link. + + + Gets the bitmap image contained in the DataPackageView + A stream containing the bitmap image. + + + Gets the data contained in the DataPackageView. + The data. + The format of the data. + + + Gets the HTML stored in the DataPackageView object. + The HTML. + + + Gets the data (such as an image) referenced in HTML content. + The data referenced in the HTML content. + + + Gets the rich text formatted (RTF) content contained in a DataPackageView. + The rich text formatted content for the DataPackage. + + + Gets the files and folders stored in a DataPackageView object. + An array of files and folders stored in a DataPackageView. + + + Gets the text in the DataPackageView object. + The text. + + + Gets the text in the DataPackageView object. + The text. + A string that represents the data format. Usually StandardDataFormats.text. + + + Gets the URI contained in the DataPackageView. + GetUriAsync may be altered or unavailable for releases after Windows 8.1. Instead, use GetApplicationLink or GetWebLink. + The Uri. + + + Gets the web link in the DataPackageView object. + The web link. + + + Gets a DataPackagePropertySetView object, which contains a read-only set of properties for the data in the DataPackageView object. + The object that contains a read-only set of properties for the data. + + + Informs the system that your app is finished using the DataPackageView object. Primarily used for Clipboard operations. + An enumeration that states what operation (such as copy or move) was completed. + + + Gets the requested operation (such as copy or move). Primarily used for Clipboard actions. + An enumeration that states what operation (such as copy or move) was completed. + + + Gets the set of properties of a DataPackageView object. + + + Gets the application link to the content from the source app. + The Uniform Resource Identifier (URI) of the application link to shared content. + + + Gets a web link to shared content that's currently displayed in the app. + The Uniform Resource Identifier (URI) of the web link to shared content. + + + Gets a background color for the sharing app's Square30x30Logo. + The background color for the sharing app's Square30x30Logo. + + + Gets the package family name of the source app. + The package family name. + + + Gets the source app's logo. + The logo's bitmap. + + + Gets the Uniform Resource Identifier (URI) of the app's location in the Windows Store. + The Uniform Resource Identifier (URI) of the app in the Windows Store. + + + Gets the name of the app that created the DataPackage object. + The name of the app that created the DataPackage object. + + + Returns a value that indicates whether a specified key exists in the DataPackagePropertySetView. + True if an item with that key exists in the DataPackagePropertySetView; otherwise, false. + The key to check for in the DataPackagePropertySetView. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets the text that describes the contents of the DataPackage. + Text that describes the contents of the DataPackage. + + + Gets a vector object that contains the types of files stored in the DataPackage object. + Contains the types of files stored in the DataPackage object. + + + Returns an iterator to enumerate the items in the property set. + The first item in the DataPackage object. + + + Indicates whether the DataPackagePropertySetView object contains a specific property. + True if the property set has an item with the specified key; otherwise false. + The key. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the DataPackagePropertySetView. + The ICollection of all keys in this DataPackagePropertySetView. + + + Retrieves the value of a specific property. + The value, if an item with the specified key exists. Otherwise, an error code. + The key. + + + Gets the number of items that are contained in the property set. + The number of elements in the property set. + + + Divides the object into two views + The first half of the object. + The second half of the object. + + + Gets the thumbnail image for the DataPackageView. + The IRandomAccessStreamReference that represents the thumbnail image. + + + Gets the text that displays as a title for the contents of the DataPackagePropertySetView object. + The text that displays as a title for the contents of the DataPackagePropertySetView object. + + + Returns a value that indicates whether a specified key exists in the DataPackagePropertySetView. If an item with that key exists, the item is retrieved as an out parameter. + True if an item with that key exists in the DataPackagePropertySetView; otherwise, false. + The key to check for in the DataPackagePropertySetView. + The item, if it exists. Contains null if the item does not exist in the DataPackagePropertySetView. + + + Gets an ICollection object containing the values of the DataPackagePropertySetView . + The ICollection of all values in this DataPackagePropertySetView. + + + Used by a source app's deferral delegate to notify a DataPackage object that the source app will produce data from another asynchronous function. + + + Informs a DataPackage that it is ready for processing. + + + Provides data when the target app requests it, instead of including the data in the DataPackage ahead of time. DataProviderHandler is used when the source app wants to avoid unnecessary work that is resource intensive, such as performing format conversions. + Contains the data that the user wants to share. + + + An object of this type is passed to the DataProviderHandler delegate. + + + Gets the deadline for finishing a delayed rendering operation. If execution goes beyond that deadline, the results of delayed rendering are ignored. + The deadline for the delayed rendering operation. + + + Specifies the format id. + The format id. See StandardDataFormats for more information. + + + Returns a DataProviderDeferral object. + An data provider deferral object. + + + Sets the content of the DataPackage to be shared with a target app. + The object associated with a particular format in the DataPackage. + + + Lets your app supply the content the user wants to share or specify a message, if an error occurs. + + + Sets or gets a DataPackage object that contains the content a user wants to share. + Contains the content a user wants to share. + + + Gets the deadline for finishing a delayed rendering operation. If execution goes beyond that deadline, the results of delayed rendering are ignored. + The deadline for the delayed rendering operation. + + + Cancels the sharing operation and supplies an error string to display to the user. + The text to display to the user. + + + Supports asynchronous sharing operations by creating and returning a DataRequestDeferral object. + An object that allows you to share or send content asynchronously. + + + Enables you to exchange content with a target app asynchronously. + + + Indicates that the content for an asynchronous share is ready for a target app, or that an error in the sharing operation occurred. + + + Contains information about the DataRequested event. The system fires this event when the user invokes the Share UI. + + + Enables you to get the DataRequest object and either give it data or a failure message. + The object used to manage content as part of a share operation. + + + Programmatically initiates an exchange of content with other apps. + + + Occurs when a share operation starts. + + + Returns the DataTransferManager object associated with the current window. + The DataTransferManager object associated with the current window. + + + Programmatically initiates the user interface for sharing content with another app. + + + Occurs when the user chooses a target app in the Share charm. + + + Responsible for formatting HTML content that you want to share or add to the Clipboard. Also allows you to get HTML fragments from the content. + + + Takes a string that represents HTML content and adds the necessary headers to ensure it is formatted correctly for share and Clipboard operations. + A string representing the formatted HTML. + A string representing the HTML content. + + + Gets a string that represents an HTML fragment. + An HTML fragment based on the formatted HTML. + The formatted HTML. + + + Contains info about the action that a target app completed during a paste operation. + + + Specifies the operation that the target app completed. + An enumeration that identifies the operation. + + + Contains static properties that return string values. Each string corresponds to a known format ID. Use this class to avoid errors in using string constants to specify data formats. + + + A read-only property that returns the format ID string value corresponding to the activation link format. + The format ID string value corresponding to the application link format. + + + A read-only property that returns the format ID string value corresponding to the Bitmap format. + The format ID string value corresponding to the Bitmap format. + + + A read-only property that returns the format ID string value corresponding to the HTML format. + The format ID string value corresponding to the HTML format. + + + A read-only property that returns the format ID string value corresponding to the Rich Text Format (RTF). + The format ID string value corresponding to the Rich Text Format (RTF) format. + + + A read-only property that returns the format ID string value corresponding to the StorageItem format. + The format ID string value corresponding to the StorageItem format. + + + A read-only property that returns the format ID string value corresponding to the Text format. + The format ID string value corresponding to the Text format. + + + A read-only property that returns the format ID string value corresponding to the Uniform Resource Identifier (URI) format. + Uri may be altered or unavailable for releases after Windows 8.1. Instead, use ApplicationLink or WebLink. + The format ID string value corresponding to the Uniform Resource Identifier (URI) format. + + + A read-only property that returns the format ID string value corresponding to the web link format. + The format ID string value corresponding to the web link format. + + + Contains information about the target app the user chose to share content with. To get this object, you must handle the TargetApplicationChosen event. + + + Contains the name of the app that the user chose to share content with. + The name of the app. + + + Contains the classes and events that a target app uses to complete share operations and create shortcuts, called QuickLinks, that the system can use to streamline future sharing operations to the app. + + + Represents shortcuts that help users share content with the apps they use most. + + + Specifies an ID for the QuickLink. Your app receives this ID when the user selects its QuickLink. You can use this ID to further customize the sharing process for the user. + Specifies the ID for the QuickLink. + + + Creates a new instance of a QuickLink object. + + + An array of strings that specify the data formats supported by the QuickLink app. The system shows the QuickLink only when the data that a user wants to share matches a format in this array. + An array of format ids that specify the data formats supported by the QuickLink app. + + + An array of strings that specify the file types supported by a QuickLink app. The system shows the QuickLink only when the data that a user wants to share contains file items, and the file extensions for those file items match a file type in this array. + An array of file extensions that specify the file types supported by the QuickLinks app. + + + Specifies a thumbnail image for the QuickLink. The system displays this image when the user is presented with a list of possible apps to share content with. + Contains the thumbnail image to use with the QuickLink. + + + Specifies the title of a QuickLink. The system displays this info when the user is presented with a list of possible apps to share content with. + Specifies the title of the QuickLink. + + + Handles the bulk of the work during a share operation. This includes the data that the user wants to share, setting or removing QuickLinks, and informing the system about the status of the operation. + + + Closes the share pane. + + + Contains a DataPackage object with the data that the user wants to share. + Contains the data that the user wants to share. + + + A string that contains the ID of a QuickLink. + The ID of the QuickLink. + + + Removes the QuickLink from the list of QuickLinks that are available to the user. + + + Specifies that the sharing operation is complete. + + + Specifies that the sharing operation is complete. A QuickLink that the system can save as a shortcut for future sharing operations is included. + A QuickLink object that the system saves as a shortcut for future sharing operations. + + + Specifies that the app has acquired the content that the user wants to share. + + + Specifies that an error occurred during the sharing operation. + Specifies the error message. The system displays this message to the user. + + + Specifies that the app has started to acquire the content that the user wants to share. + + + Specifies that the app has requested that the system allow the sharing operation to run as a background task. + + + Provides simplified access to application resources, such as strings, that are defined using basic naming conventions for runtime apps. + + + Provides simplified access to app resources such as app UI strings. + + + Constructs a new ResourceLoader object for the Resources subtree of the currently running app's main ResourceMap. + ResourceLoader() may be altered or unavailable for releases after Windows 8.1. Instead, use GetForCurrentView(). + + + Constructs a new ResourceLoader object for the specified ResourceMap. + ResourceLoader(String) may be altered or unavailable for releases after Windows 8.1. Instead, use GetForCurrentView(String). + The resource identifier of the ResourceMap that the new resource loader uses for unqualified resource references. It can then retrieve resources relative to those references.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, Caption%20 is treated as Caption . Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Gets a ResourceLoader object for the Resources subtree of the currently running app's main ResourceMap. + A resource loader for the Resources subtree of the currently running app's main ResourceMap. + + + Gets a ResourceLoader object for the specified ResourceMap. + A resource loader for the specified ResourceMap. + The resource identifier of the ResourceMap that the new resource loader uses for unqualified resource references. The loader can then retrieve resources relative to those references.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, Caption%20 is treated as Caption . Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Returns the most appropriate string value of a resource, specified by resource identifier, for the default ResourceContext of the view in which the ResourceLoader was obtained using ResourceLoader.GetForCurrentView. + The most appropriate string value of the specified resource for the default ResourceContext. + The resource identifier of the resource to be resolved.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, getString(Caption%20) is treated as getString(Caption ). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Returns the most appropriate string value of a resource, specified as a Uri for a resource identifier, for the default ResourceContext of the currently running app. + GetStringForReference may be altered or unavailable for releases after Windows 8.1. Instead, use GetStringForUri. + The most appropriate string value of the specified resource for the default ResourceContext. + A Uri that represents the resource to be retrieved. + + + Returns the most appropriate string value of a resource, specified by a Uniform Resource Identifier (URI) resource identifier, for the default ResourceContext of the currently running app. + The most appropriate string value of the specified resource for the default ResourceContext. + A Uniform Resource Identifier (URI) that represents the resource to be retrieved. + + + Provides classes that enable advanced resource loading. + + + Represents a single logical, named resource, such as a string resource named 'Header1'. + + + Resolves this NamedResource object against the default context and returns the most appropriate candidate. + Resolve may be altered or unavailable for releases after Windows 8.1. Instead, use Resolve(ResourceContext). + The most appropriate candidate for the default context. + + + Resolves this NamedResource object against a supplied context and returns the most appropriate candidate. + The most appropriate candidate for the specified context. + The context against which the NamedResource should be resolved. + + + Resolves this NamedResource object against the default context and returns a list of all possible candidates in preference order. + ResolveAll may be altered or unavailable for releases after Windows 8.1. Instead, use ResolveAll(ResourceContext). + A list of ResourceCandidate objects, in order of preference. The object in first position in the list is the most appropriate candidate for the corresponding context, and the object in last position is the least appropriate. + + + Resolves this NamedResource object against a supplied context and returns a list of all possible candidates in preference order. + A list of ResourceCandidate objects, in order of preference. The object in first position in the list is the most appropriate candidate for the corresponding context, and the object in last position is the least appropriate. + The context against which the NamedResource should be resolved. + + + Gets all possible candidate values for this named resource. + A set of ResourceCandidate objects, each of which describes one possible value for this named resource and the qualifiers under which it applies. + + + Gets a URI that can be used to refer to this named resource. + A URI that can be used to refer to this named resource. See URI schemes for information on identifying resources. + + + Represents a single possible value for a given NamedResource, the qualifiers associated with that resource, and how well those qualifiers match the context against which it was resolved. + + + Returns the value of a qualifier, given its name. + The value of the qualifier. + The name of the qualifier. + + + Asynchronously returns a StorageFile that accesses the value of this ResourceCandidate. This only works on certain types of ResourceCandidates that are files. + An asynchronous operation to return the requested StorageFile. + + + Indicates whether this ResourceCandidate can be used as a default fallback value for any context. + TRUE if this candidate can be used as a default fallback value for any context, FALSE otherwise. + + + Indicates whether this ResourceCandidate matched the ResourceContext against which it was evaluated. + TRUE if the ResourceCandidate matched the context, FALSE otherwise. + + + Indicates whether this ResourceCandidate matched the ResourceContext against which it was evaluated as a result of being a default fallback value or mixed match with default fallback (that is, a match in relation to some qualifiers but using default fallback values for other qualifiers), and not as a true match. + TRUE if this candidate is an acceptable default fallback value, FALSE otherwise. + + + Gets the qualifiers associated with this ResourceCandidate. + The ResourceQualifiers associated with this ResourceCandidate. + + + Gets the value of this ResourceCandidate, expressed as a string. + The string value. + + + Represents a collection of ResourceCandidate objects. + + + Returns an iterator to enumerate the items in the set of ResourceCandidate objects. + The iterator. The current position of the iterator is index 0, or the end of the set if the set is empty. + + + Returns the ResourceCandidate at the specified index in the set. + The ResourceCandidate at the specified index. + The zero-based index of the ResourceCandidate in the set to return. + + + Returns the ResourceCandidate objects that start at the specified index in the set. + The number of ResourceCandidate objects returned. + The zero-based index of the start of the ResourceCandidate objects in the set to return. + The ResourceCandidate objects in the set that start at startIndex. + + + Returns the index of a specified ResourceCandidate in the set. + A Boolean that is TRUE if the ResourceCandidate is found, otherwise FALSE if the item is not found. + The ResourceCandidate to find in the set. + The zero-based index of the ResourceCandidate, if the item is found. The method returns zero if the item is not found. + + + Gets the number of ResourceCandidate objects in the set. + The number of ResourceCandidate objects in the set. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Encapsulates all of the factors (ResourceQualifiers) that might affect resource selection. + + + Creates a default ResourceContext object. + ResourceContext constructor may be altered or unavailable for releases after Windows 8.1. Instead, use GetForCurrentView. + + + Creates a clone of this ResourceContext, with identical qualifiers. + A new, cloned ResourceContext. + + + Creates a new ResourceContext that matches a supplied set of qualifiers. + CreateMatchingContext may be altered or unavailable for releases after Windows 8.1. Instead, use ResourceContext.GetForCurrentView.OverrideToMatch. + The new ResourceContext. + The list of qualifiers to be matched. + + + Gets a default ResourceContext associated with the current view for the currently running application. + The default context associated with the current view. + + + Overrides the qualifier values supplied by this context to match a specified list of resolved ResourceQualifiers. Typically the resolved ResourceQualifiers are associated with a resource that was looked up earlier. + The ResourceQualifiers to be applied to the context. + + + Resets the overridden values for all qualifiers on the given ResourceContext instance. + + + Resets the overridden values for the specified qualifiers on the given ResourceContext instance. + The names of the qualifiers to be reset. + + + Removes any qualifier overrides from default contexts of all views across the app. + + + Removes qualifier overrides for the specified qualifiers from default contexts of all views across the app. + The names of the qualifiers to be reset. + + + Applies a single qualifier value override to default contexts of all views for the current app. + The name of the qualifier to override. + The override value to set. + + + Gets or sets the language qualifier for this context. + A collection of BCP-47 language tags. + + + Gets a writable, observable map of all supported qualifiers, indexed by name. + The map of qualifiers. + + + Represents a collection of ResourceContext language qualifiers. + + + Returns an iterator to enumerate the items in the set of ResourceContext language qualifiers. + The iterator. The current position of the iterator is index 0, or the end of the set if the set is empty. + + + Returns the ResourceContext language qualifier at the specified index in the set. + The ResourceContext language qualifier at the specified index. + The zero-based index of the ResourceContext language qualifier in the set to return. + + + Returns the ResourceContext language qualifiers that start at the specified index in the set. + The number of ResourceContext language qualifiers returned. + The zero-based index of the start of the ResourceContext language qualifiers in the set to return. + The ResourceContext language qualifiers in the set that start at startIndex. + + + Returns the index of a specified ResourceContext language qualifier in the set. + A Boolean that is TRUE if the ResourceContext language qualifier is found; otherwise, FALSE. + The ResourceContext language qualifier to find in the set. + The zero-based index of the ResourceContext language qualifier, if the item is found. The method returns zero if the item is not found. + + + Gets the number of ResourceContext language qualifiers in the set. + The number of ResourceContext language qualifiers in the set. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Provides access to application resource maps and more advanced resource functionality. + + + Determines whether a supplied string matches the resource reference format (an ms-resource string URI identifier). + TRUE if the string matches. + The string you want to match. + + + Loads one or more PRI files and adds their contents to the default resource manager. + The files you want to add. + + + Unloads one or more PRI files. + The files you want unloaded. + + + Gets a map of ResourceMap objects typically associated with the app packages, indexed by package name. + Contains all default resource maps for all packages used by the app, as well as any resource maps that have been loaded explicitly. + + + Gets the ResourceManager for the currently running application. + The application default ResourceManager, initialized with the resources for all of the packages in the package graph. + + + Gets the default ResourceContext for the currently running application. Unless explicitly overridden, the default ResourceContext is used to determine the most appropriate representation of any given named resource. + DefaultContext may be altered or unavailable for releases after Windows 8.1. Instead, use ResourceContext.GetForCurrentView. + The resource context. + + + Gets the ResourceMap that is associated with the main package of the currently running application. + The resource map. + + + A collection of related resources, typically either for a particular app package, or a resource file for a particular package. + + + Returns an iterator to enumerate the items in the map. + The iterator. The current position of the iterator is index 0, or the end of the set if the map is empty.The set is all NamedResources contained within this map and all of its child maps.The key is a string representing the minimally qualified resource identifier, relative to this resource map.The value is the NamedResource corresponding to the key. + + + Returns a ResourceMap that represents a subtree of another ResourceMap, typically used to access a particular resource file within an app package. + The subtree ResourceMap. + A resource map identifier that identifies the root of the new subtree.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, getSubtree(Caption%20) is treated as getSubtree(Caption ). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Returns the most appropriate candidate for a resource that is specified by a resource identifier for the default context. + GetValue(String) may be altered or unavailable for releases after Windows 8.1. Instead, use GetValue(String, ResourceContext). + A ResourceCandidate that describes the most appropriate candidate. + A resource specified as a name or reference.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, getValue(Caption%20) is treated as getValue(Caption ). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Returns the most appropriate candidate for a resource that is specified by a resource identifier for the supplied context. + A ResourceCandidate that describes the most appropriate candidate. + A resource specified as a name or reference.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, getValue(Caption%20, context) is treated as getValue(Caption , context). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + The context for which to select the most appropriate candidate. + + + Determines whether the map can retrieve a resource with the specified resource identifier. + TRUE if the key is found, otherwise FALSE. + The resource identifier to locate in the map.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, hasKey(Caption%20) is treated as hasKey(Caption ). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Returns the NamedResource at the specified resource identifier in the map. + The NamedResource associated with the specified key. + The resource identifier to use to locate the resource in the map.The resource identifier is treated as a Uniform Resource Identifier (URI) fragment, subject to Uniform Resource Identifier (URI) semantics. For example, lookup(Caption%20) is treated as lookup(Caption ). Do not use ? or # in resource identifiers, as they terminate the named resource path. For example, Foo?3 is treated as Foo. + + + Splits the map view into two views. + One half of the original map. + The second half of the original map. + + + Gets the number of resources in the map. + The number of resources in the map. + + + Gets a URI that can be used to refer to this ResourceMap. + The URI that refers to this ResourceMap. + + + Returns a value that indicates whether a specified key exists in the ResourceMap. + true if an item with that key exists in the ResourceMap; otherwise, false. + The key to check for in the ResourceMap. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ResourceMap. + The ICollection of all keys in this ResourceMap. + + + Returns a value that indicates whether a specified key exists in the ResourceMap. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ResourceMap; otherwise, false. + The key to check for in the ResourceMap. + The item, if it exists. Contains null if the item does not exist in the ResourceMap. + + + Gets an ICollection object containing the values of the ResourceMap . + The ICollection of all values in this ResourceMap. + + + Supports iteration over a ResourceMap. + + + Returns all the items in the ResourceMap. + The number of items in the map. + The items in the map. + + + Moves the iterator forward to the next item and returns HasCurrent. + TRUE if the iterator refers to a valid item that is in the map, and otherwise FALSE. + + + Gets the current item in the ResourceMap. + The key and NamedResource key-value pair for the current item. + + + Gets a value that indicates whether there is a current item, or whether the iterator is at the end of the ResourceMap. + TRUE if the iterator refers to a valid item that is in the map, and otherwise FALSE. + + + An unchangeable view into a map of ResourceMap objects. + + + Returns an iterator to enumerate the items in the map view. + The iterator. The current position of the iterator is index 0, or the end of the map if the map is empty. + + + Determines whether the map view contains the specified key. + TRUE if the key is found, otherwise FALSE if it is not found. + The key to locate in the map view. + + + Returns the ResourceMap at the specified key in the map view. + The ResourceMap associated with the specified key. + The key to locate in the map view. + + + Splits the map view into two views. + One half of the original map. + The second half of the original map. + + + Gets the number of ResourceMap objects in the map. + The number of ResourceMap objects in the map. + + + Returns a value that indicates whether a specified key exists in the ResourceMapMapView. + true if an item with that key exists in the ResourceMapMapView; otherwise, false. + The key to check for in the ResourceMapMapView. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ResourceMapMapView. + The ICollection of all keys in this ResourceMapMapView. + + + Returns a value that indicates whether a specified key exists in the ResourceMapMapView. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ResourceMapMapView; otherwise, false. + The key to check for in the ResourceMapMapView. + The item, if it exists. Contains null if the item does not exist in the ResourceMapMapView. + + + Gets an ICollection object containing the values of the ResourceMapMapView . + The ICollection of all values in this ResourceMapMapView. + + + Supports iteration over a ResourceMapMapView object. + + + Returns all the items in the ResourceMapMapView. + The number of items in the map view. + The items in the map view. + + + Moves the iterator forward to the next item and returns HasCurrent. + TRUE if the iterator refers to a valid item that is in the map view, and otherwise FALSE. + + + Gets the current item in the ResourceMapMapView. + The key and ResourceMap key-value pair for the current item. + + + Gets a value that indicates whether there is a current item, or whether the iterator is at the end of the ResourceMapMapView. + TRUE if the iterator refers to a valid item that is in the map view, and otherwise FALSE. + + + Defines the qualifiers associated with a ResourceCandidate. + + + Indicates whether this qualifier should be considered as a default match when no match is found. + TRUE if this candidate can be used as a default fallback value for any context; otherwise, FALSE. + + + Indicates whether a given qualifier for a given candidate matched the context when a named resource is resolved to a candidate for some given context. + TRUE if this qualifier matched the environment against which it was evaluated; otherwise, FALSE. + + + The name of the qualifier. + The name of the qualifier. + + + The value of the qualifier. + The value of the qualifier. + + + A score that indicates how well the qualifier matched the context against which it was resolved. + A score in the range 0.01.0. + + + An unchangeable view into a map of ResourceQualifier objects. + + + Returns an iterator to enumerate the items in the map view. + The iterator. The current position of the iterator is index 0, or the end of the map view if the map view is empty. + + + Determines whether the map view contains the specified key. + TRUE if the key is found, otherwise FALSE if it is not found. + The key to locate in the map view. + + + Returns the qualifier name at the specified key in the map view. + The qualifier name associated with the specified key. + The key to locate in the map view. + + + Splits the map view into two views. + One half of the original map. + The second half of the original map. + + + Gets the number of ResourceQualifier objects in the map. + The number of ResourceQualifier objects in the map. + + + Returns a value that indicates whether a specified key exists in the ResourceQualifierMapView. + true if an item with that key exists in the ResourceQualifierMapView; otherwise, false. + The key to check for in the ResourceQualifierMapView. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ResourceQualifierMapView. + The ICollection of all keys in this ResourceQualifierMapView. + + + Returns a value that indicates whether a specified key exists in the ResourceQualifierMapView. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ResourceQualifierMapView; otherwise, false. + The key to check for in the ResourceQualifierMapView. + The item, if it exists. Contains null if the item does not exist in the ResourceQualifierMapView. + + + Gets an ICollection object containing the values of the ResourceQualifierMapView . + The ICollection of all values in this ResourceQualifierMapView. + + + Notifies listeners of dynamic changes to a map of ResourceQualifier objects, such as when items get added or removed, and allows qualifier values to change. + + + Adds an item to the ResourceQualifierObservableMap. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the ResourceQualifierObservableMap. + The key-value pair to add. + + + Removes all items from the observable map. + + + Returns a value that indicates whether a specified key-value pair exists in the ResourceQualifierObservableMap. + true if an item with that key exists in the ResourceQualifierObservableMap; otherwise, false. + The key-value pair to check for in the ResourceQualifierObservableMap. + + + Returns a value that indicates whether a specified key exists in the ResourceQualifierObservableMap. + true if an item with that key exists in the ResourceQualifierObservableMap; otherwise, false. + The key to check for in the ResourceQualifierObservableMap. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the observable map. + The iterator. The current position of the iterator is index 0, or the end of the observable map if the observable map is empty. + + + Returns an unchangeable view of the observable map. + The view of the map. + + + Determines whether the observable map contains the specified key. + TRUE if the key is found, otherwise FALSE if it is not found. + The key to locate in the observable map. + + + Inserts or replaces an item in the observable map. + TRUE if an item with the specified key is an existing item and was replaced, otherwise FALSE. + The key associated with the item to insert. + The item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ResourceQualifierObservableMap. + The ICollection of all keys in this ResourceQualifierObservableMap. + + + Returns the qualifier name at the specified key in the observable map. + The qualifier name associated with the specified key. + The key to locate in the observable map. + + + Occurs when the map changes. + + + Removes an item from the observable map. + The key associated with the item to remove. + + + Removes a specific item from the ResourceQualifierObservableMap. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the ResourceQualifierObservableMap. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of ResourceQualifier objects in the observable map. + The number of ResourceQualifier objects in the map. + + + Returns a value that indicates whether a specified key exists in the ResourceQualifierObservableMap. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ResourceQualifierObservableMap; otherwise, false. + The key to check for in the ResourceQualifierObservableMap. + The item, if it exists. Contains null if the item does not exist in the ResourceQualifierObservableMap. + + + Gets an ICollection object containing the values of the ResourceQualifierObservableMap . + The ICollection of all values in this ResourceQualifierObservableMap. + + + An unchangeable view into a vector of ResourceQualifier objects. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the view. + The iterator. The current position of the iterator is index 0, or the end of the view if the view is empty. + + + Returns the ResourceQualifier at the specified index in the view. + The ResourceQualifier at the specified index. + The zero-based index of the ResourceQualifier in the view to return. + + + Returns the ResourceQualifier objects that start at the specified index in the view. + The number of objects returned. + The zero-based index of the start of the objects in the view to return. + The objects in the view that start at startIndex. + + + Returns the index of a specified ResourceQualifier in the view. + A Boolean that is TRUE if the object is found, otherwise FALSE if the object is not found. + The ResourceQualifier to find in the set. + The zero-based index of the object, if found. The method returns zero if the object is not found. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the number of ResourceQualifier objects in the view. + The number of objects in the view. + + + Enables the indexing of source resource files or containers, generating named resource candidates using particular file and folder naming conventions. + + + Represents a single possible value for a given resource, and the qualifiers associated with that resource. + + + Returns the value of a qualifier, given its name. + The value of the qualifier. + The name of the qualifier. + + + Gets the list of metadata name value pairs. + A list of string pairs, each containing the name of an IndexedResourceQualifier and its value. + + + Gets the list of IndexedResourceQualifiers. + A list of IndexedResourceQualifiers. + + + Gets the type property that determines whether the resource is a file or a string. + A value from the IndexedResourceType enumeration. + + + Gets the named resource Uri. + The named resource Uri. + + + Gets the value of the candidate as a String. + If the candidate is a file, the value is a file path (such as images\logo.scale-100.png) relative to the project root passed to the ResourceIndexer constructor. If the candidate is a string, the value is the actual string (such as Hello World). + + + Represents an object that declares under what context a resource is appropriate. + + + Gets the name of the qualifier. + The name of the qualifier, such as language, contrast, or scale. + + + Gets the value of the qualifier. + The value of the qualifier. The case of the qualifier value should be preserved from the first instance of the qualifier discovered during indexing.Examples of the qualifier value are:100, 140, or 180 for scale.fr-FR for language.high for contrast. + + + Indexes source resource files or containers, and generates named resource candidates using particular file and folder naming conventions. + + + Creates a new ResourceIndexer. + + + Creates a new ResourceIndexer specifying the root of the project files. + The project root folder (file:// URI). + + + Creates a new ResourceIndexer specifying the root of the project files and an extension DLL. + The project root folder (file:// URI). + The extension DLL path (file:// URI). + + + Indexes a ResW, ResJSON, PRI, or PRI XML dump file path for file and folder naming conventions, and applies the qualifiers to the resources found within the contents of the file. + A list of IndexedResourceCandidate objects found within file. This is an empty list if nothing is found. + The file to be indexed (file:// URI). The path must be an absolute path with the drive letter specified. The Uri can also provide an empty authority which is assumed to be the local file system. Long file paths are not supported. + + + Indexes a file path for file and folder naming conventions. + An IndexedResourceCandidate object that represents the indexed file resource. + The file to be indexed (file:// URI). The path must be an absolute path with the drive letter specified. The Uri can also provide an empty authority which is assumed to be the local file system. Long file paths are not supported. + + + Specifies whether an IndexedResourceCandidate is a file or a string. + + + The IndexedResourceCandidate is a string. + + + The IndexedResourceCandidate is a file. + + + Reserved. + + + An object that provides linguistic information about query text that the user is entering through an Input Method Editor (IME). + An object that provides linguistic information about the query text. + + + Provides support for the search pane in apps that participate in the Search contract. The search pane opens when users activate the Search charm and provides a consistent, touch-friendly search box and optional search suggestions. + + + Stores settings that determine whether the app provides suggestions based on local files, and that define the criteria used to locate and filter these suggestions. + + + An Advanced Query Syntax (AQS) string that limits the types and kinds of files that are used to provide suggestions. + The Advanced Query Syntax (AQS) string that is used to refine which local, indexed files are used to provide suggestions. By default, this string is empty. Learn more about Advanced Query Syntax (AQS) in Advanced Query Syntax (AQS). + + + Indicates whether suggestions based on local files are displayed in the search pane. + True if suggestions from local files are displayed; otherwise, false. The default value of the object is false. + + + Creates a new instance of the localContentSuggestionSettings class. + + + A list of the storageFolder objects that contain files that are used to provide suggestions. + The list of storageFolder locations that contain files that are used to provide suggestions. By default, this list is empty and suggestions are provided from the local files in all of the libraries for which the app declared capabilities. + + + A list of the file properties whose values are used to provide suggestions from local files. + The list of the file properties that are used to provide suggestions from local files. By default, this list is empty and all of the file properties that are available for suggestions are used. + + + Represents and manages the search pane that opens when a user activates the Search charm. + + + Hides the current app's UI. + + + Retrieves an instance of the search pane from which users can search within the app. + An instance of the search pane, which provides a consistent, touch-friendly search box and optional search suggestions for searching within the current application. + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + The placeholder text in the search box when the user hasn't entered any characters. + The placeholder text to display in the search box. + + + Fires when the user changes the text in the search box. + + + Fires when the user submits the text in the search box and the app needs to display search results. + + + The current text in the search box of the search pane. + The current query text. If the search pane was not used, this is an empty string. + + + Fires when the user selects one of the suggested results that was provided by the app and displayed in the search pane. + + + A string that identifies the context of the search and is used to store the user's search history with the app. + The search history context string. + + + Indicates whether the user's previous searches with the app are automatically tracked and used to provide suggestions. + True if the user's search history is automatically tracked and used to provide suggestions; otherwise false. The default value is true. + + + Specifies whether suggestions based on local files are automatically displayed in the search pane, and defines the criteria that Windows uses to locate and filter these suggestions. + The new settings for local content suggestions. + + + Shows the search pane. + + + Shows the search pane with the specified initial query string. + The initial query string. + + + Gets or sets whether the user can open the search pane by typing. + True if the user can type to search. Otherwise, false. + + + Fires when the user's query text changes and the app needs to provide new suggestions to display in the search pane. + + + Fires when the user opens or closes the search pane. + + + Indicates whether the search pane is open. + True if the search pane is being displayed; otherwise false. + + + Attempts to set the text in the search box of the search pane. + True if the search box text was set successfully. Otherwise, false. + The query text to show in the search pane's search box. + + + Provides data for a querychanged event that is associated with a searchPane object. + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + An object that provides linguistic information about query text that the user is entering through an Input Method Editor (IME). + An object that provides linguistic information about the query text. + + + The text in the search box when the querychanged event fired. + The text in the search box when the querychanged event fired. + + + Provides information about query text that the user enters through an Input Method Editor (IME). + + + A list of the text alternatives for the current query text. These alternatives account for uncomposed text the user is entering in an IME. + A list of the text alternatives for the query text. + + + The length of the portion of the query text that the user is composing with an Input Method Editor (IME). + The length of the portion of the query text that the user is composing with an Input Method Editor (IME). + + + The starting location of the text that the user is composing with an Input Method Editor (IME). + The starting location of the query text that the user is composing with an Input Method Editor (IME). + + + Provides data for a querysubmitted event that is associated with a searchPane + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + The text that was submitted through the search pane. + The submitted query text. + + + Provides data for a resultsuggestionchosen event that is associated with a searchPane object. + + + The tag for the suggested result that the user selected. + The app-defined tag for the selected search result. + + + Enables the app to signal when it has finished populating a searchSuggestionCollection object while handling the suggestionsrequested event. + + + Signals that the app has finished populating a searchSuggestionCollection object while handling the suggestionsrequested event. + + + Stores suggestions and information about the request for suggestions. + + + Retrieves an object that lets an app respond to a request for suggestions asynchronously. + An object that lets an app signal when it has fulfilled the request for search suggestions. + + + Indicates whether the request for suggestions to display is canceled. + True if the request was canceled, otherwise false. The default value is false. + + + The suggestions to display in the search pane for the current query. Apps provide suggestions to display by appending them to this searchSuggestionCollection object. + The suggestions to display. Apps provide suggestions by appending them to this searchSuggestionCollection object. + + + Provides data for a suggestionsrequested event that is associated with a searchPane object. + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + An object that provides linguistic information about query text that the user is entering through an Input Method Editor (IME). + An object that provides linguistic information about the query text. + + + The text that the app should provide suggestions for and that was in the search box when the suggestionsrequested event fired. + The query text that the app should provide suggestions for. + + + An object that stores suggestions and information about the request. + The object that stores suggestions and information about the request. + + + Provides data for a visibilitychanged event that is associated with a searchPane object. + + + Indicates whether the search pane is open. + True if the search pane is open; otherwise false. + + + Provides information about query text that the user enters through an Input Method Editor (IME). + + + A list of the text alternatives for the current query text. These alternatives account for uncomposed text the user is entering in an IME. + A list of the text alternatives for the query text. + + + The length of the portion of the query text that the user is composing with an Input Method Editor (IME). + The length of the portion of the query text that the user is composing with an Input Method Editor (IME). + + + The starting location of the text that the user is composing with an Input Method Editor (IME). + The starting location of the query text that the user is composing with an Input Method Editor (IME). + + + Initializes a new instance of the SearchQueryLinguisticDetails class. + A list of the text alternatives for the current query text. + The starting location of the text that the user is composing with an Input Method Editor (IME). + The length of the portion of the query text that the user is composing with an Input Method Editor (IME). + + + Represents a collection of search suggestions to be displayed in the search pane in response to a suggestionsrequested event. + + + Appends a query suggestion to the list of search suggestions for the search pane. + The text of the query suggestion. + + + Appends a list of query suggestions to the list of search suggestions for the search pane. + The list of query suggestions. + + + Appends a suggested search result to the list of suggestions to display in the search pane. + The text of the suggested result. + The detail text for the suggested result. + The unique tag that identifies this suggested result.If this suggested result is selected by the user, a resultsuggestionchosen event is fired. When the app handles this event, it can get the tag of the chosen result suggestion from the searchPaneResultSuggestionChosenEventArgs.tag property. + The image to accompany the results suggestion. The image should be 40 x 40. Windows will scale or crop smaller or larger images. + The alternate text for the image. + + + Appends a text label that is used to separate groups of suggestions in the search pane. + The text to use as a separator. This text should be descriptive of any suggestions that are appended after it. + + + Appends a file to the list of search suggestions for the search pane or search box. + The storage file to append. + + + The number of suggestions in the collection. + The number of suggestions. + + + Stores suggestions and information about the request for suggestions. + + + Gets an object that lets an app respond to a request for suggestions asynchronously. + An object that lets an app signal when it has fulfilled the request for search suggestions. + + + Indicates whether the request for suggestions to display is canceled. + True if the request was canceled, otherwise false. The default value is false. + + + The suggestions to display in the search pane or in-app search box for the current query. Apps provide suggestions to display by appending them to this SearchSuggestionCollection object. + The suggestions to display. Apps provide suggestions by appending them to this SearchSuggestionCollection object. + + + Enables the app to signal when it has finished populating a SearchSuggestionCollection object while handling the SuggestionsRequested event. + + + Signals that the app has finished populating a SearchSuggestionCollection object while handling the SuggestionsRequested event. + + + Provides data for a querychanged event that is associated with a searchPane object. + + + The Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + An object that provides information about query text that the user is entering through an Input Method Editor (IME). + An object that provides information about query text. + + + The text in the search box when the querychanged event fired. + The current query text. + + + Provides access to search suggestions for the in-app SearchBox control and the search pane. + + + Provides data for the RequestingFocusOnKeyboardInput event. + + + Specifies the type of a SearchSuggestion. + + + The suggestion is a query suggestion. + + + The suggestion is a result suggestion. + + + Represents a separator between search suggestions that's useful for grouping. + + + Enables access to the search suggestions that the SearchSuggestionManager provides. + + + Gets the value that was passed to the detailText parameter of the AppendResultSuggestion method. + The detail text, or null if the search suggestion is not a Result. + + + Gets the value that was passed to the image parameter of the AppendResultSuggestion method. + The image, or null if the search suggestion is not a Result. + + + Gets the value that was passed to the imageAlternateText parameter of the AppendResultSuggestion method. + The alternate text for Image, or null if the search suggestion is not a Result. + + + Gets the type of suggestion. + The type of suggestion. + + + Gets the value that was passed to the tag parameter of the AppendResultSuggestion method. + The tag, or null if the search suggestion is not a Result. + + + Gets the localized text of the suggestion for display in the search suggestions UI. + The text to display. + + + Manages access to search suggestions for the in-app SearchBox control. + + + Stores the specified query in the search history. + The query. + + + Stores the specified query and input language in the search history. + The query. + The input language. The input language ensures that the query string is displayed in the search history for the correct language. + + + Clears all search history contexts for the current app. + + + Raised when the user presses a key that initiates type-to-search. + + + Identifies the context of the search and is used to store the user's search history with the app. + The search history context string. + + + Indicates whether the user's previous searches with the app are automatically tracked and used to provide suggestions. + True if the user's search history is automatically tracked and used to provide suggestions; otherwise false. The default value is true. + + + Initializes a new instance of the SearchSuggestionManager class. + + + Specifies whether suggestions based on local files are added automatically to the Suggestions collection, and defines the criteria that Windows uses to locate and filter these suggestions. + The new settings for local content suggestions. + + + Assigns the current search query. + The query. + + + Assigns the current search query with the specified input language. + The query. + The input language. + + + Assigns the current search query with the specified input language and Input Method Editor (IME) info. + The query. + The input language. + Info about the query text that the user enters through an Input Method Editor (IME). + + + Gets the search suggestions for the current search query. + The search suggestions. + + + Raised when the user's query text changes and the app needs to provide new suggestions to display in the search box. + + + Provides data for the SuggestionsRequested event. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + Gets an object that provides linguistic information about query text that the user is entering through an Input Method Editor (IME). + An object that provides linguistic information about the query text. + + + The text that the app should provide suggestions for and that was in the search box when the SuggestionsRequested event was raised. + The query text that the app should provide suggestions for. + + + Gets an object that stores suggestions and information about the request. + The object that stores suggestions and information about the request. + + + Provides types and members for interacting with the Windows Store. You can use the members of this class to check the license state of the app and determine if it's a trial version or an active license. You can also check in-app features and enable in-app purchases. This class also allows you to simulate these functions before you submit the app to the Windows Store. + + + Defines methods and properties you can use to get license and listing info about the current app and perform in-app purchases. + + + The ID of the app that is created by the Windows Store. + The GUID that identifies the app in the Windows Store. + + + Gets the license metadata for the current app. + The license metadata for the current app. + + + Gets the Uniform Resource Identifier (URI) of the app's listing page in the web catalog of the Windows Store. + The Uniform Resource Identifier (URI) of the app's listing page in the Windows Store. + + + Requests all receipts for this app and any in-app purchases. + An XML-formatted string that contains all receipts for this app and any in-app purchases. + + + Requests the receipt for the productId specified. + An XML-formatted string that contains the receipt for the specified productId. + The unique identifier for the product that you specified this identifier when you submitted the app to the Windows Store + + + Returns a list of purchased consumables that have not been fulfilled. + A list of unfulfilled consumables. Each item of this list provides the product ID, offer ID, and transaction ID associated with a consumable. + + + Loads the app's listing information asynchronously. Implements the IAsyncInfo interface. + The apps' listing information. If the method fails, it returns an HRESULT error code. + + + Windows Phone only. Loads the app listing information asynchronously, returning features and products in the ProductListings collection that match all supplied keywords. Implements the IAsyncInfo interface. + The app's listing information, with ProductListings collection filtered by keywords. If the method fails, it returns an HRESULT error code. If no products or features are found that match all of the given keywords, the ProductListings collection will be empty. + The list of keywords by which to filter the ProductListings collection that is returned in the ListingInformation object. + + + Windows Phone only. Loads the app listing information asynchronously, returning features and products in the ProductListings collection that match any of the given products IDs. Implements the IAsyncInfo interface. + The app's listing information, with ProductListings collection filtered by product IDs. If the method fails, it returns an HRESULT error code. If no products or features are found that match the given product IDs, the ProductListings collection will be empty. + The list of product IDs by which to filter the ProductListings collection. + + + Notifies the Windows Store that the purchase of a consumable is fulfilled and that the user has the right to access the content. + A value that indicates the status of fulfillment for an in-app consumable purchase. Possible values are defined by the FulfillmentResult enumeration. + Identifies the consumable. + Identifies a transaction that includes the purchase of the consumable (productId). + + + Windows Phone only. Notifies the marketplace that the application has delivered the paid-for goods to the user. You cannot repurchase a product until you have confirmed its delivery using this method + The ID of the product that has been delivered to the user. + + + Creates the async operation that enables the user to buy a full license for the current app. + If the includeReceipt parameter is set to true, this string contains XML that represents all receipts for the app and any in-app purchases. If includeReceipt is set to false, this string is empty. + Determines if the method should return the receipts for this app. + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + The results of the in-app purchase request. + The product ID used for listing in the Windows Store. + The specific app feature or content offer within the large purchase catalog represented on the Windows Store by the productId. This value correlates with the content your app is responsible for fulfilling. The Windows Store only uses this value to itemize the PurchaseResults. + The name of the app feature or content offer that is displayed to the user at time of purchase. + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + RequestProductPurchaseAsync(productId, includeReceipt) may be altered or unavailable for releases after Windows 8.1. Instead, use RequestProductPurchaseAsync(productId). + A string providing in-app transaction details for the provided productId. If includeReceipt is set true, the returned string will include a full receipt xml. + Specifies the id of the product or feature to purchase. + Determines if the method should return the receipts for the specified productId. + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + The results of the in-app purchase request. + Specifies the id of the product or feature to purchase. + + + Defines methods and properties used to instantiate an object that you can use to get simulated license info during testing. + + + Gets a simulated app ID. + The GUID that identifies the app in the Windows Store. + + + Gets the simulated license metadata for the current app as provided by the simulation. + The license metadata for the current app as provided by the simulation. + + + Gets the simulated Uniform Resource Identifier (URI) that represents a Windows Store listing page for the current app. + The Uniform Resource Identifier (URI) of the Windows Store listing page for the current app as defined by the simulation. + + + Creates the async operation that the user can use to simulate requesting all receipts for this app and any in-app purchases. + An XML-formatted string that contains all receipts for this app and any in-app purchases. + + + Creates the async operation that the user can use to simulate requesting the receipt for the productId specified. + An XML-formatted string that contains the receipt for the specified productId. + The unique identifier for the product that you specified this identifier when you submitted the app to the Store. + + + Returns a list of purchased consumables that have not been fulfilled. + A list of unfulfilled consumables. Each item of this list provides the product ID, offer ID, and transaction ID associated with a consumable. + + + Loads the simulated app listing information asynchronously. Implements the IAsyncInfo interface. + The app listing information as defined by the simulation. If the method fails, it returns an HRESULT error code. + + + Reloads the simulator using a StorageFile containing the WindowsStoreProxy.xml file. + The async operation that reloads the simulator. + The WindowsStoreProxy.xml file that the simulator uses. For more information, see CurrentAppSimulator. + + + Creates the async operation that simulates a user request to buy a full license for the current app. + If the includeReceipt parameter is set to true, this string contains XML that represents all receipts for the app and any in-app purchases. If includeReceipt is set to false, this string is empty. + Determines if the method should return the receipts for this app. + + + Simulates notifying the Windows Store that the purchase of a consumable is fulfilled and that the user has the right to access the content. + A value that indicates the status of fulfillment for a simulated in-app consumable purchase. + Identifies the consumable. + Identifies a simulated transaction that includes the purchase of the consumable (productId). + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + RequestProductPurchaseAsync(productId, includeReceipt) may be altered or unavailable for releases after Windows 8.1. Instead, use RequestProductPurchaseAsync(productId). + A string providing in-app transaction details for the provided productId. If includeReceipt is set true, the returned string will include a full receipt xml. + Specifies the id, as defined by the simulation, of the product or feature to buy. + Determines if the method should return the receipts for the specified productId. + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + The results of the in-app purchase request. + The product ID used for listing in the Windows Store. + The specific app feature or content offer within the large purchase catalog represented on the Windows Store by the productId. This value correlates with the content your app is responsible for fulfilling. The Windows Store only uses this value to itemize the PurchaseResults. + The name of the app feature or content offer that is displayed to the user at time of purchase. + + + Creates the async operation that displays the UI that is used to simulate an in-app purchase of content or a feature from the Windows Store. + A PurchaseResults object containing in-app transaction details for the provided productId. + Specifies the id, as defined by the simulation, of the product or feature to buy. + + + Provides access to the current app's license metadata. + + + Gets the license expiration date and time relative to the system clock. + The date and time that the app's trial license will expire. + + + Gets the value that indicates whether the license is active. + Returns true if the license is active, and otherwise false. May return false if the license is missing, expired, or revoked. + + + Gets the value that indicates whether the license is a trial license. + Returns true if the license is a trial license, and otherwise false. + + + Raises a notification event when the status of the app's license changes. + + + Gets the associative list of licenses for the app's features that can be bought through an in-app purchase. + The associative list of feature licenses. + + + Provides the listing info that describes the app in the Windows Store. + + + Gets the age rating for the app. + The age rating. + + + Gets the country code associated with the user's location, such as US or CA, that is used to identify their market for transactions in the current session. + The country code associated with the user's location, such as US or CA. + + + Gets the app's description in the current market. + The app's description in the current market. + + + Gets the app's purchase price formatted for the current market and currency. + The app's purchase price with the appropriate formatting for the current market and currency. + + + Gets the app's name in the current market. + The app's name in the current market. + + + Gets information about the features and products that can be bought by making in-app purchases. + The array of ProductListing objects that describes the app's in-app offers. + + + Provides info about a license that is associated with an in-app offer. + + + Gets the expiration date and time of the license. + The date and time that the product's license expires. + + + Gets the value that indicates whether the feature's license is active. + Returns true if the feature's license is active, and otherwise false. This property may return false if the license is missing, expired, or revoked. + + + Windows Phone only. Gets whether this product is a consumable. A consumable product is a product that can be purchased, used, and purchased again. + true if the product is a consumable; Otherwise, false. + + + Gets the ID of an app's in-app offer. + The ID specified in the Dashboard to identify this in-app offer. + + + Provides localized info about an in-app offer in your app. + + + Windows Phone only. Gets the description for the product. + The description for the product. + + + Gets the app's purchase price with the appropriate formatting for the current market. + The app's purchase price with the appropriate formatting for the current market. + + + Windows Phone only. Gets the URI of the image associated with this product. + The URI of the image associated with this product. + + + Windows Phone only. Gets the list of keywords associated with this product. These keywords are useful for filtering product lists by keyword, for example, when calling LoadListingInformationByKeywordsAsync. + The keywords associated with this product. + + + Gets the descriptive name of the product or feature that can be shown to customers in the current market. + The feature's descriptive name as it is seen by customers in the current market. + + + Gets the ID of an app's feature or product. + The ID of an app's feature. + + + Gets the type of this product. Possible values are defined by ProductType. + The type of this product. Possible values include Consumable and Durable. + + + Windows Phone only. Gets the tag string that contains custom information about this product. + The tag for this product. + + + Used to provide the product name that is displayed to the user at time of purchase. This class is used in the creation of a RequestProductPurchaseAsync operation to visually represent a specific offer within a large catalog of in-app purchases that is represented by a single product in the Store. + + + Creates an instance of ProductPurchaseDisplayProperties. + + + Creates an instance of ProductPurchaseDisplayProperties that includes the specified product name to display to the user. + The product name displayed to the user. + + + Windows Phone only. This is an internal product description. + Internal product description. + + + Gets or sets the location of an image used to represent the product at time of purchase. + The image location. + + + Gets or sets the name of the product or feature that is displayed to the user at time of purchase. + The product name. + + + Contains information detailing the results of an in-app purchase. + + + A unique ID used to identify a specific in-app purchase item within a large purchase catalog. + Unique string used to correlate a particular in-app purchase item with a purchase from a large catalog. + + + A full receipt that provides a transaction history for the in-app purchase. + An XML-formatted string. + + + The current state of the in-app purchase. + A purchase state value defined by the ProductPurchaseStatus enumeration. + + + A unique transaction ID associated with a purchase of the consumable. + A unique ID associated with a transaction. + + + Contains purchase and product information for an unfulfilled consumable. + + + A unique ID used to identify a consumable within a large purchase catalog. + The offer ID. + + + A unique ID used to identify the product offered by this consumable. + The product ID. + + + A unique ID used to identify the transaction that included the purchase of this consumable. + The transaction ID. + + + Represents the method that will handle the LicenseChanged event. + + + Defines values used to indicate fulfillment status for an in-app consumable purchase. + + + The in-app consumable purchase was fulfilled. + + + The specified transaction ID has been passed or the consumables assoc transaction ID has already been fulfilled. + + + The purchase has not yet cleared. At this point it is still possible for the transaction to be reversed due to provider failures and/or risk checks. + + + The purchase request has been reverted. + + + There was an issue receiving fulfillment status. + + + Defines values used to indicate the transaction status of an in-app purchase. + + + The purchase succeeded and the user has been informed. + + + The purchase did not occur because this in-app purchase has already been purchased by the user, and it cannot be purchased again. + + + The purchase did not occur because a previous purchase of this consumable has not been fulfilled. + + + The purchase did not occur because the user decided not to complete the purchase (or the purchase failed for other reasons). + + + Specifies the product type for a product. + + + The product type is unknown. + + + A durable product. + + + A consumable product. + + + Provides utility classes for working with HTML. + + + Provides utility methods for use with HTML-formatted data. + + + Converts HTML-formatted data to a string that contains the text content extracted from the HTML. + A String of text content. + A String containing HTML-formatted data. + + + Provides support for JSON arrays, values, and objects. + + + Represents a JSON array. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the array. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the array. + The iterator object. The iterator's current position is at the 0-index position, or at the array end if the array is empty. + + + Gets the JsonArray if the ValueType of the encapsulated value is Array. + The JsonArray. + + + Gets the JsonArray at the specified index if the ValueType of the encapsulated value is Array + The JsonArray at the specified index. + The specified index. + + + Returns the item located at the specified index. + The JsonValue at the specified index. + The integer index for the value to retrieve. + + + Gets the Boolean value if the ValueType of the encapsulated value is Boolean. + The Boolean value. + + + Gets the Boolean value at the specified index if the ValueType of the value at that index is Boolean. + The Boolean value at the specified index. + The specified index. + + + Gets all array items of type IJsonValue, starting from a specified index. + The index of items within the range of elements in an array that starts at startIndex. + The starting index. + Returns items of the IJsonValue. + + + Gets the number (a Double) if the ValueType of the encapsulated value is Number. + The number value. + + + Gets the number (a Double) at the specified index if the ValueType of the value at that index is Number. + The number value at the specified index. + The specified index. + + + Gets the JsonObject if the ValueType of the encapsulated value is Object. + The JsonObject. + + + Gets the JsonObject at the specified index if the ValueType of the encapsulated value is Object. + The JsonObject at the specified index. + The specified index. + + + Gets the String if the ValueType of the encapsulated value is String. + The String value. + + + Gets the String at the specified index if the ValueType of the encapsulated value is String. + The String value at the specified index. + The specified index. + + + Gets a JsonArray view. + The JsonArray view. + + + Searches for a JsonValue object and returns the zero-based index of its first occurrence within the JsonArray. + Returns a Boolean value indicating if an occurrence of value was found. + The IJsonValue to look up. + The zero-based index of the first occurrence of item within the JsonArray, if found; otherwise, -1. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts a JsonValue into an array at the specified index. + The zero-based index at which the item should be inserted. + The IJsonValue object to insert. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Parses the specified JSON string that represents a JsonArray. + The specified JSON string. + + + Removes the first occurrence of a specific object from the collection. + True if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the array. + + + Clears the array and then inserts the provided collection of JsonValue objects as new array items. + The new collection items. + + + Sets the value at the specified index using the provided JsonValue. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the array. + The count of items in the array. + + + Returns the JSON representation of the encapsulated value. + A JSON representation of the encapsulated value. + + + Parses the provided string into a JsonArray. + True if the JsonValue object was successfully created; otherwise, false. + The specified string. + The new JsonArray object. + + + Gets the type of the values within the array. Possible types are defined by JsonValueType. + The JSON value type. + + + Creates a new JsonArray object that represents a JSON array. + + + Represents an error encountered while parsing JSON data. + + + Gets the specific error using the returned HRESULT value. Possible values are defined by JsonErrorStatus. + GetStatus may be altered or unavailable for releases after Windows 8.1. Instead, use GetJsonStatus. + The error encountered. + An HRESULT returned during the operation. + + + Represents a JSON object containing a collection of name and JsonValue pairs. + + + Adds an item to the JsonObject. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the JsonObject. + The key-value pair to add. + + + Removes all items from the collection. + + + Returns a value that indicates whether a specified key-value pair exists in the JsonObject. + true if an item with that key exists in the JsonObject; otherwise, false. + The key-value pair to check for in the JsonObject. + + + Returns a value that indicates whether a specified key exists in the JsonObject. + true if an item with that key exists in the JsonObject; otherwise, false. + The key to check for in the JsonObject. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the key/value pairs in the JsonObject. + The iterator object. The iterator's current position is at the 0-index position, or at the array end if the array is empty. + + + Returns a JsonArray if the ValueType of the encapsulated value is Array. + The JsonArray. + + + Gets a Boolean if the ValueType of the encapsulated value is Boolean. + The Boolean value. + + + Gets the JsonArray value with the specified name, or NULL if no such named value is found. + The JsonArray with the specified name. The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the JsonArray is not contained in the JsonObject + The name. + + + Gets the Boolean value with the specified name, or NULL if no such named value is found. + The Boolean value with the specified name. The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the Boolean is not contained in the JsonObject + The name. + + + Gets the number value (a Double) with the specified name, or NULL if no such named value is found. + The Double value with the specified name.The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the specified Double is not contained in the JsonObject + The name. + + + Gets the JsonObject value with the specified name, or NULL if no such named value is found. + The JsonObject with the specified name.The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the specified JsonObject is not contained in the JsonObject + The name. + + + Gets the String value with the specified name, or NULL if no such named value is found. + The String value with the specified name.The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the String is not contained in the JsonObject + The name. + + + Gets the specified JsonObject value. + The JSON value.The exception WEB_E_JSON_VALUE_NOT_FOUND is returned if the specified value is not contained in the JsonObject + The specified name for the JsonObject. + + + Gets the number (a Double) if the ValueType of the encapsulated value is Number. + The number value. + + + Gets the JsonObject if the ValueType of the encapsulated value is Object. + The encapsulated JsonObject. + + + Gets the String if the ValueType of the encapsulated value is String. + The String value. + + + Gets a JsonObject view. + The JsonObject view. + + + Indicates whether the JsonObject has an entry with the requested key. + true if the JsonObject has an entry with the requested key; otherwise, false. + The requested key. + + + Adds a new entry to the JsonObject. + true if calling the method replaced a value that already existed for the key; false if calling the method defined a new key. + The key to insert. + The IJsonValue to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the JsonObject. + The ICollection of all keys in this JsonObject. + + + Gets the JSON value associated with the supplied key, if an entry with that key exists. + If the call is successful, the JSON value. + The requested key. + + + Parses the specified JSON string that represents a JsonObject into a JSON value. + The specified JSON string. + + + Removes the JSON object associated with the specified key. + The key for the JSON object to be deleted. + + + Removes a specific item from the JsonObject. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the JsonObject. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Sets the value of the first JsonValue object with the specified name to the specified value. If no such object is found, a new name and JsonValue pair is inserted into the JSON object. + The specified name. + The specified value. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Retrieves the JSON representation of the encapsulated value. + A JSON representation of the encapsulated value. + + + Returns a value that indicates whether a specified key exists in the JsonObject. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the JsonObject; otherwise, false. + The key to check for in the JsonObject. + The item, if it exists. Contains null if the item does not exist in the JsonObject. + + + Parses the specified string that represents a JSON object into a JsonObject. + True if the JsonValue object was successfully created; otherwise, false. + The specified JSON string. + The resultant JsonObject. + + + Gets an ICollection object containing the values of the JsonObject . + The ICollection of all values in this JsonObject. + + + Gets the type of the encapsulated JSON value. Possible types are defined by JsonValueType. + The JSON value type. + + + Initializes a new instance of a JsonObject that represents a JSON object containing a collection of name and JsonValue pairs. + + + Implements the IJsonValue interface which represents a JSON value. + + + Creates a JsonValue from a Boolean. + The JsonValue. + The value to store in the JsonValue. + + + Creates a JsonValue from a Number (Double). + The JsonValue. + The Number to store in the JsonValue. + + + Creates the string for a JsonValue. + The JsonValue. + The string for the JsonValue. + + + Gets an array if the ValueType of the encapsulated value is Array. + The JsonArray. + + + Gets the Boolean if the ValueType of the encapsulated value is Boolean. + The Boolean value. + + + Gets the number (a Double) if the ValueType of the encapsulated value is Number. + The number value. + + + Gets a JsonObject if the ValueType of the encapsulated value is Object. + The JsonObject. + + + Gets a String if the ValueType of the encapsulated value is String. + The String value. + + + Parses the specified JSON string into a JSON value. + The specified JSON string. + + + Retrieves the JSON representation of the encapsulated value. + A JSON representation of the encapsulated value. + + + Parses the specified string into a JsonValue. + True if the JsonValue object was successfully created; otherwise, false. + The specified string. + The new JsonValue object. + + + Gets the type of the encapsulated JSON value. Possible types are defined by JsonValueType. + The JSON value type. + + + Defines errors encountered while parsing JSON data. + + + An unknown error occurred. + + + The string is invalid. It is possible the expressed value type of the JSON encapsulated data type does not match what is defined by JsonValueType. + + + The number is invalid. It is possible the expressed value type of the JSON encapsulated data type does not match what is defined by JsonValueType. + + + The specified JsonValue cannot be found. + + + This operation exceeds the internal limit of 1024 nested JSON objects. + + + Specifies the JSON value type of a JsonValue object. + + + The JsonValue object is Null. + + + The JsonValue object is a Boolean. + + + The JsonValue object is a Double. + + + The JsonValue object is a String. + + + The JsonValue object is an Array. + + + The JsonValue object is an Object. + + + Encapsulates a JSON value. + + + Returns a pointer to the array if the ValueType of the encapsulated value is Array. If it is not, an exception is thrown. + A pointer to the encapsulated array. + + + Returns the Boolean if the ValueType of the encapsulated value is Boolean. If it is not, an exception is thrown. + The encapsulated value. + + + Returns the number (a Double) if the ValueType of the encapsulated value is Number. If it is not, an exception is thrown. + The encapsulated value. + + + Returns a pointer to the object if the ValueType of the encapsulated value is Object. If it is not, an exception is thrown. + A pointer to the encapsulated object. + + + Returns the String if the ValueType of the encapsulated value is String. If it is not, an exception is thrown. + The encapsulated String value. + + + Retrieves the JSON representation of the encapsulated value. + A JSON representation of the encapsulated value. + + + Gets the type of the encapsulated JSON value. Possible types are defined by JsonValueType. + The JSON value type. + + + Contains classes for converting a page in a Portable Document Format (PDF) document to an image file. + + + Represents a Portable Document Format (PDF) document. + + + Gets a page from a Portable Document Format (PDF) document. + The Portable Document Format (PDF) page. + The location of the Portable Document Format (PDF) page relative to its parent document. + + + Outputs an asynchronous operation. When the operation completes, a PdfDocument object is returned, which represents a Portable Document Format (PDF) document. + The asynchronous operation. + The file, which represents a Portable Document Format (PDF) document. + + + Outputs an asynchronous operation. When the operation completes, a PdfDocument object is returned, which represents a Portable Document Format (PDF) document. Use this method if the Portable Document Format (PDF) document is password-protected. + The asynchronous operation. + The file, which represents a Portable Document Format (PDF) document. + The password to open the Portable Document Format (PDF) document, if it requires one. + + + Creates a PdfDocument object, representing a Portable Document Format (PDF) document, from a stream of data that represents a Portable Document Format (PDF) document in the file system. + The asynchronous operation. + The stream of data, which represents a Portable Document Format (PDF) document. + + + Creates a PdfDocument object, representing a Portable Document Format (PDF) document, from a stream of data that represents a Portable Document Format (PDF) document in the file system. Use this method if the Portable Document Format (PDF) document is password-protected. + The asynchronous operation. + The stream of data, which represents a Portable Document Format (PDF) document. + The password to open the Portable Document Format (PDF) document, if it requires one. + + + Gets whether the Portable Document Format (PDF) document is password-protected. + True if the Portable Document Format (PDF) document is password-protected; otherwise, false. + + + Gets the number of pages in the Portable Document Format (PDF) document. + The number of pages in the Portable Document Format (PDF) document. + + + Represents a single page in a Portable Document Format (PDF) document. + + + Releases all resources associated with the Portable Document Format (PDF) page. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Begins building the Portable Document Format (PDF) page. After this method finishes, the Portable Document Format (PDF) page is completely built. + Represents the fully-built Portable Document Format (PDF) page. + + + Outputs a stream of data, which represents a Portable Document Format (PDF) page's contents, as an asynchronous action. This asynchronous action can be used to create an image of the Portable Document Format (PDF) page. + The asynchronous action. + The stream of data, which represents a Portable Document Format (PDF) page's content. + + + Takes a set of display settings, applies them to the output of a Portable Document Format (PDF) page's contents, and creates a stream with the customized, rendered output as an asynchronous action. This asynchronous action can be used to create a customized display image of the Portable Document Format (PDF) page. + The asynchronous action. + The stream of data, which represents a Portable Document Format (PDF) page's contents. + The requested set of display settings to apply to the display image that is output based on the Portable Document Format (PDF) page. + + + Gets the group of dimension properties for a single page in a Portable Document Format (PDF) document. + The group of page dimension properties. + + + Gets the relative position of the Portable Document Format (PDF) page within its parent Portable Document Format (PDF) document. + The position of the Portable Document Format (PDF) page relative to its parent Portable Document Format (PDF) document. + + + Gets the Portable Document Format (PDF) page's preferred magnification factor. + The magnification scaling factor to display or print the Portable Document Format (PDF) page. + + + Gets the number of degrees that the Portable Document Format (PDF) page will be rotated when it's displayed or printed. + The number of degrees to rotate the Portable Document Format (PDF) page, expressed as one of the enumeration values. + + + Gets the Portable Document Format (PDF) page's size based on its related CropBox, MediaBox, and Rotation property values. + The Portable Document Format (PDF) page's computed size. + + + Represents the dimensions of a single page in a Portable Document Format (PDF) document. + + + Gets the size of a rectangle that contains the Portable Document Format (PDF) page's contents, including any meaningful surrounding white space, as intended by the Portable Document Format (PDF) page's creator. + The size of the Portable Document Format (PDF) page's contents and any meaningful surrounding white space. + + + Gets the size of a rectangle that specifies the clipped region of a Portable Document Format (PDF) page's contents when it is displayed. + The size of the Portable Document Format (PDF) page's clipped region. + + + Gets the size of a rectangle that specifies the cropped region of a Portable Document Format (PDF) page's contents when it is displayed. + The size of the Portable Document Format (PDF) page's cropped region. + + + Gets the size of a rectangle that defines the boundaries of the area that the Portable Document Format (PDF) page will be displayed or printed to. + The size of the Portable Document Format (PDF) page's display or print boundaries. + + + Gets the size of a rectangle that specifies the intended dimensions of the Portable Document Format (PDF) page after it has been trimmed. + The Portable Document Format (PDF) page's trimmed dimensions. + + + Represents display settings for a single page of a Portable Document Format (PDF) document, such as the page's background color and its encoding type. + + + Creates and initializes a new instance of display settings for a single page of a Portable Document Format (PDF) document. + + + Gets or sets the Portable Document Format (PDF) page's background color. + The Portable Document Format (PDF) page's background color. + + + Gets or sets the Portable Document Format (PDF) page's encoding type to be used while the page is being converted to a bitmap. + A BmpEncoderId value representing the unique identifier of the built-in bitmap encoder. + + + Gets or sets the final size of the rendering of the Portable Document Format (PDF) page in device-independent pixels (DIPs). + The Portable Document Format (PDF) page's scaling factor relative to the page's destination display height boundary. + + + Gets or sets the final size of the rendering of the Portable Document Format (PDF) page in device-independent pixels (DIPs). + The Portable Document Format (PDF) page's scaling factor relative to the page's destination display width boundary. + + + Gets or sets whether the Portable Document Format (PDF) page uses the system's high contrast display setting. + False to use high contrast; otherwise, true. + + + Gets or sets a portion of the Portable Document Format (PDF) page to be displayed. + The portion of the Portable Document Format (PDF) page to be displayed. + + + Specifies the number of degrees that a page in a Portable Document Format (PDF) document is rotated in the rendered output. + + + No rotation. + + + A 90-degree rotation. + + + A 180-degree rotation. + + + A 270-degree rotation. + + + Provides support for identifying text segments and for determining the properties of Unicode characters. + + + Identifies an alternate form of the word represented by a WordSegment object. + + + Gets the text of the alternate word form identified by this AlternateWordForm object. + The alternate word form. + + + Gets the normalization format for this current AlternateWordForm object. + The normalization format. + + + Gets the TextSegment that identifies the source text's sub-string for which this AlternateWordForm object is an alternate. + The TextSegment structure that identifies the word in your provided text. + + + Represents the selected word from your provided text. + + + Gets the TextSegment that identifies the source text's sub-string that is the selected word. + The TextSegment structure that identifies the word in your provided text. + + + Gets the text of the selected word identified by this SelectableWordSegment object. + The selected word. + + + A segmenter class that is able to segment provided text into units appropriate for selecting text by words. + + + Creates a SelectableWordsSegmenter object. + A BCP-47 language tag. + + + Determines and returns the selectable word which contains or follows a specified index into the provided text. + A SelectableWordSegment that represents the selected word. + Provided text in which a word is to be selected. + A zero-based index into text. It must be less than the length of text. + + + Determines and returns all of the selectable words in the provided text. + A collection of SelectableWordSegment objects that represent the selectable words. + Provided text containing words to be selected. + + + Calls the provided handler with two iterators that iterate through the selectable words prior to and following a given index into the provided text. + Provided text containing words to be selected. + A zero-based index into text. It must be less than the length of text. + The function that receives the iterators. + + + Gets the language of the rules used by this SelectableWordsSegmenter object. + The BCP-47 language tag of the rules employed. + + + Permits apps to perform text queries using Advanced Query Syntax (AQS) strings, with the option of providing a language tag to be employed in the query. + + + Creates a SemanticTextQuery from an Advanced Query Syntax (AQS) query string. + An Advanced Query Syntax (AQS) string that contains the desired query. Learn more about Advanced Query Syntax (AQS) in Advanced Query Syntax (AQS). + + + Creates a SemanticTextQuery from an Advanced Query Syntax (AQS) query string and a language tag. + An Advanced Query Syntax (AQS) string that contains the desired query. Learn more about Advanced Query Syntax (AQS) in Advanced Query Syntax (AQS). + The BCP-47 language tag to be employed in the query.To see a list of the language tags specifically supported by the Windows Store, see Choosing your languages. + + + Returns segments of a source string that match the SemanticTextQuery object's query. + A collection of TextSegment structures that represent hits from the query. + A source string to be queried. + + + Returns segments of a source string that match the SemanticTextQuery object's query over properties. + A collection of TextSegment structures that represent hits from the query. + A source string to be queried. + The name of the property. + + + Provides a way for apps to get information about Unicode characters. + + + Returns the supplementary Unicode character for the specified high and low surrogate pair. + The supplementary Unicode character. + The high surrogate value. This must be in the proper range: 0xD800 <= highSurrogate <= 0xDBFF. + The low surrogate value. This must be in the proper range: 0xDC00 <= lowSurrogate <= 0xDFFF. + + + Returns the UnicodeGeneralCategory of the specified Unicode character. + The Unicode general category for codepoint. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Returns the UnicodeNumericType of the specified Unicode character. + The Unicode numeric type for codepoint. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Returns the high and low surrogate pair values for the specified supplementary Unicode character. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + The high surrogate value returned. + The low surrogate value returned. + + + Determines if a specified Unicode character can be considered alphabetic. + TRUE if codepoint is alphabetic; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered cased (uppercase, lowercase or titlecase). + TRUE if codepoint is cased; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered the beginning of a grapheme. + TRUE if codepoint is the beginning of a grapheme; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered to continue a previous grapheme. + TRUE if codepoint continues the previous grapheme; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character is a high surrogate. + TRUE if codepoint is a high surrogate; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered a continuation character of an identifier in programming. + TRUE if codepoint is a continuation character of an identifier in programming; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered the start character of an identifier in programming. + TRUE if codepoint is the start character of an identifier in programming; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered a lower case character. + TRUE if codepoint is a lower case character; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character is a low surrogate. + TRUE if codepoint is a low surrogate; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified codepoint is a non-character. + TRUE if codepoint is a non-character; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character is a supplementary character. + TRUE if codepoint is a supplementary character; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered an upper case character. + TRUE if codepoint is an upper case character; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Determines if a specified Unicode character can be considered whitespace. + TRUE if codepoint is whitespace; otherwise FALSE. + A Unicode character. This must be in the proper range: 0 <= codepoint <= 0x10FFFF. + + + Represents a word from your provided text. + + + Gets the alternate forms (if any) associated with the current word. + A collection of AlternateWordForm objects that represent alternate forms of the current word. + + + Gets the TextSegment that identifies the source text's sub-string that is a word. + The TextSegment structure that identifies the word in your provided text. + + + Gets the text of the word identified by this WordSegment object. + The current word. + + + A segmenter class that is able to segment provided text into words. + + + Creates a WordsSegmenter object. + A BCP-47 language tag. + + + Determines and returns the word which contains or follows a specified index into the provided text. + A WordSegment that represents the word. + Provided text from which the word is to be returned. + A zero-based index into text. It must be less than the length of text. + + + Determines and returns all of the words in the provided text. + A collection of WordSegment objects that represent the words. + Provided text containing words to be returned. + + + Calls the provided handler with two iterators that iterate through the words prior to and following a given index into the provided text. + Provided text containing words to be returned. + A zero-based index into text. It must be less than the length of text. + The function that receives the iterators. + + + Gets the language of the rules used by this WordsSegmenter object. + The BCP-47 language tag of the rules employed. + + + Defines the signature of a function that is provided to SelectableWordsSegmenter.Tokenize. + Contains the selectable words, in reverse order, that precede the parameter startIndex that is provided to SelectableWordsSegmenter.Tokenize. + Contains the selectable words that contain or follow the parameter startIndex that is provided to SelectableWordsSegmenter.Tokenize. + + + Defines the signature of a function that is provided to WordsSegmenter.Tokenize. + Contains the selectable words, in reverse order, that precede the parameter startIndex that is provided to WordsSegmenter.Tokenize. + Contains the selectable words that contain or follow the parameter startIndex that is provided to WordsSegmenter.Tokenize. + + + Identifies the normalization format of an AlternateWordForm object. + + + A regular string that has not been recognized as a number, currency, date, or time. + + + A string that has been recognized as a number. + + + A string that has been recognized as a monetary amount. + + + A string that has been recognized as a date. + + + A string that has been recognized as a time. + + + Defines the Unicode general category of a character. + + + Uppercase letter. Signified by the Unicode designation Lu (letter, uppercase). + + + Lowercase letter. Signified by the Unicode designation Ll (letter, lowercase). + + + Titlecase letter. Signified by the Unicode designation Lt (letter, titlecase). + + + Modifier letter character, which is a free-standing spacing character that indicates modifications of a preceding letter. Signified by the Unicode designation Lm (letter, modifier). + + + Letter that is not an uppercase letter, a lowercase letter, a titlecase letter, or a modifier letter. Signified by the Unicode designation Lo (letter, other). + + + Nonspacing character that indicates modifications of a base character. Signified by the Unicode designation Mn (mark, nonspacing), + + + Spacing character that indicates modifications of a base character and affects the width of the glyph for that base character. Signified by the Unicode designation Mc (mark, spacing combining). + + + Enclosing mark character, which is a nonspacing combining character that surrounds all previous characters up to and including a base character. Signified by the Unicode designation Me (mark, enclosing). + + + Decimal digit character, which is a character in the range 0 through 9. Signified by the Unicode designation Nd (number, decimal digit). + + + Number represented by a letter, instead of a decimal digit. For example, the Roman numeral for five, which is V. The indicator is signified by the Unicode designation Nl (number, letter). + + + Number that is neither a decimal digit nor a letter number. For example, the fraction 1/2. The indicator is signified by the Unicode designation No (number, other). + + + Space character, which has no glyph but is not a control or format character. Signified by the Unicode designation Zs (separator, space). + + + Character that is used to separate lines of text. Signified by the Unicode designation Zl (separator, line). + + + Character that is used to separate paragraphs. Signified by the Unicode designation Zp (separator, paragraph). + + + Control code character, with a Unicode value of U+007F or in the range U+0000 through U+001F or U+0080 through U+009F. Signified by the Unicode designation Cc (other, control). + + + Format character that affects the layout of text or the operation of text processes, but is not normally rendered. Signified by the Unicode designation Cf (other, format). + + + High surrogate or low surrogate character. Surrogate code values are in the range U+D800 through U+DFFF. Signified by the Unicode designation Cs (other, surrogate). + + + Private-use character, with a Unicode value in the range U+E000 through U+F8FF. Signified by the Unicode designation Co (other, private use). + + + Connector punctuation character that connects two characters. Signified by the Unicode designation Pc (punctuation, connector). + + + Dash or hyphen character. Signified by the Unicode designation Pd (punctuation, dash). + + + Opening character of one of the paired punctuation marks, such as parentheses, square brackets, and braces. Signified by the Unicode designation Ps (punctuation, open). + + + Closing character of one of the paired punctuation marks, such as parentheses, square brackets, and braces. Signified by the Unicode designation Pe (punctuation, close). + + + Opening or initial quotation mark character. Signified by the Unicode designation Pi (punctuation, initial quote). + + + Closing or final quotation mark character. Signified by the Unicode designation Pf (punctuation, final quote). + + + Punctuation character that is not a connector, a dash, open punctuation, close punctuation, an initial quote, or a final quote. Signified by the Unicode designation Po (punctuation, other). + + + Mathematical symbol character, such as + or =. Signified by the Unicode designation Sm (symbol, math). + + + Currency symbol character. Signified by the Unicode designation Sc (symbol, currency). + + + Modifier symbol character, which indicates modifications of surrounding characters. For example, the fraction slash indicates that the number to the left is the numerator and the number to the right is the denominator. The indicator is signified by the Unicode designation Sk (symbol, modifier). + + + Symbol character that is not a mathematical symbol, a currency symbol or a modifier symbol. Signified by the Unicode designation So (symbol, other). + + + Character that is not assigned to any Unicode category. Signified by the Unicode code designation Cn (other, not assigned). + + + Defines the type of numeral when a Unicode character represents a number. + + + Not a numeric character. + + + A decimal digit in a decimal system that uses 0 through 9. + + + A digit in the range 0 through 9 that is used in special contexts. + + + A character that represents another type of numeric value, such as a fraction. + + + Identifies a sub-string of a source text string. + + + The zero-based index of the start of the associated text segment. + + + The number of characters in the associated text segment. + + + Provides support for the XML Document Object Model (DOM). + + + Represents a parsed or unparsed entity in the XML document. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the child node list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node or NULL if there is no right sibling. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. This value is always NULL. + This value is always NULL. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Gets the notation name. + The notation name. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Returns the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Gets the public identifier associated with the entity. + The public identifier associated with the entity. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Gets the system identifier associated with the entity. + The system identifier associated with the entity. + + + Contains a notation declared in the DTD or schema. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the child node list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node or NULL if there is no right sibling.. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + This value is always NULL. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Gets the public identifier for the notation. + The public identifier for the notation. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expresssion. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Gets the system identifier for the notation. + The system identifier for the notation. + + + Represents an attribute of an XmlElement. Valid and default values for the attribute are defined in a document type definition (DTD) or schema. + + + This method is not applicable to this class and will throw an exception. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + This method is not applicable to this class and will throw an exception. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the child node list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the attribute name. + The attribute name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + This property is not applicable to this class and will always return null. + NULL + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + This property always returns value attributeNode. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + This method is not applicable to this class and will throw an exception. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + This property is not applicable to this class and will throw an exception. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + This property is not applicable to this class and will throw an exception. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expresssion. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Gets a value that indicates whether the attribute is explicitly specified or derived from a default value in the document type definition (DTD) or schema. + True if the attribute is explicitly specified; false if the attribute is derived from a default value. + + + Gets or sets the attribute value. + The attribute value. + + + Represents a CDATA section of an XML document. + + + This method is not applicable to this class. The CDataSection does not have children. This method will throw an exception. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Appends the supplied string to the existing string data. + The data to be appended to the existing string. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. This property always returns NULL. + This property always returns NULL. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets or sets the node data depending on the node type. + The node data. + + + Deletes specified data. + The offset, in characters, at which to start deleting the string data. + The number of characters to delete. + + + Gets the first child node. This property always returns NULL. + The first child node. This property always returns NULL. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. The CDataSection does not have children. This method always returns false. + True if this node has children; otherwise false. This method always returns false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the child node list. This method is not applicable to this class and will throw an exception. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Inserts a string at the specified offset. + The offset, in characters, at which to insert the supplied string data. + The data to be inserted into the existing string. + + + Gets the last child node. This property always returns NULL because the CDataSection does not have children. + The last child node. This property is always NULL. + + + Gets the length of the data, in Unicode characters. + The length of the data, in Unicode characters. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. This method is not applicable to this class as the CDataSection does not have children. This method will throw an exception. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. This method is not applicable to this class as the CDataSection does not have children. This method will throw an exception. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Replaces the specified number of characters with the supplied string. + The offset, in characters, at which to start replacing string data. + The number of characters to replace. + The new data that replaces the old string data. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. This method is not applicable to this class and will throw an exception. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. This method is not applicable to this class and will throw an exception. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expresssion. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. This method is not applicable to this class and will throw an exception. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. This method is not applicable to this class and will throw an exception. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Splits this text node into two text nodes at the specified offset and inserts the new text node into the tree as a sibling that immediately follows this node. + The new text node. + The number of characters at which to split this text node into two nodes, starting from zero. + + + Retrieves a substring of the full string from the specified range. + The returned substring. + Specifies the offset, in characters, from the beginning of the string. An offset of zero indicates copying from the start of the data. + Specifies the number of characters to retrieve from the specified offset. + + + Represents an XML comment. + + + Appends a new child node as the last child of the node. This method is not applicable to this class and it will throw an exception. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Appends the supplied string to the existing string data. + The data to be appended to the existing string. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. This method always returns NULL. + The list of child nodes. This value is always NULL. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets or sets the node data depending on the node type. + The node data. + + + Deletes the specified data. + The offset, in characters, at which to start deleting the string data. + The number of characters to delete. + + + Gets the first child node. This property always returns NULL. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. This method is not applicable to this class and will throw an exception. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Inserts a string at the specified offset. + The offset, in characters, at which to insert the supplied string data. + The data to be inserted into the existing string. + + + Gets the last child node. This property always returns NULL. + The last child node. This property always returns NULL. + + + Gets the length of the data in Unicode characters. + The length of the data, in Unicode characters. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + Gets or sets the text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. This method is not applicable to this class and will throw an exception. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. This method is not applicable to this class and will throw an exception. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Replaces the specified number of characters with the supplied string. + The offset, in characters, at which to start replacing string data. + The number of characters to replace. + The new data that replaces the old string data. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. This method is not applicable to this class and will throw an exception. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. This method is not applicable to this class and will throw an exception. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expresssion. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. This method is not applicable to this class and will throw an exception. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. This method is not applicable to this class and will throw an exception. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Retrieves a substring of the full string from the specified range. + The returned substring. + Specifies the offset, in characters, from the beginning of the string. An offset of zero indicates copying from the start of the data. + Specifies the number of characters to retrieve from the specified offset. + + + Represents the top level of the XML source. This class includes members for retrieving and creating all other XML objects. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. This method is not applicable to this class. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Creates a new attribute with the specified name. + The newly created attribute. + The name of the new attribute object. This name is subsequently available as the new node's NodeName property. + + + Creates a new attribute with the specified namespace and name. + The newly created attribute. + The name of the desired namespace or a null value if no namespace is desired. + The name of the new attribute object. This name is subsequently available as the new node's NodeName property. + + + Creates a CDATA section node that contains the supplied data. + The newly created object. + The value to be supplied to the new CDATA section object's NodeValue property. + + + Creates a comment node that contains the supplied data. + The newly created comment node. + The value to be supplied to the new comment object's NodeValue. + + + Creates an empty XmlDocumentFragment object. + The newly created object. + + + Creates an element node using the specified name. + The newly created object. + The name for the new element node. The string is case-sensitive. This name is subsequently available as the element node's NodeName property. + + + Creates an element node using the specified namespace and name. + The newly created object. + The name of the desired namespace or a null value if no namespace is desired. + The name for the new element node. It is case-sensitive. This name is subsequently available as the element node's NodeName property. + + + Creates a new XmlEntityReference object. + The newly created object. + The name of the entity referenced. This name is subsequently available as the new object's NodeName property. + + + Creates a processing instruction node that contains the supplied target and data. + The newly created object. + The target part of the processing instruction. It supplies the NodeName property of the new object. + The remainder of the processing instruction preceding the closing ?> characters. It supplies the NodeValue property for the new object. + + + Creates a text node that contains the supplied data. + The created text node. + The value to be supplied to the new text object's NodeValue. + + + For XML, this property gets the address of the node that specifies the DTD. This property returns Null for for HTML documents and XML documents without a DTD. + The document type. + + + Gets the root element of the document. + The root element of the document. + + + Returns the URL for the last loaded XML document. + The URL for the last loaded XML document. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the element that matches the ID attribute. + The element that matches the supplied ID. If no elements match, this method returns Null. + The ID to match. + + + Returns a collection of elements that have the specified name. + The collection of elements that match the specified name. + The element name to find. The value * returns all elements in the document. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the Implementation object for the document. + The Implementation object for the document. + + + Imports a node from another document to this document. + The imported node. + The object to be cloned. + If true, any children of node will be cloned as well. If false, no children of the node will be cloned. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the child node list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Asynchronously loads an XML document from the specified file. The document is parsed using the default parser settings. + The object that must be used to start the operation. + The file from which to load the document. + + + Asynchronously loads an XML document from the specified file. The document is parsed using the provided settings. + The object that must be used to start the operation. + The file from which to load the document. + Settings for customizing parser behavior. + + + Asynchronously loads an XML document from the specified location. The document is parsed using the default parser settings. + The object that must be used to start the operation. + A URL that specifies the location of the XML file. + + + Asynchronously loads an XML document from the specified location. The document is parsed using the provided settings. + An object that must be used to start the operation. + A URL that specifies the location of the XML file. + Customizes parser behavior. + + + Loads an XML document using the supplied string. The document is parsed using the default parser settings. + The XML string to load into this XML document object. This string can contain an entire XML document or a well-formed fragment. + + + Loads an XML document using the supplied string. The document is parsed using the settings provided. + The XML string to load into this XML document object. This string can contain an entire XML document or a well-formed fragment. + The settings for parsing the document. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. This property is not applicable to this class. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + This property returns NULL. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. This property is not applicable to this class. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Asynchronously saves an XML document to the specified file. + The object that must be used to start the operation. + The file to save the document to. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Creates a new instance of the XmlDocument class. + + + Represents a lightweight object that is useful for tree insertion operations. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. This property is not applicable to this class. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. This property is not applicable to this class. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Contains information associated with the document type. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets a list of the entities declared in the <!DOCTYPE> declaration. + A list of the general entities, both external and internal, that are present in this document. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + A list of the general entities, both external and internal, that are present in this document. + The name of the document type. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns a list of the DtdNotation members that are present in the document type declaration. + A list of DtdNotation members that are present in the document type declaration. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Provides methods that are independent of any particular instance of the document object model. + + + Indicates support for the specified feature. + True if the specified feature is implemented; otherwise false. + Specifies the feature to test. In Level 1, valid feature values are XML, DOM, and MS-DOM (case-insensitive). + Specifies the version number to test. If NULL, tests for implementation of the feature in any version. In Level 1, 1.0 is the valid version value. + + + Encapsulates information specific to XML Element nodes. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the value of the attribute. + The string value of the attribute. + The name of the required attribute. + + + Returns the attribute node. + The returned attribute pointer. + The name of the required attribute. + + + Returns the specified attribute from the specified namespace. + The returned attribute pointer. + The namespace of the attribute to get. + The name of the attribute without the namespace prefix. + + + Returns the value of the attribute. + The string value of the attribute. + The namespace of the attribute to get. + The name of the attribute without the namespace prefix. + + + Returns a list of all descendant elements that match the supplied name. + The required elements. The list can be empty. + The tag of the required elements. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes or replaces the named attribute. + The name of the attribute to be removed. + + + Removes the specified attribute from this element. + The removed attribute, if any. + The attribute to be removed. + + + Removes the specified attribute from this element in the specified namespace. + The namespace of attribute to be removed. + The name of the attribute without the namespace prefix. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Sets the value of the named attribute. + The name of the required attribute. + The new value for the attribute. + + + Sets or updates the supplied attribute node on this element. + The returned pointer to the previous attribute (if any) with the same name. + A pointer to the new attribute. + + + Sets or updates the supplied attribute node on this element. + The attribute successfully added to the collection. If Null, no object is created. + The node to add to the collection.You set the namespace when you create the node using the CreateAttributeNS method. + + + Sets the value of the named attribute + The namespace of the attribute being set. + The name of the attribute being set. + The new value for the attribute. + + + Gets the element name. + The tag for this element. + + + Represents an entity reference node. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Contains settings that are used during loading and parsing of XML documents. The default settings are chosen for the highest security. This class can be instantiated and is accepted by LoadXml, LoadFromUriAsync, and LoadFromFileAsync. + + + Specifies whether default handling preserves white space. + True if default processing preserves white space; otherwise false. The default value is false. + + + Gets and sets the limits of the element depth of an XML document to be loaded into a DOM object. + The depth value. The default value is 256. + + + Gets or sets a value that specifies whether to prohibit or allow the inclusion of a DTD in the XML DOM document. + True to prohibit the inclusion of a DTD in the XML DOM document; false to allow the inclusion. The default value is true. + + + Gets or sets a value that specifies whether external definitions, resolvable namespaces, external subsets of document type definitions (DTDs), and external entity references are to be resolved at the time the document is parsed. + True if external definitions, resolvable namespaces, external subsets of DTDs, and external entity references are resolved at the time the document is parsed; otherwise false. The default value is false. + + + Gets or sets a value that specifies whether the XML parser should validate this document against the document type definition (DTD) on loading. + If true, the internal or external DTD will be used to validate the document. The default value is false. + + + Creates a new XmlLoadSettings object. + + + Encapsulates iteration through the collection of attribute nodes. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator that iterates over the items in the collection. + The iterator. + + + Returns the item at the specified index in the vector view. + The item in the vector view at the specified index. + The zero-based index of the item in the vector view to return. + + + Returns the items that start at the specified index of the vector view. + The number of items returned. + The zero-based index of the start of the items in the vector to return. + The items in the vector view that start at startIndex. + + + Retrieves the attribute with the specified name. + The returned attribute with the specified name. This method returns Null if the attribute node is not in this collection. + The name of the attribute. + + + Retrieves the attribute with the specified namespace and name. + The attribute with the specified namespace and name. This method returns Null if the attribute node is not in this collection. + The namespace name of the attribute. + The name of the attribute. + + + Returns the index of a specified item in the vector view. + TRUE if the item is found; otherwise, FALSE if it is not found. + The item to find in the vector view. + The zero-based index of the item if found. Zero is returned if the item is not found. + + + Allows random access to individual nodes within the collection. + The object to access. This method returns null if the index is out of range. + The index of the item within the collection. The first item is zero. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the length of the list of nodes. + The number of nodes in the list. + + + Removes the specified item. + The node removed from the collection. This method returns Null if the named node is not an attribute. + The name of the attribute to remove from the collection. + + + Removes an item that is specified by a namespace and local name. + The node removed from the collection. This method returns Null if the named node is not an attribute. + The namespace name of the attribute. + The name of the attribute. + + + Adds the specified node to the collection. + The attribute successfully added to the collection. If Null, no object is created. + The node to add to the collection. + + + Adds the specified node to the collection in the specified namespace. + The attribute successfully added to the collection. If Null, no object is created. + The node to add to the collection.You set the namespace when you create the node using the CreateAttributeNS or CreateElementNS methods. + + + Gets the number of elements in the vector view. + The number of elements in the vector view. + + + Describes a collection of nodes. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator that iterates over the items in the collection. + The iterator. + + + Returns the item at the specified index in the vector view. + The item in the vector view at the specified index. + The zero-based index of the item in the vector view to return. + + + Returns the items that start at the specified index of the vector view. + The number of items returned. + The zero-based index of the start of the items in the vector to return. + The items in the vector view that start at startIndex. + + + Returns the index of a specified item in the vector. + TRUE if the item is found; otherwise, FALSE if the item is not found. + The item to find in the vector. + The zero-based index of the item if found. Zero is returned if the item is not found. + + + Returns the item in the list at the specified index. + The requested item. This method returns NULL if the index is not valid. + The zero-based index of the requested item. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the length of the list. + The length of the list. The range of valid child node indices is 0 to length-1 inclusive. + + + Gets the number of elements in the vector view. + The number of elements in the vector view. + + + Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets or sets the content of the processing instruction, excluding the target. + The content of the processing instruction, excluding the target. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Gets the target for the processing instruction. + The target application to which this processing instruction is directed. + + + Represents the text content of an element. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Appends the supplied string to the existing string data. + The data to be appended to the existing string. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets or sets the node data depending on the node type. + The node data. + + + Deletes specified data. + The offset, in characters, at which to start deleting the string data. + The number of characters to delete. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Gets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Inserts a string at the specified offset. + The offset, in characters, at which to insert the supplied string data. + The data to be inserted into the existing string. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the length of the data, in Unicode characters. + The length of the data, in Unicode characters. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Replaces the specified number of characters with the supplied string. + The offset, in characters, at which to start replacing string data. + The number of characters to replace. + The new data that replaces the old string data. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expression. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Splits this text node into two text nodes at the specified offset and inserts the new text node into the tree as a sibling that immediately follows this node. + The new text node. + The number of characters at which to split this text node into two nodes, starting from zero. + + + Retrieves a substring of the full string from the specified range. + The returned substring. + The offset, in characters, from the beginning of the string. An offset of zero indicates copying from the start of the data. + The number of characters to retrieve from the specified offset. + + + The type of an IXmlNode, as returned by the NodeType property. + + + Default value. Never used by the API. + + + The node is an XmlElement type. + + + The node is an XmlAttribute type. + + + The node is an XmlText type. + + + The node is an XmlCDataSection type. + + + The node is an XmlEntityReference object. + + + The node is an DtdEntity type. + + + The node is an XmlProcessingInstruction type. + + + The node is an XmlComment type. + + + The node is an XmlDocument type. + + + The node is an XmlDocumentType type. + + + The node is an XmlDocumentFragment type. + + + The node is a DtdNotation type. + + + Provides text manipulation methods that are used by several objects. + + + Appends the supplied string to the existing string data. + The data to be appended to the existing string. + + + Gets or sets the node data depending on the node type. + The node data. + + + Deletes specified data. + The offset, in characters, at which to start deleting the string data. + The number of characters to delete. + + + Inserts a string at the specified offset. + The offset, in characters, at which to insert the supplied string data. + The data to be inserted into the existing string. + + + Gets the length of the data, in Unicode characters. + The length of the data, in Unicode characters. + + + Replaces the specified number of characters with the supplied string. + The offset, in characters, at which to start replacing string data. + The number of characters to replace. + The new data that replaces the old string data. + + + Retrieves a substring of the full string from the specified range. + The returned substring. + Specifies the offset, in characters, from the beginning of the string. An offset of zero indicates copying from the start of the data. + Specifies the number of characters to retrieve from the specified offset. + + + Contains information for the entire Document Object Model. This interface represents a single node in the document tree. While all objects that implement this interface expose methods for dealing with children, not all objects that implement this interface may have children. + + + Appends a new child node as the last child of the node. + The new child node successfully appended to the list. If null, no object is created. + The new child node to be appended to the end of the list of children of this node. + + + Gets the list of attributes of this node. + The attributes for this node. + + + Gets a list of children in the current node. + The list of child nodes. + + + Clones a new node. + The newly created clone node. + A flag that indicates whether to recursively clone all nodes that are descendants of this node. If true, this method creates a clone of the complete tree below this node. If false, this method clones this node and its attributes only. + + + Gets the first child node. + The first child node. This property returns NULL if there are no children. + + + Determines whether a node has children. + True if this node has children; otherwise false. + + + Inserts a child node to the left of the specified node, or at the end of the list. + On success, the child node that was inserted. If null, no object is created. + The address of the new node to be inserted. The node passed here must be a valid child of the current XML DOM document node. For example, if the current node is an attribute, you cannot pass another attribute in the newChild parameter, because an attribute cannot have an attribute as a child. If newChild is a DOCUMENT_FRAGMENT node type, all its children are inserted in order before referenceChild. If newChild is already in the tree, it is first removed before it is reinserted before the referenceChild node. Read-only nodes, such as NODE_DOCUMENT_TYPE and NODE_ENTITY nodes, cannot be passed in the newChild parameter. + The reference node. The node specified is where the newChild node is to be inserted to the left as the preceding sibling in the child list. The node passed here must be a either a child node of the current node or null. If the value is null, the newChild node is inserted at the end of the child list. If the referenceChild node is not a child of the current node, an error is returned. + + + Gets the last child node. + The last child node. This property is NULL if there are no children. + + + Gets the local name, which is the local part of a qualified name. This is called the local part in Namespaces in XML. + The local name. + + + Returns the Uniform Resource Identifier (URI) for the namespace. + The Uri for the namespace. This refers to the uuu portion of the namespace declaration xmlns:nnn=uuu. + + + Gets the next sibling of the node in the parent's child list. + The right sibling of this node. + + + Returns the qualified name for attribute, document type, element, entity, or notation nodes. Returns a fixed string for all other node types. + The qualified node name, which varies depending on the node type. + + + Gets the XML Document Object Model (DOM) node type, which determines valid values and whether the node can have child nodes. + The node type. + + + Gets or sets the text associated with the node. + The text associated with the node. + + + Normalizes all descendant elements by combining two or more adjacent text nodes into one unified text node. + + + Returns the root of the document that contains the node. + The parent document that represents the root of the document. + + + Gets the parent node of the node instance. + The parent node. + + + Gets or sets the namespace prefix. + The namespace prefix specified on the element, attribute, or entity reference. For example, for the element <xxx:yyy>, this property returns xxx. It returns an empty string, "", if no prefix is specified. + + + Gets the previous sibling of the node in the parent's child list. + The left sibling of this node. + + + Removes the specified child node from the list of children and returns it. + The removed child node. If null, the childNode object is not removed. + The child node to be removed from the list of children of this node. + + + Replaces the specified old child node with the supplied new child node. + The old child that is replaced. If null, no object is created. + The new child that is to replace the old child. If null, the referenceChild parameter is removed without a replacement. + The old child that is to be replaced by the new child. + + + Encapsulates the methods needed to execute XPath queries on an XML DOM tree or subtree. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, this method returns an empty collection. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes as an XmlNodeList. + The collection of nodes selected by applying the given pattern-matching operation. If no nodes are selected, returns an empty collection. + Specifies an XPath expresssion. + Contains a string that specifies namespaces for use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, the method returns a null value. + Specifies an XPath expression. + + + Applies the specified pattern-matching operation to this node's context and returns the first matching node. + The first node that matches the given pattern-matching operation. If no nodes match the expression, this method returns a null value. + Specifies an XPath expression. + Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well. + + + Encapsulates the methods needed to serialize a DOM tree or subtree to a string representation. + + + Returns the XML representation of the node and all its descendants. + The XML representation of the node and all its descendants. + + + Gets and sets the text from inside the XML. + The text from inside the XML. Returns an empty string if there is no text. + + + Represents the text content of an element or attribute. + + + Splits this text node into two text nodes at the specified offset and inserts the new text node into the tree as a sibling that immediately follows this node. + The new text node. + The number of characters at which to split this text node into two nodes, starting from zero. + + + Provides support for the XSLT processor. + + + Provides the methods needed by the Xslt processor. + + + Processes a node and its children and returns the resulting string transformation. + The resulting transformation. + The node to process. + + + Creates a new XsltProcessor object from the document provided. + The XSLT to process. + + + Windows Store app use background tasks to perform long-running syncs with devices and update device settings and firmware. The classes in Windows.Devices.Background are used by device background tasks to get info provided by the app that triggered the task and to report progress back to the app. + + + Used to provide the DeviceInformation.ID, expected duration, and arguments given by the app that triggered the background servicing task. + + + The arguments string provided by the app when it called RequestAsync on the DeviceServicingTrigger. This allows the app to easily pass parameters to the task when it invokes it. + + + The DeviceInformation.ID of the device the task is targeting. The background task can provide this to the FromIdAsync method of the appropriate device access class to open the device. + + + The estimated duration provided by the app when it called RequestAsync on the DeviceServicingTrigger. + + + Used to provide the DeviceInformation.ID and arguments given by the app that triggered the background sync task. + + + The arguments string provided by the app when it called RequestAsync on the DeviceUseTrigger. This allows the app to easily pass parameters to the task when it invokes it. + + + The DeviceInformation.ID of the device the task is targeting. The background task can provide this to the FromIdAsync method of the appropriate device access class to open the device. + + + Windows Runtime in Windows 8.1 provides access to Bluetooth BR/EDR and Bluetooth LE transports. Windows Store app can use the Windows.Devices.Bluetooth.Rfcomm namespace to access Bluetooth devices using the RFCOMM protocol. This includes devices that implement the Serial Port Profile (SPP). + + + Indicates whether certain Bluetooth API methods should operate on values cached in the system or retrieve those values from the Bluetooth device. + + + Use system-cached values + + + Retrieve values from the Bluetooth device + + + The Windows.Devices.Bluetooth.GenericAttributeProfile namespace defines Windows Runtime classes that a Windows Store app can use to communicate with Bluetooth LE devices. For more information, see Supporting Bluetooth Devices. + + + Specifies the values for the GATT characteristic properties as well as the GATT Extended Characteristic Properties Descriptor. + + + The characteristic doesn't have any properties that apply. + + + The characteristic supports broadcasting + + + The characteristic is readable + + + The characteristic supports Write Without Response + + + The characteristic is writable + + + The characteristic is notifiable + + + The characteristic is indicatable + + + The characteristic supports signed writes + + + The ExtendedProperties Descriptor is present + + + The characteristic supports reliable writes + + + The characteristic has writable auxiliaries + + + Represents the value of the GATT ClientCharacteristicConfigurationDescriptor. + + + Neither notification nor indications are enabled. + + + Characteristic notifications are enabled. + + + Characteristic indications are enabled. + + + Represents the desired security level. + + + Uses the default protection level. + + + Require the link to be authenticated. + + + Require the link to be encrypted. + + + Require the link to be encrypted and authenticated. + + + Indicates what type of write operation is to be performed. + + + The default GATT write procedure shall be used. + + + The Write Without Response procedure shall be used. + + + Represents the return status of a WinRT GATT API related Async operation. + + + The operation completed successfully. + + + No communication can be performed with the device, at this time. + + + Represents a GATT Primary Service on a Bluetooth device. + + + Gets the handle used to uniquely identify GATT-based service attributes as declared on the Bluetooth LE device. + Handle to uniquely identify GATT-based service attributes. + + + Get the string that represents the GATT service instance path used to instantiate the GattDeviceService. + String that represents the GATT service instance path used to instantiate the GattDeviceService. + + + The GATT Service UUID associated with this GattDeviceService. + A 128-bit Bluetooth GATT Service UUID, represented as a standard GUID object. + + + Releases the resources associated with the GattDeviceService class. This allows other apps to access the resources of the GattDeviceService in question. A GattDeviceService object should not be used after Close is invoked, instead a new GattDeviceService object should be instantiated using the FromIdAsync method. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Returns a vector of characteristics, that are identified by the specified UUID and belong to this GattDeviceService instance. + A vector of GattCharacteristic objects whose UUIDs match characteristicUuid. + The UUID for the characteristics to be retrieved. + + + Returns a vector of included services, that are identified by the specified UUID and belong to this GattDeviceService instance. + A vector of included services whose UUIDs match serviceUuid. + The UUID for the included services to be retrieved. + + + Instantiates a new GattDeviceService from the device ID. + The object for managing the asynchronous operation, which, upon completion, returns the newly instantiated GattDeviceService. + The GATT device ID. + + + Creates a suitable AQS Filter string for use with the Windows Device Enumeration: findAllAsync API, from a Bluetooth service UUID. + A suitable AQS Selector String which can be passed as a parameter to the findAllAsync Windows Device Enumeration API, in order to retrieve a GATT service instance path. + A 128-bit Bluetooth GATT Service UUID, represented as a standard GUID object. + + + Creates a suitable AQS Filter string for use with the Windows Device Enumeration: findAllAsync API, from a 16-bit Bluetooth GATT Service UUID. + A suitable AQS Selector String which can be passed as a parameter to the findAllAsync Windows Device Enumeration API, in order to retrieve a GATT service instance path + A 16-bit Bluetooth GATT Service UUID. + + + Converts a Bluetooth SIG defined short Id to a full GATT UUID. + The corresponding 128-bit GATT Service UUID, that uniquely identifies this service. + A 16-bit Bluetooth GATT Service UUID. + + + Represents a Characteristic of a GATT service. + + + Gets or sets the desired GATT security options for over the air communication with the device. + The desired GATT security options for over the air communication with the device. + + + Gets the handle used to uniquely identify GATT-based characteristic attributes as declared on the Bluetooth LE device. + Handle that uniquely identifies GATT-based characteristic attributes. + + + Gets the GATT characteristic properties, as defined by the GATT profile. + The GATT characteristic properties, as defined by the GATT profile. + + + Gets the list of presentation format descriptors associated with this GattCharacteristic, in the order specified by the Aggregate Format Descriptor. + An array of GattPresentationFormat objects that contain the list of presentation format descriptors associated with this GattCharacteristic, in the order specified by the Aggregate Format Descriptor. + + + Get the user friendly description for this GattCharacteristic, if the User Description Descriptor is present, otherwise this will be an empty string. + The user friendly description for this GattCharacteristic, if the User Description Descriptor is present, otherwise this will be an empty string. + + + Gets the GATT Characteristic UUID for this GattCharacteristic. + The GATT Characteristic UUID for this GattCharacteristic. + + + Returns a vector of descriptors, that are identified by the specified UUID, and belong to this GattCharacteristic instance. + A vector of descriptors whose UUIDs match descriptorUuid. + The UUID for the descriptors to be retrieved. + + + Performs a Characteristic Value read from the value cache maintained by Windows. + The object required to manage the asynchronous operation, which, upon completion, returns a GattReadResult object, which in turn contains the completion status of the asynchronous operation and, if successful, the data read from the device. + + + Performs a Characteristic Value read either from the value cache maintained by Windows, or directly from the device. + The object required to manage the asynchronous operation, which, upon completion, returns a GattReadResult object, which in turn contains the completion status of the asynchronous operation and, if successful, the data read from the device. + Specifies whether to read the value directly from the device or from a value cache maintained by Windows. + + + Performs a Characteristic Value write to a Bluetooth LE device. + The object that manages the asynchronous operation, which, upon completion, returns the status with which the operation completed. + A Windows.Storage.Streams.IBuffer object which contains the data to be written to the Bluetooth LE device. + + + Performs a Characteristic Value write to a Bluetooth LE device. + The object that manages the asynchronous operation, which, upon completion, returns the status with which the operation completed. + A Windows.Storage.Streams.IBuffer object which contains the data to be written to the Bluetooth LE device. + Specifies what type of GATT write should be performed. + + + Reads the current value of the ClientCharacteristicConfigurationDescriptor. + The object that manages the synchronous operation, which, upon completion, returns the result of the read operation, which contains the status with which the operation completed, and if successful the value of the ClientcharacteristicConfigurationDescriptor for this characteristic. + + + Writes the ClientCharacteristicConfigurationDescriptor to the Bluetooth LE device, and if the value to be written represents an indication or a notification and a ValueChanged event handler is registered, enables receiving ValueChanged events from the device. + The object that manages the asynchronous operation, which, upon completion, returns the status with which the operation completed. + Specifies a new value for the ClientCharacteristicConfigurationDescriptor of this Characteristic object. + + + Converts a Bluetooth SIG defined short Id to a full GATT UUID. + The corresponding 128-bit GATT Characteristic UUID, that uniquely identifies this characteristic. + A 16-bit Bluetooth GATT Service UUID. + + + An App can register an event handler in order to receive events when notification or indications are received from a device, after setting the Client Characteristic Configuration Descriptor. + + + Represents a Descriptor of a GATT Characteristic. + + + Gets or sets the desired GATT security options for over the air communication with the device. + The desired GATT security options for over the air communication with the device. + + + Gets the GATT Attribute handle used to uniquely identify this attribute on the GATT Server Device. + Handle that uniquely identifies this attribute on the GATT Server Device. + + + Gets the GATT Descriptor UUID for this GattDescriptor. + The GATT Descriptor UUID for this GattDescriptor. + + + Performs a Descriptor Value read from a value cache maintained by Windows. + The object required to manage the asynchronous operation, which, upon completion, returns a GattReadResult object, which in turn contains the completion status of the asynchronous operation and, if successful, the data read from the device. + + + Performs a Descriptor Value read either from the value cache maintained by Windows, or directly from the device. + The object required to manage the asynchronous operation, which, upon completion, returns a GattReadResult object, which in turn contains the completion status of the asynchronous operation and, if successful, the data read from the device. + Specifies whether to read the value directly from the device or from a value cache maintained by Windows. + + + Performs a Descriptor Value write to a Bluetooth LE device. + The object that manages the asynchronous operation, which, upon completion, returns the status with which the operation completed. + A Windows.Storage.Streams.IBuffer object which contains the data to be written to the Bluetooth LE device. + + + Converts a Bluetooth SIG defined short Id to a full GATT UUID. + The corresponding 128-bit GATT Descriptor UUID, that uniquely identifies this descriptor. + A 16-bit Bluetooth GATT Descriptor UUID. + + + Represents the value of a single Presentation Format GATT Descriptor. + + + Gets the Description of the GattPresentationFormat object. + The Description of the GattPresentationFormat object. + + + Gets the Exponent of the GattPresentationFormat object. + The Exponent of the GattPresentationFormat object. + + + Gets the Format Type of the GattPresentationFormat object. + The Format Type of the GattPresentationFormat object. + + + Gets the Namespace of the GattPresentationFormat object. + The Namespace of the GattPresentationFormat object. + + + Gets the Unit of the GattPresentationFormat object. + The Unit of the GattPresentationFormat object. + + + Gets the value of the Bluetooth SIG Assigned Numbers Namespace. + The value of the Bluetooth SIG Assigned Numbers Namespace. + + + Represents the result of reading a GATT Characteristic or Descriptor value. + + + Gets the status of an asynchronous operation. + The status of the asynchronous operation. + + + Gets the value read from the device. + The value read from the device. + + + Represents the result of reading a GATT Client CharacteristicConfigurationClientDescriptor value. + + + Gets the result of an asynchronous read operation. + The result of the asynchronous read operation. + + + Gets the status of an asynchronous operation. + The status of the asynchronous operation. + + + Represents the value received when registering for receiving notifications or indications from a Bluetooth LE device. + + + Gets the new Characteristic Value. + The new Characteristic Value. + + + Gets the time at which the system was notified of the Characteristic Value change. + The time at which the system was notified of the Characteristic Value change. + + + Represents an enumeration of the most well known Service UUID values. + + + Gets the Bluetooth SIG-defined Battery Service UUID. + The Bluetooth SIG-defined Battery Service UUID. + + + Gets the Bluetooth SIG-defined Blood Pressure Service UUID. + The Bluetooth SIG-defined Blood Pressure Service UUID. + + + Gets the Bluetooth SIG-defined Cycling Speed And Cadence Service UUID. + The Bluetooth SIG-defined Cycling Speed And Cadence Service UUID. + + + Gets the Bluetooth SIG-defined UUID for the Generic Access Service. + The Bluetooth SIG-defined UUID for the Generic Access Service. + + + Gets the Bluetooth SIG-defined UUID for the Generic Attribute Service. + The Bluetooth SIG-defined UUID for the Generic Attribute Service. + + + Gets the Bluetooth SIG-defined Glucose Service UUID. + The Bluetooth SIG-defined Glucose Service UUID. + + + Gets the Bluetooth SIG-defined Health Thermometer Service UUID. + The Bluetooth SIG-defined Health Thermometer Service UUID. + + + Gets the Bluetooth SIG-defined Heart Rate Service UUID. + The Bluetooth SIG-defined Heart Rate Service UUID. + + + Gets the Bluetooth SIG-defined Running Speed And Cadence Service UUID. + The Bluetooth SIG-defined Running Speed And Cadence Service UUID. + + + Represents an enumeration of the most well known Characteristic UUID values. + + + Gets the Bluetooth SIG-defined Battery Level Characteristic UUID. + The Bluetooth SIG-defined Battery Level Characteristic UUID. + + + Gets the Bluetooth SIG-defined Blood Pressure Feature Characteristic UUID. + The Bluetooth SIG-defined Blood Pressure Feature Characteristic UUID. + + + Gets the Bluetooth SIG-defined Blood Pressure Measurement Characteristic UUID. + The Bluetooth SIG-defined Blood Pressure Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined Body Sensor Location Characteristic UUID. + The Bluetooth SIG-defined Body Sensor Location Characteristic UUID. + + + Gets the Bluetooth SIG-defined Csc Feature Characteristic UUID. + The Bluetooth SIG-defined Csc Feature Characteristic UUID. + + + Gets the Bluetooth SIG-defined Csc Measurement Characteristic UUID. + The Bluetooth SIG-defined Csc Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined Glucose Feature Characteristic UUID. + The Bluetooth SIG-defined Glucose Feature Characteristic UUID. + + + Gets the Bluetooth SIG-defined Glucose Measurement Characteristic UUID. + The Bluetooth SIG-defined Glucose Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined Glucose Measurement Context Characteristic UUID. + The Bluetooth SIG-defined Glucose Measurement Context Characteristic UUID. + + + Gets the Bluetooth SIG-defined Heart Rate Control Point Characteristic UUID. + The Bluetooth SIG-defined Heart Rate Control Point Characteristic UUID. + + + Gets the Bluetooth SIG-defined Heart Rate Measurement Characteristic UUID. + The Bluetooth SIG-defined Heart Rate Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined Intermediate Cuff Pressure Characteristic UUID. + The Bluetooth SIG-defined Intermediate Cuff Pressure Characteristic UUID. + + + Gets the Bluetooth SIG-defined Intermediate Temperature Characteristic UUID. + The Bluetooth SIG-defined Intermediate Temperature Characteristic UUID. + + + Gets the Bluetooth SIG-defined Measurement Interval Characteristic UUID. + The Bluetooth SIG-defined Measurement Interval Characteristic UUID. + + + Gets the Bluetooth SIG-defined Record Access Control Point Characteristic UUID. + The Bluetooth SIG-defined Record Access Control Point Characteristic UUID. + + + Gets the Bluetooth SIG-defined Rsc Feature Characteristic UUID. + The Bluetooth SIG-defined Rsc Feature Characteristic UUID. + + + Gets the Bluetooth SIG-defined Rsc Measurement Characteristic UUID. + The Bluetooth SIG-defined Rsc Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined SC Control Point Characteristic UUID. + The Bluetooth SIG-defined SC Control Point Characteristic UUID. + + + Gets the Bluetooth SIG-defined Sensor Location Characteristic UUID. + The Bluetooth SIG-defined Sensor Location Characteristic UUID. + + + Gets the Bluetooth SIG-defined Temperature Measurement Characteristic UUID. + The Bluetooth SIG-defined Temperature Measurement Characteristic UUID. + + + Gets the Bluetooth SIG-defined Temperature Type Characteristic UUID. + The Bluetooth SIG-defined Temperature Type Characteristic UUID. + + + Represents an enumeration of the most well known Descriptor UUID values. + + + Gets the Bluetooth SIG-defined Characteristic Aggregate Format Descriptor UUID. + The Bluetooth SIG-defined Characteristic Aggregate Format Descriptor UUID. + + + Gets the Bluetooth SIG-defined Characteristic Extended Properties Descriptor UUID. + The Bluetooth SIG-defined Characteristic Extended Properties Descriptor UUID. + + + Gets the Bluetooth SIG-defined Characteristic Presentation Format Descriptor UUID. + The Bluetooth SIG-defined Characteristic Presentation Format Descriptor UUID. + + + Gets the Bluetooth SIG-defined Characteristic User Description Descriptor UUID. + The Bluetooth SIG-defined Characteristic User Description Descriptor UUID. + + + Gets the Bluetooth SIG-defined Client Characteristic Configuration Descriptor UUID. + The Bluetooth SIG-defined Client Characteristic Configuration Descriptor UUID. + + + Gets the Bluetooth SIG-defined Server Characteristic Configuration Descriptor UUID. + The Bluetooth SIG-defined Server Characteristic Configuration Descriptor UUID. + + + Exposes the ability to perform reliable writes to an LE device, in the form of a transaction write operation. + + + Adds a new write operation to the transaction object. + The GattCharacteristic object on which to perform the write operation. + The Characteristic Value to be written to characteristic. + + + Performs all the queued writes, in sequence, writing the data to the device. Once a transaction object has been committed, no further operations are possible on the GattReliableWriteTransaction object. + The object used to manage the asynchronous operation, which, upon completion, will return the status of the asynchronous operation. + + + Creates a new GattReliableWriteTransaction object. + + + Represents the different well-known values that the GattPresentationFormat.FormatType property can take. + + + Gets the value of the Bit2 Format Type. + The value of the Bit2 Format Type. + + + Gets the value of the Boolean Format Type. + The value of the Boolean Format Type. + + + Gets the value of the DUInt16 Format Type. + The value of the DUInt16 Format Type. + + + Gets the value of the Float Format Type. + The value of the Float Format Type. + + + Gets the value of the Float32 Format Type. + The value of the Float32 Format Type. + + + Gets the value of the Float64 Format Type. + The value of the Float64 Format Type. + + + Gets the value of the Nibble Format Type. + The value of the Nibble Format Type. + + + Gets the value of the SFloat Format Type. + The value of the SFloat Format Type. + + + Gets the value of the SInt12 Format Type. + The value of the SInt12 Format Type. + + + Gets the value of the SInt128 Format Type. + The value of the SInt128 Format Type. + + + Gets the value of the SInt16 Format Type. + The value of the SInt16 Format Type. + + + Gets the value of the SInt24 Format Type. + The value of the SInt24 Format Type. + + + Gets the value of the SInt32 Format Type. + The value of the SInt32 Format Type. + + + Gets the value of the SInt48 Format Type. + The value of the SInt48 Format Type. + + + Gets the value of the SInt64 Format Type. + The value of the SInt64 Format Type. + + + Gets the value of the SInt8 Format Type. + The value of the SInt8 Format Type. + + + Gets the value of the Struct Format Type. + The value of the Struct Format Type. + + + Gets the value of the UInt12 Format Type. + The value of the UInt12 Format Type. + + + Gets the value of the UInt128 Format Type. + The value of the UInt128 Format Type. + + + Gets the value of the UInt16 Format Type. + The value of the UInt16 Format Type. + + + Gets the value of the UInt24 Format Type. + The value of the UInt24 Format Type. + + + Gets the value of the UInt32 Format Type. + The value of the UInt32 Format Type. + + + Gets the value of the UInt48 Format Type. + The value of the UInt48 Format Type. + + + Gets the value of the UInt64 Format Type. + The value of the UInt64 Format Type. + + + Gets the value of the UInt8 Format Type. + The value of the UInt8 Format Type. + + + Gets the value of the Utf16 Format Type. + The value of the Utf16 Format Type. + + + Gets the value of the Utf8 Format Type. + The value of the Utf8 Format Type. + + + The Windows.Devices.Bluetooth.Rfcomm namespace defines Windows Runtime classes that a Windows Store app can use to communicate with Bluetooth devices. For more information, see Supporting Bluetooth Devices + + + Represents a RFCOMM service ID. + + + Retrieves the 128-bit service id. + The 128-bit service id. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized Generic File Transfer service (with short id 0x1202). + The RfcommServiceId object that represents the service id for the Generic File Transfer service. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized OBEX File Transfer service (with short id 0x1106). + The RfcommServiceId object that represents the service id for the Obex File Transfer service. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized OBEX Object Push service (with short id 0x1105). + The RfcommServiceId object that represents the service id for the OBEX Object Push service. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized Phone Book Access (PCE) service (with short id 0x112E). + The RfcommServiceId object that represents the service id for the Phone Book Access (PCE) service. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized Phone Book Access (PSE) service (with short id 0x112F). + The RfcommServiceId object that represents the service id for the Phone Book Access (PSE) service. + + + Creates a RfcommServiceId object corresponding to the service id for the standardized Serial Port service (with short id 0x1101). + The RfcommServiceId object that represents the service id for the Serial Port service. + + + Converts the RfcommServiceId to a 32-bit service id if possible. + Returns the 32-bit service id if the RfcommServiceId represents a standardized service. + + + Converts the RfcommServiceId to a string. + Returns the string representation of the 128-bit service id. + + + Creates a RfcommServiceId object from a 128-bit service id. + The RfcommServiceId object. + The 128-bit service id. + + + Creates a RfcommServiceId object from a 32-bit service id. + The RfcommServiceId object. + The 32-bit service id. + + + Represents an instance of a service on a Bluetooth BR device. + + + Gets the HostName object of the RFCOMM service instance, which is used to connect to the remote device. + The HostName object of the RFCOMM service instance. + + + Gets the service name of the RFCOMM service instance, which is used to connect to the remote device. + The service name of the RFCOMM service instance. Note that this is not the same as the name of the service and is only meant to be used for connection to the remote device. + + + Gets the maximum SocketProtectionLevel supported by this RFCOMM service instance. + The maximum SocketProtectionLevel of the RFCOMM service instance. This level can be passed to StreamSocket.ConnectAsync to upgrade the RFCOMM link protection level. + + + Gets the current SocketProtectionLevel of the RFCOMM service instance. + The current SocketProtectionLevel of the remote RFCOMM service instance. + + + Gets the RfcommServiceId of this RFCOMM service instance. + The RfcommServiceId of the RFCOMM service instance. + + + Gets the cached SDP attributes of the RFCOMM service instance. + The SDP attributes of the RFCOMM service instance. + + + Gets the SDP attributes of the RFCOMM service instance. + The SDP attributes of the RFCOMM service instance. + Indicates whether SDP attributes should be retrieved from the cache or from the device. + + + Gets a RfcommDeviceService object from a DeviceInformation Id for a RFCOMM service instance. + The RfcommDeviceService object that represents the RFCOMM service instance. + The DeviceInformation Id that identifies the RFCOMM service instance. This id can be retrieved from Windows.Devices.Enumeration. + + + Gets an Advanced Query Syntax (AQS) string for identifying instances of an RFCOMM service. This string is passed to the FindAllAsync or CreateWatcher method. + An AQS string for identifying RFCOMM service instances. + The service id for which to query. + + + Represents an instance of a local RFCOMM service. + + + Gets a collection of SDP attributes for advertising. + The collection of SDP attributes for advertising. + + + Gets the RfcommServiceId of this local RFCOMM service instance. + The RfcommServiceId of the local RFCOMM service instance. + + + Begins advertising the SDP attributes. + The StreamSocketListener that is listening for incoming connections. + + + Stops advertising the SDP attributes. + + + Gets a RfcommServiceProvider object from a DeviceInformation Id for a RFCOMM service instance. + The RfcommServiceProvider object that represents the local RFCOMM service instance. + The RfcommServiceId to be hosted locally. + + + Opens a custom device asynchronously, and with the object returned from the open operation send asynchronous IOCTLs to the device. + + + Represents know device types. + + + Defined by the device vendor. + Defined by the device vendor. + + + Identifies the access mode. + + + Any mode. + + + Read mode. + + + Write mode. + + + Read/write mode. + + + Identifies the buffering method. + + + Buffered. + + + Direct input. + + + Direct output. + + + Neither. + + + Represents IO control code. + + + The access mode. + The access mode. + + + The buffering method. + The buffering method. + + + The control code. + The control code. + + + The device type. + The device type. + + + The function. + The function. + + + Represents the control code. + + + The access mode. + The access mode. + + + The buffering method. + The buffering method. + + + The control code. + The control code. + + + The device type. + The device type. + + + The function. + The function. + + + The control code. + The device type. + The device function. + The access mode. + The buffering method. + + + The device access mode. + + + Read access. + + + Write access. + + + Read/write access. + + + The device sharing mode. + + + The device is shared. + + + The device is exclusive. + + + Represents a custom device. + + + The input stream. + The input stream. + + + The output stream. + The output stream. + + + Sends an IO control code. + The result of the async operation. + The IO control code. + The input buffer. + The output buffer. + + + Sends an IO control code. + The result of the async operation. + The IO control code. + The input buffer. + The output buffer. + + + Gets a device selector. + The device selector. + The GUID, defined by the device vendor. + + + Represents a custom device. + Returns a custom device. + The id of the device. + The desired access. + The sharing mode. + + + Provides classes for enumerating devices. + + + Indicates the status of the access to a device. + + + The device access is not specified. + + + Access to the device is allowed. + + + Access to the device has been disallowed by the user. + + + Access to the device has been disallowed by the system. + + + Indicates the type of devices that the user wants to enumerate. + + + Indicates that the user wants to enumerate all devices. + + + Indicates that the user wants to enumerate all audio capture devices. + + + Indicates that the user wants to enumerate all audio rendering devices. + + + Indicates that the user wants to enumerate all portable storage devices. + + + Indicates that the user wants to enumerate all video capture devices. + + + Introduced in Windows 8.1. Indicates that the user wants to enumerate all scanning devices. + + + Introduced in Windows 8.1. Indicates that the user wants to enumerate all location aware devices. + + + Provides data for the AccessChanged event. + + + The new status of access to a device. + The new status of access to a device. + + + Contains the information about access to a device. + + + Raised when access to a device has changed. + + + Initializes a DeviceAccessInformation object based on a given DeviceClass. + The DeviceAccessInformation object for the given DeviceClass. + Device class to get DeviceAccessInformation about. + + + Initializes a DeviceAccessInformation object based on a device class id. + The DeviceAccessInformation object for the given device class id. + Id of the device class to get DeviceAccessInformation about. + + + Initializes a DeviceAccessInformation object based on a device id. + The DeviceAccessInformation object for the given device id. + Id of the device to get DeviceAccessInformation about. + + + The current device access status. + The current device access status. + + + Represents a device. + + + Creates a DeviceInformation object from a DeviceInformation ID. + An object for starting and managing the asynchronous creation of the DeviceInformation object. + The device ID. + + + Creates a DeviceInformation object from a DeviceInformation ID and a list of additional properties. + An object for starting and managing the asynchronous creation of the DeviceInformation object. + A string containing the DeviceInformation ID. + An iterable list of additional properties to include in the Properties property of the DeviceInformation objects in the enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + Creates a DeviceWatcher for all devices. + The created DeviceWatcher. + + + Creates a DeviceWatcher for devices matching the specified DeviceClass. + The created DeviceWatcher. + The class of device to enumerate using the DeviceWatcher. + + + Creates a DeviceWatcher for devices matching the specified Advanced Query Syntax (AQS) string. + The created DeviceWatcher. + An AQS string that filters the DeviceInformation objects to enumerate. Typically this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. For example, GetDeviceSelector retrieves the string for the StorageDevice class. + + + Creates a DeviceWatcher for devices matching the specified Advanced Query Syntax (AQS) string and the specified collection of properties. + The created DeviceWatcher. + An AQS string that filters the DeviceInformation objects to enumerate. Typically this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. For example, GetDeviceSelector retrieves the string for the StorageDevice class. + An iterable list of additional properties to include in the Properties property of the DeviceInformation objects in the enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + The physical location of the device in its enclosure. + The object that describes the physical location of the device. + + + Enumerates all DeviceInformation objects. + The object for managing the asynchronous operation. + + + Enumerates DeviceInformation objects of the specified class. + The object for managing the asynchronous operation. + The class of devices to enumerate. + + + Enumerates DeviceInformation objects matching the specified Advanced Query Syntax (AQS) string. + The object for managing the asynchronous operation. + An AQS string that filters the DeviceInformation objects to enumerate. Typically this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. For example, GetDeviceSelector retrieves the string for the StorageDevice class. + + + Enumerates DeviceInformation objects matching the specified Advanced Query Syntax (AQS) string and including the specified collection of properties. + The object for managing the asynchronous operation. + An AQS string that filters the DeviceInformation objects to enumerate. Typically this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. For example, GetDeviceSelector retrieves the string for the StorageDevice class. + An iterable list of additional properties to include in the Properties property of the DeviceInformation objects in the enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + Gets a glyph for the device. + The object for managing the asynchronous operation that will return a DeviceThumbnail + + + Returns a thumbnail image for the device. + The object for managing the asynchronous operation that will return a DeviceThumbnail. + + + A string representing the identity of the device. + A string representing the identity of the device. + + + Indicates whether this device is the default device for the class. + Indicates whether this device is the default device for the class. + + + Indicates whether this device is enabled. + Indicates whether this device is enabled. + + + The name of the device. + The name of the device. This name is in the best available language for the app. + + + Property store containing well-known values as well as additional properties that can be specified during device enumeration. + The property store for the device. + + + Updates the properties of an existing DeviceInformation object. + Indicates the properties to update. + + + Represents a collection of DeviceInformation objects. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets an object that can iterate through the enumerated DeviceInformation objects, starting with the first. + An object that can iterate through the enumerated devices, starting with the first. + + + Gets the DeviceInformation object at the specified index. + The DeviceInformation object at the specified index. + The index. + + + Gets a range of DeviceInformation objects. + The number of DeviceInformation objects returned. + The index at which to start retrieving DeviceInformation objects. + The array of DeviceInformation objects starting at the index specified by startIndex. + + + Returns the index of the specified DeviceInformation object in the collection. + true if the method succeeded; otherwise, false. + The DeviceInformation object in the collection. + The index. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + The number of DeviceInformation objects in the collection. + The number of DeviceInformation objects in the collection. + + + Contains updated properties for a DeviceInformation object. + + + The DeviceInformation ID of the updated device. + The DeviceInformation ID of the updated device. + + + The changed properties in a update to a DeviceInformation object. + The changed properties. + + + Represents the thumbnail image for a device. + + + Gets a value that indicates whether the stream can be read from. + True if the stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the stream can be written to. + True if the stream can be written to. Otherwise, false. + + + Creates a new instance of a IRandomAccessStream over the same resource as the current stream. + The new stream. The initial, internal position of the stream is 0. + + + Closes the current stream and releases system resources. + + + Returns the content type of the thumbnail image. + The content type of the image. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Returns a pointer to an input stream starting at the specified location. + A pointer to an input stream. + The position in the input stream. + + + Returns a pointer to an output stream starting at the specified location. + A pointer to an output stream. + The position in the output stream. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read. + Specifies the type of the asynchronous read operation. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Gets or sets the size of the device thumbnail image. + The size of the device thumbnail image. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Enumerates devices dynamically, so that the app receives notifications if devices are added, removed, or changed after the initial enumeration is complete. + + + Event that is raised when a device is added to the collection enumerated by the DeviceWatcher. + + + Event that is raised when the enumeration of devices completes. + + + Event that is raised when a device is removed from the collection of enumerated devices. + + + Starts a search for devices, and subscribes to device enumeration events. + + + The status of the DeviceWatcher. + The status of the DeviceWatcher. + + + Stop raising the events that add, update and remove enumeration results. + + + Event that is raised when the enumeration operation has been stopped. + + + Event that is raised when a device is updated in the collection of enumerated devices. + + + Describes the state of a DeviceWatcher object. + + + This is the initial state of a Watcher object. During this state clients can register event handlers. + + + The watcher transitions to the Started state once Start is called. The watcher is enumerating the initial collection. Note that during this enumeration phase it is possible to receive Updated and Removed notifications but only to items that have already been Added. + + + The watcher has completed enumerating the initial collection. Items can still be added, updated or removed from the collection. + + + The client has called Stop and the watcher is still in the process of stopping. Events may still be raised. + + + The client has called Stop and the watcher has completed all outstanding events. No further events will be raised. + + + The watcher has aborted operation. No subsequent events will be raised. + + + Describes the physical location of a device in its enclosure. + + + Indicates whether the device is physically located in the docking station of the portable computer. + A value that is True if the device is physically located in the docking station, and False if it is not. + + + Indicates whether the device is physically located in the lid of the portable computer. + A value that is True if the device is physically located in the lid, and False if it is not. + + + Indicates which panel of the computer the device is physically located on. + One of the values of the Panel enumeration that indicates which panel of the computer the device is physically located on. + + + Indicates the location of a panel on a computer. + + + The location of the panel is unknown. + + + The front panel of the computer. + + + The back panel of the computer. + + + The top panel of the computer. + + + The bottom panel of the computer. + + + The left panel of the computer. + + + The right panel of the computer. + + + Provides classes for enumerating a collection of Pnp device objects, and event handlers for monitoring changes to the objects in the collection asynchronously. + + + Represents a PnP object. This class allows access to well-known properties of a PnP object as well as a property store of additional properties that are specified to be retrieved from the the PnP object. + + + Creates a PnpObject object asynchronously from a previously saved DeviceInformation ID. + The PnpObject created from the previously saved DeviceInformation ID. + The type of the PnpObject. + The string value identifying the PnpObject. + An iterable list of additional properties to include in the Properties property of the PnpObject object to create. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + Returns a PnpObjectWatcher object that is used to enumerate the PnP objects in the collection using events. + A PnpObjectWatcher object used to enumerate the collection by registering event notification delegates and by issuing start and stop event notifications. + The type of the PnpObject. + An iterable list of additional properties to include in the Properties property of the PnpObject objects included in enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + Returns a PnpObjectWatcher object that is used to enumerate a filtered collection of PnP objects using events. + A PnpObjectWatcher object used to enumerate the collection by registering event notification delegates and by issuing start and stop event notifications. + The type of the PnpObject. + An iterable list of additional properties to include in the Properties property of the PnpObject objects included in enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + An AQS string that filters the PnP objects that will be returned. Typically, this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. + + + Returns all of the PnP objects of a specified type that match the specified criteria. + An object that represents the asynchronous operation. + The type of the PnpObject. + An iterable list of additional properties to include in the Properties property of the PnpObject objects included in enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + + + Returns all of the PnP objects of a specified type that match the specified filter. + An object that represents the asynchronous operation. + The type of the PnpObject. + An iterable list of additional properties to include in the Properties property of the PnpObject objects included in enumeration results. For more info on what the properties represent, see the list of properties in How to retrieve additional properties for a device or PnP object. + An AQS string that filters the PnP objects that will be returned. Typically, this string is retrieved from the GetDeviceSelector method of a class that interacts with devices. + + + A string representing the identity of the PnpObject. + The identity string. + + + A property store containing well-known values as well as additional specified properties. + A pointer to the property store. + + + The type of the PnpObject. + The type of the object. + + + Updates the properties of an existing PnpObject by applying the changes described in a PnpObjectUpdate object. + Indicates the properties to update. + + + Represents an iterable collection of Pnp device objects. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the end of the collection if the collection is empty. + + + Returns the PnpObject located at the specified index. + The PnpObject at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Retrieves the index of the specified item. + True if an item with the specified value was found; otherwise, False. + The value to find in the collection. + The index of the item to find, if found. + + + Returns the number of items in the collection. + The number of items in the collection. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Indicates the device type of a PnpObject. + + + The object is of an unknown type. This value is not used. + + + The PnpObject represents a device interface. + + + The PnpObject represents a device container. + + + The PnpObject represents a device. + + + The PnpObject represents a device interface class. + + + Contains the updated properties of a PnpObject. + + + The identifier of the PnpObject. + The identifier of the PnpObject. + + + The changed properties in an update to a PnpObject. + The changed properties. + + + The type of the PnpObject. + The type of the PnpObject. + + + Raises events to notify the client that a PnpObject has been added, updated, or removed from an enumerated collection of Pnp device objects in an incremental and asynchronous way. + + + Occurs when a PnpObject is added to the collection enumerated by the PnpObjectWatcher. + + + Occurs when the enumeration of Pnp device objects has been completed. + + + Occurs when a PnpObject is removed from the collection enumerated by the PnpObjectWatcher. + + + Starts raising the events to inform the client that a PnpObject has been added, updated, or removed. + + + The status associated with the asynchronous operation. + The status. + + + Stops raising the events to inform the client that a PnpObject has been added, updated, or removed. + + + Occurs when the PnpObjectWatcher has stopped monitoring changes to the collection of Pnp device objects. + + + Occurs when the properties of a PnpObject in the collection enumerated by the PnpObjectWatcher are updated. + + + Enables app developers to easily access the computer's geographic location by using a single API. + Required to access the user's geographic location. + + + Interface to define a geographic shape. + + + The altitude reference system of the geographic shape. + The altitude reference system of the geographic shape. + + + The type of geographic shape. + The type of geographic shape. + + + The spatial reference identifier for the geographic shape, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + The spatial reference identifier for the geographic shape, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + + + The basic information to describe a geographic position. + + + The latitude of the geographic position. The valid range of latitude values is from -90.0 to 90.0 degrees. + + + The longitude of the geographic position. This can be any value. For values outside the range of -180.0 to 180.0, the value may be wrapped and stored appropriately before it is used. For example, a longitude of 183.0 degrees would become -177.0 degrees. + + + The altitude of the geographic position. + + + Represents the civic address data associated with a geographic location. + Required to access the user's geographic location. + + + The name of the city. + Required to access the user's geographic location. + The name of the city. + + + The name of the country, represented by using a two-letter ISO-3166 country code. + Required to access the user's geographic location. + The name of the country, represented by using a two-letter ISO-3166 country code. + + + The postal code of the current location. + Required to access the user's geographic location. + The postal code of the current location. + + + The name of the state or province. + Required to access the user's geographic location. + The name of the state or province. + + + The time at which the location data was obtained. + Required to access the user's geographic location. + The time at which the location data was obtained. + + + Describes a geographic circle with a center point and a radius. + + + The altitude reference system of the geographic circle. + The altitude reference system of the geographic circle. + + + The center point of a geographic circle. + The center point of a geographic circle. + + + The type of geographic shape. + The type of geographic shape. + + + The radius of a geographic circle. + The radius of a geographic circle. + + + The spatial reference identifier for the geographic circle, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + The spatial reference identifier for the geographic circle, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + + + Create a geographic circle object for the given position and radius. + The geographic position of the new circle. + The radius of the new circle. + + + Create a geographic circle object for the given position, radius and altitude reference system. + The geographic position of the new circle. + The radius of the new circle. + The altitude reference system of the new circle. + + + Create a geographic circle object for the given position, radius, altitude reference system, and spatial reference id. + The geographic position of the new circle. + The radius of the new circle. + The altitude reference system of the new circle. + The spatial reference Id of the new circle. + + + Contains the information for identifying a geographic location. + Required to access the user's geographic location. + + + The accuracy of the location in meters. + Required to access the user's geographic location. + The accuracy in meters. + + + Altitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point.The altitude of the location, in meters. + Required to access the user's geographic location. + Altitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point. + The altitude in meters. + + + The accuracy of the altitude, in meters. + Required to access the user's geographic location. + The accuracy of the altitude. + + + The current heading in degrees relative to true north. + Required to access the user's geographic location. + The current heading in degrees relative to true north. + + + Latitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point. The latitude in degrees. + Required to access the user's geographic location. + Latitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point. + The latitude in degrees. The valid range of values is from -90.0 to 90.0. + + + Longitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point.The longitude in degrees. + Required to access the user's geographic location. + Longitude may be altered or unavailable after Windows 8.1. Instead, use Geocoordinate.Point. + The longitude in degrees. The valid range of values is from -180.0 to 180.0. + + + The location of the geocoordinate. + The location of the geocoordinate. + + + Gets the source used to obtain a Geocoordinate. + Gets the source used to obtain a Geocoordinate. + + + Gets information about the satellites used to obtain a Geocoordinate. + Gets information about the satellites used to obtain a Geocoordinate. + + + The speed in meters per second. + Required to access the user's geographic location. + The speed in meters per second. + + + The time at which the location was determined. + Required to access the user's geographic location. + The time at which the location was determined. + + + Provides information about the satellites used to obtain a Geocoordinate. + + + Gets the Horizontal Dilution of Precision of a Geocoordinate. + The Horizontal Dilution of Precision. + + + Gets the Position Dilution of Precision of a Geocoordinate. + The Position Dilution of Precision. + + + Gets the Vertical Dilution of Precision of a Geocoordinate. + The Vertical Dilution of Precision. + + + Provides access to the current geographic location. + Required to access the user's geographic location. + + + The accuracy level at which the Geolocator provides location updates. + Required to access the user's geographic location. + The accuracy level at which the Geolocator provides location updates. + + + Gets or sets the desired accuracy in meters for data returned from the location service. + The desired accuracy in meters for data returned from the location service. + + + Initializes a new Geolocator object. + Required to access the user's geographic location. + + + The status that indicates the ability of the Geolocator to provide location updates. + Required to access the user's geographic location. + The status of the Geolocator. + + + Starts an asynchronous operation to retrieve the location of the user's computer. + Provides methods for starting the asynchronous request for location data and handling its completion. + + + Starts an asynchronous operation to retrieve the current location. + Provides methods for starting the asynchronous request for location data and handling its completion. + The maximum acceptable age of cached location data. A TimeSpan is a time period expressed in 100-nanosecond units. + The timeout. A TimeSpan is a time period expressed in 100-nanosecond units. + + + Gets and sets the distance of movement, in meters, relative to the coordinate from the last PositionChanged event, that is required for the Geolocator to raise a PositionChanged event. + Required to access the user's geographic location. + The distance of required movement, in meters, for the location provider to raise a PositionChanged event. The default value is 0. + + + Raised when the location is updated. + Required to access the user's geographic location. + + + The requested minimum time interval between location updates, in milliseconds. If your application requires updates infrequently, set this value so that the location provider can conserve power by calculating location only when needed. + Required to access the user's geographic location. + The requested minimum time interval between location updates. + + + Raised when the ability of the Geolocator to provide updated location changes. + Required to access the user's geographic location. + + + Describes a geographic point. + + + The altitude reference system of the geographic point. + The altitude reference system of the geographic point. + + + The type of geographic shape. + The type of geographic shape. + + + The position of a geographic point. + The position of a geographic point. + + + The spatial reference identifier for the geographic point, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + The spatial reference identifier for the geographic point, corresponding to a spatial reference system based on the specific ellipsoid used for either flat-earth mapping or round-earth mapping. + + + Create a geographic point object for the given position. + Create a geographic point object for the given position. + + + Create a geographic point object for the given position and altitude reference system. + Create a geographic point object for the given position. + The altitude reference system of the new point. + + + Create a geographic point object for the given position, altitude reference system, and spatial reference Id. + Create a geographic point object for the given position. + The altitude reference system of the new point. + The spatial reference Id of the new point. + + + Represents a location that may contain latitude and longitude data or civic address data. + Required to access the user's geographic location. + + + Contains civic address data associated with a geographic location. + Required to access the user's geographic location. + The civic address data associated with a geographic location. + + + The latitude and longitude associated with a geographic location. + Required to access the user's geographic location. + The latitude and longitude associated with a geographic location. + + + Provides data for the PositionChanged event. + Required to access the user's geographic location. + + + The location data associated with the PositionChanged event. + Required to access the user's geographic location. + A Geoposition object containing geographic location data. + + + Provides information for the StatusChanged event. + Required to access the user's geographic location. + + + The updated status of the Geolocator object. + Required to access the user's geographic location. + The updated status of the Geolocator object. The status indicates the ability of the Geolocator to provide location updates. + + + Indicates the altitude reference system to be used in defining a geographic shape. + + + The altitude reference system was not specified. + + + The altitude reference system is based on distance above terrain or ground level. + + + The altitude reference system is based on an ellipsoid which is a mathematical approximation of the shape of the Earth. + + + The altitude reference system is based on the distance above sea level. + + + The altitude reference system is based on the distance above surface structures such as buildings, trees, roads, etc. + + + Indicates the geographic shape. + + + The geographic region is a point. + + + The geographic region is a circle with a center point and a radius. + + + Indicates the requested accuracy level for the location data that the application uses. + Required to access the user's geographic location. + + + Optimize for power, performance, and other cost considerations. + + + Deliver the most accurate report possible. This includes using services that might charge money, or consuming higher levels of battery power or connection bandwidth. An accuracy level of High may degrade system performance and should be used only when necessary. + + + Indicates the source used to obtain a Geocoordinate. + + + The position was obtained from cellular network data. + + + The position was obtained from satellite data. + + + The position was obtained from Wi-Fi network data. + + + (Starting with Windows 8.1.) The position was obtained from an IP address. + + + (Starting with Windows 8.1.) The position was obtained from an unknown source. + + + Indicates the ability of the Geolocator object to provide location data. + Required to access the user's geographic location. + + + Location data is available. + + + The location provider is initializing. This is the status if a GPS is the source of location data and the GPS receiver does not yet have the required number of satellites in view to obtain an accurate position. + + + No location data is available from any location provider. LocationStatus will have this value if the application calls GetGeopositionAsync or registers an event handler for the PositionChanged event, before data is available from a location sensor. Once data is available LocationStatus transitions to the Ready state. + + + The location provider is disabled. This status indicates that the user has not granted the application permission to access location. + + + An operation to retrieve location has not yet been initialized. LocationStatus will have this value if the application has not yet called GetGeopositionAsync or registered an event handler for the PositionChanged event. + + + The Windows Sensor and Location Platform is not available on this version of Windows. + + + Windows 8.1 introduces support for geofencing. Geofencing allows an app to define a radius around a point of interest and have the system alert the app when entering or exiting that area.The geofencing capabilities supported by Windows 8.1 allow you to:Create one or more geofences, or areas of interest.Set a notification to occur when entering a geofence.Set a notification to occur when leaving a geofence.Remove a geofence.Allow your geofence app to run in the background and continue to get geofence events. Note that this is applicable to apps which are on the lock screen only.Test the geofencing features of your app by using a simulator to simulate movement in and out of the geofence. These features will enable apps to provide features such as reminders to a user who is leaving work or home or displaying coupons when the user is near certain stores. The Windows.Devices.Geolocation.Geofencing namespace contains the classes needed to do geofencing. The workflow generally consists of creating a one or more Geofence objects that define the areas of interest and the notification conditions. Then your app must handle the events that occur when entering or exiting one of the geofences. If your app is running in the background, you need to use the new background LocationTrigger creating a background task. + + + Indicates the state or states of the Geofences that are currently being monitored by the system. + + + The device has entered a geofence area. + + + The device has left a geofence area. + + + The geofence has been removed. + + + Indicates the reason a Geofence was removed. + + + The geofence event was triggered and the geofence was used. + + + The duration of the geofence has expired. + + + Indicates the current state of a Geofence. + + + The device has entered the geofence area. + + + The device has left the geofence area. + + + The geofence was removed. + + + Indicates the current state of a GeofenceMonitor. + + + The monitor is ready and active. + + + The monitor is in the process of initializing. + + + There is no data on the status of the monitor. + + + The geofence monitor has been disabled. + + + The geofence monitor has been initialized. + + + The geofence monitor is not available. + + + Contains the information to define a geofence, an area of interest, to monitor. + + + The shape of the geofence region. + The shape of the geofence region. + + + Indicates the states that the Geofence is being monitored for. + The states that the geofence is being monitored for. + + + The time to start monitoring the Geofence. + The time to start monitoring the geofence. + + + The duration of time to monitor the Geofence for. + The duration of time to monitor the geofence for. + + + The minimum time that a position has to be inside or outside of the Geofence in order for the notification to be triggered. + The minimum time that a position has to be inside or outside of the geofence in order for the notification to be triggered. + + + The id of the Geofence. + The id of the geofence. + + + Indicates whether the Geofence should be triggered once or multiple times. + True indicates the geofence should be monitored only for one use. False indicates the geofence should be monitored for multiple uses. + + + Initializes a new Geofence object given the id and the shape of the geofence. + The Id of the geofence. + The area that defines the geofence to monitor. + + + Initializes a new Geofence object given the id, the shape of the geofence, the states to monitor the geofence for, and the singleUse flag. + The Id of the geofence. + The area that defines the geofence to monitor. + The states to monitor the geofence for. + True indicates the geofence should be monitored only for one use. False indicates the geofence should be monitored for multiple uses. + + + Initializes a new Geofence object given the id, the shape of the geofence, the states to monitor the geofence for, the singleUse flag, and the dwellTime for the geofence. + The Id of the geofence. + The area that defines the geofence to monitor. + The states to monitor the geofence for. + True indicates the geofence should be monitored only for one use. False indicates the geofence should be monitored for multiple uses. + The time that a position has to be in or out of the geofence in order for the notification to be triggered. + + + Initializes a new Geofence object given the id, the shape of the geofence, the states to monitor the geofence for, the singleUse flag, the dwellTime for the geofence, the time to start monitoring the geofence, and the duration of the geofence. + The Id of the geofence. + The area that defines the geofence to monitor. + The states to monitor the geofence for. + True indicates the geofence should be monitored only for one use. False indicates the geofence should be monitored for multiple uses. + The time that a position has to be in or out of the geofence in order for the notification to be triggered. + The time to start monitoring the geofence. + The duration of time to monitor the geofence for. The duration begins at the startTime. + + + Contains the information about the state changes for a Geofence. + + + The Geofence object whose state has changed. + The Geofence object whose state has changed. + + + The position of the Geofence object whose state has changed. + The position of the Geofence object whose state has changed. + + + The new state of the Geofence object whose state has changed. + The new state of the Geofence object whose state has changed. + + + Indicates the reason a Geofence was removed. + Indicates the reason a geofence was removed. + + + Contains the information about the monitored Geofence objects. + + + Gets the GeofenceMonitor object which contains all of an app's Geofence information. + Gets the GeofenceMonitor object which contains all of an app's geofence information. + + + Raised when the state of the GeofenceMonitor has changed. + + + Indicates the current state of a GeofenceMonitor. + Indicates the current state of a GeofenceMonitor. + + + Gets a collection of status changes to the Geofence objects in the Geofences collection of the GeofenceMonitor. + collection of status changes to the GeofenceMonitor. + + + Last reading of the device's location. + Last reading of the device's location. + + + Raised when the state of one or more Geofence objects in the Geofences collection of the GeofenceMonitor has changed. + + + Returns a vector of the app's Geofence objects currently registered with the system wide GeofenceMonitor. + A collection of the Geofence objects to monitor. + + + This namespace gives your Windows Store app access to devices that support the Human Interface Device (HID) protocol. + + + Specifies a HID report type. + + + The report is an input report. + + + The report is an output report. + + + The report is a feature report. + + + Identifies the relationship that defines a grouping of controls on the device. + + + The controls are related by physical source. + + + The controls are related by intended application. + + + The controls are logically related. + + + The controls are related by report type. + + + The controls are related by a named array. + + + The controls are related by a usage switch. + + + The controls are related by a usage modifier. + + + The control relationship is not described by a defined category. + + + Represents a top-level collection and the corresponding device. + + + Gets the product identifier for the given HID device. + The product identifier. + + + Gets the usage identifier for the given HID device. + The usage identifier. + + + Gets the usage page of the top-level collection. + The usage page. + + + Gets the vendor identifier for the given HID device. + The vendor identifier. + + + Gets the version, or revision, number for the given HID device. + The version number. + + + Asynchronously retrieves the default, or first, input report from the given HID device. + A HidInputReport object. + + + Asynchronously retrieves an input report, identified by the reportId parameter, from the given HID device. + A HidInputReport object. + Identifies the requested input report. + + + Asynchronously retrieves the first, or default, feature report from the given HID device. + A HidFeatureReport object. + + + Asynchronously retrieves a feature report, identified by the reportId parameter, for the given HID device. + A HidFeatureReport object. + Identifies the requested feature report. + + + Creates the only, or default, output report that the host will send to the device. + A HidOutputReport object. + + + Creates an output report, identified by the reportId parameter, that the host will send to the device. + A HidOutputReport object. + Identifies the report being created. + + + Creates the only, or default, feature report that the host will send to the device. + A HidFeatureReport object. + + + Creates a feature report, identified by the reportId parameter, that the host will send to the device. + A HidFeatureReport object. + Identifies the report being created. + + + Sends an output report asynchronously from the host to the device. + The result of the asynchronous operation. + The output report which the host sends to the device. + + + Sends an feature report asynchronously from the host to the device. + The result of the asynchronous operation. + The feature report which the host sends to the device. + + + Retrieves the descriptions of the boolean controls for the given HID device. + A vector of HidBooleanControlDescription objects. + Specifies the type of report for which the control descriptions are requested. + Identifies the usage page associated with the controls. + Identifies the usage associated with the controls. + + + Retrieves the descriptions of the numeric controls for the given HID device. + A vector of HidNumericControlDescription objects. + Specifies the type of report for which the control descriptions are requested. + Identifies the usage page associated with the controls. + Identifies the usage associated with the controls. + + + Closes the connection between the host and the given HID device. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Retrieves an Advanced Query Syntax (AQS) string based on the given usagePage and usageId. + An Advanced Query Syntax (AQS) string that represents a device selector. + Specifies the usage page of the top-level collection for the given HID device. + Specifies the usage identifier of the top-level collection for the given HID device. + + + Retrieves an Advanced Query Syntax (AQS) string based on the given usagePage, usageId, vendorId, and productId. + An Advanced Query Syntax (AQS) string that represents a device selector. + Specifies the usage page of the top-level collection for the given HID device. + Specifies the usage identifier of the top-level collection for the given HID device. + Identifies the device vendor. + Identifies the product. + + + Opens a handle to the device identified by the deviceId parameter. The acess type is specified by the accessMode parameter. + A HidDevice object. + The DeviceInformation ID that identifies the HID device. + Specifies the access mode. The supported access modes are Read and ReadWrite. + + + Establishes an event listener which handles input reports issued by the device. + + + Represents an input report. + + + Retrieves the currently activated Boolean controls for the given HID device. + A collection of Boolean controls. + + + Retrieves the data associated with a given input report. + The input-report data. + + + Retrieves the identifier associated with a given input report. + The input report identifier. + + + Retrieves the recently transitioned Boolean controls for the given HID device. + A collection of Boolean controls. + + + Retrieves the Boolean control associated with the usagePage and usageIdparameter and found in the given input report. + A HidBooleanControl object. + The usage page of the top-level collection for the given HID device. + The usage identifier of the top-level collection for the given HID device. + + + Retrieves the Boolean control described by the controlDescription parameter and found in the given input report. + A HidBooleanControl object. + A HidBooleanControlDescription object. + + + Retrieves the numeric control associated with the usagePage and usageId parameters and found in the given input report. + A HidNumericControl object. + The usage page of the top-level collection for the given HID device. + The usage identifier of the top-level collection for the given HID device. + + + Retrieves the numeric control described by the controlDescription parameter and found in the given input report. + A HidNumericControl object. + A HidNumericControlDescription object. + + + Represents a feature report. + + + Retrieves, or sets, the data associated with a given feature report. + The feature-report data. + + + Retrieves the identifier associated with a given feature report. + The feature report identifier. + + + Retrieves the Boolean control associated with the usagePage and usageIdparameter and found in the given feature report. + A HidBooleanControl object. + The usage page of the top-level collection for the given HID device. + The usage identifier of the top-level collection for the given HID device. + + + Retrieves the Boolean control described by the controlDescription parameter and found in the given feature report. + A HidBooleanControl object. + A HidBooleanControlDescription object. + + + Retrieves the numeric control associated with the usagePage and usageId parameters and found in the given feature report. + A HidNumericControl object. + The usage page of the top-level collection for the given HID device. + The usage identifier of the top-level collection for the given HID device. + + + Retrieves the numeric control described by the controlDescription parameter and found in the given feature report. + A HidNumericControl object. + A HidNumericControlDescription object. + + + Represents an output report. + + + Retrieves, or sets, the data associated with a given output report. + The output report data. + + + Retrieves the identifier associated with a given output report. + The output report identifier. + + + Retrieves the boolean control associated with the given usagePage and usageId. + A HidBooleanControl object. + The usage page associated with the given control. + The usage identifier associated with the given control. + + + Retrieves the boolean control associated with the given controlDescription. + A HidBooleanControl object. + Describes the Boolean control. + + + Retrieves the numeric control associated with the given usagePage and usageId. + A HidNumericControll object. + The usage page associated with the given control. + The usage identifier associated with the given control. + + + Retrieves the numeric control associated with the given controlDescription. + A HidNumericControl object. + Describes the numeric control. + + + Describes a Boolean control for a given HID device. + + + Retrieves the identifier for a given Boolean control. + The control identifier. + + + Retrieves the parent collection for a given Boolean control. + The control's parent collection. + + + Retrieves the identifier for the report associated with the given Boolean control. + The report identifier. + + + Retrieves the report type for the report associated with the given Boolean control. + The report type. + + + Retrieves the usage identifier associated with the given Boolean control. + The usage identifier. + + + Retrieves the usage page associated with the given Boolean control. + The usage page. + + + Describes a numeric control for a given HID device. + + + Retrieves a Boolean value which indicates whether the control supports a null, or out-of-range, value. + True if the control supports a null value; false otherwise. + + + Retrieves the identifier for a given numeric control. + Identifies the control. + + + Retrieves a Boolean value indicating whether the given control values are absolute or relative. + True if the values are absolute; false if the values are relative. + + + Retrieves the logical maximum value for the given control. + The logical maximum value. + + + Retrieves the logical minimum value for the control. + The logical minimum value. + + + Retrieves the parent collections for a given numeric control. + A vector of HidCollection objects. + + + Retrieves the physical maximum-value for the given control. + The physical maximum value. + + + Retrieves the physical minimum-value for the given control. + The physical minimum value. + + + Retrieves the number of reports associated with the given control. + The number of reports. + + + Retrieves the identifier for the report associated with the given numeric control. + The report identifier. + + + Retrieves the size, in bytes, of the given numeric control. + The report size (in bytes). + + + Retrieves the type of report associated with the given numeric control. + The report type. + + + Retrieves the unit associated with the given numeric control. + The report unit. + + + Retrieves the unit exponent for the given numeric control. + The unit exponent. + + + Retrieves the usage identifier associated with the given numeric control. + The usage identifierl. + + + Retrieves the usage page associated with the given numeric control. + The usage page. + + + Represents the arguments which the HID API sends as part of an input-report event. + + + Retrieves the input report. + A HidInputReport object. + + + Retrieves the collection information for a group of related controls. + + + Retrieves the identifier for a collection of HID controls. + The collection identifier. + + + Retrieves the collection type. + A HidCollectionType object. + + + Retrieves the usage identifier for the given control collection. + The usage identifier. + + + Retrieves the usage page for the given control collection. + The usage page. + + + Represents a simple Boolean control on a HID device that returns on/off values. An example would be the LED light on a keyboard. + + + Retrieves a Boolean value indicating whether the given Boolean control is active. + True if the control is active; false otherwise. + + + Retrieves a description of the given Boolean control. + A HidBooleanControlDescription object. + + + Retrieves the identifier for a given Boolean control. + The control identifier. + + + Retrieves the usage identifier associated with the given Boolean control. + The usage identifier. + + + Retrieves the usage page for a given Boolean control. + The usage page. + + + Represents a numeric control on a HID device that returns a range of values. An example would be the volume control on a speaker. + + + Retrieves, or sets, the numeric value for a given control. + The control value. + + + Retrieves, or sets, a scaled numeric-value for the given control. + The scaled value. + + + Retrieves a control description for the given numeric control. + A HidNumericControlDescription object. + + + Retrieves the identifier for the given numeric control. + The control identifier. + + + Retrieves a Boolean value that indicates whether the given numeric control is grouped with other, related controls. + True if grouped; false otherwise. + + + Retrieves the usage identifier for the given numeric control. + The usage identifier. + + + Retrieves the usage page for the given numeric control. + The usage page. + + + Provides support for identifying the input devices available (pointer, touch, mouse, and keyboard) and retrieving information about those devices. + + + Supports the ability to determine the capabilities of any connected hardware keyboards. + + + Initializes a new instance of the KeyboardCapabilities class. + + + Gets a value that indicates whether a hardware keyboard is detected. + The number of hardware keyboards detected. Typically 0 or 1. + + + Supports the ability to determine the capabilities of any connected mouse devices. + + + Gets a value indicating whether any of the mice connected to the computer has horizontal wheel. + True if there is a horizontal wheel; otherwise, false. + + + Initializes a new instance of the MouseCapabilities class. + + + Gets a value that indicates whether a mouse device is detected. + The number of mouse devices detected. Typically 0 or 1. + + + Gets a value representing the number of buttons on the mouse. If multiple mice are present, it returns the number of buttons of the mouse which has maximum number of buttons. + A value representing the number of buttons on the mouse. If multiple mice are present, it returns the number of buttons of the mouse which has maximum number of buttons. + + + Gets a value indicating whether any of the mice connected to the computer has swapped left and right buttons. + A value indicating whether any of the mice connected to the computer has swapped left and right buttons. + + + Gets a value indicating whether wheel is present on any of the mice connected to the computer. + A value indicating whether wheel is present on any of the mice connected to the computer. + + + Identifies the change in screen location of the mouse pointer, relative to the location of the last mouse event. + + + The x-coordinate of the mouse pointer, relative to the location of the last mouse event. + + + The y-coordinate of the mouse pointer, relative to the location of the last mouse event. + + + Supports the ability to identify and track connected mouse devices. + + + Retrieves the mouse device that is associated with the current view. + The mouse device. + + + Occurs when the mouse pointer is moved. + + + Contains event data for the MouseMoved event. + + + Gets a value that indicates the change in the screen location of the mouse pointer since the last mouse event. + The change in screen location of the mouse pointer, relative to the location of the last mouse event. + + + Supports the ability to identify the connected pointer devices and determine their capabilities. + + + Gets a value indicating whether the pointer device is an integrated device. For example, a video display with an integrated touch digitizer compared to an external pen/stylus digitizer. + True if the pointer device is integrated; otherwise, false. + + + Gets information about the pointer device associated with the specified input pointer ID. + The PointerDevice object that represents the associated pointer device. + The ID of the pointer input. + + + Gets information about the pointer devices attached to the system. + The collection of PointerDevice objects that represent the pointer devices attached to the system. + + + Gets a value indicating the maximum number of contacts supported by the input device. + The number of contacts. + + + Gets the coordinates of the bounding rectangle supported by the input device. + The bounding rectangle at 96 dots per inch (dpi). + + + Gets the pointer device type. + A pointer device type. + + + Gets the screen coordinates that are mapped to the bounding rectangle supported by the input device. + The screen coordinates, in device-independent pixel (DIP). + + + Gets a collection containing the supported pointer device usages. + A collection containing the supported pointer device usages. + + + Enumerates pointer device types. + + + A touch-enabled device + + + Pen + + + Mouse + + + Identifies the Human Interface Device (HID) usage details for the input device. + + + The Human Interface Device (HID) usage page of the pointer device. Human Interface Device (HID) usages are organized into usage pages that specify classes of related devices. For example, touch digitizers (0x0D) and generic input (0x01). + + + The Human Interface Device (HID) pointer device usage ID that specifies a device or property in the UsagePage. For example, 0x04 indicates a touch screen device and 0x47 indicates touch confidence.A usage ID of zero is reserved. + + + The minimum logical value for Usage. + + + The maximum logical value for Usage. + + + The minimum physical value for Usage. + + + The maximum physical value for Usage. + + + The Human Interface Device (HID) unit of measure. + + + The multiplier used to convert the usage value reported by the device to a physical value in units of Unit. (Valid only for usages that indicate a static or dynamic value associated with a control, such as pressure or width and height of the touch contact.) + + + Supports the ability to determine the touch capabilities of any connected touch digitizers. + + + Gets the minimum number of contacts supported by all the digitizers. + Gets the minimum number of contacts supported by all the digitizers. + + + Initializes a new instance of the TouchCapabilities class. + + + Gets a value that indicates whether a touch digitizer is detected. + The number of touch digitizers detected. Typically 0 or 1. + + + Enables application developers to access Point of Service (POS) peripheral devices, such as barcode scanners and magnetic stripe readers. The namespace provides a vendor-neutral interface for accessing POS devices from various manufacturers from the Windows Store app. + + + Defines the constants that indicates the error severity. + + + An unknown error severity. + + + A warning. + + + A recoverable error. + + + An unrecoverable error. + + + Requires assistance. + + + A fatal error. + + + Defines the constants that indicates power reporting capabilities of the Point of Service (POS) device. + + + Cannot determine the state of the device, therefore no power reporting is possible. + + + Can determine and report the two power states (online and off/offline) of the device. + + + Can determine and report the three power states (off, offline, and online) of the device. + + + Defines the constants that indicates the type of health check that can be performed on the devices. + + + Perform an unspecified test. + + + Perform internal tests to that do not physically change the device. + + + Perform a more thorough test that may change the device. + + + Perform a interactive test of the device. The supporting service object will typically display a modal dialog box to present test options and results. + + + Defines the constants that indicates the reason for the error event. + + + Unknown reason. + + + Cannot communicate with the device, possibly due to a configuration error. + + + The device is not enabled. + + + The operation is not supported or not available on the device. + + + The device is not connected or not powered on. + + + The device is closed. + + + The device is offline. + + + The operation failed although the device was connected and powered on. + + + The operation timed out while waiting for a response from the device. + + + The device is busy. + + + The operation failed and returned a vendor specific error information. + + + Provides error information. + + + Gets the vendor specific error information. + The vendor specific error information. + + + Gets the error message. + The error message. + + + Gets the cause of the error. + The cause of the error. + + + Gets the error severity. + The error severity. + + + Defines the constants that indicates the barcode scanner status. + + + The device is online. This is valid if UnifiedPosPowerReportingType is Standard or Advanced. + + + The device power is off or detached from the terminal. This is valid if UnifiedPosPowerReportingType is Advanced. + + + The device power is on, but it is not ready or unable to respond to requests. This is valid if UnifiedPosPowerReportingType is Advanced. + + + The device power is off or the device is offline. This is valid if UnifiedPosPowerReportingType is Standard. + + + Vendor specific status information. + + + Contains the barcode symbology. + + + Gets the Australia Postal barcode symbology. + The Australia Postal barcode symbology. + + + Gets the Aztec barcode symbology. + The Aztec barcode symbology. + + + Gets the Canada Postal barcode symbology. + The Canada Postal barcode symbology. + + + Gets the Composite Component A or B barcode symbology. + The Composite Component A or B barcode symbology. + + + Gets the Composite Component-C barcode symbology. + The Composite Component-C barcode symbology. + + + Gets the China Postal barcode symbology. + The China Postal barcode symbology. + + + Gets the Codabar barcode symbology. + The Codabar barcode symbology. + + + Gets the Codablock 128 barcode symbology. + The Codablock 128 barcode symbology. + + + Gets the Codablock A barcode symbology. + The Codablock A barcode symbology. + + + Gets the Codablock F barcode symbology. + The Codablock F barcode symbology. + + + Gets the Code 11 barcode symbology. + The Code 11 barcode symbology. + + + Gets the Code 128 barcode symbology. + The Code 128 barcode symbology. + + + Gets the Code 16k barcode symbology. + The Code 16k barcode symbology. + + + Gets the Code 32 barcode symbology. + The Code 32 barcode symbology. + + + Gets the Code 39 barcode symbology. + The Code 39 barcode symbology. + + + Gets the Code 39 Extended barcode symbology. + The Code 39 Extended barcode symbology. + + + Gets the Code 49 barcode symbology. + The Code 49 barcode symbology. + + + Gets the Code 93 barcode symbology. + The Code 93 barcode symbology. + + + Gets the Code 93 Extended barcode symbology. + The Code 93 Extended barcode symbology. + + + Gets the Data Code barcode symbology. + The Data Code barcode symbology. + + + Gets the Data Matric barcode symbology. + The Data Matrix barcode symbology. + + + Gets the Dutch Postal barcode symbology. + The Dutch Postal barcode symbology. + + + Gets the EAN (European Article Number) 13 barcode symbology. + The EAN 13 barcode symbology. + + + Gets the EAN 13 with 2 digit supplement barcode symbology. + The EAN 13 with 2 digit supplement barcode symbology. + + + Gets the EAN 13 with 5 digit supplement barcode symbology. + The EAN 13 with 5 digit supplement barcode symbology. + + + Gets the EAN 8 barcode symbology. + The EAN 8 barcode symbology. + + + Gets the EAN 8 with 2 digit supplement barcode symbology. + The EAN 8 with 2 digit supplement barcode symbology. + + + Gets the EAN 8 with 5 digit supplement barcode symbology. + The EAN 8 with 5 digit supplement barcode symbology. + + + Gets the EAN 99 barcode symbology. + The EAN 99 barcode symbology. + + + Gets the EAN 99 with 2 digit supplement barcode symbology. + The EAN 99 with 2 digit supplement barcode symbology. + + + Gets the EAN 99 with 5 digit supplement barcode symbology. + The EAN 99 with 5 digit supplementbarcode symbology. + + + Gets the EAN Velocity barcode symbology. + The EAN Velocity barcode symbology. + + + Gets the EAN Velocity with 2 digit supplement barcode symbology. + The EAN Velocity with 2 digit supplement barcode symbology. + + + Gets the EAN Velocity with 5 digit supplement barcode symbology. + The EAN Velocity with 5 digit supplement barcode symbology. + + + Gets the first possible OEM defined barcode symbology when the symbology type is not included in the current list. + The OEM defined barcode symbology. + + + Gets the GS1 128 shipping container barcode symbology. + The GS1 128 shipping container barcode symbology. + + + Gets the GS1 128 Coupon barcode symbology. + The GS1 128 Coupon barcode symbology. + + + Gets the GS1 Databar Omnidirectional, GS1 Databar Stacked Omnidirectional, GS1 Databar Stacked, or GS1 Databar Truncated barcode symbology. + The GS1 Databar Omnidirectional, GS1 Databar Stacked Omnidirectional, GS1 Databar Stacked, or GS1 Databar Truncated barcode symbology. + + + Gets the GS1 DataBar Limited or RSS Limited barcode symbology. + The GS1 DataBar Limited or RSS Limited barcode symbology. + + + Gets the GS1 Databar Expanded, GS1 Databar Expanded Stacked, or RSS Expanded barcode symbology. + The GS1 Databar Expanded, GS1 Databar Expanded Stacked, or RSS Expanded barcode symbology. + + + Gets the Han Xin barcode symbology. + The Han Xin barcode symbology. + + + Gets the InfoMail barcode symbology. + The InfoMail barcode symbology. + + + Gets the International Standard Book Number (ISBN), also known as Bookland or Bookland EAN, barcode symbology. + The International Standard Book Number (ISBN), also known as Bookland or Bookland EAN, barcode symbology. + + + Gets the ISBN with 5 digit supplement barcode symbology. + The ISBN with 5 digit supplement barcode symbology. + + + Gets the International Society of Blood Transfusion (ISBT) 128 barcode symbology. + The International Society of Blood Transfusion (ISBT) 128 barcode symbology. + + + Gets the International Standard Music Number (ISMN) barcode symbology. + The International Standard Music Number (ISMN) barcode symbology. + + + Gets the ISMN with 2 digit supplement barcode symbology. + The ISMN with 2 digit supplement barcode symbology. + + + Gets the ISMN with 5 digit supplement barcode symbology. + The ISMN with 5 digit supplement barcode symbology. + + + Gets the International Standard Serial Number (ISSN) barcode symbology. + The International Standard Serial Number (ISSN) barcode symbology. + + + Gets the ISSN with 2 digit supplement barcode symbology. + The ISMN with 2 digit supplement barcode symbology. + + + Gets the ISSN with 5 digit supplement barcode symbology. + The ISSN with 5 digit supplement barcode symbology. + + + Gets the Italian Post 25 barcode symbology. + The Italian Post 25 barcode symbology. + + + Gets the Italian Post 39 barcode symbology. + The Italian Post 39 barcode symbology. + + + Gets the Japan Postal barcode symbology. + The Japan Postal barcode symbology. + + + Gets the Korea Postal barcode symbology. + The Korea Postal barcode symbology. + + + Gets the MaxiCode barcode symbology. + The MaxiCode barcode symbology. + + + Gets the Magnetic Ink Character Recognition (MICR) barcode symbology. + The Magnetic Ink Character Recognition (MICR) barcode symbology. + + + Gets the Micro PDF 417 barcode symbology. + The Micro PDF 417 barcode symbology. + + + Gets the Micro QR Code barcode symbology. + The Micro QR Code barcode symbology. + + + Gets the MSI barcode symbology. + The MSI barcode symbology. + + + Gets the Microsoft tag barcode symbology. + The Microsoft tag barcode symbology. + + + Gets the OCR-A barcode symbology. + The OCR-A barcode symbology. + + + Gets the OCR-B barcode symbology. + The OCR-B barcode symbology. + + + Gets the PDF 417 barcode symbology. + The PDF 417 barcode symbology. + + + Gets the Plessey barcode symbology. + The Plessey barcode symbology. + + + Gets the Pharma-Zentral-Nummer (Pzn) barcode symbology. + The Pharma-Zentral-Nummer (Pzn) barcode symbology. + + + Gets the Quick Response (QR) Code barcode symbology. + The Quick Response (QR) Code barcode symbology. + + + Gets the Serials Industry Systems Advisory Committee (SISAC) barcode symbology. + The Serials Industry Systems Advisory Committee (SISAC) barcode symbology. + + + Gets the Sweden Postal barcode symbology. + The Sweden Postal barcode symbology. + + + Gets the Telepen barcode symbology. + The Telepen barcode symbology. + + + Gets the Discreet 2 of 5 barcode symbology. + The Discreet 2 of 5 barcode symbology. + + + Gets the 2 of 5 International Air Transportation Association (IATA) barcode symbology. + The 2 of 5 International Air Transportation Association (IATA) barcode symbology. + + + Gets the Industrial 2 of 5 barcode symbology. + The Industrial 2 of 5 barcode symbology. + + + Gets the Interleaved 2 of 5 barcode symbology. + The Interleaved 2 of 5 barcode symbology. + + + Gets the 2 of 5 Matrix barcode symbology. + The 2 of 5 Matrix barcode symbology. + + + Gets the Standard 2 of 5 barcode symbology. + The Standard 2 of 5 barcode symbology. + + + Gets the TLC 39 barcode symbology. + The TLC 39 barcode symbology. + + + Gets the Tri-Optic Media Storage Devices barcode symbology. + The Tri-Optic Media Storage Devices barcode symbology. + + + Gets the UCC/EAN 128 barcode symbology. + The UCC/EAN 128 barcode symbology. + + + Gets the UK Postal barcode symbology. + The UK Postal barcode symbology. + + + Unknown barcode symbology. + Unknown barcode symbology. + + + Gets the Universal Product Code (UPC) version A barcode symbology. + The Universal Product Code (UPC) version A barcode symbology. + + + Gets the UPC A with 2 digit supplemental barcode symbology. + The UPC A with 2 digit supplemental barcode symbology. + + + Gets the UPC A with 5 digit supplement barcode symbology. + The UPC A with 5 digit supplement barcode symbology. + + + Gets the UPC Coupon with supplemental barcode symbology. + The UPC Coupon with supplemental barcode symbology. + + + Gets the Universal Product Code (UPC) version E barcode symbology. + The Universal Product Code (UPC) version E barcode symbology. + + + Gets the UPC-E with 2 digit supplemnent barcode symbology. + The UPC-E with 2 digit supplemnent barcode symbology. + + + Gets the UPC-E with 5 digit supplement barcode symbology. + The UPC-E with 5 digit supplement barcode symbology. + + + Gets the United States Postal Service 4-State Flat Mail Identification Code Sort (FICS) barcode symbology. + The United States Postal Service 4-State Flat Mail Identification Code Sort (FICS) barcode symbology. + + + Gets the United States Postal Service (USPS) Intelligent Mail barcode symbology. + The United States Postal Service (USPS) Intelligent Mail barcode symbology. + + + Gets the United States Postal Service (USPS) Intelligent Mail Package barcode symbology. + The United States Postal Service (USPS) Intelligent Mail Package barcode symbology. + + + Gets the United States Postal Service PLANET barcode symbology. + The United States Postal Service PLANET barcode symbology. + + + Gets the United States Postal Numeric Encoding Technique (POSTNET) barcode symbology. + The United States Postal Numeric Encoding Technique (POSTNET) barcode symbology. + + + Returns the barcode symbology type as a string. + The barcode symbology type as a string. + The barcode symbology type. + + + Contains the barcode scanner data. + + + Gets the full raw data from the DataReceived event. + The raw data stream from the scanning event. + + + Gets the decoded barcode label, which does not include the header, checksum, and other miscellaneous information. + The data stream containing the decoded barcode label. + + + Gets the decoded barcode label type. Possible values are defined in the BarcodeSymbologies class. + The specific barcode symbology. + + + Provides the barcode data from the DataReceived event. + + + Gets the data from the DataReceived event. + Data from the barcode scanning event. + + + Provides data for the ErrorOccurred event. + + + Gets the data associated with the ErrorOccurred event. + The error information. + + + Indicates whether it is worthwhile to make another attempt at the operation. + True if the application should make another attempt at the operation; otherwise, false. + + + Gets any data that was successfully read. + The partial input information from the barcode scanner. + + + Provides the data from the ImagePreviewReceived event. + + + Gets the BitmapImage from the device representing a preview frame. + The data stream representing the preview frame. + + + Provides information about an operation status change. + + + Gets the vendor specific status code. + The vendor specific status code. + + + Gets the status change information. + The status change information. + + + Represents the barcode scanner capabilities. + + + Indicates whether the barcode scanner supports image preview. + True if the barcode scanner supports image preview; otherwise, false. + + + Indicates whether the barcode scanner supports reporting of usage statistics. + True if the barcode scanner supports statistics reporting; otherwise, false. + + + Indicates whether the barcode scanner supports updating or resetting of usage statistics. + True if the barcode scanner supports updating of usage statistics; otherwise, false. + + + Gets the power reporting type for the barcode scanner. + Power reporting type. + + + Represents the barcode scanner device. + + + Gets the capabilities of the specified barcode scanner. + The capabilities of the barcode scanner. + + + Gets the DeviceInformation.Id of the barcode scanner. + The DeviceInformation.Id of the barcode scanner. + + + Attempts to get an exclusive access to the barcode scanner. + When the method completes, it returns a ClaimedBarcodeScanner. + + + Tests the state of the barcode scanner. + A text description of the test result. Returns an error if the specified check level is not supported by the UnifiedPos device. + The specified health check level. + + + Gets the symbologies supported by the claimed barcode scanner. + When the method completes successfully, it returns a list of values that represent the symbologies supported by the device. + + + Determines whether the specified symbology is supported by the barcode scanner. + True if the device supports the specified symbology; otherwise, false. + The specific barcode symbology. + + + Retrieves the requested statistics from the barcode scanner. + IBuffer representing the requested statistics. + The list of statistics to retrieve.An empty string ("") retrieves all statistics."U_" retrieves all UnifiedPOS defined statistics."M_" retrieves all manufacturer defined statistics."name1" and/or "name2" retrieves specific named statistics as defined by UnifiedPOS or manufacturer.Any combination of individual and groups names ("name3", "U_", "M_"). + + + Gets the list of profiles supported by the barcode scanner. + As array of strings representing the supported profiles. Returns an empty list if the scanner does not support profiles. + + + Determines whether the profile is supported. + True if the barcode scanner supports the profile; otherwise false. + Barcode scanner profile. + + + Returns the first available barcode scanner. + The first available barcode scanner. Returns a null object in the following cases:A device is not found.Access denied to the existing device. The user can deny access to a device, which is not treated as an exception. + + + Creates BarcodeScanner object from the DeviceInformation.Id. + The barcode scanner specified by the unique device identifier. Returns a null object in the following cases:The specific device is not found.Access denied to the existing device. The user can deny access to a device, which is not treated as an exception. + The DeviceInformation.Id that identifies a specific barcode scanner, which can be retrieved from the DeviceId property. + + + Returns an Advanced Query Syntax (AQS) string this is used to enumerate available barcode scanners. + An Advanced Query Syntax (AQS) string that is used to enumerate available barcode scanners. + + + Occurs when the barcode scanner detects an operation status change. + + + Represents the claimed barcode scanner. + + + Gets the DeviceInformation.Id of the claimed barcode scanner. + The DeviceInformation.Id of the claimed barcode scanner. + + + Gets or sets a Boolean value that indicates whether the barcode scanner is disabled after receiving the data. + Set to true if the application wants to receive and process only one input or only one input at a time. + + + Gets or sets a Boolean value that indicates whether to provide the decoded data to the service object. + Set to true if decoded data is provided to the application; otherwise, false. + + + Indicates whether the barcode scanner can receive DataReceived events. + True if the device can receive DataReceived events; otherwise, false. + + + Gets the barcode scanner into a ready state for DataReceived events. + No object or value is returned when this method completes. + + + Puts the barcode scanner into a state where it cannot receive DataReceived events. + No object or value is returned when this method completes. + + + Retains exclusive claim to the barcode scanner. + + + Sets the barcode symbologies for the device to use. + No object or value is returned when this method completes. + The specific symbologies to use. + + + Resets the specified statistics to zero for all statistics that can be reset. + No object or value is returned by this method when it completes. + The list of names of the statistics to reset. An empty string ("") retrieves all statistics."U_" retrieves all UnifiedPOS defined statistics."M_" retrieves all manufacturer defined statistics."name1" and/or "name2" retrieves specific named statistics as defined by UnifiedPOS or manufacturer.Any combination of individual and groups names ("name3", "U_", "M_"). + + + Updates the specified statistics. + No object or value is returned by this method when it completes. + The list of key-value pairs of statistics to update. An empty string ("", "value1") sets all statistics that can be set to value1."U_", "value2" sets all UnifiedPOS defined statistics that can be set to value2. "M_", "value3" sets all manufacturer defined statistics that can be set to value3."name1", "value4" sets specific named statistics as defined by UnifiedPOS or manufacturer to value4. + + + Sets the active profile on the barcode scanner. + No object or value is returned when the method completes. + The name of the profile to set on the device. + + + Releases exclusive claim to the barcode scanner. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Occurs when the device scans a barcode. + + + Occurs when there is a problem in reading a barcode. + + + Occurs when the device receives the bitmap image of the scan. + + + Occurs when the device gets a request to release its exclusive claim. + + + Occurs when the barcode scanner trigger or button is pressed during a scanning operation. + + + Occurs when the barcode scanner trigger or button is released during a scanning operation. + + + Defines the constants that indicates the level of support for magnetic stripe reader authentication protocol: NotSupported, Optional, or Required. + + + Does not support authentication. + + + Supports authentication, but does not require it. + + + Requires authentication. + + + Defines the constants that indicates the device authentication status. + + + A device not authenticated. + + + An authenticated device. + + + Vendor specific status. + + + Defines the constants that indicates the authentication protocol supported by the device. + + + The device does not support device authentication. + + + The device supports challenge response protocol. + + + Defines the constants that indicates the device track ID to read. + + + No track ID + + + Read track 1 + + + Read track 2 + + + Read track 3 + + + Read track 4 + + + Defines the constants that indicates the error reporting type for the device. + + + Report errors at the card level. + + + Report errors at the track level. + + + Defines the constants that indicates the track error type. + + + No specified error. + + + A start sentinel error. + + + An end sentinel error. + + + A parity error. + + + An LRC error. + + + An unknown error. + + + Contains the encryption algorithm supported by the device. + + + Indicates vendor specific encryption algorithm. + Vendor-specific algorithm. + + + Indicates no encryption algorithm. + No encryption algorithm. + + + Indicates Triple DES DUKPT (Derived Unique Key Per Transaction) encryption algorithm supported by the device. + The Triple DES DUKPT encryption algorithm. + + + Contains the card type of the recently swiped card. + + + Indicates the American Association of Motor Vehicle Administrators (AAMVA) card type. + The AAMVA card type. + + + Indicates a bank card type. + Bank card type. + + + Indicates vendor-specific card type. + Vendor-specific card type. + + + Indicates an unknown card type. + Unknown card type. + + + Contains the track data obtained following a card swipe. + + + Gets the raw or decoded data from the swiped card. + The track data from the swiped card. + + + Gets the discretionary data from the swiped card. + The discretionary data from the swiped card. + + + Gets the encrypted data from the swiped card. + The encrypted data from the swiped card. + + + Contains data from the recently swiped card. + + + Gets the additional security or encryption information for the recently swiped card. + The additional security or encryption information. + + + Gets the card authentication information for the recently swiped card. + The card authentication data. + + + Gets the length of the raw CardAuthenticationData before it is encrypted. + The length of the raw CardAuthenticationData before it is encrypted. + + + Gets the card type identifier for the recently swiped card. + The card type identifier. + + + Gets a dictionary of properties for the recently swiped card. + A dictionary of properties. + + + Gets the track data for Track 1. + The Track 1 data. + + + Gets the track data for Track 2. + The Track 3 data. + + + Gets the track data for Track 3. + The Track 3 data. + + + Gets the track data for Track 4. + The Track 4 data. + + + Provides bank card data from the BankCardDataReceived event. + + + Gets the account number from the swiped bank card. + The account number from the swiped bank card. + + + Gets the expiration date from the swiped card. + The expiration date from the swiped card. + + + Gets the first name from the swiped bank card. + The first name from the swiped bank card. + + + Gets the middle initial from the swiped bank card. + The middle initial from the swiped bank card. + + + Gets the data from the swiped bank card. + The data from the swiped bank card. + + + Gets the service code for the swiped bank card. + The service code for the swiped bank card. + + + Gets the suffix from the swiped bank card. + The suffix from the swiped bank card. + + + Gets the surname from the swiped bank card. + The surname from the swiped bank card. + + + Gets the title from the swiped bank card. + The title from the swiped bank card. + + + Provides the American Association of Motor Vehicle Administrators (AAMVA) card data from the AamvaCardDataReceived event. + + + Gets the address from the swiped AAMVA card. + The address from the swiped AAMVA card. + + + Gets the birth date from the swiped AAMVA card. + The birth date from the swiped AAMVA card. + + + Gets the city from the swiped AAMVA card. + The city from the swiped AAMVA card. + + + Gets the class from the swiped AAMVA card. + The class from the swiped AAMVA card. + + + Gets the endorsements from the swiped AAMVA card. + The endorsements from the swiped AAMVA card. + + + Gets the expiration date from the swiped AAMVA card. + The expiration date from the swiped AAMVA card. + + + Gets the eye color from the swiped AAMVA card. + The eye color from the swiped AAMVA card. + + + Gets the first name from the swiped AAMVA card. + The first name from the swiped AAMVA card. + + + Gets the gender from the swiped AAMVA card. + The gender from the swiped AAMVA card. + + + Gets the hair color from the swiped AAMVA card. + The hair color from the swiped AAMVA card. + + + Gets the height from the swiped AAMVA card. + The height from the swiped AAMVA card. + + + Gets the license number from the swiped AAMVA card. + The license number from the swiped AAMVA card. + + + Gets the postal code from the swiped AAMVA card. + The postal code from the swiped AAMVA card. + + + Gets the additional data from the swiped AAMVA card. + The report from the swiped AAMVA card. + + + Gets the restrictions from the swiped AAMVA card. + The restrictions from the swiped AAMVA card. + + + Gets the state from the swiped AAMVA card. + The state from the swiped AAMVA card. + + + Gets the suffix from the swiped AAMVA card. + The suffix from the swiped AAMVA card. + + + Gets the surname from the swiped card. + The surname from the swiped AAMVA card. + + + Gets the weight from the swiped AAMVA card. + The weight from the swiped AAMVA card. + + + Provides data for the recently swiped vendor card. + + + Gets data for the recently swiped vendor card. + The vendor specific data. + + + Provides error information for the ErrorOccurred event. + + + Gets the error information, such as cause of error, severity, error message, and any available vendor specific error information. + The error information. + + + Gets the track data for tracks the did not have errors. + The track data for tracks the did not have errors. + + + Gets the Track 1 error information. + The Track 1 error information. + + + Gets the Track 2 error information. + The Track 2 error information. + + + Gets the Track 3 error information. + The Track 3 error information. + + + Gets the Track 4 error information. + The Track 4 error information. + + + Provides information about an operation status change. + + + Gets the vendor specific error code. + The vendor specific error code. + + + Gets the status change information. + The status change information. + + + Provides capabilities information for the magnetic stripe reader. + + + Gets the authentication level supported by the device. + The supported authentication level. + + + Gets the type of card authentication data that is supported by the device. + The string containing the type of card authentication data. + + + Indicates whether the device supports ISO cards. + True if the device supports ISO cards; otherwise, false. + + + Indicates whether device supports JIS Type-I cards. + True if the device support JIS Type-I cards; otherwise, false. + + + Indicates whether the device supports JIS Type-II cards. + True if the device supports JIS Type-II cards; otherwise, false. + + + Indicates whether the device supports reporting of usage statistics. + True if the device supports reporting of usage statistics; otherwise, false. + + + Indicates whether the device supports updating of usage statistics. + True if the device supports updating of statistics; otherwise, false. + + + Indicates whether the device is capable of masking track data. + True if the device is capable of masking track data; otherwise, false. + + + Indicates whether the devices is able to transmit start and end sentinels. + True if the device is able to transmit start and end sentinels; otherwise, false. + + + Gets the power reporting capabilities of the device. + The power reporting capabilities of the device. + + + Gets the supported encryption algorithm. + The supported encryption algorithm. + + + Represents the magnetic stripe reader device. + + + Gets the capabilities of the magnetic stripe reader. + The capabilities of the magnetic stripe reader. + + + Device authentication protocol supported by the magnetic stripe reader. + The supported authentication protocol. + + + Gets the DeviceInformation.Id of the magnetic stripe reader. + The DeviceInformation.Id of the magnetic stripe reader. + + + Gets the card types supported by the magnetic stripe reader. + The card type identifier. + + + Tests the health of the magnetic stripe reader. + A text description of the text result. Returns an error if the specified check level is not supported by the device. + The specific health check level. + + + Attempts to get an exclusive access to the magnetic stripe reader. + When the method completes, it returns a ClaimedMagneticStripeReader or it returns null if the operation fails to claim a magnetic stripe reader. + + + Retrieves the requested statistics from the magnetic stripe reader. + IBuffer representing the requested statistics. + The list of statistics to retrieve.An empty string ("") retrieves all statistics."U_" retrieves all UnifiedPOS defined statistics."M_" retrieves all manufacturer defined statistics."name1" and/or "name2" retrieves specific named statistics as defined by UnifiedPOS or manufacturer.Any combination of individual and groups names ("name3", "U_", "M_"). + + + Returns the first magnetic stripe reader found. + The first magnetic stripe reader found. Returns a null object in the following cases:A device is not found.Access denied to the existing device. The user can deny access to a device, which is not treated as an exception. + + + Creates a MagneticStripeReader object from DeviceInformation.Id. + The magnetic stripe reader specified by the unique device identifier. Returns a null object in the following cases:The specific device is not found.Access denied to the existing device. The user can deny access to a device, which is not treated as an exception. + The DeviceInformation.Id that identifies a specific magnetic stripe reader, which can be retrieved from the DeviceId property. + + + Returns an Advanced Query Syntax (AQS) string that is used to enumerate available magnetic stripe readers. + An Advanced Query Syntax (AQS) string that is used to enumerate available magnetic stripe readers. + + + Gets the error reporting type the application wants to receive. + The error reporting type. + + + Occurs when the device detects an operation status change. + + + Represents the claimed magnetic stripe reader. + + + Gets the DeviceInformation.Id of the claimed magnetic stripe reader. + The DeviceInformation.Id of the claimed magnetic stripe reader. + + + Gets or sets a Boolean value that indicates whether the magnetic stripe reader is disabled after receiving the data from the most recently swiped card. + Set to true if the application wants to receive and process only one input or only one input at a time. + + + Indicates whether to provide raw or decoded data from the most recently swiped card. + Set to true if decoded data is provided to the application; otherwise, false. + + + Gets or sets the MagneticStripeReaderEncryptionAlgorithms that will be used to encrypt the track data. + The encryption algorithm the will be used to encrypt the track data. + + + Indicates whether the device is authenticated. + True is the device is authenticated; otherwise, false. + + + Indicates whether the magnetic stripe reader is ready to receive data events. + True if the device is operational; otherwise, false. + + + Indicates whether the track data contains start and end sentinel values. + True if the track data contains start and end sentinel values. False if the track data properties only contain track data between sentinels. + + + Gets or sets the track data that the application wants to receive following a card swipe. + The card track. + + + Gets the magnetic stripe reader into a ready state to receive data events. + No object or value is returned by this method when it completes. + + + Puts the ClaimedMagneticStripeReader into a state where it cannot receive data events. + No object or value is returned when this method completes. + + + Retains exclusive claim to the magnetic stripe reader. + + + Retrieves a challenge token from the device. + Buffer used to store the resulting challenge token from the device. + + + Puts the device into an authenticated state. + A buffer containing the response token generated from the challenge token retrieved from a previous call to the RetrieveDeviceAuthenticationDataAsync method. + + + Puts the device into an unauthenticated state. + A buffer containing the response token generated from the challenge token retrieved from a previous call to the RetrieveDeviceAuthenticationDataAsync method. + + + Provides a new encryption key to the device. + The HEX-ASCII or base64-encoded value for the new key. + The name used to identify the key. + + + Resets the specified statistics to zero for all statistics that can be reset. + No object or value is returned by this method when it completes. + The list of names of the statistics to reset. An empty string ("") retrieves all statistics."U_" retrieves all UnifiedPOS defined statistics."M_" retrieves all manufacturer defined statistics."name1" and/or "name2" retrieves specific named statistics as defined by UnifiedPOS or manufacturer. + + + Updates the specified statistics. + No object or value is returned by this method when it completes. + The list of key-value pairs of statistics to update. An empty string ("", "value1") sets all statistics that can be set to value1."U_", "value2" sets all UnifiedPOS defined statistics that can be set to value2. "M_", "value3" sets all manufacturer defined statistics that can be set to value3."name1", "value4" sets specific named statistics as defined by UnifiedPOS or manufacturer to value4. + + + Sets the type of error to report by the ErrorOccurred event. + Error reporting type. + + + Releases the exclusive claim to the magnetic strip reader. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Occurs when a motor vehicle card is swiped. + + + Occurs when a bank card is swiped. + + + Occurs when the device gets a request to release its exclusive claim. + + + Occurs when a vendor-specific card is swiped. + + + Occurs when the magnetic stripe reader detects an error when reading a card. + + + Windows Portable Devices (WPD) enables computers to communicate with attached media and storage devices. This namespace provides methods for identifying Windows Portable Device (WPD) services and storage. + + + Provides methods for identifying a device service for a portable device that supports WPD (Windows Portable Devices) for device enumeration. + + + Returns an Advanced Query Syntax (AQS) string that is used to enumerate device services of the specified ServiceDeviceType. This string is passed to the FindAllAsync or CreateWatcher method. + The AQS string. + The type of service to identify. + + + An Advanced Query Syntax (AQS) string for identifying a device service by its GUIDs. This string is passed to the FindAllAsync or CreateWatcher method. + The AQS string. + The service identifier. + + + Indicates the type of a portable device service. + + + A service that provides calendar information. + + + A service that tracks contacts. + + + A device status service. + + + A note-taking service. + + + A service that provides ringtones for a phone. + + + An short message service (SMS) messaging service. + + + A service for tracking tasks. + + + Provides methods for accessing the storage functionality of a portable device that supports WPD. Removable storage devices include:USB mass storage flash drives and camerasMedia Transfer Protocol (MTP) music players, phones, and camerasPicture Transfer Protocol (PTP) cameras + Required to read from and write to removable storage. + + + Gets a StorageFolder object from a DeviceInformation Id for a removable storage device. + Required to read from and write to removable storage. + The storage folder object that represents the removable storage device and provides access to content on the device. + The DeviceInformation ID that identifies the removable storage device. This id can be retrieved from Windows.Devices.Enumeration or the DeviceInformationId property of the AutoPlay device event arguments. For more information, see Quickstart: Register an app for an AutoPlay device. In order for FromId to succeed, the app must declare both the removableStorage capability as shown in the App capability declarations and file type associations for the files it wishes to access on the device as shown in How to handle file activation. For more information, see the Removable Storage sample. + + + An Advanced Query Syntax (AQS) string for identifying removable storage devices. This string is passed to the FindAllAsync or CreateWatcher method. + Required to read from and write to removable storage. + An AQS string for identifying storage devices. + + + Contains classes and interfaces that provide access to the Windows Runtime Components for print task configuration and print notifications. + + + Provides the context for the printer extension object. + + + Gets the context for the printer extension object based on the DeviceInformation ID. + Pointer to the context. + The device information ID for the print device. + + + Contains properties that allow a client to access and/or manipulate print event data and print device name information. + + + Gets or sets the event data for a print notification event. + The print notification event data. + + + Gets the name of the print device associated with the print notification. + The print device name. + + + Allows a client to retrieve the print task extension context, and also to add an event handler to the print task. + + + Gets the context for the print task extension. + The context for the print task extension. + + + Raised by the print window for your app to notify the device app that the print ticket must be updated. + + + Called when the print dialog for your app raises a SaveRequested event. + + + Called by the device app to cancel the client's request to save the print task configuration. + + + Gets the date-time object that provides the deadline information for the print task. + The deadline for the print task. + + + Called by the device app when it has to complete some asynchronous tasks before it can save the print task configuration information. + The object that represents the deferral for the print task configuration save request. + + + Called by the device app to save the print task configuration. + The object that represents the print task extension context. + + + Called by the device app to provide an update of the status of the deferral. + + + Called by the device app when the deferral is completed. + + + Called to notify the device app that the print task configuration must be saved. + + + Gets the information that is required for updating the print task configuration. + The print task configuration save request. + + + Contains the classes, interfaces, structures and other components that are built on top of the Windows Image Acquisition (WIA) COM APIs to provide scan functionality for Windows Store app and desktop apps. + + + Represents the Flatbed scan source of the scanner. + + + Gets the actual horizontal and vertical scan resolution for the Flatbed scanner, in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets or sets the automatic crop mode. + The automatic crop mode for the scan. + + + Gets or sets the current brightness level for capturing image data from the scanner's Flatbed. At the beginning of a new scan session, this property is set to the DefaultBrightness property. + The current brightness level. + + + Gets the step size at which the brightness levels of the data source can be increased or decreased between the minimum and maximum values. + The step size to increment or decrement. A typical value is 1. + + + Gets or sets the color mode for the Flatbed scanner. + The color mode. + + + Sets or gets the current contrast level for capturing image data from the scan source. At the beginning of a new scan session this property is set to the DefaultContrast property. + The contrast level. + + + Gets the step size at which the contrast levels of the data source can increase or decrease between the minimum and maximum values. + The step size to increment or decrement. The typical value is 1. + + + Gets the default brightness level for the scanner's Flatbed. + The default brightness level for the scanner. + + + Gets the default color mode for the scanner's Flatbed. + The color mode. + + + Gets the default contrast level for the scanner's Flatbed. + The default contrast level. + + + Gets the default file format for the scanner's Flatbed at the beginning of a new scan session. + The file type. + + + Gets or sets the horizontal and vertical scan resolution for the scanner's Flatbed that the app requests, in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets or sets the current file transfer format for image data acquisition from the scanner's Flatbed to the client app. + The file type. + + + Returns whether the scanner's Flatbed supports the specified ImageScannerAutoCroppingMode. + Indicates whether the device supports value mode. + The auto crop mode of the image to scan. + + + Returns whether the scanner's Flatbed can scan and transfer images in the specified color mode. + Indicates whether the scanner can scan images in value mode. + The color mode. + + + Determines whether the scanner's Flatbed supports the specified file format or not. + Indicates whether the specified file type is supported. + The file type. + + + Gets the maximum brightness level supported by the scanner's Flatbed. + The maximum brightness level, typically 1000. + + + Gets the maximum contrast level supported by the scanner's Flatbed. + The maximum contrast level, typically 1000. + + + Gets the maximum horizontal and vertical scan resolution of the scanner's Flatbed in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the maximum scan area dimensions in inches. The maximum scan width is the widest a document can be in order for the scanner's Flatbed to scan it. + The width and height of the area. + + + Gets the minimum brightness level supported by the scanner's Flatbed. + The minimum brightness level, typically -1000. + + + Gets the minimum contrast level supported by the scanner's Flatbed. + The minimum contrast level, typically -1000. + + + Gets the minimum horizontal and vertical scan resolution of the scanner's Flatbed in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the minimum scan area in inches. The minimum scan area is the smallest size a document can have in order for a Flatbed to scan it. + The width and height of the area. + + + Gets the optical scan resolution of the Flatbed scanner in DPI. + The horizontal and vertical scan resolution in pixels. + + + Gets or sets the origin coordinates (horizontal and vertical) and dimensions (width and height) of the selected scan area, in inches. This property is ignored when the AutoCroppingMode property is not Disabled. + The location and size of a rectangle. + + + Represents the Feeder scan source of the scanner. + + + Gets the actual horizontal and vertical scan resolution for the scanner's Feeder, in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets or sets the automatic crop mode. + The automatic crop mode for the scan. + + + Gets or sets the page size automatic detection feature for the scanner's Feeder. + True if the page size automatic detection feature is enabled; otherwise False. + + + Gets or sets the current brightness level for capturing image data from the scanner's Feeder. At the beginning of a new scan session, this property is set to the DefaultBrightness property. + The current brightness level. + + + Gets the step size at which the brightness levels of the data source can be increased or decreased between the minimum and maximum values. + The step size to increment or decrement. A typical value is 1. + + + Returns True if the device can automatically detect at scan time the size of the document pages scanned through the Feeder; otherwise returns False. + True if the device can automatically detect at scan time the size of the document pages scanned through the Feeder; otherwise False. + + + Gets whether the scanner device is capable of scanning ahead from its Feeder. + Indicates whether or not the scanner's Feeder can scan ahead. + + + Gets whether the scanner's Feeder is capable of duplex scanning (scanning both document page sides, front and back). When scanning in duplex mode the same scan settings (such as color mode and scan resolution) are applied to scan both page sides. + Indicates whether duplex scanning is available. + + + Gets or sets the color mode for the scanner's Feeder. + The color mode. + + + Sets or gets the current contrast level for capturing image data from the scanner's Feeder. At the beginning of a new scan session this property is set to the DefaultContrast property. + The contrast level. + + + Gets the step size at which the contrast levels of the data source can increase or decrease between the minimum and maximum values. + The step size to increment or decrement. The typical value is 1. + + + Gets the default brightness level for the scanner's Feeder. + The default brightness level for the scanner. + + + Gets the default color mode for the scanner's Feeder. + The color mode. + + + Gets the default contrast level for the scanner's Feeder. + The default contrast level. + + + Gets the default file format for the scanner's Feeder at the beginning of a new scan session. + The file type. + + + Gets or sets the horizontal and vertical scan resolution for the scanner's Feeder that the app requests, in DPI. + The horizontal and vertical resolution, in pixels. + + + Indicates whether the scanner's Feeder can scan both document page sides. + Returns True if the Feeder can scan both page sides. + + + Gets or sets the current file transfer format for image data acquisition from the scanner's Feeder to the client app. + The file type. + + + Returns whether the scanner's Feeder supports the specified ImageScannerAutoCroppingMode. + Indicates whether the device supports value mode. + The auto crop mode of the image to scan. + + + Returns whether the scanner's Feeder can scan and transfer images in the specified color mode. + Indicates whether the scanner can scan images in value mode. + The color mode. + + + Determines whether the scanner's Feeder supports the specified file format or not. + Indicates whether the specified file type is supported. + The file type. + + + Returns whether the Feeder can scan documents in the specified page size and orientation. + Indicates the scanner can scan with pageSize and pageOrientation values. + The page size. + The page orientation. + + + Gets the maximum brightness level supported by the scanner's Feeder. + The maximum brightness level, typically 1000. + + + Gets the maximum contrast level supported by the scanner's Feeder. + The maximum contrast level, typically 1000. + + + Gets or sets the maximum number of pages-not images, the app can scan in one scan job, before the scanner stops. + The number of pages. + + + Gets the maximum horizontal and vertical scan resolution of the scanner's Feeder in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the maximum scan area dimensions in inches. The maximum scan width is the widest a document can be in order for the scanner's Feeder to scan it. + The width and height of the area. + + + Gets the minimum brightness level supported by the scanner's Feeder. + The minimum brightness level, typically -1000. + + + Gets the minimum contrast level supported by the scanner's Feeder. + The minimum contrast level, typically -1000. + + + Gets the minimum horizontal and vertical scan resolution of the scanner's Feeder in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the minimum scan area in inches. The minimum scan area is the smallest size a document can have in order for a Feeder to scan it. + The width and height of the area. + + + Gets the optical horizontal and vertical scan resolution of the scanner's Feeder in DPI. + The horizontal and vertical scan resolution in pixels. + + + Gets or sets the currently selected page orientation that tells how to place the documents in the scanner's Feeder input tray. + The orientation of the page. + + + Gets or sets the currently selected page size to scan from the Feeder. + The page size. + + + Gets the dimensions (width and height) and orientation of the selected page size, in mil units (1/1000"). + The page size. + + + Indicates whether or not to scan ahead. + True to scan ahead. + + + Gets or sets the origin coordinates (horizontal and vertical) and dimensions (width and height) of the selected scan area, in inches. This property is ignored when the AutoCroppingMode property is not Disabled. + The scan region, in inches. + + + Represents the result of a scan job. + + + Gets the list of scanned image files that was produced by the completed scan job. + A list of scanned image files from the completed scan job. If there is no scanned file, the IVectorView<T>.Size property will be 0. + + + Represents the result of a preview scan job. + + + Gets the format of the data for the scan preview. After preview this property is restored to the value before preview. + The scan format. + + + Gets whether the scan preview was successful. + True if scan preview was successful; otherwise False. + + + Represents the properties of images to scan. + + + Gets and sets the scan settings of the auto-configured scan unit, like the file format, including compression to deliver the scanned data in. This property is ignored if the scanner is not capable of auto-configuration. + The scan configuration. Null if the scanner is not capable of auto-configuration. + + + Gets the default scan source chosen for this scanner device. + The type of scan source. + + + Gets the PnP device identifier of this scanner device. + The PnP device identifier. + + + Gets or sets the scan settings of the Feeder scan unit, like page size, orientation, and scan resolution. + The scanner's Feeder configuration. Null if there is no Feeder. + + + Gets and sets the scan settings of the Flatbed scan unit, like scan resolution and color mode. + The scan configuration of the scanner's Flatbed. Null if there is no Flatbed. + + + Creates an instance of a ImageScanner object based on a scanners device information ID. This method is required for broker device enumeration. + The ImageScanner object. + The device information ID. See DeviceInformation.Id property. + + + Returns the class selection string that apps can use to enumerate scanner devices. This method is required for the brokered device enumeration. + The class selection. + + + Determines if the specified scan source supports scan preview. + Returns True if the specified scan source supports preview; otherwise False. + The scan source. + + + Determines if the specified scan source is available on the scanner. + True if the scan source, Flatbed or Feeder, is available; otherwise False. + The scan source. + + + Starts a scan job with the specified scan source and writes one or multiple images to one multi-page file like TIFF, XPS, and PDF; or one or multiple single-page files like DIB, PNG, JPG, and TIFF to the specified folder location. Returns the progress of the scan. + The list of scanned image files from ImageScannerScanResult and the progress of the WIA scan job from UInt32, which indicates how many files were transferred to the target folder. + The image scan source. + The target folder location of the scanned file. + + + Scans one image from the specified scan source and applies the lowest scan resolution with the selected image file format. + The progress of the scan and the scanned file format. + The image scan source. + The scanned image file. + + + Represents the auto-configured scan source of the scanner. + + + Gets or sets the current file transfer format for image data acquisition from the device to the client app. + The file type. + + + The default file format for the scan source at the beginning of a new scan session. + The file type. + + + Determines if the input scanner supports the specified file format. + True if the specified file type is supported; otherwise False. + The file type. + + + Specifies the automatic crop mode of the scanning device. + + + Automatic detection is disabled. At the beginning of a new scan session, the AutoCroppingMode property is set to this value by default. + + + Scan a single scan region into individual, separate images. + + + Scan multiple scan regions into individual, separate images. + + + Specifies the color modes for the scan source. + + + 24-bit RGB color (3 channels at 8 bits per channel). + + + 8 bit or 4 bit grayscale (1 channel at 8 or 4 bits per channel). If the device supports both 4 and 8 bit grayscale the DefaultColorMode property will use 8 bit. + + + 1 bit bi-tonal, also called monochrome or 'black and white' (1 channel at 1 bit per channel). + + + The device automatically detects the right color mode based on the scan content. In this case the decision between color, grayscale and black and white for example relies on the device, and not the app. + + + The type of files to scan to. + + + Exchangeable image file format/EXIF or JPEG file interchange format/JFIF Use these files only in color or grayscale modes (8 bits per channel/sample), with single page and compressed (lossy JPEG compression). + + + Portable Network Graphics (PNG) image file format This value supports any color mode, with single page and compressed (loseless PNG compression). + + + Windows Device Independent Bitmap (DIB) This value supports any color mode, with single page and uncompressed. This is the only format that is supported by all compatible WIA 2.0 scanner devices. + + + Uncompressed Tagged Image File Format (TIFF) compatible with the TIFF 6.0 specification, either single and/or multi-page These files can be in any color mode supported by this API, always uncompressed and either single page (if only one image has to be transferred) or multi-page (if multiple images have to be transferred and the device supports this multi-page file format). + + + Microsoft XML Paper Specification (XPS) document file format These files can contain image data in any color mode supported by this API, compressed at the choice of the device, either single or multi-page. + + + Open XML Paper Specification (OpenXPS) document file format These files can contain image data in any color mode supported by this API, compressed at the choice of the device, either single or multi-page. + + + Portable Document Format PDF/A (PDF/A is an ISO-standardized version of the Portable Document Format/PDF specialized for the digital preservation of electronic documents) document file format These files can contain image data in any color mode supported by this API, compressed at the choice of the device, either single or multi-page. + + + The types of scan source for the scanning device. + + + The default source. + + + A Flatbed scan source. + + + A Feeder scan source. + + + The scan source is automatically configured. + + + Queries and configures scan settings that are common to both Flatbed and Feeder sources. + + + Gets the actual horizontal and vertical scan resolution for the scan source, in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets or sets the automatic crop mode. + The automatic crop mode for the scan. + + + Configures the current brightness level for capturing image data from the scan source. On a new scan session, the value of this property is the DefaultBrightness property. + The brightness level. + + + Gets the step size at which the brightness levels of the data source can be increased or decreased between the minimum and maximum values. + The step size to increment or decrement. A typical value is 1. + + + Gets or sets the color mode for the scan source. When a new scan session starts, this property is the same as the DefaultColorMode property. + The color mode. + + + Sets or gets the current contrast level for capturing image data from the scan source. At the beginning of a new scan session this property is set to the DefaultContrast property. + The contrast level. + + + Gets the step size at which the contrast levels of the data source can increase or decrease between the minimum and maximum values. + The step size to increment or decrement. The typical value is 1. + + + Gets the default brightness level for the scan source. + The default brightness level for the scanner. + + + Gets the default color mode for this scan source. + The color mode. + + + Gets the default contrast level for the scan source. + The default contrast level. + + + Gets or sets the horizontal and vertical scan resolution for the scan source that the app requests, in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the maximum brightness level supported by the scan source. + The maximum brightness level, typically 1000. + + + Gets the maximum contrast level supported by the scan source. + The maximum contrast level, typically 1000. + + + Gets the maximum horizontal and vertical scan resolution of the scan source in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the maximum scan area dimensions in inches. The maximum scan width is the longest width a document can have in order for the Feeder and Flatbed to scan it. + The width and height of the area. + + + Gets the minimum brightness level supported by the scan source. + The minimum brightness level, typically -1000. + + + Gets the minimum contrast level supported by the scan source. + The minimum contrast level, typically -1000. + + + Gets the minimum horizontal and vertical scan resolution of the scan source in DPI. + The horizontal and vertical resolution, in pixels. + + + Gets the minimum scan area in inches. The minimum scan area is the smallest size a document can have in order for a Flatbed or Feeder to scan it. + The width and height of the area. + + + Gets the optical horizontal and vertical scan resolution of the scan source in DPI. + The horizontal and vertical scan resolution in pixels. + + + Gets or sets the origin coordinates (horizontal and vertical) and dimensions (width and height) of the selected scan area, in inches. This property is ignored when the AutoCroppingMode property is not set to Disabled. + The location and size of a rectangle. + + + Determines if the scan source supports the specified ImageScannerAutoCroppingMode. + True if the device supports the value mode; otherwise False. + The auto crop mode of the image to scan. + + + Determines if the scan source can scan and transfer images in the specified color mode. + True if the scanner can scan images in value mode; otherwise False. + The color mode. + + + Configures the file format when a scanner input source transfers acquired image data to the app. + + + Gets the default file format for the scan source at the beginning of a new scan session. + The file type. + + + Gets or sets the current file transfer format for image data acquisition from the device to the client app. + The file type. + + + Determines whether the input scanner supports the specified file format or not. + True if the specified file type is supported; otherwise False. + The file type. + + + Specifies the scan resolution. + + + The horizontal size. + + + The vertical size. + + + Provides access to the supported types of sensors and related motion data. + + + Represents an accelerometer sensor. + + + Gets the current accelerometer reading. + This method has no parameters. + + + Returns the default accelerometer. + The default accelerometer or null if no integrated accelerometers are found. + + + Gets the minimum report interval supported by the accelerometer. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the accelerometer reports a new sensor reading. + + + Gets or sets the current report interval for the accelerometer. + The current report interval. + + + Occurs when the accelerometer detects that the PC has been shaken. + + + Represents an accelerometer reading. + + + Gets the g-force acceleration along the x-axis. + The x-axis acceleration in g's. + + + Gets the g-force acceleration along the y-axis. + The y-axis acceleration in g's. + + + Gets the g-force acceleration along the z-axis. + The g-force acceleration along the z-axis. + + + Gets the time at which the sensor reported the reading. + The instant in time when the sensor reported the reading. + + + Provides data for the accelerometer readingchanged event. + + + Gets the most recent accelerometer reading. + The most recent accelerometer reading. + + + Provides data for the accelerometer-shaken event. + + + Gets the time at which the sensor reported the shaken event. + The time at which the sensor reported the event. + + + Represents a compass sensor. + + + Gets the current compass reading. + The current compass reading. + + + Returns the default compass. + The default compass or null if no integrated compasses are found. + + + Gets the minimum report interval supported by the compass. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the compass reports a new sensor reading. + + + Gets or sets the current report interval for the compass. + The current report interval. + + + Represents a compass reading. + + + Gets the compass's heading accuracy. + The compass's heading accuracy. + + + Gets the heading in degrees relative to magnetic-north. + The magnetic-north heading. + + + Gets the heading in degrees relative to geographic true-north. + The true-north heading. + + + Gets the time at which the sensor reported the reading. + The time at which the sensor reported the reading. + + + Provides data for the compass readingchanged event. + + + Gets the current compass reading. + The current compass reading. + + + Represents a gyrometer sensor. + + + Gets the current gyrometer reading. + This method has no parameters. + + + Returns the default gyrometer. + The default gyrometer or null if no integrated gyrometers are found. + + + Gets the minimum report interval supported by the gyrometer. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the gyrometer reports the current sensor reading. + + + Gets or sets the current report interval for the gyrometer. + The current report interval. + + + Represents a gyrometer reading. + + + Gets the angular velocity, in degrees per second, about the x-axis. + The angular velocity, in degrees per second, about the x-axis. + + + Gets the angular velocity, in degrees per second, about the y-axis. + The angular velocity, in degrees per second, about the y-axis. + + + Gets the angular velocity, in degrees per second, about the z-axis. + The angular velocity, in degrees per second, about the z-axis. + + + Gets the time at which the sensor reported the reading. + The time at which the sensor reported the reading. + + + Provides data for the gyrometer readingchanged event. + + + Gets the current gyrometer reading. + The current gyrometer reading. + + + Represents an inclinometer sensor. + + + Gets the current inclinometer reading. + The current inclinometer reading. + + + Returns the default inclinometer. + The default inclinometer or null if no inclinometers are found. + + + Gets the minimum report interval supported by the inclinometer. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the inclinometer reports a new sensor reading. + + + Gets or sets the current report interval for the inclinometer. + The current report interval. + + + Represents an inclinometer reading. + + + Gets the rotation in degrees around the x-axis. + The rotation in degrees around the x-axis. + + + Gets the rotation in degrees around the y-axis. + The rotation in degrees around the y-axis. + + + Gets the time at which the sensor reported the reading. + The time at which the sensor reported the reading. + + + Gets the inclinometer's z-axis accuracy. + The inclinometer's z-axis accuracy. + + + Gets the rotation in degrees around the z-axis. + The rotation in degrees around the z-axis. + + + Provides data for the inclinometer readingchanged event. + + + Gets the current inclinometer reading. + The current inclinometer reading. + + + Represents an ambient-light sensor. + + + Gets the current ambient-light sensor reading. + The current ambient-light sensor reading. + + + Returns the default ambient-light sensor. + The default ambient-light sensor or null if no integrated light sensors are found. + + + Gets the minimum report interval supported by the sensor. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the ambient-light sensor reports a new sensor reading. + + + Gets or sets the current report interval for the ambient light sensor. + The current report interval. + + + Represents an ambient lightsensor reading. + + + Gets the illuminance level in lux. + The illuminance level in lux. + + + Gets the time at which the sensor reported the reading. + The time at which the sensor reported the reading. + + + Provides data for the ambient-light sensor reading-changed event. + + + Gets the current ambient light-sensor reading. + The current ambient light-sensor reading. + + + The sensor's accuracy. + + + The accuracy is currently not available, typically because the driver can't report it.You should determine, based on your app's needs, whether your app will want to ask users to calibrate the device whenever this value is returned. + + + The actual and reported values have a high degree of inaccuracy.Apps should always ask the user to calibrate the device whenever this value is returned. + + + The actual and reported values differ but may be accurate enough for some application.Apps that only need a relative value, like a virtual reality app, can continue without additional calibration. + + + The actual and reported values are accurate.No additional calibration is needed. + + + Represents an orientation sensor. + + + Gets the current sensor reading + The current sensor reading. + + + Gets the default orientation sensor. + The default orientation sensor or null if no orientation sensors are found. + + + Gets the minimum report interval supported by the sensor. + The minimum ReportInterval supported by the sensor. + + + Occurs each time the orientation sensor reports a new sensor reading. + + + Gets or sets the report interval supported by the sensor. + The report interval supported by the sensor. + + + Represents an orientation-sensor reading. + + + Gets the Quaternion for the current orientation-sensor reading. + The Quaternion for the current orientation-sensor reading. + + + Gets the rotation matrix for the current orientation-sensor reading. + The rotation matrix for the current orientation-sensor reading. + + + Gets the time at which the sensor reported the reading. + The time at which the sensor reported the reading. + + + Gets the orientation sensor's z-axis accuracy. + The orientation sensor's z-axis accuracy. + + + Provides data for the orientation-sensor reading-changed event. + + + Gets the current reading which includes a Quaternion, a RotationMatrix, and a timestamp. + The current reading which includes a Quaternion, a RotationMatrix, and a timestamp. + + + Represents a Quaternion. + + + Gets the w-value of the Quaternion. + The w-value of the Quaternion. + + + Gets the x-value of the Quaternion. + The x-value of the Quaternion. + + + Gets the y-value of the Quaternion. + The y-value of the Quaternion. + + + Gets the z-value of the Quaternion. + The z-value of the Quaternion. + + + Represents a 3x3 rotation matrix. + + + Gets the value at row 1, column 1 of the given rotation matrix. + The value at row 1, column 1 of the given rotation matrix. + + + Gets the value at row 1, column 2 of the given rotation matrix. + The value at row 1, column 2 of the given rotation matrix. + + + Gets the value at row 1, column 3 of the given rotation matrix. + The value at row 1, column 3 of the given rotation matrix. + + + Gets the value at row 2, column 1 of the given rotation matrix. + The value at row 2, column 1 of the given rotation matrix. + + + Gets the value at row 2, column 2 of the given rotation matrix. + The value at row 2, column 2 of the given rotation matrix. + + + Gets the value at row 2, column 3 of the given rotation matrix. + The value at row 2, column 3 of the given rotation matrix. + + + Gets the value at row 3, column 1 of the given rotation matrix. + The value at row 3, column 1 of the given rotation matrix. + + + Gets the value at row 3, column 2 of the given rotation matrix. + The value at row 3, column 2 of the given rotation matrix. + + + Gets the value at row 3, column 3 of the given rotation matrix. + The value at row 3, column 3 of the given rotation matrix. + + + Indicates the orientation of the device. + + + The device is not rotated. This corresponds to portrait-up. + + + The device is rotated 90-degrees counter-clockwise. This corresponds to landscape-left. + + + The device is rotated 180-degrees counter-clockwise. This corresponds to portrait-down. + + + The device is rotated 270-degrees counter-clockwise. This corresponds to landscape-right. + + + The device is face-up and the display is visible to the user. + + + The device is face-down and the display is hidden from the user. + + + Represents a simple orientation sensor. + + + Gets the default simple orientation sensor. + The default simple orientation sensor. + + + Gets the default simple orientation sensor. + The default simple orientation sensor or null if no simple orientation sensors are found. + + + Occurs each time the simple orientation sensor reports a new sensor reading + + + Provides data for the sensor reading-changed event. + + + Gets the current sensor orientation. + The current sensor orientation. + + + Gets the time of the current sensor reading. + The time of the current sensor reading. + + + Gets info about smart card readers and smart cards; configures physical smart cards; and creates, configures, and deletes Trusted Platform Module (TPM) virtual smart cards. + + + Provides data for the CardAdded event. + + + Gets info about the smart card that was inserted into the smart card reader. + Info about the smart card that was inserted. + + + Provides data for the CardRemoved event. + + + Gets info about the smart card that was taken out of the smart card reader. + Info about the smart card that was taken out of the smart card reader. + + + Represents info about a smart card. + + + Returns the smart card's Answer to Reset (ATR), a standard series of bytes that contains info about the smart card's characteristics, behaviors, and state. + The smart card's ATR byte set. + + + Returns the smart card's status. + One of the SmartCardStatus enumeration values, representing the smart card's status. + + + Gets info about the smart card reader into which the smart card is inserted. + Info about the smart card reader. + + + Represents a smart card authentication challenge/response operation. + + + Gets the smart card's challenge value. + The smart card's challenge value. + + + Changes the smart card's admin key (also known as an administrator PIN or unblock PIN). + An asynchronous action that completes after the admin key change attempt is done. + The response to a smart card authentication challenge/response operation. + The new smart card admin key. + + + Completes the smart card authentication challenge/response operation and frees associated system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Reconfigures an existing, configured smart card with a new response. Optionally, formats the smart card. + An asynchronous action that completes after the smart card reconfiguration attempt is done. + The new response to a smart card authentication challenge/response operation. + True to format the smart card; otherwise false. + + + Reconfigures an existing, configured smart card with a new response and ID. Optionally, formats the smart card. + An asynchronous action that completes after the smart card reconfiguration attempt is done. + The new response to a smart card authentication challenge/response operation. + True to format the smart card; otherwise false. + The new smart card ID. + + + Verifies the response to the smart card challenge request. + After the verification attempt is done, true if the response was successfully verified; otherwise false. + The response to the smart card challenge request. + + + Specifies the rules for characters in a smart card personal identification number (PIN). + + + Any of the characters in the specified character class can be in the PIN. + + + At least one of the characters in the specified character class must be in the PIN. + + + None of the characters in the specified character class can be in the PIN. + + + Represents a set of personal identification number (PIN) rules on a Trusted Platform Module (TPM) virtual smart card. + + + Gets or sets whether number characters are allowed for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + One of the enumeration values, representing whether number characters are allowed. + + + Gets or sets whether lowercase letter characters are allowed for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + One of the enumeration values, representing whether lowercase letter characters are allowed. + + + Gets or sets the maximum character length for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + The maximum character length. + + + Gets or sets the minimum character length for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + The minimum character length. + + + Creates and initializes a new instance of a set of personal identification number (PIN) rules on a Trusted Platform Module (TPM) virtual smart card. + + + Gets or sets whether special characters are allowed for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + One of the enumeration values, representing whether special characters are allowed. + + + Gets or sets whether uppercase letter characters are allowed for a personal identification number (PIN) on a Trusted Platform Module (TPM) virtual smart card. + One of the enumeration values, representing whether uppercase letter characters are allowed. + + + Represents a wait time for a requested smart card personal identification number (PIN) reset. + + + Returns a wait time completion for a smart card personal identification number (PIN) reset. + + + Represents a method that handles a smart card personal identification number (PIN) reset. + An instance of an existing, configured physical smart card or Trusted Platform Module (TPM) virtual smart card. + An instance of a smart card PIN reset request. + + + Represents a smart card personal identification number (PIN) reset request. + + + Gets the smart card's challenge value. + The smart card's challenge value. + + + Gets the length of time to wait before requesting the smart card personal identification number (PIN) reset. + The length of time to wait before requesting the smart card PIN reset. + + + Gets an instance of a wait time for a requested smart card personal identification number (PIN) reset. + An instance of a wait time for a requested smart card PIN reset. + + + Sets the response to a smart card authentication challenge/response operation. + The response to a smart card authentication challenge/response operation. + + + Represents info about, and operations for, configuring smart cards. + + + Returns a smart card to be configured. + An instance of SmartCardProvisioning, representing the smart card to be configured. + The specified smart card. + + + Returns a smart card's authentication challenge/response context. + After the asynchronous operation completes, returns an instance of SmartCardChalllengeContext, representing the smart card's authentication challenge/response context. + + + Returns the smart card's ID. + After the asynchronous operation completes, returns the smart card's ID. + + + Returns the smart card's minidriver name. + After the asynchronous operation completes, returns the smart card's name. + + + Changes a smart card's personal identification number (PIN). + After the smart card PIN change attempt completes, returns true if the smart card's PIN was successfully changed; otherwise false. + + + Resets a smart card's personal identification number (PIN). + After the smart card PIN reset attempt completes, returns true if the smart card's PIN was successfully reset; otherwise false. + The method that handles the smart card PIN reset. + + + Creates a Trusted Platform Module (TPM) virtual smart card with a given human-readable name, admin key, and personal identification number (PIN) rules set. + After the operation completes, returns an instance of SmartCardProvisioning, representing the configured TPM virtual smart card. + The smart card's human-readable name. + The smart card's admin key (also known as an administrator PIN or unblock PIN). + The smart card's PIN rules set. + + + Creates a Trusted Platform Module (TPM) virtual smart card with a given human-readable name, admin key, personal identification number (PIN) rules set, and ID. + After the operation completes, returns an instance of SmartCardProvisioning, representing the configured TPM virtual smart card. + The smart card's human-readable name. + The smart card's admin key (also known as an administrator PIN or unblock PIN). + The smart card's PIN rules set. + The smart card's ID. + + + Deletes a Trusted Platform Module (TPM) virtual smart card. + After the deletion attempt completes, returns true if the TPM virtual smart card was successfully deleted; otherwise false. + The TPM virtual smart card to delete. + + + Gets the configured smart card. + The configured smart card. + + + Represents info about a smart card reader. + + + Occurs when a smart card is inserted into the smart card reader. + + + Occurs when a smart card is taken out of the smart card reader. + + + Gets the smart card reader's device ID. + The smart card reader's device ID. + + + Returns a list of info about all smart cards that are connected to the smart card reader. + After the operation completes, returns the list of info about all smart cards that are connected to the smart card reader. + + + Returns a smart card reader that matches the specified device ID. + The matching smart card reader. + The smart card reader's device ID. + + + Returns an Advanced Query Syntax (AQS) string representing all smart card readers connected to the device. This string is passed to the FindAllAsync method to enumerate the given set of smart card readers. + The Advanced Query Syntax (AQS) string representing all smart card readers connected to the device. + + + Returns an Advanced Query Syntax (AQS) string representing a set of a specific type of smart card readers connected to the device. This string is passed to the FindAllAsync method to enumerate the given set of smart card readers. + The Advanced Query Syntax (AQS) string representing a set of the specified type of smart card readers connected to the device. + One of the enumeration values, representing a specific smart card reader type. + + + Returns the smart card reader's status. + After the status request completes, returns one of the SmartCardReaderStatus enumeration values, representing the smart card reader's status. + + + Gets the smart card reader's type. + One of the enumeration values, representing the smart card reader's type. + + + Gets the smart card reader's device name. + The smart card reader's device name. + + + Represents the smart card reader's type. + + + This value is never returned. This value can be used with GetDeviceSelector(SmartCardReaderKind) to specify no specific smart card reader type in the underlying Advanced Query Syntax (AQS) string. + + + A generic smart card reader. + + + A Trusted Platform Module (TPM) virtual smart card reader. + + + A near field communication (NFC) smart card reader. + + + A Universal Integrated Circuit Card (UICC) smart card reader. + + + Specifies the smart card reader's status. + + + The smart card reader is disconnected. + + + The smart card reader is ready. + + + The smart card reader is allocated for exclusive use by another app. + + + Specifies the smart card's status. + + + The smart card is disconnected. + + + The smart card is ready. + + + The smart card can be used by multiple apps. + + + The smart card is allocated for exclusive use by another app. + + + The smart card is unresponsive. + + + Provides the ability to send, receive, delete, and get stored Short Message Service (SMS) messages, as well as query properties about a Mobile Broadband SMS Device and its message store. + Required to access the SMS service. + + + Retrieves an SmsDevice object asynchronously. + Required to access the SMS service. + + + Cancels the asynchronous SmsDevice object retrieval. + Required to access the SMS service. + + + Closes the asynchronous SmsDevice object retrieval operation. + Required to access the SMS service. + + + Specifies whether the asynchronous SmsDevice object retrieval operation has completed or not. + Required to access the SMS service. + A handler for the completed event of an asynchronous action. + + + Specifies the error code for the asynchronous SmsDevice object retrieval operation + Required to access the SMS service. + The result value of the asynchronous operation. + + + Gets the results of the asynchronous SmsDevice object retrieval operation. + Required to access the SMS service. + A reference to an SmsDevice object. + + + Specifies the ID of the asynchronous SmsDevice object retrieval operation. + Required to access the SMS service. + An integer that uniquely represents the asynchronous SmsDevice object retrieval operation. + + + Specifies the status of the asynchronous SmsDevice object retrieval operation. + Required to access the SMS service. + An enumerated value representing the status of an asynchronous SmsDevice object retrieval operation. + + + Enables start, track, and end an asynchronous message delete operation for a single message. + Required to access the SMS service. + + + Cancels the asynchronous SMS message delete operation. + Required to access the SMS service. + + + Closes the asynchronous SMS message delete operation. + Required to access the SMS service. + + + Specifies whether the asynchronous SMS message delete operation has completed or not. + Required to access the SMS service. + A handler for the completed event of an asynchronous action. + + + Specifies the error code for the asynchronous SMS message delete operation. + Required to access the SMS service. + The result value of the asynchronous operation. + + + Retrieves the result of the asynchronous SMS message delete operation. + Required to access the SMS service. + + + Specifies the ID of the asynchronous SMS message delete operation. + Required to access the SMS service. + An integer that uniquely represents the asynchronous SMS message delete operation. + + + Specifies the status of the asynchronous SMS message delete operation. + Required to access the SMS service. + An enumerated value representing the status of the asynchronous SMS message delete operation. + + + Enables start, track, and end asynchronous SMS message delete operations for multiple messages. + Required to access the SMS service. + + + Cancels the asynchronous SMS message delete operations. + Required to access the SMS service. + + + Closes the asynchronous SMS message delete operations. + Required to access the SMS service. + + + Specifies whether the asynchronous SMS message delete operations have completed or not. + Required to access the SMS service. + A handler for the completed event of an asynchronous SMS message delete operation. + + + Specifies the error code for the asynchronous SMS message delete operations. + Required to access the SMS service. + The result value of the asynchronous SMS message delete operations. + + + Retrieves the result of the asynchronous message operations. + Required to access the SMS service. + + + Specifies the ID of the asynchronous SMS message delete operations. + Required to access the SMS service. + An integer that uniquely represents the asynchronous SMS message delete operations. + + + Specifies the status of the asynchronous SMS message delete operations. + Required to access the SMS service. + An enumerated value representing the status of theasynchronous SMS message delete operations. + + + Supports the retrieval of a message from the SMS message store. + Required to access the SMS service. + + + Cancels the asynchronous SMS message retrieval operation. + Required to access the SMS service. + + + Closes the asynchronous SMS message retrieval operation. + Required to access the SMS service. + + + A handler for the completed event of an asynchronous SMS message retrieval operation. + Required to access the SMS service. + A handler for the completed event of an asynchronous SMS message retrieval operation. + + + Specifies the error code for the asynchronous SMS message retrieval operation. + Required to access the SMS service. + The result value of the asynchronous SMS message retrieval operation. + + + Retrieves the result of the asynchronous SMS message retrieval operation. + Required to access the SMS service. + An interface that accesses the retrieved message. + + + Specifies the ID of the asynchronous SMS message retrieval operation. + Required to access the SMS service. + An integer uniquely representing the asynchronous SMS message retrieval operation. + + + Specifies the status of the asynchronous SMS message retrieval operation. + Required to access the SMS service. + An enumerated value representing the status of an asynchronous SMS message retrieval operation. + + + Supports the retrieval of messages. + Required to access the SMS service. + + + Cancels the asynchronous operations. + Required to access the SMS service. + + + Closes the asynchronous operations. + Required to access the SMS service. + + + Specifies whether the asynchronous message retrieval operation has completed or not. + Required to access the SMS service. + Specifies whether the asynchronous message operation has completed or not. + + + Specifies the error code for the asynchronous message operation. + Required to access the SMS service. + The result value of the asynchronous operation. + + + Retrieves the result of the asynchronous message retrieval operation. + Required to access the SMS service. + A reference to the SMS messages retrieved. + + + Indicates the ID of the asynchronous message operation. + Required to access the SMS service. + An integer uniquely representing the asynchronous operation. + + + Specifies the progress status of the asynchronous message operation. + Required to access the SMS service. + A handler for progress update events of an asynchronous operation. + + + Specifies the status of the asynchronous message operations. + Required to access the SMS service. + An enumerated value representing the status of an asynchronous operation. + + + Enables the sending of a message. + Required to access the SMS service. + + + Cancels the asynchronous operation. + Required to access the SMS service. + + + Closes the asynchronous operation. + Required to access the SMS service. + + + A handler for the completed event of an asynchronous action. + Required to access the SMS service. + A handler for the completed event of an asynchronous action. + + + Specifies the error code for the asynchronous message operation. + Required to access the SMS service. + The result value of the asynchronous operation. + + + Retrieves the result of the asynchronous operation. + Required to access the SMS service. + + + Indicates the ID of the asynchronous message operation. + Required to access the SMS service. + An integer uniquely representing the asynchronous operation. + + + Specifies the status of the asynchronous message operation. + Required to access the SMS service. + An enumerated value representing the status of an asynchronous operation. + + + Represents an SMS message in raw PDU format. The data format differs depending on whether the message format (indicated by the value of the Format property) is GSM or CDMA. + Required to access the SMS service. + + + Retrieves the detected protocol description unit (PDU) format of this message. + Required to access the SMS service. + An enumerated value describing the SMS data format. + + + Returns the raw buffer of the message in binary protocol description unit (PDU) format as a byte array. + Required to access the SMS service. + A byte array representing message data. If there is no message data, the returned array is empty. + + + Indicates the ID of the asynchronous message operation. + Required to access the SMS service. + An integer uniquely representing the asynchronous operation. + + + Returns the message class, as determined by the operator's message network. The two most common classes are None (normal message) or Class0 (special operator message, such as a roaming warning that must be shown immediately to the user). A typical client for end-user messages ignores Class0 messages. + Required to access the SMS service. + A value from the SmsMessageClass enumeration. + + + Specifies the raw binary payload of the SMS message. It should be formatted according to the protocol description unit (PDU) standard. + Required to access the SMS service. + A byte array representing message data. If there is no message data, the returned array is empty. + + + Creates an instance of the SmsBinaryMessage class. + Required to access the SMS service. + + + Supports the operation of a mobile broadband SMS device. + Required to access the SMS service. + + + Returns the phone number associated with the SMS device. The phone number can be used to associate incoming messages with the account and possibly an external storage mechanism such as an account inbox. + Required to access the SMS service. + A string representation of the account phone number. + + + Estimates the transmitted message length of the specified text message. The estimate can be useful to clients who want to give an indication of how many messages will be sent on the network to carry the text of the full message. + Required to access the SMS service. + A reference to an SmsEncodedLength structure that is populated with the length information. + A reference to the SMS text message to measure. + + + Returns the cellular class of the SMS device. The class can be used to determine which encodings are appropriate or which device limitations are in effect. + Required to access the SMS service. + An enumerated value indicating the device's cellular class. + + + Returns the SMS device's status, which indicates whether the device is ready, or not. It also indcates what type of problem exists if the device is not ready. + Required to access the SMS service. + An enumerated value that indicates the readiness of an SMS device to engage in cellular network traffic operations. + + + Creates an instance of SmsDevice for the device that received the SMS message. + Required to access the SMS service. + The SMS device operation object. + A string representation of the DeviceInformation ID of the SMS device that received the SMS message. + + + Creates an instance of SmsDevice for the specified Mobile Broadband network account ID. + When this method completes, it returns the SmsDevice for the specified Mobile Broadband network account ID. + The Mobile Broadband network account ID to use to select the corresponding mobile broadband device to use for the SMS device + + + Creates an instance of an SmsDevice object associated with the default SMS device. Because the device might be busy, the operation executes asynchronously. The asynchronous operation object returns immediately. + Required to access the SMS service. + A reference to an IAsyncOperation(SmsDevice) object that supports asynchronous SmsDevice object retrieval. + + + Retrieves the class selection string that can be used to enumerate SMS devices. + Required to access the SMS service. + A reference to an Advanced Query Syntax (AQS) string that identifies an SMS device. + + + Accesses the on-device message store. The store holds messages until a client can retrieve them. On some devices, for example, the store may correspond to the SIM storage for SMS messages. + Required to access the SMS service. + A reference to an SmsDeviceMessageStore object. + + + Asynchronously sends a message using the SMS device. The method is asynchronous because the send operation might not occur instantaneously. The message operation object is returned immediately. + Required to access the SMS service. + The message operation object. + A reference to an ISmsMessage object. The message can be in text or binary format. + + + Sets an event handler to be called when the device receives a new text message. + Required to access the SMS service. + + + Sets an event handler to be called when the status of the SMS device changes. + Required to access the SMS service. + + + Provides access to the messages stored on an SMS Device and information about the message store. + Required to access the SMS service. + + + Deletes the message with the specified ID. Because the device might be busy, the operation executes asynchronously. The asynchronous operation object returns immediately. + Required to access the SMS service. + A new message operation object that is used to start and track the asynchronous operation. + Integer ID of the message to delete, which was previously read from an SmsTextMessage object obtained from the device message store. + + + Deletes the messages to which the filter applies. The filter can be used to delete all messages, or only messages that are read, unread, sent, or in a draft state. Because the operation might not be instantaneous, it executes asynchronously. The asynchronous operation object returns immediately. + Required to access the SMS service. + A new message operation object that is used to start and track the asynchronous operation. + A search filter that specifies which messages to delete. + + + Retrieves the message with the specified ID. The device might be busy, so the method executes asynchronously. The asynchronous operation object returns immediately. + Required to access the SMS service. + Returns a new message operation object that is used to start and track the asynchronous operation. + ID of the message to retrieve. + + + Retrieves a list of messages that match the conditions specified in a filter. The messages can be filtered as read, unread, sent, or in the draft state. + Required to access the SMS service. + Returns a new message operation object that is used to start and track the asynchronous operation. + ID of the message to retrieve. + + + Indicates the maximum number of messages that can be stored in the device store. The client can use this value to determine how to maintain enough space in the device store to receive new messages from the network. + Required to access the SMS service. + An integer value representing the maximum number of messages for the device store. + + + Provides data for ISmsBinaryMessage event handlers. + Required to access the SMS service. + + + Retrieves an object that holds the binary representation of the message. This is of interest only to clients who want to pass binary messages on directly or do their own interpretation of the binary message contents. + Required to access the SMS service. + A reference to an SmsBinaryMessage object. + + + Retrieves an object that holds the text representation of the message. If the message is not successfully decoded, an error is returned. + Required to access the SMS service. + A new SmsTextMessage object. + + + Presents the details of SMS message events to the background work item that handles messages while your app is suspended. + Required to access the SMS service. + + + Gets the binary message object for the SMS message received by the background task. + The binary message object for the SMS message received by the background task. + + + Returns the DeviceInformation ID of the network interface that received the SMS message. This ID can be passed to SmsDevice.FromIdAsync to activate the device and retrieve additional message details. + Required to access the SMS service. + A string containing the DeviceInformation ID of the SMS network interface (device). This value is typically used to retrieve details such as the sender and the body of the message. For example, you might use the ID to display a popup telling the user that a new message from a particular person has arrived. The combination of DeviceId and MessageIndex is sufficient to retrieve the new message from the SMS device. + + + Gets the message class for the SMS message received by the background task. + The message class for the SMS message received by the background task. + + + Returns the index of the new message that raised the event. You can pass this to SmsDevice.GetMessageAsync to retrieve the new message itself. + Required to access the SMS service. + An integer index of the new message. + + + Manages a decoded SMS text message, providing direct access to the plain text body of the message, as well as key header properties, such as time stamp. + Required to access the SMS service. + + + Specifies the plain text body of the message. + Required to access the SMS service. + A string representing the body of the text message. If there were decoding problems, some characters in the original message can be represented by a wildcard character, typically a question mark ('?'). + + + Specifies the encoding type that has been set to use when sending this message. + Required to access the SMS service. + A value from the SmsEncoding enumeration. + + + Specifies the phone number of the sender of the message. + Required to access the SMS service. + A string representation of the phone number of the sender of this message. It should be in the format preferred by the device and the network it is registered on. + + + Decodes a binary message and places the results in a new instance of a text message. This method represents the binary message as a reference to a buffer of bytes and a selection of how the buffer is encoded. Therefore, it can be used when the message did not originate directly from the device or as an instance of an SmsBinaryMessage class. + Required to access the SMS service. + A new SmsTextMessage object if the decoding was successful. + An SmsDataFormat enumerated value that identifies the format of a particular protocol description unit (PDU) buffer. + An array of bytes containing the binary data to decode. + + + Reads a binary message and decodes it. The results are placed in a new instance of a text message. + Required to access the SMS service. + A new SmsTextMessage object. + An instance of a binary message to decode. + + + Indicates the ID of the SMS text message. + Required to access the SMS service. + An integer ID for the message. + + + Specifies the message class of a message. This message class typically originates on the network, not the mobile device. + Required to access the SMS service. + A value from the SmsMessageClass enumeration. + + + Indicates the total number of parts in the original message if the message is part of a multi-part message. + Required to access the SMS service. + An unsigned integer. If the message is standalone, the value is 1. + + + Indicates the part number of a multi-part message if this message is part of a multi-part message. It can be used to reconstruct the original message by joining the parts together, in conjunction with the PartReferenceId and PartCount properties. + Required to access the SMS service. + An unsigned integer. It is one-based. It will not exceed PartCount + 1. + + + Indicates a reference value that can be used if the message is part of a multi-part message. If this message belongs to a multi-part message, the PartNumber value can be used to reconstruct the full original message, and each part of that message will have the same value for PartReferenceId. + Required to access the SMS service. + An unsigned integer determined by the sending network; it cannot be manipulated through this interface. If the network has its own policy on the lifetime of a multi-part message, this reference number might not be valid indefinitely. + + + Creates an instance of the SmsTextMessage class. + Required to access the SMS service. + + + Indicates the timestamp of the message. It is determined locally for a constructed message instance or from the service center timestamp of a received message. + Required to access the SMS service. + A value of the DateTime type. + + + Indicates the recipient phone number of this message. + Required to access the SMS service. + A string representation of the phone number, formatted in the phone number format favored by the device and the network that the device is registered on. + + + Reads a message in the specified format and places the results in a new instance of a binary message. + Required to access the SMS service. + The new binary message that holds the result of this method call. + A value from the SmsDataFormat enumeration. + + + This structure represents information about the length of an SmsTextMessage object when it is encoded as a PDU. + Required to access the SMS service. + + + The number of segments needed to encode the message. + + + The number of characters in the last segment of the encoded message. + + + The estimated number of characters that can fit in one segment of the message. + + + The number of bytes in the last segment of the encoded message. + + + The number of bytes in each segment of the message. + + + This enumerated type defines the type of cellular device. + Required to access the SMS service. + + + The device type corresponds to no cellular class. + + + The device type is GSM cellular class. + + + The device type is CDMA cellular class. + + + This enumerated type identifies the format of a given protocol description unit (PDU) buffer. + Required to access the SMS service. + + + The data format is unknown. + + + The data format is CDMA WMT format of type submit. + + + The data format is GSM of type submit. + + + The data format is CDMA WMT format of type deliver. + + + The data format is GSM of type deliver. + + + Contains values that indicate the readiness of an SMS device to engage in cellular network traffic operations. + Required to access the SMS service. + + + The device is powered off. + + + The device is powered on and ready to be used. + + + The SIM card is not inserted into the device. + + + The SIM is invalid; PIN unblock key retrials have exceeded the limit. + + + General device failure. + + + The service subscription is not activated. + + + The device is locked by a PIN or password that prevents the device from initializing and registering on the network. + + + The device is blocked by a PIN or password that prevents the device from initializing and registering on the nework. + + + This enumerated type is used to determine the encoding algorithm to send or calculate the length of an SmsTextMessage object. + Required to access the SMS service. + + + The data encoding is unknown. + + + 7-bit encoding if all characters can be represented, otherwise 2-byte Universal Character Set (UCS-2) encoding. + + + Not supported. Do not use. + + + Not supported. Do not use. + + + Standard 7-bit per octet ASCII encoding. + + + This enumerated type specifies the message class of a message. The message class typically originates on the network, not the mobile device. + Required to access the SMS service. + + + No class was specified. + + + Message should be immediately displayed. + + + Mobile equipment (ME) specific message. + + + SIM specific message. + + + Terminal equipment (TE) specific message. + + + This enumerated type specifies which messages in the device message store an operation is performed on. + Required to access the SMS service. + + + All messages in the device message store. + + + All unread received messages. + + + All read received messages. + + + All sent and saved messages. + + + All unsent and saved messages. + + + This enumerated type defines whether the SMS message is encoded in binary or text format. + Required to access the SMS service. + + + The SMS message is in binary format. + + + The SMS message is in text format. + + + This interface provides access to the raw binary format of an SMS message. The message is stored in the industry standard protocol description unit (PDU) format (see the SMS specification GSM 03.40). + Required to access the SMS service. + + + Retrieves the detected protocol description unit (PDU) format of this message. + Required to access the SMS service. + An enumerated value describing the SMS data format. + + + Returns the raw buffer of the message in binary protocol description unit (PDU) format as a byte array. + Required to access the SMS service. + A byte array representing message data. If there is no message data, the returned array is empty. + + + Specifies the raw binary payload of the SMS message. It should be formatted according to the protocol description unit (PDU) standard. + Required to access the SMS service. + A byte array representing message data, formatted according to the protocol description unit (PDU) standard. + + + This interface controls a mobile broadband SMS device. It is the primary entry point to SMS services on the device. + Required to access the SMS service. + + + Returns the phone number associated with the SMS device. The phone number can be used to associate incoming messages with the account and possibly an external storage mechanism such as an account inbox. + Required to access the SMS service. + A string representation of the account phone number. + + + Estimates the transmitted message length of the specified text message. The estimate can be useful to clients who want to give an indication of how many messages will be sent on the network to carry the text of the full message. + Required to access the SMS service. + A reference to an SmsEncodedLength structure that is populated with the length information. + A reference to the SMS text message to measure. + + + Returns the cellular class of the SMS device. The class can be used to determine which encodings are appropriate or which device limitations are in effect. + Required to access the SMS service. + An enumerated value indicating the device's cellular class. + + + Returns the SMS device's status, which indicates whether the device is ready, or not. It also indcates what type of problem exists if the device is not ready. + Required to access the SMS service. + An enumerated value that indicates the readiness of an SMS device to engage in cellular network traffic operations. + + + Accesses the on-device message store. The store holds messages until a client can retrieve them. On some devices, for example, the store may correspond to the SIM storage for SMS messages. + Required to access the SMS service. + A reference to an SmsMessageStore object. + + + Asynchronously sends a message using the SMS device. The method is asynchronous because the send operation might not occur instantaneously. The asynchronous operation object is returned immediately. + Required to access the SMS service. + A reference to an SendSmsMessageOperation object that supports asynchronous message sending. + A reference to an SmsMessage object. The message can be in text or binary format. + + + Sets an event handler to be called when the status of the SMS device changes. + Required to access the SMS service. + + + Sets an event handler to be called when the device receives a new text message. + Required to access the SMS service. + + + This interface is implemented by all types of SMS messages that are supported. + Required to access the SMS service. + + + Retrieves an ID for the message, which can later be specified in calling message store methods in order to get or delete the message. + Required to access the SMS service. + An integer ID for the message. + + + Returns the message class, as determined by the operator's message network. The two most common classes are None (normal message) or Class0 (special operator message, such as a roaming warning that must be shown immediately to the user). A typical client for end-user messages ignores Class0 messages. + Required to access the SMS service. + A value from the SmsMessageClass enumeration. + + + This interface manipulates a decoded SMS text message. It provides direct access to the plain text body of the message, as well as key header properties, such as time stamp. + Required to access the SMS service. + + + Specifies the plain text body of the message. + Required to access the SMS service. + A string representing the body of the text message. If there were decoding problems, some characters in the original message can be represented by a wildcard character, typically a question mark: '?'. + + + Specifies the encoding type that has been set to use when sending this message. + Required to access the SMS service. + A value from the SmsEncoding enumeration. + + + Specifies the phone number of the sender of the message. + Required to access the SMS service. + A string representation of the phone number of the sender of this message. It should be in the format preferred by the device and the network it is registered on. + + + Retrieves the total number of parts in the original message if the message is part of a multi-part message. + Required to access the SMS service. + An unsigned integer. If the message is standalone, the value is 1. + + + Retrieves the part number of a multi-part message if this message is part of a multi-part message. It can be used to reconstruct the original message by joining the parts together, in conjunction with the PartReferenceId and PartCount properties. + Required to access the SMS service. + An unsigned integer. It is one-based. It will not exceed PartCount + 1. + + + Indicates a reference value that can be used if the message is part of a multi-part message. If this message belongs to a multi-part message, the PartNumber value can be used to reconstruct the full original message, and each part of that message will have the same value for PartReferenceId. + Required to access the SMS service. + An unsigned integer determined by the sending network; it cannot be manipulated through this interface. If the network has its own policy on the lifetime of a multi-part message, this reference number might not be valid indefinitely. + + + Retrieves the timestamp of the message. It is determined locally for a constructed message instance or from the service center timestamp of a received message. + Required to access the SMS service. + A value of the DateTime type. + + + Specifies the recipient phone number of this message. + Required to access the SMS service. + A string representation of the phone number, formatted in the phone number format favored by the device and the network that the device is registered on. + + + Reads a message in the specified format and places the results in a new instance of a binary message. + Required to access the SMS service. + The new binary message that holds the result of this method call. + A value from the SmsDataFormat enumeration. + + + This handler is called when the status on the SMS device changes. Callers should implement this when they want to be notified when a significant state change occurs on the device. For example, the caller might want to know when the device is ready to send and receive messages. + Required to access the SMS service. + A reference to the device object that sent the event. + + + This event handler is called when a new binary message is received. Callers should implement this when they want to handle new binary messages from a given SMS device. + Required to access the SMS service. + A reference to the SMS device object that sent the message. + An object that holds the binary and text representations of the message. + + + The Windows.Devices.Usb defines Windows Runtime classes that a Windows store app can use to communicate with a USB device that does not belong to a device class, or for which Microsoft does not provide an in-box driver. + + + The endpoint descriptor for a USB bulk IN endpoint. The descriptor specifies the endpoint type, direction, number and also the maximum number of bytes that can be read from the endpoint, in a single transfer. + + + Gets the USB endpoint number of the bulk IN endpoint. + The endpoint number of the bulk IN endpoint. That number is in Bit 3...0 of the bEndpointAddress field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the maximum number of bytes that can be sent to or received from this endpoint, in a single packet. + Indicates the maximum packet size of the endpoint. This value is derived from the wMaxPacketSize field value of the endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the object that represents the pipe that the host opens to communicate with the bulk IN endpoint. + An UsbBulkInPipe object that is the pipe for the bulk IN endpoint. + + + Represents the pipe that the underlying USB driver opens to communicate with a USB bulk IN endpoint of the device. The app can get an input stream from the pipe and access data is being read from the endpoint. + + + Gets or sets configuration flags that controls the behavior of the pipe that reads data from a USB bulk IN endpoint. + A UsbReadOptions value that indicates the pipe policy. + + + Gets the object that represents endpoint descriptor associated with the USB bulk IN endpoint. + A UsbBulkInEndpointDescriptor object that represents endpoint descriptor associated with the USB bulk IN endpoint. + + + Input stream that stores the data that the bulk IN pipe received from the endpoint. + Input stream that contains data read from the endpoint. + + + Gets the maximum number of bytes that can be read from the bulk IN pipe in a single transfer. + The maximum number of bytes that can be read from the bulk IN pipe in a single transfer. + + + Starts an asynchronous operation to clear a stall condition (endpoint halt) on the USB bulk IN endpoint that is associated with the pipe. + An IAsyncAction object that is used to control the asynchronous operation. + + + Discards any data that is cached in the bulk IN pipe. + + + The endpoint descriptor for a USB bulk OUT endpoint. The descriptor specifies the endpoint type, direction, number and also the maximum number of bytes that can be written to the endpoint, in a single transfer. + + + Gets the USB endpoint number of the bulk OUT endpoint. + The endpoint number of the bulk OUT endpoint. That number is in Bit 3...0 of the bEndpointAddress field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the maximum number of bytes that can be sent to or received from this endpoint. + Indicates the maximum packet size of the endpoint. This value is the wMaxPacketSize field value of the endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the object that represents the pipe that the host opens to communicate with the bulk IN endpoint. + A UsbBulkOutPipe object that is the pipe for the bulk OUT endpoint. + + + Represents the pipe that the underlying USB driver opens to communicate with a USB bulk OUT endpoint of the device. The object provides access to an output stream to which the app can write data to send to the endpoint. + + + Gets or sets configuration flags that controls the behavior of the pipe that writes data to a USB bulk IN endpoint. + A UsbWriteOptions constant that indicates the pipe policy. + + + Gets the object that represents the endpoint descriptor associated with the USB bulk OUT endpoint. + A UsbBulkOutEndpointDescriptor that represents the endpoint descriptor associated with the USB bulk OUT endpoint. + + + Gets an output stream to which the app can write data to send to the endpoint. + The output steam that contains the transfer data. + + + Starts an asynchronous operation to clear a stall condition (endpoint halt) on the USB bulk OUT endpoint that is associated with the pipe. + An IAsyncAction object that is used to control the asynchronous operation. + + + Provides information about a USB configuration, its descriptors and the interfaces defined within that configuration. For an explanation of a USB configuration, see Section 9.6.3 in the Universal Serial Bus (USB) specification. + + + Gets the object that contains the first 9 bytes of the descriptor associated with the USB configuration. + A UsbConfigurationDescriptor object that represents the first 9 bytes of the descriptor associated with the USB configuration. + + + Gets an array of objects that represent the full set of descriptors associated with a USB configuration. + An array of UsbDescriptor objects that contains the full set of descriptors associated with a USB configuration. + + + Gets an array of USB interfaces available in the USB configuration. + An array of UsbInterface objects. + + + Derives information from the first 9 bytes of a USB configuration descriptor. The information includes the power capabilities of the device when the configuration is active and the number of interfaces included in that configuration. + + + Gets the bConfigurationValue field of a USB configuration descriptor. The value is the number that identifies the configuration. + The number that identifies the configuration. + + + Gets the bMaxPower field of a USB configuration descriptor. The value indicates the maximum power (in milliamp units) that the device can draw from the bus, when the device is bus-powered. + The maximum power (in milliamp units) that the device can draw from the bus. + + + Gets the D5 bit value of the bmAttributes field in the USB configuration descriptor. The value indicates whether the device can send a resume signal to wake up itself or the host system from a low power state. + True, if the device supports remote wakeup; otherwise false. + + + Gets the D6 bit of the bmAttributes field in the USB configuration. This value indicates whether the device is drawing power from a local source or the bus. + True, if the device is drawing power from a local source; false indicates that the device is only drawing power from the bus. + + + Retrieves the first 9 bytes of a USB configuration descriptor in a UsbConfigurationDescriptor object that is contained in a UsbDescriptor object. + True, if a UsbConfigurationDescriptor object was found in the specified UsbDescriptor object. Otherwise, false. + The UsbDescriptor object to parse. + Receives a UsbConfigurationDescriptor object. + + + Parses the specified USB descriptor and returns fields of a USB configuration descriptor. + A UsbConfigurationDescriptor object that contains fields of a USB configuration descriptor. + A UsbDescriptor object that contains first 9 bytes of the USB configuration descriptor. + + + Provides information about the USB control transfer, the type of control request, whether the data is sent from or to the host, and the recipient of the request in the device. + + + Gets or sets the bmRequestType value as a byte. + The entire bmRequestType value in a byte. + + + Gets or sets the type of USB control transfer: standard, class, or vendor. + The type of USB control transfer: standard, class, or vendor. + + + Gets or sets the recipient of the USB control transfer. + The recipient of the USB control transfer. + + + Gets or sets the direction of the USB control transfer. + The direction of the USB control transfer. + + + Creates a UsbControlRequestType object. + + + Provides information about the type of descriptor, its size (in bytes), and gets the descriptor data. + + + Gets the type of descriptor. + The type of descriptor. + + + Gets the length of the descriptor. + The length of the descriptor. + + + Reads descriptor data in the caller-supplied buffer. + A caller-supplied buffer that receives descriptor data. + + + Represents a USB device. The object provides methods and properties that an app can use to find the device (in the system) with which the app wants to communicate, and sends IN and OUT control transfers to the device. + + + Gets an object that represents a USB configuration including all interfaces and their endpoints. + A UsbConfiguration object that contains information about a USB configuration including the configuration descriptor and array of all USB interfaces in that configuration. + + + Gets the object that represents the default or the first interface in a USB configuration. + A UsbInterface object that represents the default or the first interface in a USB configuration. + + + Gets the object that represents the USB device descriptor. + A UsbDeviceDescriptor that represents the USB device descriptor. + + + Releases the reference to the UsbDevice object that was previously obtained by calling FromIdAsync. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Starts an asynchronous operation that creates a UsbDevice object. + Returns an IAsyncOperation(UsbDevice) object that returns the results of the operation. + The device instance path of the device. To obtain that value, get the DeviceInformation.Id property value. + + + Gets an Advanced Query Syntax (AQS) string, based on vendor, product, and device interface GUID identifiers, specified by the app. + String formatted as an AQS query. + Specifies the vendor identifier for the device as assigned by the USB specification committee. Possible values are 0 through 0xffff. + Specifies the product identifier. This value is assigned by the manufacturer and is device-specific. Possible values are 0 through 0xffff. + The device interface GUID exposed by the Winusb.sys driver. See the remarks section. + + + Gets an Advanced Query Syntax (AQS) string, based on the device interface GUID identifier, specified by the app. + String formatted as an AQS query. + The device interface GUID exposed by the Winusb.sys driver. See the remarks section. + + + Gets an Advanced Query Syntax (AQS) string, based on vendor and product identifiers, specified by the app. + String formatted as an AQS query. + Specifies the vendor identifier for the device as assigned by the USB specification committee. Possible values are 0 through 0xffff. + Specifies the product identifier. This value is assigned by the manufacturer and is device-specific. Possible values are 0 through 0xffff. + + + Gets an Advanced Query Syntax (AQS) string that the app can pass to DeviceInformation.FindAllAsync in order to find a specific type of USB device. + String formatted as an AQS query. + A UsbDeviceClass object for the device class specified by the app. + + + Starts a zero-length USB control transfer that reads from the default control endpoint of the device. + Returns an IAsyncOperation(IBuffer) object that returns the results of the operation. + A UsbSetupPacket object that contains the setup packet for the control transfer. + + + Starts a USB control transfer to receive data from the default control endpoint of the device. + Returns an IAsyncOperation(IBuffer) object that returns the results of the operation. + A UsbSetupPacket object that contains the setup packet for the control transfer. + A caller-supplied buffer that contains transfer data. + + + Starts a zero-length USB control transfer that writes to the default control endpoint of the device. + Returns an IAsyncOperation(UInt32) object that returns the results of the operation. + A UsbSetupPacket object that contains the setup packet for the control transfer. + + + Starts a USB control transfer to send data to the default control endpoint of the device. + Returns an IAsyncOperation(UInt32) object that returns the results of the operation. + A UsbSetupPacket object that contains the setup packet for the control transfer. + A caller-supplied buffer that contains the transfer data. + + + Provides a way for the app to get an Advanced Query Syntax (AQS) string by specifying the class code, subclass code, and the protocol code defined by the device. The properties in this class are passed in the call to GetDeviceClassSelector. + + + Gets or sets the class code of the device. + The device class code. + + + Gets or sets the protocol code of the device. + The protocol code of the device. + + + Gets or sets the subclass code of the device. + The subclass code of the device. + + + Creates a UsbDeviceClass object. + + + Provides a way for the app to create a UsbDeviceClass object by specifying the USB device class of the device. The properties defined in this class represent the supported USB device classes and are passed in the constructor call to instantiate UsbDeviceClass. + + + Gets the device class object for the device that conforms to the Active Sync device class. + A UsbDeviceClass object for the Active Sync device class. + + + Gets the device class object for the device that conforms to the Communication Device Class (CDC). + A UsbDeviceClass object for the CDC-compliant device. + + + Gets the device class object for the device that conforms to the Device Firmware Update device class. + A UsbDeviceClass object for the Device Firmware Update device class. + + + Gets the device class object for an infrared transceiver that conforms to the IrDA class defined as per the IrDA Bridge Device Definition 1.0 specification. + A UsbDeviceClass object for the IrDA class. + + + Gets the device class object for a device that conforms to the USB test and measurement class (USBTMC). + A UsbDeviceClass object for the USBTMC-compliant device. + + + Gets the device class object for the device that conforms to the Palm Sync device class. + A UsbDeviceClass object for the Palm Sync device class. + + + Gets the device class object for a device that conforms to the USB Personal Healthcare Device Class (PHDC). + A UsbDeviceClass object for a PHDC-compliant healthcare device. + + + Gets the device class object for a device that conforms to the Physical Interface Devices (PID) specification. + A UsbDeviceClass object for a PID-compliant device. + + + Gets the device class object for a custom device that has 0xFF class code. This indicates that the device does not belong to a class approved by USB-IF. + A UsbDeviceClass object for a custom device. + + + Derives information from the USB device descriptor of the device. + + + Gets the bcdDeviceRevision field of the USB device descriptor. The value indicates the revision number defined by the device and is a binary-coded decimal number. + The revision number defined by the device. + + + Gets the bcdUSB field of the USB device descriptor. The value indicates the version of the USB specification to which the device conforms. + The version of the USB specification to which the device conforms. + + + Gets the idProduct field of the USB device descriptor. This value indicates the device-specific product identifier and is assigned by the manufacturer. + The device-defined product identifier. + + + Gets the idVendor field of the USB device descriptor. The value indicates the vendor identifier for the device as assigned by the USB specification committee. + The vendor identifier for the device as assigned by the USB specification committee. + + + Gets the bMaxPacketSize0 field of the USB device descriptor. The value indicates the maximum packet size, in bytes, for endpoint zero of the device. This value can be 8, 16, 32, or 64. + The maximum packet size, in bytes, for endpoint zero of the device. + + + Gets the bNumConfigurations field of the USB device descriptor. The value indicates the total count of USB configurations supported by the device. + A number that indicates the total count of USB configurations supported by the device. + + + Derives information from the USB endpoint descriptor of the endpoint, such as type, direction, and endpoint number. This object also gets the specific endpoint descriptors based on the type of endpoint. + + + Gets an object that represents the endpoint descriptor for the USB bulk IN endpoint. + A UsbBulkInEndpointDescriptor object that describes the USB bulk IN endpoint. + + + Gets an object that represents the endpoint descriptor for the USB bulk OUT endpoint. + A UsbBulkOutEndpointDescriptor that describes the USB bulk OUT endpoint. + + + Gets an object that represents the endpoint descriptor for the USB interrupt IN endpoint. + An UsbInterruptInEndpointDescriptor that describes the USB interrupt IN endpoint. + + + Gets an object that represents the endpoint descriptor for the USB interrupt OUT endpoint. + An UsbInterruptOutEndpointDescriptor object that describes the interrupt OUT endpoint. + + + Gets the direction of the USB endpoint. + A UsbTransferDirection value that indicates the direction of the endpoint. This value is Bit 7 of the bEndpointAddress field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the USB endpoint number. + The USB endpoint number. That number is in Bit 3...0 of the bEndpointAddress field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the type of USB endpoint. + A UsbEndpointType constant that indicates the type of USB endpoint. This value is Bit 1...0 of the bmAttributes field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Retrieves the USB endpoint descriptor in a UsbEndpointDescriptor object that is contained in a UsbDescriptor object. + True, if the specified UsbDescriptor object is a USB endpoint descriptor. Otherwise, false. + The UsbDescriptor object to parse. + Receives a UsbEndpointDescriptor object. + + + Parses the specified USB descriptor and returns the USB endpoint descriptor in a UsbEndpointDescriptor object. + A UsbEndpointDescriptor object that contains the USB endpoint descriptor. + A UsbDescriptor object that contains the USB endpoint descriptor. + + + Provides information about the USB interface including its endpoints, the number of alternate settings the interface supports, and gets the entire descriptor set for those settings. It also obtains pipes associated with the endpoints that the interface supports. + + + Gets an array of objects that represent pipes that the host opened to communicate with bulk IN endpoints defined in the current setting of the USB interface setting. + An array of UsbBulkInPipe objects. + + + Gets an array of objects that represent pipes that the host opened to communicate with bulk OUT endpoints defined in the current setting of the USB interface. + An array of UsbBulkOutPipe objects. + + + Gets an array of objects that represent descriptors for all alternate settings that are part of this USB interface. + An array of UsbDescriptor objects. + + + Gets the interface number that identifies the USB interface. + The interface number that identifies the USB interface. + + + Gets an array of objects that represent alternate settings defined for the USB interface. + An array of UsbInterfaceSetting objects. + + + Gets an array of objects that represent pipes that the host opened to communicate with interrupt IN endpoints defined in the current setting of the USB interface. + An array of UsbInterruptInPipe objects. The objects are in the same order as they are defined in the interface descriptor. + + + Gets an array of objects that represent pipes that the host opened to communicate with interrupt OUT endpoints defined in the current setting of the USB interface. + An array of UsbInterruptOutPipe objects. + + + Describes a USB alternate setting (of an interface) in an interface descriptor. + + + Gets the bAlternateSetting field of the USB interface descriptor. + A number that identifies the alternate setting defined by the interface. + + + Gets the bInterfaceClass field of the USB interface descriptor. + The USB-defined class to which the interface conforms. + + + Gets the bInterfaceNumber field of the USB interface descriptor. + The index that identifies the interface. + + + Gets the bInterfaceProtocol field of the interface descriptor. + A USB-assigned identifier that specifies a USB-defined protocol to which the interface conforms. + + + Gets the bInterfaceSubClass field of the USB interface descriptor. + A USB-assigned identifier that specifies a USB-defined subclass to which the interface. + + + Retrieves information about the alternate setting in a UsbInterfaceDescriptor object that is contained in a UsbDescriptor object. + True, if the specified UsbDescriptor object is USB interface descriptor. Otherwise, false. + The UsbDescriptor object to parse. + Receives a UsbInterfaceDescriptor object. + + + Parses the specified USB descriptor and returns alternate setting information in a UsbInterfaceDescriptor object. + A UsbInterfaceDescriptor object describes the alternate setting. + A UsbDescriptor object that contains the USB interface descriptor. + + + Provides information about an alternate setting and select that setting. The app can get the USB interface descriptors for the setting and its endpoints, and determine whether this setting is currently selected. + + + Gets an array of objects that represent descriptors associated with USB bulk IN endpoints that are defined in the alternate setting. + An array of UsbBulkInEndpointDescriptor objects. + + + Gets an array of objects that represent descriptors associated with USB bulk OUT endpoints that are defined in the alternate setting. + An array of UsbBulkOutEndpointDescriptor objects. + + + Gets an array of objects that represent descriptors associated with the alternate setting. + An array of UsbDescriptor objects that represent the interface descriptor associated with the alternate setting. + + + Gets an object that represents the descriptor that describes the alternate setting. + A UsbInterfaceDescriptor object that has the full descriptor for the alternate setting. Requirements + + + Gets an array of objects that represent descriptors associated with USB interrupt IN endpoints that are defined in the alternate setting. + An array of UsbInterruptInEndpointDescriptor objects. + + + Gets an array of objects that represent descriptors associated with USB interrupt OUT endpoints that are defined in the alternate setting. + An array of UsbInterruptInEndpointDescriptor objects. + + + Determines whether the alternate setting is currently selected. + True, if the alternate setting is currently selected; otherwise, false. + + + Selects the alternate setting as the current setting in the USB interface. + An IAsyncAction object that is used to control the asynchronous operation. + + + The endpoint descriptor for a USB interrupt IN endpoint. The descriptor specifies the endpoint type, direction, number and also the maximum number of bytes that can be read from the endpoint, in a single transfer. The app can also get information about how often the host polls the endpoint for data. + + + Gets the USB endpoint number of the interrupt IN endpoint. + The endpoint number of the interrupt IN endpoint. That number is in Bit 3...0 of the bEndpointAddress field of an endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the poling interval of the USB interrupt endpoint. + The poling interval of the USB interrupt endpoint. + + + Gets the maximum number of bytes that can be sent to or received (in a packet) from this endpoint. + Indicates the maximum packet size of the endpoint. This value is the wMaxPacketSize field value of the endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the object that represents the pipe that the host opens to communicate with the interrupt IN endpoint. + An UsbInterruptInPipe object that is the pipe for the interrupt IN endpoint. + + + Represents the object that is passed as a parameter to the event handler for the DataReceived event. + + + Gets data from the interrupt IN endpoint. + An IBuffer object that contains data that was read from the interrupt IN endpoint. + + + Represents the pipe that the underlying USB driver opens to communicate with a USB interrupt IN endpoint of the device. The object also enables the app to specify an event handler. That handler that gets invoked when data is read from the endpoint. + + + Gets the object that represents the endpoint descriptor associated with the USB interrupt IN endpoint. + A UsbInterruptInEndpointDescriptor object that represents the endpoint descriptor associated with the USB interrupt IN endpoint. + + + Starts an asynchronous operation to clear a stall condition (endpoint halt) on the USB interrupt IN endpoint that is associated with the pipe. + An IAsyncAction object that is used to control the asynchronous operation. + + + Raised when the interrupt pipe receives data from the interrupt IN endpoint. + + + The endpoint descriptor for a USB interrupt OUT endpoint. The descriptor specifies the endpoint type, direction, number and also the maximum number of bytes that can be written to the endpoint, in a single transfer. The app can also get information about how often the host polls the endpoint to send data. + + + Gets the USB endpoint number of the interrupt OUT endpoint. + The USB endpoint number. + + + Gets the poling interval of the USB interrupt endpoint. + The poling interval of the USB interrupt endpoint. + + + Gets the maximum number of bytes that can be sent to or received from this endpoint. + Indicates the maximum packet size of the endpoint. This value is the wMaxPacketSize field value of the endpoint descriptor. For information, see Table 9-13 in the Universal Serial Bus Specification (version 2.0) or Table 9-18 in the Universal Serial Bus 3.0 Specification. + + + Gets the object that represents the pipe that the host opens to communicate with the interrupt OUT endpoint. + An UsbInterruptInPipe object that is the pipe for the interrupt OUT endpoint. + + + Represents the pipe that the underlying USB driver opens to communicate with a USB interrupt OUT endpoint of the device. The object provides access to an output stream to which the app can write data to send to the endpoint. + + + Gets or sets configuration flags that controls the behavior of the pipe that writes data to a USB interrupt OUT endpoint. + A UsbWriteOptions constant that indicates the pipe policy. + + + Gets the object that represents the endpoint descriptor associated with the USB interrupt OUT endpoint. + A UsbInterruptOutEndpointDescriptor object that represents the endpoint descriptor associated with the USB interrupt OUT endpoint. + + + Gets an output stream to which the app can write data to send to the endpoint. + Output stream that contains data to write to the endpoint. + + + Starts an asynchronous operation to clear a stall condition (endpoint halt) on the USB interrupt OUT endpoint that is associated with the pipe. + An IAsyncAction object that is used to control the asynchronous operation. + + + Describes the setup packet for a USB control transfer. + + + Gets or sets the wValue field in the setup packet of the USB control transfer. + The wValue field in the setup packet and the value varies according to the request. For an explanation of this field, see section 9.3.3 of the Universal Serial Bus (USB) specification. + + + Gets or sets the bmRequestType field in the setup packet of the USB control transfer. That field is represented by a UsbControlRequestType object. + The bmRequestType field in the setup packet. The values that are assigned to this field are described in Table 9.2 and section 9.3.1 of the Universal Serial Bus (USB) specification. + + + Gets or sets the bRequest field in the setup packet of the USB control transfer. + The bRequest field in the setup packet. For an explanation of this field, see section 9.3.2 of the Universal Serial Bus (USB) specification. + + + Gets the length, in bytes, of the setup packet. + The length, in bytes, of the setup packet. + + + Gets or sets the wIndex field in the setup packet of the USB control transfer. + The wIndex field in the setup packet. For an explanation of this field, see section 9.3.4 of the Universal Serial Bus (USB) specification. + + + Creates a UsbSetupPacket object from a formatted buffer (eight bytes) that contains the setup packet. + A caller-supplied buffer that contains the setup packet formatted as per the standard USB specification. The length of the buffer must be eight bytes because that is the size of a setup packet on the bus. + + + Creates a UsbSetupPacket object. + + + Defines constants that indicate the recipient of a USB control transfer. The recipient is defined in the setup packet of the control request. See Table 9.2 of section 9.3 of the Universal Serial Bus (USB) specification (www.usb.org). + + + The recipient of the control transfer is the device. + + + The recipient of the control transfer is the USB interface that is specified in the request. + + + The recipient of the control transfer is an endpoint. + + + The recipient of the control transfer is other. + + + The recipient of the control transfer is the default (or the first) USB interface in the selected configuration of the device.If the recipient is the first interface of the active configuration (DefaultInterface), SendControlInTransferAsync and SendControlOutTransferAsync methods overwrite the low byte of UsbSetupPacket.Index with the interface number of the default interface.By using this value, an app can omit the interface number in an interface-recipient request. + + + Defines constants that indicate the type of USB control transfer: standard, class, or vendor. + + + Indicates a standard USB control request that the app can send to obtain information about the device, its configurations, interfaces, and endpoints. The standard requests are described in section 9.4 of the Universal Serial Bus (USB) specification (www.usb.org). + + + Indicates a class-specific USB control request described by a specific device class specification. + + + Indicates a vendor-specified USB control request and depends on the requests supported by the device. + + + Defines constants that indicate the type of USB endpoint: control, bulk, isochronous, or interrupt. + + + Indicates a USB control endpoint (Endpoint 0). + + + Indicates a USB isochronous endpoint. + + + Indicates a USB bulk endpoint. + + + Indicates a USB interrupt endpoint. + + + Defines constants for configuration flags that can be set for a USB pipe that the host opens for a USB bulk IN endpoint. + + + Clear all flags. + + + Automatically clears a stalled pipe without stopping the data flow. + + + Bypasses queuing and error handling to boost performance for multiple read requests. Read operations must be done in multiples of MaxPacketSize. + + + The host does not complete a read request when a short packet is received. The read request is completed only when an error occurs, the request is canceled, or all requested bytes have been read. + + + Allows read requests from a device that returns more data than requested by the caller. + + + Defines constants that indicate the direction of USB transfer: IN or OUT transfers. + + + Indicates an OUT transfer from the host to the device. + + + Indicates an IN transfer from the device to the host. + + + Defines constants for configuration flags that can be set for a USB pipe that the host opens for a USB OUT endpoint. + + + Clear all flags. + + + Automatically clears a stalled pipe without stopping the data flow. + + + Sends a zero length packet for a write request in which the buffer is a multiple of the maximum packet size supported by the endpoint. + + + Contains classes that support connecting to associated Wi-Fi Direct devices. + + + Describes the connection status of a WiFiDirectDevice object. + + + The device is not connected. + + + The device is connected to an associated Wi-Fi Direct device. + + + Manages connections to associated Wi-Fi Direct devices. + + + Gets the connection status for the WiFi-Direct device. + The connection status for the WiFi-Direct device. + + + Gets the DeviceInformation Id for the Wi-Fi Direct device. + The DeviceInformation Id for the Wi-Fi Direct device. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Close the active Wi-Fi Direct device connection. + + + Gets a collection of network addresses for the Wi-Fi Direct device as endpoint pairs. + A collection of network addresses for the Wi-Fi Direct device as endpoint pairs. + + + Returns the class selection string that you can use to enumerate Wi-Fi Direct devices. + The class selection string that you can use to enumerate Wi-Fi Direct devices. + + + Creates an instance of the WiFiDirectDevice class for the specified device interface id. + An asynchronous operation to retrieve the WiFiDirectDevice that was created. + The DeviceInformation Id of a Wi-Fi Direct device. + + + Occurs when a Wi-Fi Direct device connection is connected or disconnected. + + + Enables fundamental Windows Runtime functionality, including managing asynchronous operations, accessing property stores, and working with images and Uniform Resource Identifier (URI). + + + Represents a value in a property store. + + + Creates a property value from a Boolean value. + The property value. + The value to store in the property value. + + + Creates a property value from an array of Boolean values. + The property value. + The array to store in the property value. + + + Creates a property value from a Unicode character. + The property value. + The value to store in the property value. + + + Creates a property value from an array of Unicode characters. + The property value. + The array to store in the property value. + + + Creates a property value from a date and time value. + The property value. + The value to store in the property value. + + + Creates a property value from an array of date and time values. + The property value. + The array to store in the property value. + + + Creates a property value from a floating-point value. + The property value. + The value to store in the property value. + + + Creates a property value from an array of floating-point values. + The property value. + The array to store in the property value. + + + Creates an empty property value. + The property value. + + + Creates a property value from a GUID. + The property value. + The value to store in the property value. + + + Creates a property value from an array of GUID. + The property value. + The array to store in the property value. + + + Creates a property value from an inspectable object. + The property value. + The object to store in the property value. + + + Creates a property value from an array of inspectable objects. + The property value. + The array to store in the property value. + + + Creates a property value from an integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of integers. + The property value. + The array to store in the property value. + + + Creates a property value from an integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of integers. + The property value. + The array to store in the property value. + + + Creates a property value from an integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of integers. + The property value. + The array to store in the property value. + + + Creates a property value from a point structure. + The property value. + The structure to store in the property value. + + + Creates a property value from an array of point structures. + The property value. + The array to store in the property value. + + + Creates a property value from a rectangle structure. + The property value. + The structure to store in the property value. + + + Creates a property value from an array of rectangle structures. + The property value. + The array to store in the property value. + + + Creates a property value from a floating-point value. + The property value. + The value to store in the property value. + + + Creates a property value from an array of floating-point values. + The property value. + The array to store in the property value. + + + Creates a property value from a size structure. + The property value. + The structure to store in the property value. + + + Creates a property value from an array of size structures. + The property value. + The array to store in the property value. + + + Creates a property value from a string. + The property value. + The string to store in the property value. + + + Creates a property value from an array of strings. + The property value. + The array to store in the property value. + + + Creates a property value from a time interval. + The property value. + The time interval to store in the property value. + + + Creates a property value from an array of time intervals. + The property value. + The array to store in the property value. + + + Creates a property value from an unsigned integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of unsigned integers. + The property value. + The array to store in the property value. + + + Creates a property value from an unsigned integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of unsigned integers. + The property value. + The array to store in the property value. + + + Creates a property value from an unsigned integer. + The property value. + The value to store in the property value. + + + Creates a property value from an array of unsigned integers. + The property value. + The array to store in the property value. + + + Creates a property value from a byte. + The property value. + The value to store in the property value. + + + Creates a property value from an array of bytes. + The property value. + The array to store in the property value. + + + Parses Uniform Resource Identifier (URI). + + + Gets a fully canonicalized RFC-complaint representation of the current URI. + The canonical URI. + + + Gets the entire, non-canonical IRI. + The entire, non-canonical IRI. + + + Adds the specified Uniform Resource Identifier (URI) to the current Uniform Resource Identifier (URI). + The combined Uniform Resource Identifier (URI). + A relative Uniform Resource Identifier (URI). + + + Gets the decoded unicode characters that make up the current URI. + The decoded unicode characters, when possible. Unsafe values are renamed as percent-encoded UTF-8. Characters in the hostname remain decoded. + + + Gets a representation of the IRI that can be used for display purposes. + The Uniform Resource Identifier (URI) for display. + + + Gets the domain name, including top-level domain, from a Uniform Resource Identifier (URI). + The domain name. + + + Determines whether the specified Uniform Resource Identifier (URI) is equal to the current Uniform Resource Identifier (URI). + True if the Uniform Resource Identifier (URI) are the same; otherwise, false. + The Uniform Resource Identifier (URI) to be compared. + + + Converts a URI string to its escaped representation. + The escaped representation of toEscape. + The stirng to convert. + + + Gets the file name extension of the resource that is referenced in the Uniform Resource Identifier (URI). + The file name extension. + + + Gets the text following a fragment marker (#), including the fragment marker itself. + The text that represents the fragment. + + + Gets the fully qualified domain name. + The fully qualified domain name. + + + Gets the password, as parsed from a Uniform Resource Identifier (URI). + The password. + + + Gets the path and resource name. + The path. + + + Gets the port number. + The port number. + + + Gets the query string. + The query string. + + + Gets a parsed URL query string. + The parsed query. + + + Gets the entire original Uniform Resource Identifier (URI) string. + The raw Uniform Resource Identifier (URI) string. + + + Gets the protocol scheme name. + The protocol scheme name. + + + Gets a value that indicates whether the Uniform Resource Identifier (URI) is not well-formed. + True if the Uniform Resource Identifier (URI) is flagged as suspicious; otherwise, false. + + + Gets a canonical string representation for the current Uri. + The unescaped canonical representation of the current Uri. All characters are unescaped, except #, ?, and %. + + + Converts the specified string by replacing any escape sequences with their unescaped representation. + The unescaped representation of stringToUnescape. + The string to convert. + + + Creates a Uniform Resource Identifier (URI) from the specified string. + The string from which the Uniform Resource Identifier (URI) is created. + + + Creates a Uniform Resource Identifier (URI) by combining a base Uniform Resource Identifier (URI) and a relative Uniform Resource Identifier (URI). + The base Uniform Resource Identifier (URI). + The relative Uniform Resource Identifier (URI). + + + Gets the user name as parsed from a Uniform Resource Identifier (URI). + The user name. + + + Parses a URL query string. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets an iterator that represents the first name-value pair in the current URL query string. + The first name-value pair. + + + Gets the name-value pair at the specified index in the current URL query string. + The name-value pair at the position specified by index. + The index of the name-value pair. + + + Gets the first name-value pair that has the specified name in the current URL query string. + The value that corresponds with name. + The name of the value to get. + + + Gets name-value pairs starting at the specified index in the current URL query string. + The number of name-value pairs in items. + The index to start getting name-value pairs at. + The name-value pairs. + + + Gets a value indicating whether the specified IWwwFormUrlDecoderEntry is at the specified index in the current URL query string. + true if value is at the position specified by index; otherwise, false. + The name-value pair to get the index of. + The position in value. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the number of the name-value pairs in the current URL query string. + The number of the name-value pairs. + + + Creates and initializes a new instance of the WwwFormUrlDecoder class. + The URL to parse. + + + Represents a name-value pair in a URL query string. + + + Represents the name of a parameter in a URL query string. + The name of a query string parameter. The Value property represents the corresponding value. + + + Represents a named value in a URL query string. + The value of a query parameter that corresponds with the Name property. + + + Represents an instant in time, typically expressed as a date and time of day. + + + A 64-bit signed integer that represents a point in time as the number of 100-nanosecond intervals prior to or after midnight on January 1, 1601 (according to the Gregorian Calendar). + + + Represents a reference to a delegate that receives change notifications. + + + The reference to the delegate. + + + Represents an error or warning. + + + An integer that describes an error or warning. + + + Represents an ordered pair of x- and y-coordinates that define a point in a two-dimensional plane. + + + The horizontal position of the point. + + + The vertical position of the point. + + + Initializes a Point structure that contains the specified values. + The x-coordinate value of the Point structure. + The y-coordinate value of the Point structure. + + + Initializes a Point structure that contains the specified values. + The x-coordinate value of the Point structure. + The y-coordinate value of the Point structure. + + + Compares two Point structures for equality. + true if both the X and Y values of point1 and point2 are equal; otherwise, false. + The first Point structure to compare. + The second Point structure to compare. + + + Determines whether the specified object is equal to a Point. + true if o is equal to this Point; otherwise, false. + Object to check for equality. + + + Compares two Point structures for equality. + true if both Point structures contain the same X and Y values; otherwise, false. + The Point structure to compare to this Point. + + + Gets a hash code for this object. + The hash code identifier. + + + Compares two Point structures for inequality. + true if point1 and point2 have different X or Y values; false if point1 and point2 have the same X and Y values. + The first Point structure to compare. + The second Point structure to compare. + + + Converts a Point to a String representation. + A String representation of this Point. + + + Creates a String representation of this Point. + A String containing the X and Y values of this Point structure. + Culture-specific formatting information. + + + Gets or sets the X-coordinate value of this Point. + The X-coordinate value of this Point structure. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default value is 0. + + + Gets or sets the Y-coordinate value of this Point. + The Y-coordinate value of this Point structure. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default value is 0. + + + Contains a set of four floating-point numbers that represent the location and size of a rectangle. + + + The x-coordinate of the upper-left corner of the rectangle. + + + The y-coordinate of the upper-left corner of the rectangle. + + + The width of the rectangle. + + + The height of the rectangle. + + + Initializes a Rect structure that is exactly large enough to contain the two specified points. + The first point that the new rectangle must contain. + The second point that the new rectangle must contain. + + + Initializes a Rect structure based on an origin and size. + The origin of the new Rect. + The size of the new Rect. + + + Initializes a Rect structure that has the specified x-coordinate, y-coordinate, width, and height. + The x-coordinate of the top-left corner of the rectangle. + The y-coordinate of the top-left corner of the rectangle. + The width of the rectangle. + The height of the rectangle. + + + Initializes a Rect structure that has the specified x-coordinate, y-coordinate, width, and height. + The x-coordinate of the top-left corner of the rectangle. + The y-coordinate of the top-left corner of the rectangle. + The width of the rectangle. + The height of the rectangle. + + + Gets the y-axis value of the bottom of the rectangle. + The y-axis value of the bottom of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). + + + Indicates whether the rectangle described by the Rect contains the specified point. + true if the rectangle described by the Rect contains the specified point; otherwise, false. + The point to check. + + + Gets a special value that represents a rectangle with no position or area. + The empty rectangle. + + + Compares two Rect structures for equality. + true if all values of rect1 and rect2 are equal; otherwise, false. + The first Rect structure to compare. + The second Rect structure to compare. + + + Determines whether the specified object is equal to a Rect. + true if o is equal to this Rect; otherwise, false. + Object to check for equality. + + + Compares two Rect structures for equality. + true if both Rect structures contain the same values; otherwise, false. + The Rect structure to compare to this Rect. + + + Gets a hash code for this object. + The hash code identifier. + + + Gets or sets the height of the rectangle. + A value that represents the height of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default is 0. + + + Compares two Rect structures for inequality. + true if rect1 and rect2 have different values; false if rect1 and rect2 have the same values. + The first Rect structure to compare. + The second Rect structure to compare. + + + Finds the intersection of the rectangle represented by the current Rect and the rectangle represented by the specified Rect, and stores the result as the current Rect. + The rectangle to intersect with the current rectangle. + + + Indicates whether the specified rectangle intersects with the current rectangle. + true if the specified rectangle intersects with the current rectangle; otherwise, false. + The rectangle to check. + + + Gets a value that indicates whether the rectangle is the Empty rectangle. + true if the rectangle is the Empty rectangle; otherwise, false. + + + Gets the x-axis value of the left side of the rectangle. + The x-axis value of the left side of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). + + + Gets the x-axis value of the right side of the rectangle. + The x-axis value of the right side of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). + + + Gets the y-axis position of the top of the rectangle. + The y-axis position of the top of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). + + + Converts a Rect to a String representation. + A String representation of this Rect. + + + Creates a String representation of this Rect. + A string representation of the current rectangle that is determined by the specified format provider. + Culture-specific formatting information. + + + Expands the rectangle represented by the current Rect exactly enough to contain the specified point. + The point to include. + + + Expands the rectangle represented by the current Rect exactly enough to contain the specified rectangle. + The rectangle to include. + + + Gets or sets the width of the rectangle. + A value that represents the width of the rectangle in pixels. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default is 0. + + + Gets or sets the x-axis value of the left side of the rectangle. + The x-axis value of the left side of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). This value is interpreted as pixels within the coordinate space. + + + Gets or sets the y-axis value of the top side of the rectangle. + The y-axis value of the top side of the rectangle. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). This value is interpreted as pixels within the coordinate space. + + + Represents an ordered pair of floating-point numbers that specify a height and width. + + + The width. + + + The height. + + + Gets a value that represents a static empty Size. + An empty instance of Size. + + + Compares two Size structures for equality. + true if all values of size1 and size2 are equal; otherwise, false. + The first Size structure to compare. + The second Size structure to compare. + + + Determines whether the specified object is equal to a Size. + true if o is equal to this Size; otherwise, false. + Object to check for equality. + + + Compares two Size structures for equality. + true if both Size structures contain the same values; otherwise, false. + The Size structure to compare to this Size. + + + Gets a hash code for this object. + The hash code identifier. + + + Gets or sets the height of this instance of Size. + The Height of this instance of Size, in pixels. he data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default is 0. The value cannot be negative. + + + Compares two Size structures for inequality. + true if size1 and size2 have different values; false if size1 and size2 have the same values. + The first Size structure to compare. + The second Size structure to compare. + + + Gets a value that indicates whether this instance of Size is Empty. + true if this instance of size is Empty; otherwise false. + + + Initializes a new instance of the Size structure and assigns it an initial width and height. + The initial width of the instance of Size. + The initial height of the instance of Size. + + + Initializes a new instance of the Size structure and assigns it an initial width and height. + The initial width of the instance of Size. + The initial height of the instance of Size. + + + Converts a Size to a String representation. + A String representation of this Size. + + + Gets or sets the width of this instance of Size. + The Width of this instance of Size, in pixels. The data type is System.Double for C# or Microsoft Visual Basic, or float for Visual C++ component extensions (C++/CX). The default value is 0. The value cannot be negative. + + + Represents a time interval as a signed 64-bit integer value. + + + A time period expressed in 100-nanosecond units. + + + Specifies the status of an asynchronous operation. + + + The operation was canceled. + + + The operation has completed. + + + The operation has encountered an error. + + + The operation has started. + + + Specifies property value types. + + + No type is specified. + + + A byte. + + + A signed 16-bit (2-byte) integer. + + + An unsigned 16-bit (2-byte) integer. + + + A signed 32-bit (4-byte) integer. + + + An unsigned 32-bit (4-byte) integer. + + + A signed 64-bit (8-byte) integer. + + + An unsigned 64-bit (8-byte) integer. + + + A signed 32-bit (4-byte) floating-point number. + + + A signed 64-bit (8-byte) floating-point number. + + + An unsigned 16-bit (2-byte) code point. + + + A value that can be only true or false. + + + A Windows Runtime HSTRING. + + + An object implementing the IInspectable interface. + + + An instant in time, typically expressed as a date and time of day. + + + A time interval. + + + A globally unique identifier. + + + An ordered pair of floating-point x- and y-coordinates that defines a point in a two-dimensional plane. + + + An ordered pair of float-point numbers that specify a height and width. + + + A set of four floating-point numbers that represent the location and size of a rectangle. + + + A type not specified in this enumeration. + + + An array of Byte values. + + + An array of Int16 values. + + + An array of UInt16 values. + + + An array of Int32 values. + + + An array of UInt32 values. + + + An array of Int64 values. + + + An array of UInt64 values. + + + An array of Single values. + + + An array of Double values. + + + An array of Char values. + + + An array of Boolean values. + + + An array of String values. + + + An array of Inspectable values. + + + An array of DateTime values. + + + An array of TimeSpan values. + + + An array of Guid values. + + + An array of Point structures. + + + An array of Size structures. + + + An array of Rect structures. + + + An array of an unspecified type. + + + Represents an asynchronous action. + + + Gets or sets the method that handles the action completed event. + The method that handles the event. + + + Returns the results of the action. + + + Represents an asynchronous action that includes progress updates. + The type of the progress data. + + + Gets or sets the method that handles the action completed event. + The method that handles the event. + + + Returns the results of the action. + + + Gets or sets the method that receives progress events. + The method that handles the events. + + + Supports asynchronous actions and operations. + + + Cancels the asynchronous operation. + + + Closes the asynchronous operation. + + + Gets a string that describes an error condition of the asynchronous operation. + The error string. + + + Gets the handle of the asynchronous operation. + The handle. + + + Gets a value that indicates the status of the asynchronous operation. + The status of the operation. + + + Represents an asynchronous operation. + The type of the result. + + + Gets or sets the method that handles operation completed event. + The method that handles the event. + + + Returns the results of the operation. + The results of the operation. + + + Represents an asynchronous operation that includes progress updates. + The type of the result. + The type of the progress data. + + + Gets or sets the method that handles the operation completed event. + The method that handles the event. + + + Returns the results of the operation. + The results of the operation. + + + Gets or sets the method that handles progress events. + The method that handles the events. + + + Defines a method to release allocated resources. + + + Releases system resources that are exposed by a Windows Runtime object. + + + Defines the implementation for a type that retrieves activation factories. + + + Retrieves the implementation of an activation factory. + An instance of an activation factory type. This type must implement IActivationFactory. + The Activation ID (ACID) of the activatable type produced by the factory. + + + Represents a value in a property store. You can't implement this interface, see Remarks. + + + Returns the Boolean value stored as a property value. + The value. + + + Returns the array of Boolean values stored as a property value. + The array of values. + + + Returns the Unicode character stored as a property value. + The value. + + + Returns the array of Unicode characters stored as a property value. + The array of values. + + + Returns the date and time value stored as a property value. + The value. + + + Returns the array of date and time values stored as a property value. + The array of values. + + + Returns the floating-point value stored as a property value. + The value. + + + Returns the array of floating-point values stored as a property value. + The array of values. + + + Returns the GUID value stored as a property value. + The value. + + + Returns the array of GUID values stored as a property value. + The array of values. + + + Returns the array of inspectable objects stored as a property value. + The array of objects. + + + Returns the integer value stored as a property value. + The value. + + + Returns the array of integer values stored as a property value. + The array of values. + + + Returns the integer value stored as a property value. + The value. + + + Returns the array of integer values stored as a property value. + The array of values. + + + Returns the integer value stored as a property value. + The value. + + + Returns the array of integer values stored as a property value. + The array of values. + + + Returns the point structure stored as a property value. + The structure. + + + Returns the array of point structures stored as a property value. + The array of structures. + + + Returns the rectangle structure stored as a property value. + The structure. + + + Returns the array of rectangle structures stored as a property value. + The array of structures. + + + Returns the floating-point value stored as a property value. + The value. + + + Returns the array of floating-point values stored as a property value. + The array of values. + + + Returns the size structure stored as a property value. + The structure. + + + Returns the array of size structures stored as a property value. + The array of structures. + + + Returns the string value stored as a property value. + The value. + + + Returns the array of string values stored as a property value. + The array of values. + + + Returns the time interval value stored as a property value. + The value. + + + Returns the array of time interval values stored as a property value. + The array of values. + + + Returns the unsigned integer value stored as a property value. + The value. + + + Returns the array of unsigned integer values stored as a property value. + The array of values. + + + Returns the unsigned integer value stored as a property value. + The value. + + + Returns the array of unsigned integer values stored as a property value. + The array of values. + + + Returns the unsigned integer value stored as a property value. + The value. + + + Returns the array of unsigned integer values stored as a property value. + The array of values. + + + Returns the byte value stored as a property value. + The value. + + + Returns the array of byte values stored as a property value. + The array of values. + + + Gets a value that indicates whether the property value is a scalar value. + True if the value is scalar; otherwise false. + + + Returns the type stored in the property value. + The type stored in the property value. + + + Enables arbitrary enumerations, structures, and delegate types to be used as property values. + The type. + + + Gets the type that is represented as an IPropertyValue. + The type. + + + Enables arbitrary enumerations, structures, and delegate types to be used as an array of property values. You can't implement this interface, see Remarks. + The type. + + + Gets the type that is represented as an IPropertyValue array. + The type. + + + Provides a way to represent the current object as a string. + + + Gets a string that represents the current object. + A string that represents the current object. + + + Represents a name-value pair in a URL query string. + + + Represents the name of a parameter in a URL query string. + The name of a query string parameter. The Value property represents the corresponding value. + + + Represents a named value in a URL query string. + The value of a query parameter that corresponds with the Name property. + + + Represents a method that handles the completed event of an asynchronous action. + The asynchronous action. + One of the enumeration values. + + + Represents a method that handles progress update events of an asynchronous action that provides progress updates. + The progress information. + The asynchronous action. + The progress information. + + + Represents a method that handles the completed event of an asynchronous action that provides progress updates. + The progress information. + The asynchronous action. + One of the enumeration values. + + + Represents a method that handles the completed event of an asynchronous operation. + The result. + The asynchronous operation. + One of the enumeration values. + + + Represents a method that handles progress update events of an asynchronous operation that provides progress updates. + The result. + The progress information. + The asynchronous operation. + The progress information. + + + Represents a method that handles the completed event of an asynchronous operation that provides progress updates. + The result. + The progress information. + The asynchronous operation. + One of the enumeration values. + + + Represents a method that handles general events. + The type of event data generated by the event. + The event source. + The event data. + + + Represents a method that handles general events. + The object type. + The type of event data generated by the event. + The event source. + The event data. If there is no event data, this parameter will be null. + + + Defines standard, specialized, and generic collection objects. + + + Represents a property set. + + + Adds an item to the PropertySet. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the PropertySet. + The key-value pair to add. + + + Removes all items from the property set. + + + Returns a value that indicates whether a specified key-value pair exists in the PropertySet. + true if an item with that key exists in the PropertySet; otherwise, false. + The key-value pair to check for in the PropertySet. + + + Returns a value that indicates whether a specified key exists in the PropertySet. + true if an item with that key exists in the PropertySet; otherwise, false. + The key to check for in the PropertySet. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the property set. + The iterator. The current position of the iterator is index 0, or the end of the property set if the property set is empty. + + + Gets an immutable view of the property set. + The immutable view. + + + Indicates whether the property set has an item with the specified key. + True if the property set has an item with the specified key; otherwise, false. + The key. + + + Adds an item to the property set. + True if the method replaces a value that already exists for the key; false if this is a new key. + The key to insert. + The value to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the PropertySet. + The ICollection of all keys in this PropertySet. + + + Retrieves the value for the specified key. + The value, if an item with the specified key exists; otherwise, null. + The key. + + + Occurs when the observable map has changed. + + + Removes an item from the property set. + The key. + + + Removes a specific item from the PropertySet. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the PropertySet. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of items contained in the property set. + The number of items in the property set. + + + Returns a value that indicates whether a specified key exists in the PropertySet. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the PropertySet; otherwise, false. + The key to check for in the PropertySet. + The item, if it exists. Contains null if the item does not exist in the PropertySet. + + + Gets an ICollection object containing the values of the PropertySet . + The ICollection of all values in this PropertySet. + + + Creates and initializes a new instance of the property set. + + + Describes the action that causes a change to a collection. + + + The collection is changed. + + + An item is added to the collection. + + + An item is removed from the collection. + + + An item is changed in the collection. + + + Exposes an iterator that supports simple iteration over a collection of a specified type. + The type of objects to iterate. + + + Returns an iterator for the items in the collection. + The iterator. + + + Supports simple iteration over a collection. + The type of objects to iterate. + + + Gets the current item in the collection. + The current item in the collection. + + + Retrieves all items in the collection. + The number of items in the collection. + The items in the collection. + + + Gets a value that indicates whether the iterator refers to a current item or is at the end of the collection. + True if the iterator refers to a valid item in the collection; otherwise, false. + + + Advances the iterator to the next item in the collection. + True if the iterator refers to a valid item in the collection; false if the iterator passes the end of the collection. + + + Represents a key-value pair. + The type of the keys in the key-value pair. + The type of the values in the key-value pair. + + + Gets the key of the key-value pair. + The key. + + + Gets the value of the key-value pair. + The value. + + + Represents an associative collection. + The type of the keys in the map. + The type of the values in the map. + + + Removes all items from the map. + + + Returns an immutable view of the map. + The view of the map. + + + Determines whether the map contains the specified key. + True if the key is found; otherwise, false. + The key associated with the item to locate. + + + Inserts or replaces an item in the map. + True if an item with the specified key is an existing item that was replaced; otherwise, false. + The key associated with the item to insert. + The item to insert. + + + Returns the item at the specified key in the map. + The item associated with the specified key. + The key associated with the item to locate. + + + Removes an item from the map. + The key associated with the item to remove. + + + Gets the number of items in the map. + The number of items in the map. + + + Provides data for the changed event of a map. + The type of the keys in the map. + + + Gets the type of change that occurred in the map. + The type of change in the map. + + + Gets the key of the item that changed. + The key of the item that changed. + + + Represents an immutable view into a map. + The type of the keys in the map. + The type of the values in the map. + + + Determines whether the map view contains the specified key. + True if the key is found; otherwise, false. + The key to locate in the map view. + + + Returns the item at the specified key in the map view. + The item associated with the specified key. + The key to locate in the map view. + + + Gets the number of elements in the map. + The number of elements in the map. + + + Splits the map view into two views. + One half of the original map. + The second half of the original map. + + + Notifies listeners of dynamic changes to a map, such as when items are added or removed. + The type of the keys in the map. + The type of the values in the map. + + + Occurs when the map changes. + + + Notifies listeners of changes to the vector. + The type of the values in the vector. + + + Occurs when the vector changes. + + + Represents a collection of key-value pairs. + + + Represents a random-access collection of elements. + The type of the values in the vector. + + + Appends an item to the end of the vector. + The item to append to the vector. + + + Removes all items from the vector. + + + Returns the item at the specified index in the vector. + The item at the specified index. + The zero-based index of the item. + + + Retrieves the items that start at the specified index in the vector. + The number of items retrieved. + The zero-based index of the start of the items in the vector. + The items that start at startIndex in the vector. + + + Returns an immutable view of the vector. + The view of the vector. + + + Retrieves the index of a specified item in the vector. + True if the item is found; otherwise, false. + The item to find in the vector. + If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Inserts an item at a specified index in the vector. + The zero-based index. + The item to insert. + + + Removes the item at the specified index in the vector. + The zero-based index of the vector item to remove. + + + Removes the last item from the vector. + + + Replaces all the items in the vector with the specified items. + The collection of items to add to the vector. + + + Sets the value at the specified index in the vector. + The zero-based index at which to set the value. + The item to set. + + + Gets the number of items in the vector. + The number of items in the vector. + + + Provides data for the changed event of a vector. + + + Gets the type of change that occurred in the vector. + The type of change in the vector. + + + Gets the position where the change occurred in the vector. + The zero-based position where the change occurred in the vector, if applicable. + + + Represents an immutable view into a vector. + The type of the values in the vector. + + + Returns the item at the specified index in the vector view. + The item at the specified index. + The zero-based index of the item. + + + Retrieves the items that start at the specified index in the vector view. + The number of items retrieved. + The zero-based index of the start of the items in the vector view. + The items that start at startIndex in the vector view. + + + Retrieves the index of a specified item in the vector view. + True if the item is found; otherwise, false. + The item to find in the vector view. + If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Gets the number of items in the vector view. + The number of items in the vector view. + + + Represents the method that handles the changed event of an observable map. + The type of the keys in the map. + The type of the values in the map. + The observable map that changed. + The description of the change that occurred in the map. + + + Represents the method that handles the changed event of an observable vector. + The type of the values in the vector. + The observable vector that changed. + The description of the change that occurred in the vector. + + + Provides classes for logging messages and tracing events. + + + Enables tracing control flow across asynchronous operations. + + + Logs the creation of an asynchronous operation. + The trace level. + The trace source. + Identifier for the operation type. + An identifier for the asynchronous operation that's unique within the platform for the operation's lifetime. + A human-readable description of the asynchronous work. + Additional information related to this operation. + + + Indicates that a previously created asynchronous operation has completed all of its asynchronous work. + The trace level. + The trace source. + Identifier for the operation type. + The identifier for the asynchronous operation that's unique within the platform for the operation's lifetime. + The completion status of the asynchronous operation. + + + Logs the relation between the currently running synchronous work item and a specific asynchronous operation that it's related to. + The trace level. + The trace source. + Identifier for the operation type. + The identifier for the asynchronous operation that's unique within the platform for the operation's lifetime. + The relationship between the synchronous work item and asynchronous operation identified by operationId. + + + Indicates that the specified asynchronous operation is scheduling synchronous work on the thread that the TraceSynchronousWorkStart method is called on. + The trace level. + The trace source. + Identifier for the operation type. + The identifier for the asynchronous operation that's unique within the platform for the operation's lifetime. + The relationship between the work item and the asynchronous operation. + + + Indicates that the most recently created synchronous work item running on the thread that the TraceSynchronousWorkCompletion method is called on has completed. + The trace level. + The trace source. + Indicates the type of completion. + + + Raised when a client starts listening to the causality trace. + + + Specifies a logging level that listeners can use for trace filtering. + + + Indicates all operations that are necessary to construct a causality chain, including all operations for job creation and completion and work item creation and completion. + + + Tracks operations that are not necessary to construct a causality chain but are interesting for developers. + + + Indicates operations that influence causality but are likely to be less interesting for developers, including actions like registering progress delegates. + + + Provides flags that listeners use to filter tracing events. + + + Indicates causality information generated by app-defined asynchronous operations. + + + Indicates causality information generated by language projections or asynchronous infrastructure libraries. + + + Indicates causality information generated by Windows. + + + Tracks ways that synchronous work items may interact with asynchronous operations. + + + Indicates that a synchronous work items has assigned a callback or continuation to be run by an asynchronous operation. + + + Indicates that a synchronous work item has satisfied part of a join asynchronous operation. + + + Indicates that a synchronous work item has satisfied a choice asynchronous operation. + + + Indicates that a synchronous work item was canceled. + + + Indicates that a synchronous work item caused an error in an asynchronous operation. + + + Indicates the relationship between a work item and an asynchronous operation. + + + The work item being scheduled is running due to the completion of the asynchronous operation. + + + The work item being scheduled is running due to reaching a milestone within the asynchronous operation. + + + The work item being scheduled is part of the actual work of the asynchronous operation, like opening a file. + + + Specifies the type of diagnostic error reporting for a thread. + + + No error reporting occurs for the thread. + + + Exceptions are suppressed and not reported. + + + Exceptions are reported. + + + Error information for SetErrorInfo is used. + + + Error information for SetErrorInfo is suppressed and not reported. + + + Represents the destination of logged messages from LoggingChannel instances. + + + Adds a logging channel to the current logging session. + The logging channel to add. + + + Adds a logging channel with the specified logging level to the current logging session. + The logging channel to add. + The logging level for loggingChannel. + + + Ends the current logging session and saves it to a file. + When this method completes, it returns the new file as a StorageFile. + + + Ends the current logging session. + + + Initializes a new instance of the FileLoggingSession class. + The name of the logging session. + + + Raised when the logging session is closed. + + + Raised when a log file is saved. + + + Gets the name of the logging session. + The session name. + + + Removes the specified logging channel from the current logging session. + The logging channel to remove. + + + Represents diagnostic error reporting settings. + + + Sets the type of error reporting for the error object. + One of the enumeration values. + + + Gets the type of error reporting for the error object. + One of the enumeration values. + + + Represents the destination of logged messages from LoggingChannel instances. + + + Adds a logging channel to the current logging session. + The logging channel to add. + + + Adds a logging channel with the specified logging level to the current logging session. + The logging channel to add. + The logging level for loggingChannel. + + + Ends the current logging session and saves it to a file. + When this method completes, it returns the new file as a StorageFile. + + + Raised when the logging session is closed. + + + Gets the name of the logging session. + The session name. + + + Removes the specified logging channel from the current logging session. + The logging channel to remove. + + + Represents a source of log messages. + + + Gets a value that indicates whether messages are being logged on the current LoggingChannel. + True if messages are being logged on the current channel; otherwise, false. + + + Gets the level of detail for messages from the current LoggingChannel. + The level of detail for messages. + + + Gets the name of the current LoggingChannel. + The name. + + + Logs a message to the current LoggingChannel. + The message to log. + + + Logs a message to the current LoggingChannel with the specified LoggingLevel. + The message to log. + The logging level. + + + Logs data to the current LoggingChannel. + The string to associate with value2. + The value to associate with value1. + + + Logs data to the current LoggingChannel with the specified LoggingLevel. + The string to associate with value2. + The value to associate with value1. + The logging level. + + + Raised when the logging channel is attached to a LoggingSession or other event tracing and debugging tools. + + + Represents the destination of logged messages from LoggingChannel instances. + + + Gets the name of the logging session. + The session name. + + + Save the current logging session to a file. + When this method completes, it returns the new file as a StorageFile. + The folder to save the log file in. + The name of the file. + + + Adds a logging channel to the current logging session. + The logging channel to add. + + + Adds a logging channel with the specified logging level to the current logging session. + The logging channel to add. + The logging level for loggingChannel. + + + Removes the specified logging channel from the current logging session. + The logging channel to remove. + + + Provides data for the LogFileClosed event. + + + Gets the log file for the current logging session. + The log file. + + + Provides data for the LogFileGenerated event. + + + Gets the log file. + The log file. + + + Represents a logging trace on a LoggingChannel. + + + Initializes a new instance of the LoggingActivity class for the specified LoggingChannel. + The name of the logging activity. + The logging channel. + + + Initializes a new instance of the LoggingActivity class for the specified LoggingChannel and LoggingLevel. + The name of the logging activity. + The logging channel. + The logging level. + + + Gets the identifier for the current logging activity. + The identifier. + + + Gets the name of the current logging activity. + The name. + + + Ends the current logging activity. + + + Represents a source of log messages. + + + Ends logging on the current logging channel. + + + Gets a value that indicates whether messages are being logged on the current channel. + True if messages are being logged on the current channel; otherwise, false. + + + Gets the level of detail for messages from the current logging channel. + The level of detail for messages. + + + Initializes a new instance of the LoggingChannel class. + The name of the logging channel. + + + Raised when the logging channel is attached to a LoggingSession or other event tracing and debugging tools. + + + Logs a message to the current LoggingChannel. + The message to log. + + + Logs a message to the current LoggingChannel with the specified LoggingLevel. + The message to log. + The logging level. + + + Logs data to the current LoggingChannel. + The string to associate with value2. + The value to associate with value1. + + + Logs data to the current LoggingChannel with the specified LoggingLevel. + The string to associate with value2. + The value to associate with value1. + The logging level. + + + Gets the name of the current LoggingChannel. + The name. + + + Represents the method that handles the LoggingEnabled event. + The channel that raised the event. + + + Specifies the level of detail in a LoggingChannel. + + + Log all messages. + + + Log messages of information level and higher. + + + Log messages of warning level and higher. + + + Log messages of error level and higher. + + + Log only critical messages. + + + Represents the destination of logged messages from LoggingChannel instances. + + + Adds a logging channel to the current logging session. + The logging channel to add. + + + Adds a logging channel with the specified logging level to the current logging session. + The logging channel to add. + The logging level for loggingChannel. + + + Ends the current logging session. + + + Initializes a new instance of the LoggingSession class. + The name of the logging session. + + + Gets the name of the logging session. + The session name. + + + Removes the specified logging channel from the current logging session. + The logging channel to remove. + + + Saves the current logging session to a file. + When this method completes, it returns the new file as a StorageFile. + The folder that contains the log file. + The name of the log file. + + + Represents diagnostic error reporting settings. + + + Sets the type of error reporting for the error object. + One of the enumeration values. + + + Gets the type of error reporting for the error object. + One of the enumeration values. + + + Creates and initializes a new instance of the RuntimeBrokerErrorSettings. + + + Provides data for the TracingStatusChanged event. + + + Gets a value that indicates whether tracing is active. + True, if tracing is active, otherwise false. + + + Gets the trace level for the current tracing session. + The trace level. + + + Defines the attributes that indicate fundamental properties of Windows Runtime types and members. + + + Indicates that the class is an activatable runtime class. + + + Creates and initializes a new instance of the attribute. + The type of the class. + The version of the class. + + + Creates and initializes a new instance of the attribute. + The type of the class. + The version of the class. + A value of the enumeration. The default is Windows. + + + Creates and initializes a new instance of the attribute. + The version of the class. + + + Creates and initializes a new instance of the attribute. + The version of the class. + A value of the enumeration. The default is Windows. + + + Indicates that multiple instances of a custom attribute can be applied to a target. + + + Creates and initializes a new instance of the attribute. + + + Specifies the programming construct to which an attribute applies. + + + The attribute applies to all programming constructs. + + + The attribute applies to a delegate. + + + The attribute applies to an enumeration. + + + The attribute applies to an event. + + + The attribute applies to a field. + + + The attribute applies to an interface. + + + The attribute applies to a method. + + + The attribute applies to a parameter. + + + The attribute applies to a property. + + + The attribute applies to a runtime class. + + + The attribute applies to a struct. + + + The attribute applies to an implementation of an interface. + + + Specifies the use of another attribute. + + + Creates and initializes a new instance of the attribute. + One or more of the enumeration values. + + + Indicates how a programming element is composed. + + + Creates and initializes a new instance of the attribute. + The type of the factory object that is used to create the programming element. + One of the enumeration values. + The version. + + + Creates and initializes a new instance of the attribute. + The type of the factory object that is used to create the programming element. + One of the enumeration values. + The version. + A value of the enumeration. The default is Windows. + + + Specifies the visibility of a programming element for which the composable attribute is applied. + + + Indicates that access to the programming element is limited to other elements in the containing class or types derived from the containing class. + + + Indicates that access to the programming element is not restricted. + + + Indicates the default interface for a runtime class. + + + Creates and initializes a new instance of the attribute. + + + Indicates that a method is the default overload method. + + + Creates and initializes a new instance of the attribute. + + + Indicates that a type or member should be marked in metadata as deprecated. Compilers and other developer tools can read this attribute and provide info to the user about the deprecation type and possible alternates. + + + Creates and initializes a new instance of the attribute. + A string message that can be used by compilers and other developer tools to explain the deprecation and provide the string names of alternate API. + A value of the enumeration. The default is Deprecate. + A constant that indicates the version that the deprecation applies to. + + + Creates and initializes a new instance of the attribute, including a Platform value for targeting. + A string message that can be used by compilers and other developer tools to explain the deprecation and provide the string names of alternate API. + A value of the enumeration. The default is Deprecate. + A constant that indicates the version that the deprecation applies to. + A value of the enumeration. The default is Windows. + + + Indicates a deprecation as Deprecate or Remove. + + + Compilers and other tools should treat the entity as deprecated. This is the default. + + + Compilers and other tools should treat the entity as removed. + + + Indicates that the type is supported in desktop apps and in Windows Store apps. + + + Creates and initializes a new instance of the attribute. + + + Indicates that the specified type is exclusive to this type. + + + Creates and initializes a new instance of the attribute. + The name of the type. + + + Microsoft internal use only. + + + Less than 10k of memory pressure. + + + Between 10k and 100k of memory pressure. + + + Over 100k of memory pressure. + + + Microsoft internal use only. + + + Creates and initializes a new instance of the attribute. + + + Indicates the GUID for the interface or delegate. + + + Creates and initializes a new instance of the attribute. + The first 4 bytes of the GUID. + The next 2 bytes of the GUID. + The next 2 bytes of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + The next byte of the GUID. + + + Indicates that the type is an instance of a variant IInspectable. Applies to runtime classes, interfaces, and parameterized interfaces. + + + Creates and initializes a new instance of the attribute. + + + Indicates the number of array elements. + + + Creates and initializes a new instance of the attribute. + The number of array elements. + + + Indicates the marshaling behavior of a Windows Runtime component. + + + Creates and initializes a new instance of the attribute. + One of the enumeration values. + + + Specifies the marshaling type for the class. + + + The class prevents marshaling on all interfaces. + + + The class marshals and unmarshals to the same pointer value on all interfaces. + + + The class does not implement IMarshal or forwards to CoGetStandardMarshal on all interfaces. + + + The class can't be marshaled. + + + Indicates that a runtime class is compatible with Windows Store app that are web browsers. + + + Creates and initializes a new instance of the attribute. + + + Identifies the method as an overload in a language that supports overloading. + + + Creates and initializes a new instance of the attribute. + The name that represents the method in the projected language. + + + Indicates that the interface contains overridable methods. + + + Creates and initializes a new instance of the attribute. + + + Specifies the platforms that a specified type should be supported in, as used by Windows Runtime attributes and metadata. + + + For use by Windows metadata. + + + For use by Windows Phone metadata. + + + Declares the platform that a type should be supported in, when platform-specific metadata is produced. + + + Creates and initializes a new instance of the attribute. + A value of the enumeration. The default is Windows. + + + Indicates that the interface contains protected methods. + + + Creates and initializes a new instance of the attribute. + + + Indicates the numeric range constraints for the value of a data field. + + + Creates and initializes a new instance of the attribute with the specified minimum and maximum values. + The minimum value allowed. + The maximum value allowed. + + + Indicates that the type contains only static methods. + + + Creates and initializes a new instance of the attribute. + The type that contains the static methods for the runtime class. + The version in which the static interface was added. + + + Creates and initializes a new instance of the attribute. + The type that contains the static methods for the runtime class. + The version in which the static interface was added. + A value of the enumeration. The default is Windows. + + + Indicates the threading model of a Windows Runtime component. + + + Creates and initializes a new instance of the attribute. + One of the enumeration values. + + + Specifies the threading model. + + + Single-threaded apartment. + + + Multithreaded apartment. + + + Both single-threaded and multithreaded apartments. + + + No valid threading model applies. + + + Indicates that the item is an instance of a variant IInspectable. Applies to method parameters, properties, and return values of types. + + + Creates and initializes a new instance of the attribute. + + + Indicates the version of the type. + + + Creates and initializes a new instance of the attribute. + The version to associate with the marked object. + + + Creates and initializes a new instance of the attribute. + The version to associate with the marked object. + A value of the enumeration. The default is Windows. + + + Identifies the type as one whose functionality is not projected into the specified target language. + + + Creates and initializes a new instance of the attribute. + + + Provides globalization support for language profiles, geographic regions, and international calendars. + + + Specifies the language-related preferences that the app can use and maintain. + + + Gets the ranked list of current runtime language values preferred by the user. + A computed list of languages that merges the app's declared supported languages (ApplicationLanguages.ManifestLanguages) with the user's ranked list of preferred languages. + + + Gets the app's declared list of supported languages. + The list of supported languages declared in the app's manifest. + + + Gets or sets the BCP-47 language tag of the app's preferred language. + The value of the top-ranked language in the user's ranked list of preferred languages (ApplicationLanguages.Languages). The app can set it to override the top language of the list. + + + Manipulates the representation of a date and time within a given calendar and clock. + + + Creates a Calendar object and initializes it to the current date and time. + + + Creates a Calendar object that is initialized with a language list. + The list of language identifiers, in priority order, that represents the choice of languages. These are used for resolving patterns to strings. See Remarks. + + + Creates a Calendar object that is initialized with a language list, calendar, and clock. + The list of language identifiers, in priority order, representing the choice of languages. These are used for resolving patterns to strings. See Remarks. + The calendar identifier to use. + The clock identifier to use. + + + Creates a Calendar object that is initialized with a language list, calendar, clock, and time zone. + The list of language identifiers, in priority order, representing the choice of languages. These are used for resolving patterns to strings. See Remarks. + The calendar identifier to use. + The clock identifier to use. + An identifier from the IANA Time Zone Database which identifies the time zone that should be used (for example, Americas/Los_Angeles for Pacific Time). + + + Increments or decrements the day. + The number of days by which to increment the day (if the value is positive) or decrement the day (if the value is negative). + + + Increments or decrements the era. + The number of eras by which to increment the era (if the value is positive) or decrement the era (if the value is negative). + + + Increments or decrements the hour. + The number of hours by which to increment the hour (if the value is positive) or decrement the hour (if the value is negative). + + + Increments or decrements the minute. + The number of minutes by which to increment the minute (if the value is positive) or decrement the minute (if the value is negative). + + + Increments or decrements the month. + The number of months by which to increment the month (if the value is positive) or decrement the month (if the value is negative). + + + Increments or decrements the nanosecond. + The number of nanoseconds by which to increment the nanosecond (if the value is positive) or decrement the nanosecond (if the value is negative). + + + Increments or decrements the period. + The number of periods by which to increment the period (if the value is positive) or decrement the period (if the value is negative). + + + Increments or decrements the second. + The number of seconds by which to increment the second (if the value is positive) or decrement the second (if the value is negative). + + + Increments or decrements the day by the specified number of weeks. + The number of weeks by which to increment the day (if the value is positive) or decrement the day (if the value is negative). + + + Increments or decrements the year. + The number of years by which to increment the year (if the value is positive) or decrement the year (if the value is negative). + + + Sets a new calendar system to be used by this Calendar object. + The calendar identifier to use. + + + Sets a new clock to be used by this Calendar object. + The clock identifier to use. + + + Sets a new time zone to be used by this Calendar object. + An identifier from the IANA Time Zone Database which identifies the time zone that should be used (for example, Americas/Los_Angeles for Pacific Time). + + + Creates a copy of the Calendar object. + A copy of the Calendar. + + + Compares this calendar to another Calendar object and indicates whether the date and time of one is earlier, equal to, or later than that of the other. + One of the following values:Return valueDescriptionLess than zeroThe date and time of this calendar is earlier than that of other.ZeroThe date and times are equal.Greater than zeroThe date and time of this calendar is later than that of other. + The Calendar object to compare to the current calendar. + + + Compares this calendar to a DateTime object and indicates whether the date and time of one is earlier, equal to, or later than that of the other. + One of the following values:Return valueDescriptionLess than zeroThe date and time of this calendar is earlier than that of other.ZeroThe date and times are equal.Greater than zeroThe date and time of this calendar is later than that of other. + The DateTime object to compare to the current calendar. + + + Copies the values from another Calendar object into this Calendar. + The Calendar object to be copied. + + + Returns a string representation of the day, optionally zero-padded. + A string representation of the day. + The minimum number of integer digits to be displayed. If the day does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the day 3, a parameter of 1 returns 3, and a parameter of 2 returns 03. + + + Returns a string that contains the numeric representation of the day. + A string representation of the day. + + + Returns a string representation of the day of the week suitable for stand-alone display. + A string representation of the day of the week, using the most common abbreviation available. + + + Returns a string representation of the day of the week suitable for stand-alone display. + A string representation of the day of the week. + A positive integer specifying the ideal length, in characters, for the returned string, +or 0 specifying the most common abbreviation available. + + + Returns a string representation of the day of the week suitable for inclusion with other date components. + A string representation of the day of the week, using the most common abbreviation available. + + + Returns a string representation of the day of the week suitable for inclusion with other date components. + A string representation of the day of the week. + A positive integer specifying the ideal length, in characters, for the returned string, +or 0 specifying the most common abbreviation available. + + + Returns a string representation of the era. + A string representation of the era, using the most common abbreviation available. + + + Returns a string representation of the era. The string chosen is closest in length to the ideal length. + A string representation of the era. + A positive integer specifying the ideal length, in characters, for the returned string, +or 0 specifying the most common abbreviation available. + + + Gets the calendar system that is used by this Calendar object. + The identifier of the calendar system. + + + Gets the clock that is used by this Calendar object. + The identifier of the clock. + + + Builds a date and time, given the components of this Calendar object. + The DateTime representing the date and time of this Calendar. + + + Gets the identifier that identifies the time zone that is used by this Calendar object. + The identifier from the IANA Time Zone Database that identifies the time zone that is used by this Calendar object. (An example is Americas/Los_Angeles for Pacific Time.) + + + Returns a string representation of the hour, optionally zero-padded. + A string representation of the hour. + The minimum number of integer digits to be displayed. If the hour does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the hour 3, a parameter of 1 returns 3, and a parameter of 2 returns 03. + + + Returns a string that contains the numeric representation of the hour. + A string representation of the hour. + + + Returns a string representation of the minute, optionally zero-padded. + A string representation of the minute. + The minimum number of integer digits to be displayed. If the minute does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the minute 3, a parameter of 1 returns 3, and a parameter of 2 returns 03. + + + Returns a string that contains the numeric representation of the minute. + A string representation of the minute. + + + Returns a string that contains the numeric representation of the month. + A string representation of the month. + + + Returns a string representation of the month, optionally zero-padded. + A string representation of the month. + The minimum number of integer digits to be displayed. If the month does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the month 3, a parameter of 1 returns 3, and a parameter of 2 returns 03. + + + Returns a string representation of the month suitable for stand-alone display. + A string representation of the month, using the most common abbreviation available. + + + Returns a string representation of the month suitable for stand-alone display. + A string representation of the month. + A positive integer specifying the ideal length, in characters, for the returned string, +or 0 specifying the most common abbreviation available. + + + Returns a string representation of the month suitable for inclusion with other date components. + A string representation of the month, using the most common abbreviation available. + + + Returns a string representation of the month suitable for inclusion with other date components. + A string representation of the month. + A positive integer specifying the ideal length, in characters, for the returned string, +or 0 specifying the most common abbreviation available. + + + Returns a string representation of the nanosecond, optionally zero-padded. + A string representation of the nanosecond. + The minimum number of integer digits to be displayed. If the nanosecond does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the nanosecond 42, a parameter of 1 or 2 returns 42, and a parameter of 3 returns 042. + + + Returns a string that contains the numeric representation of the nanosecond. + A string representation of the nanosecond. + + + Returns a string representation of the day period, such as AM or PM, that uses the most common abbreviation available. + A string representation of the day period. + + + Returns a string representation of the day period, such as AM or PM. + A string representation for the day period. + A positive integer that specifies the ideal length, in characters, for the returned string; +or a zero that specifies the most common abbreviation available. + + + Returns a string representation of the second, optionally zero-padded. + A string representation of the second. + The minimum number of integer digits to be displayed. If the second does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the second 3, a parameter of 1 returns 3, and a parameter of 2 returns 03. + + + Returns a string that contains the numeric representation of the second. + A string representation of the second. + + + Sets all the date and time fields to the date and time represented by the DateTime parameter. + The DateTime that is used to set all of the date and time fields. + + + Sets the components of this Calendar object to the latest date and time that are supported. + + + Sets the components of this Calendar object to the earliest date and time that are supported. + + + Sets the components of this Calendar object to the current date and time. + + + Returns the full time zone name applicable at the instant of time that this Calendar object represents. + The full time zone name. This usually differs depending on whether the time zone is observing Daylight Saving Time or not. It also may differ due to historical changes. (An example is Americas/Los_Angeles for Pacific Time.) + + + Returns the abbreviated time zone name applicable at the instant of time that this Calendar object represents. + The time zone abbreviation that is closest in length to idealLength. If there is a tie, the shorter abbreviation is returned. If idealLength is 0, the abbreviation in most common use is returned. (An example is Americas/Los_Angeles for Pacific Time.) + The desired length of the abbreviation to be returned. Use 0 to request the abbreviation in most common use. + + + Returns a string representation of the year, optionally zero-padded. + A string representation of the year. + The minimum number of integer digits to be displayed. If the year does not have enough integer digits, it will be padded with zeros to the correct amount. For example, for the year 42, a parameter of 1 or 2 returns 42, and a parameter of 3 returns 042. + + + Returns a string representation of the year without any initial zero padding. + A string representation of the year. + + + Returns a string representation of the year, optionally truncated. + A string representation of the year. + A positive integer that represents the number of least significant digits that should be included. For example, for the year 1234, a parameter of 2 returns 34, and a parameter of 4 or larger returns 1234. + + + Gets or sets the day. + The day. + + + Gets the day of the week. + The day of the week. + + + Gets or sets the era. + The integer that represents the era. + + + Gets the first Day of the current Month. + The first Day of the current Month. + + + Gets the first Era available in the calendar. + The first Era in the calendar. + + + Gets the first Hour of the current Period. + The first Hour of the current Period. + + + Gets the first Minute of the current Hour. + The first Minute of the current Hour. + + + Gets the first Month of the current Year. + The first Month of the current Year. + + + Gets the first Period of the current Day. + The first Period of the current Day. + + + Gets the first Second of the current Minute. + The first Second of the current Minute. + + + Gets the first Year of the current Era. + The first Year of the current Era. + + + Gets or sets the hour. + The hour. + + + Gets a Boolean indicating if Daylight Saving Time is in effect for the date of this Calendar object. + True if Daylight Saving Time is in effect for the date; otherwise, False. + + + Gets the priority list of language identifiers that is used when formatting components as strings. + The list of language identifiers.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the Calendar(IIterable(String)) constructor. + + + Gets the last Day of the current Month. + The last Day of the current Month. + + + Gets the last Era available in the calendar. + The last Era in the calendar. + + + Gets the last Hour of the current Period. + The last Hour of the current Period. + + + Gets the last Minute of the current Hour. + The last Minute of the current Hour. + + + Gets the last Month of the current Year. + The last Month of the current Year. + + + Gets the last Period of the current Day. + The last Period of the current Day. + + + Gets the last Second of the current Minute. + The last Second of the current Minute. + + + Gets the last Year of the current Era. + The last Year of the current Era. + + + Gets or sets the minute. + The minute. + + + Gets or sets the month. + The month. + + + Gets or sets the nanosecond. + The nanosecond. + + + Gets the number of days in the current month of this Calendar object. + The number of days in the current month, or 1 if the number of days in the current month is unknown. + + + Gets the number of eras in this Calendar object. + The number of eras in the Calendar, or 1 if the number of eras in the Calendar is unknown. + + + Gets the number of hours in the current day period of this Calendar object. + The number of hours in the current day period, or 1 if the number of hours in the current day period is unknown. + + + Gets the number of Minutes in the current Hour. + The number of Minutes in the current Hour. + + + Gets the number of months in the current year of this Calendar object. + The number of months in the current year, or 1 if the number of months in the current year is unknown. + + + Gets the number of Seconds in the current Minute. + The number of Seconds in the current Minute. + + + Gets the number of periods in the current day of this Calendar object. + The number of periods in the current day, or 1 if the number of periods in the current day is unknown. + + + Gets the number of years in the current era of this Calendar object. + The number of years in the current era, or 1 if there is no known bound to the number of years in the current era. + + + Gets or sets the numbering system that is used when formatting components as strings. + A string that indicates the numeral system of the calendar, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets or sets the period of the current day. + A numeric representation of the current day period. With a 12-hour clock, for example, the first period of the day is 1, representing AM, and the second period is 2, representing PM. + + + Gets the language that was most recently used to perform calendar formatting or operations. + The language from the priority list of language identifiers that was most recently used to perform calendar formatting or operations.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the Calendar(IIterable(String)) constructor. + + + Gets or sets the second. + The second. + + + Gets or sets the year. + The year. + + + Contains the calendar identifiers for the supported calendars, as static properties. + + + Gets the identifier for the Gregorian calendar. + The string GregorianCalendar, which is the identifier for the Gregorian calendar. + + + Gets the identifier for the Hebrew calendar. + The string HebrewCalendar, which is the identifier for the Hebrew calendar. + + + Gets the identifier for the Hijri calendar. + The string HijriCalendar, which is the identifier for the Hijri calendar. + + + Gets the identifier for the Japanese calendar. + The string JapaneseCalendar, which is the identifier for the Japanese calendar. + + + Gets the identifier for the Julian calendar. + The string JulianCalendar, which is the identifier for the Julian calendar. + + + Gets the identifier for the Korean calendar. + The string KoreanCalendar, which is the identifier for the Korean calendar. + + + Gets the identifier for the Taiwan calendar. + The string TaiwanCalendar, which is the identifier for the Taiwan calendar. + + + Gets the identifier for the Thai calendar. + The string ThaiCalendar, which is the identifier for the Thai calendar. + + + Gets the identifier for the Um Al-Qura calendar. + The string UmAlQuraCalendar, which is the identifier for the Um Al-Qura calendar. + + + Contains the clock identifiers for the supported clocks, as static properties. + + + Gets the identifier for a 12-hour clock. + The string 12HourClock, which is the identifier for a 12-hour clock. + + + Gets the identifier for a 24-hour clock. + The string 24HourClock, which is the identifier for a 24-hour clock. + + + Contains the currency identifiers for the supported currencies, as static properties. + + + Gets the currency identifier for the United Arab Emirates Dirham. + The string AED, which identifies the United Arab Emirates Dirham. + + + Gets the currency identifier for the Afghan Afghani. + The string AFN, which identifies the Afghan Afghani. + + + Gets the currency identifier for the Albanian Lek. + The string ALL, which identifies the Albanian Lek. + + + Gets the currency identifier for the Armenian Dram. + The string AMD, which identifies the Armenian Dram. + + + Gets the currency identifier for the Netherlands Antilles Guilder. + The string ANG, which identifies the Netherlands Antilles Guilder. + + + Gets the currency identifier for the Angolan Kwanza. + The string AOA, which identifies the Angolan Kwanza. + + + Gets the currency identifier for the Argentine Peso. + The string ARS, which identifies the Argentine Peso. + + + Gets the currency identifier for the Australian Dollar. + The string AUD, which identifies the Australian Dollar. + + + Gets the currency identifier for the Aruban Florin. + The string AWG, which identifies the Aruban Florin. + + + Gets the currency identifier for the Azerbaijani Manat. + The string AZN, which identifies the Azerbaijani Manat. + + + Gets the currency identifier for the Bosnia-Herzegovina Convertible Mark. + The string BAM, which identifies the Bosnia-Herzegovina Convertible Mark. + + + Gets the currency identifier for the Barbados Dollar. + The string BBD, which identifies the Barbados Dollar. + + + Gets the currency identifier for the Bangladeshi Taka. + The string BDT, which identifies the Bangladeshi Taka. + + + Gets the currency identifier for the Bulgarian Lev. + The string BGN, which identifies the Bulgarian Lev. + + + Gets the currency identifier for the Bahraini Dinar. + The string BHD, which identifies the Bahraini Dinar. + + + Gets the currency identifier for the Burundian Franc. + The string BIF, which identifies the Burundian Franc. + + + Gets the currency identifier for the Bermuda Dollar. + The string BMD, which identifies the Bermuda Dollar. + + + Gets the currency identifier for the Brunei Dollar. + The string BND, which identifies the Brunei Dollar. + + + Gets the currency identifier for the Bolivian Boliviano. + The string BOB, which identifies the Bolivian Boliviano. + + + Gets the currency identifier for the Brazilian Real. + The string BRL, which identifies the Brazilian Real. + + + Gets the currency identifier for the Bahamian Dollar. + The string BSD, which identifies the Bahamian Dollar. + + + Gets the currency identifier for the Bhutanese Ngultrum. + The string BTN, which identifies the Bhutanese Ngultrum. + + + Gets the currency identifier for the Botswana Pula. + The string BWP, which identifies the Botswana Pula. + + + Gets the currency identifier for the Belarusian Ruble. + The string BYR, which identifies the Belarusian Ruble. + + + Gets the currency identifier for the Belize Dollar. + The string BZD, which identifies the Belize Dollar. + + + Gets the currency identifier for the Canadian Dollar. + The string CAD, which identifies the Canadian Dollar. + + + Gets the currency identifier for the Congolese Franc. + The string CDF, which identifies the Congolese Franc. + + + Gets the currency identifier for the Swiss Franc. + The string CHF, which identifies the Swiss Franc. + + + Gets the currency identifier for the Chilean Peso. + The string CLP, which identifies the Chilean Peso. + + + Gets the currency identifier for the Chinese Yuan. + The string CNY, which identifies the Chinese Yuan. + + + Gets the currency identifier for the Colombian Peso. + The string COP, which identifies the Colombian Peso. + + + Gets the currency identifier for the Costa Rican Colon. + The string CRC, which identifies the Costa Rican Colon. + + + Gets the currency identifier for the Cuban Peso. + The string yyy, which identifies the Cuban Peso. + + + Gets the currency identifier for the Cape Verde Escudo. + The string CVE, which identifies the Cape Verde Escudo. + + + Gets the currency identifier for the Czech Koruna. + The string CZK, which identifies the Czech Koruna. + + + Gets the currency identifier for the Djiboutian Franc. + The string DJF, which identifies the Djiboutian Franc. + + + Gets the currency identifier for the Danish Krone. + The string DKK, which identifies the Danish Krone. + + + Gets the currency identifier for the Dominican Peso. + The string DOP, which identifies the Dominican Peso. + + + Gets the currency identifier for the Algerian Dinar. + The string DZD, which identifies the Algerian Dinar. + + + Gets the currency identifier for the Egyptian Pound. + The string EGP, which identifies the Egyptian Pound. + + + Gets the currency identifier for the Eritrean Nakfa. + The string ERN, which identifies the Eritrean Nakfa. + + + Gets the currency identifier for the Ethiopian Birr. + The string ETB, which identifies the Ethiopian Birr. + + + Gets the currency identifier for the Euro. + The string EUR, which identifies the Euro. + + + Gets the currency identifier for the Fiji Dollar. + The string FJD, which identifies the Fiji Dollar. + + + Gets the currency identifier for the Falkland Islands Pound. + The string FKP, which identifies the Falkland Islands Pound. + + + Gets the currency identifier for the Pound Sterling. + The string GBP, which identifies the Pound Sterling. + + + Gets the currency identifier for the Georgian Lari. + The string GEL, which identifies the Georgian Lari. + + + Gets the currency identifier for the Ghanaian Cedi. + The string GHS, which identifies the Ghanaian Cedi. + + + Gets the currency identifier for the Gibraltar Pound. + The string GIP, which identifies the Gibraltar Pound. + + + Gets the currency identifier for the Gambian Dalasi. + The string GMD, which identifies the Gambian Dalasi. + + + Gets the currency identifier for the Guinean Franc. + The string GNF, which identifies the Guinean Franc. + + + Gets the currency identifier for the Guatemalan Quetzal. + The string GTQ, which identifies the Guatemalan Quetzal. + + + Gets the currency identifier for the Guyanese Dollar. + The string GYD, which identifies the Guyanese Dollar. + + + Gets the currency identifier for the Hong Kong Dollar. + The string HKD, which identifies the Hong Kong Dollar. + + + Gets the currency identifier for the Honduran Lempira. + The string HNL, which identifies the Honduran Lempira. + + + Gets the currency identifier for the Croatian Kuna. + The string HRK, which identifies the Croatian Kuna. + + + Gets the currency identifier for the Haitian Gourde. + The string HTG, which identifies the Haitian Gourde. + + + Gets the currency identifier for the Hungarian Forint. + The string HUF, which identifies the Hungarian Forint. + + + Gets the currency identifier for the Indonesian Rupiah. + The string IDR, which identifies the Indonesian Rupiah. + + + Gets the currency identifier for the Israeli New Shekel. + The string ILS, which identifies the Israeli New Shekel. + + + Gets the currency identifier for the Indian Rupee. + The string INR, which identifies the Indian Rupee. + + + Gets the currency identifier for the Iraqi Dinar. + The string IQD, which identifies the Iraqi Dinar. + + + Gets the currency identifier for the Iranian Rial. + The string IRR, which identifies the Iranian Rial. + + + Gets the currency identifier for the Icelandic Krona. + The string ISK, which identifies the Icelandic Krona. + + + Gets the currency identifier for the Jamaican Dollar. + The string JMD, which identifies the Jamaican Dollar. + + + Gets the currency identifier for the Jordanian Dinar. + The string JOD, which identifies the Jordanian Dinar. + + + Gets the currency identifier for the Japanese Yen. + The string JPY, which identifies the Japanese Yen. + + + Gets the currency identifier for the Kenyan Shilling. + The string KES, which identifies the Kenyan Shilling. + + + Gets the currency identifier for the Kyrgyzstani Som. + The string KGS, which identifies the Kyrgyzstani Som. + + + Gets the currency identifier for the Cambodian Riel. + The string KHR, which identifies the Cambodian Riel. + + + Gets the currency identifier for the Comorian Franc. + The string KMF, which identifies the Comorian Franc. + + + Gets the currency identifier for the North Korean Won. + The string KPW, which identifies the North Korean Won. + + + Gets the currency identifier for the Korean Won. + The string KRW, which identifies the Korean Won. + + + Gets the currency identifier for the Kuwaiti Dinar. + The string KWD, which identifies the Kuwaiti Dinar. + + + Gets the currency identifier for the Cayman Islands Dollar. + The string KYD, which identifies the Cayman Islands Dollar. + + + Gets the currency identifier for the Kazakhstani Tenge. + The string KZT, which identifies the Kazakhstani Tenge. + + + Gets the currency identifier for the Lao Kip. + The string LAK, which identifies the Lao Kip. + + + Gets the currency identifier for the Lebanese Pound. + The string LBP, which identifies the Lebanese Pound. + + + Gets the currency identifier for the Sri Lankan Rupee. + The string LKR, which identifies the Sri Lankan Rupee. + + + Gets the currency identifier for the Liberian Dollar. + The string LRD, which identifies the Liberian Dollar. + + + Gets the currency identifier for the Lesotho Loti. + The string LSL, which identifies the Lesotho Loti. + + + Gets the currency identifier for the Lithuanian Litas. + The string LTL, which identifies the Lithuanian Litas. + + + Gets the currency identifier for the Latvian Lats. + The string LVL, which identifies the Latvian Lats. + + + Gets the currency identifier for the Libyan Dinar. + The string LYD, which identifies the Libyan Dinar. + + + Gets the currency identifier for the Moroccan Dirham. + The string MAD, which identifies the Moroccan Dirham. + + + Gets the currency identifier for the Moldovan Leu. + The string MDL, which identifies the Moldovan Leu. + + + Gets the currency identifier for the Malagasy Ariary. + The string MGA, which identifies the Malagasy Ariary. + + + Gets the currency identifier for the Macedonia Denar. + The string MKD, which identifies the Macedonia Denar. + + + Gets the currency identifier for the Myanmar Kyat. + The string MMK, which identifies the Myanmar Kyat. + + + Gets the currency identifier for the Mongolian Tugrik. + The string MNT, which identifies the Mongolian Tugrik. + + + Gets the currency identifier for the Macau Pataca. + The string MOP, which identifies the Macau Pataca. + + + Gets the currency identifier for the Mauritania Ouguiya. + The string MRO, which identifies the Mauritania Ouguiya. + + + Gets the currency identifier for the Mauritian Rupee. + The string MUR, which identifies the Mauritian Rupee. + + + Gets the currency identifier for the Maldives Rufiyaa. + The string MVR, which identifies the Maldives Rufiyaa. + + + Gets the currency identifier for the Malawian Kwacha. + The string MWK, which identifies the Malawian Kwacha. + + + Gets the currency identifier for the Mexican Peso. + The string MXN, which identifies the Mexican Peso. + + + Gets the currency identifier for the Malaysian Ringgit. + The string MYR, which identifies the Malaysian Ringgit. + + + Gets the currency identifier for the New Mozambican Metical. + The string MZN, which identifies the New Mozambican Metical. + + + Gets the currency identifier for the Namibian Dollar. + The string NAD, which identifies the Namibian Dollar. + + + Gets the currency identifier for the Nigerian Naira. + The string NGN, which identifies the Nigerian Naira. + + + Gets the currency identifier for the Nicaraguan Cordoba Oro. + The string NIO, which identifies the Nicaraguan Cordoba Oro. + + + Gets the currency identifier for the Norwegian Krone. + The string NOK, which identifies the Norwegian Krone. + + + Gets the currency identifier for the Nepalese Rupee. + The string NPR, which identifies the Nepalese Rupee. + + + Gets the currency identifier for the New Zealand Dollar. + The string NZD, which identifies the New Zealand Dollar. + + + Gets the currency identifier for the Omani Rial. + The string OMR, which identifies the Omani Rial. + + + Gets the currency identifier for the Panamanian Balboa. + The string PAB, which identifies the Panamanian Balboa. + + + Gets the currency identifier for the Peruvian Nuevo Sol. + The string PEN, which identifies the Peruvian Nuevo Sol. + + + Gets the currency identifier for the Papua New Guinea Kina. + The string PGK, which identifies the Papua New Guinea Kina. + + + Gets the currency identifier for the Philippine Peso. + The string PHP, which identifies the Philippine Peso. + + + Gets the currency identifier for the Pakistan Rupee. + The string PKR, which identifies the Pakistan Rupee. + + + Gets the currency identifier for the Polish Zloty. + The string PLN, which identifies the Polish Zloty. + + + Gets the currency identifier for the Paraguay Guarani. + The string PYG, which identifies the Paraguay Guarani. + + + Gets the currency identifier for the Qatari Riyal. + The string QAR, which identifies the Qatari Riyal. + + + Gets the currency identifier for the Romanian Leu. + The string RON, which identifies the Romanian Leu. + + + Gets the currency identifier for the Serbian Dinar. + The string RSD, which identifies the Serbian Dinar. + + + Gets the currency identifier for the Russian Ruble. + The string RUB, which identifies the Russian Ruble. + + + Gets the currency identifier for the Rwandan Franc. + The string RWF, which identifies the Rwandan Franc. + + + Gets the currency identifier for the Saudi Arabian Riyal. + The string SAR, which identifies the Saudi Arabian Riyal. + + + Gets the currency identifier for the Solomon Islands Dollar. + The string SBD, which identifies the Solomon Islands Dollar. + + + Gets the currency identifier for the Seychelles Rupee. + The string SCR, which identifies the Seychelles Rupee. + + + Gets the currency identifier for the Sudanese Pound. + The string SDG, which identifies the Sudanese Pound. + + + Gets the currency identifier for the Swedish Krona. + The string SEK, which identifies the Swedish Krona. + + + Gets the currency identifier for the Singapore Dollar. + The string SGD, which identifies the Singapore Dollar. + + + Gets the currency identifier for the Saint Helena Pound. + The string SHP, which identifies the Saint Helena Pound. + + + Gets the currency identifier for the Sierra Leone Leone. + The string SLL, which identifies the Sierra Leone Leone. + + + Gets the currency identifier for the Somali Shilling. + The string SOS, which identifies the Somali Shilling. + + + Gets the currency identifier for the Suriname Dollar. + The string SRD, which identifies the Suriname Dollar. + + + Gets the currency identifier for the Sao Tome Dobra. + The string STD, which identifies the Sao Tome Dobra. + + + Gets the currency identifier for the Syrian Pound. + The string SYP, which identifies the Syrian Pound. + + + Gets the currency identifier for the Swazi Lilangeni. + The string SZL, which identifies the Swazi Lilangeni. + + + Gets the currency identifier for the Thai Baht. + The string THB, which identifies the Thai Baht. + + + Gets the currency identifier for the Tajikistani Somoni. + The string TJS, which identifies the Tajikistani Somoni. + + + Gets the currency identifier for the Turkmenistan Manat. + The string TMT, which identifies the Turkmenistan Manat. + + + Gets the currency identifier for the Tunisian Dinar. + The string TND, which identifies the Tunisian Dinar. + + + Gets the currency identifier for the Tongan Pa'Anga. + The string TOP, which identifies the Tongan Pa'Anga. + + + Gets the currency identifier for the Turkish Lira. + The string TRY, which identifies the Turkish Lira. + + + Gets the currency identifier for the Trinidad and Tobago Dollar. + The string TTD, which identifies the Trinidad and Tobago Dollar. + + + Gets the currency identifier for the New Taiwan Dollar. + The string TWD, which identifies the New Taiwan Dollar. + + + Gets the currency identifier for the Tanzanian Shilling. + The string TZS, which identifies the Tanzanian Shilling. + + + Gets the currency identifier for the Ukrainian Hryvnia. + The string UAH, which identifies the Ukrainian Hryvnia. + + + Gets the currency identifier for the Uganda Shilling. + The string UGX, which identifies the Uganda Shilling. + + + Gets the currency identifier for the United States Dollar. + The string USD, which identifies the United States Dollar. + + + Gets the currency identifier for the Uruguayan Peso. + The string UYU, which identifies the Uruguayan Peso. + + + Gets the currency identifier for the Uzbekistani Som. + The string UZS, which identifies the Uzbekistani Som. + + + Gets the currency identifier for the Venezuelan Bolivar Fuerte. + The string VEF, which identifies the Venezuelan Bolivar Fuerte. + + + Gets the currency identifier for the Viet Nam Dong. + The string VND, which identifies the Viet Nam Dong. + + + Gets the currency identifier for the Vanuatu Vatu. + The string VUV, which identifies the Vanuatu Vatu. + + + Gets the currency identifier for the Samoa Tala. + The string WST, which identifies the Samoa Tala. + + + Gets the currency identifier for the Central African CFA. + The string XAF, which identifies the Central African CFA. + + + Gets the currency identifier for the East Caribbean Dollar. + The string XCD, which identifies the East Caribbean Dollar. + + + Gets the currency identifier for the West African CFA. + The string XOF, which identifies the West African CFA. + + + Gets the currency identifier for the French Pacific Franc. + The string XPF, which identifies the French Pacific Franc. + + + Gets the currency identifier that represents no currency. + The string XXX, which represents no currency. + + + Gets the currency identifier for the Yemeni Rial. + The string YER, which identifies the Yemeni Rial. + + + Gets the currency identifier for the South African Rand. + The string ZAR, which identifies the South African Rand. + + + Gets the currency identifier for the Zambian Kwacha. + The string ZMW, which identifies the Zambian Kwacha. + + + Gets the currency identifier for the Zimbabwean Dollar. + The string ZWL, which identifies the Zimbabwean Dollar. + + + Identifies the day of the week. + + + Sunday + + + Monday + + + Tuesday + + + Wednesday + + + Thursday + + + Friday + + + Saturday + + + Describes a region. This is usually a country, but may be a macroregion. + + + Creates a GeographicRegion object that defaults to the user's home region. + + + Creates a GeographicRegion object. + One of the ISO 3166-1 two-letter or three-letter codes that identify the country, or one of the three-digit UN-M49 codes that identify the geographical region. + + + Determines whether a geographic region identifier is supported. + True if the ID is known; otherwise, false. If this method returns true, an app can safely construct a region by using this region identifier. If it returns false, attempting to construct a region for the given code will throw an exception. + One of the ISO 3166-1 two-letter or three-letter codes that identify the country, or one of the three-digit UN-M49 codes that identify the geographical region. + + + Gets the set of currencies in use in this region. + The set of ISO 4217 3-letter codes for the currencies that are used in the region. + + + Gets the string that contains the best available identifier that represents the region. + Returns a string that contains: The two-letter identifier code, if one exists (and is not "ZZ"); otherwise, the three-letter identifier code, if one exists (and is not "ZZZ"); otherwise, the three-digit numeric identifier code, if one exists (and is not "999"); otherwise, "ZZ". + + + Gets the three-digit identifier for this region, as a string. + Returns as a string the ISO-3166-1 numeric three-digit code for the region, or the UN-M49 code. If the region is unknown, returns "999". + + + Gets the three-letter identifier for this region. + Returns the three-letter ISO 3166-1 alpha-3 code for this region, if one exists; otherwise, returns "ZZZ". + + + Gets the two-letter identifier for this region. + Returns the two-letter ISO 3166-1 alpha-2 code for this region, if one exists; otherwise, returns "ZZ". + + + Gets a localized string that is suitable for display to the user for identifying the region. + The localized name of the region. + + + Gets the name of the region in the primary language spoken in this region. + The name of the region in the primary language spoken in this region. + + + A class that provides information related to BCP-47 language tags such as the language name and the script. + + + Creates a Language object. + A BCP-47 language tag. See Remarks. + + + Retrieves a vector of extension subtags in the current language for the given extension identified by singleton. + The list of extension subtags identified by singleton. + A single-character subtag for the LanguageTag of the current language. See BCP-47 language tags, Extensions and the Extensions Registry. + + + Determines whether a BCP-47 language tag is well-formed. + True if the language tag is well-formed as defined by BCP-47, except when the language tag can never be valid according to BCP-47. Otherwise it returns false. If this method returns true, an application can safely construct a language by using this tag. If it returns false, attempting to construct a language for the given tag will throw an exception. + A BCP-47 language tag. + + + Gets the BCP-47 language tag for the currently enabled keyboard layout or Input Method Editor (IME). + The BCP-47 language tag. + + + Gets a localized string that is suitable for display to the user for identifying the language. + The localized name of the language. + + + Gets the normalized BCP-47 language tag for this language. + The normalized BCP-47 language tag.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the Language constructor. + + + Gets the name of the language in the language itself. + The name of the language in the language itself. + + + Gets the four-letter ISO 15924 script code of the language. + A string with the script code of the language. If the script code cannot be identified or inferred from the language tag, "Zyyy" is returned. + + + Contains the numeral system identifiers for the supported numeral systems, as static properties. + + + Gets the identifier for the Arabic-Indic decimal numeral system. + The string Arab, which identifies the Arabic-Indic decimal numeral system. This system has the digits ٠١٢٣٤٥٦٧٨٩ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Extended Arabic-Indic decimal numeral system. + The string ArabExt, which identifies the Extended Arabic-Indic decimal numeral system. This system has the digits Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Balinese decimal numeral system. + The string Bali, which identifies the Balinese decimal numeral system. This system has the digits á­á­‘᭒᭓᭔᭕᭖᭗᭘᭙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Bengali decimal numeral system. + The string Beng, which identifies the Bengali decimal numeral system. This system has the digits ০১২৩৪৫৬৭৮৯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Cham decimal numeral system. + The string Cham, which identifies the Cham decimal numeral system. This system has the digits ê©ê©‘꩒꩓꩔꩕꩖꩗꩘꩙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Devanagari decimal numeral system. + The string Deva, which identifies the Devanagari decimal numeral system. This system has the digits ०१२३४५६७८९ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Latin decimal numeral system using full-width characters. + The string FullWide, which identifies the Latin decimal numeral system using full-width characters. This system has the digits ï¼ï¼‘23456789 which correspond to the Latin digits 0-9. + + + Gets the identifier for the Gujarati decimal numeral system. + The string Gujr, which identifies the Gujarati decimal numeral system. This system has the digits ૦૧૨૩૪૫૬૭૮૯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Gurmukhi decimal numeral system. + The string Guru, which identifies the Gurmukhi decimal numeral system. This system has the digits ੦੧੨੩੪੫੬੭੮੯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Han decimal numeral system. + The string HaniDec, which identifies the Han decimal numeral system. This system has the digits ã€‡ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Javanese decimal numeral system. + The string Java, which identifies the Javanese decimal numeral system. This system has the digits ê§ê§‘꧒꧓꧔꧕꧖꧗꧘꧙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Kayah Li decimal numeral system. + The string Kali, which identifies the Kayah Li decimal numeral system. This system has the digits ꤀ê¤ê¤‚꤃꤄꤅꤆꤇꤈꤉ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Khmer decimal numeral system. + The string Khmr, which identifies the Khmer decimal numeral system. This system has the digits ០១២៣៤៥៦៧៨៩ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Kannada decimal numeral system. + The string Knda, which identifies the Kannada decimal numeral system. This system has the digits ೦೧೨೩೪೫೬೭೮೯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Tai Tham Hora decimal numeral system. + The string Lana, which identifies the Tai Tham Hora decimal numeral system. This system has the digits ᪀áªáª‚᪃᪄᪅᪆᪇᪈᪉ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Tai Tham Tham decimal numeral system. + The string LanaTham, which identifies the Tai Tham Tham decimal numeral system. This system has the digits áªáª‘᪒᪓᪔᪕᪖᪗᪘᪙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Laoo decimal numeral system. + The string Laoo, which identifies the Laoo decimal numeral system. This system has the digits Û°Û±Û²Û³Û´ÛµÛ¶Û·Û¸Û¹ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Latin decimal numeral system. + The string Latn, which identifies the Latin decimal numeral system. This system has the Latin digits 0123456789. + + + Gets the identifier for the Lepcha decimal numeral system. + The string Lepc, which identifies the Lepcha decimal numeral system. This system has the digits á±€á±á±‚᱃᱄᱅᱆᱇᱈᱉ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Limbu decimal numeral system. + The string Limb, which identifies the Limbu decimal numeral system. This system has the digits ᥆᥇᥈᥉᥊᥋᥌á¥á¥Žá¥ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Malayalam decimal numeral system. + The string Mlym, which identifies the Malayalam decimal numeral system. This system has the digits ൦൧൨൩൪൫൬൭൮൯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Mongolian decimal numeral system. + The string Mong, which identifies the Mongolian decimal numeral system. This system has the digits á á ‘᠒᠓᠔᠕᠖᠗᠘᠙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Meetei Mayek decimal numeral system. + The string Mtei, which identifies the Meetei Mayek decimal numeral system. This system has the digits ꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Myanmar decimal numeral system. + The string Mymr, which identifies the Myanmar decimal numeral system. This system has the digits á€áá‚áƒá„á…á†á‡áˆá‰ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Myanmar Shan decimal numeral system. + The string MymrShan, which identifies the Myanmar Shan decimal numeral system. This system has the digits á‚႑႒႓႔႕႖႗႘႙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Nko decimal numeral system. + The string Nkoo, which identifies the Nko decimal numeral system. This system has the digits ߀ß߂߃߄߅߆߇߈߉ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Ol Chiki decimal numeral system. + The string Olck, which identifies the Ol Chiki decimal numeral system. This system has the digits á±á±‘᱒᱓᱔᱕᱖᱗᱘᱙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Odia decimal numeral system. + The string Orya, which identifies the Odia decimal numeral system. This system has the digits ୦୧୨୩୪୫୬୭୮୯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Saurashtra decimal numeral system. + The string Saur, which identifies the Saurashtra decimal numeral system. This system has the digits ê£ê£‘꣒꣓꣔꣕꣖꣗꣘꣙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Sundanese decimal numeral system. + The string Sund, which identifies the Sundanese decimal numeral system. This system has the digits ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ which correspond to the Latin digits 0-9. + + + Gets the identifier for the New Tai Lue decimal numeral system. + The string Talu, which identifies the New Tai Lue decimal numeral system. This system has the digits á§á§‘᧒᧓᧔᧕᧖᧗᧘᧙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Tamil decimal numeral system. + The string TamlDec, which identifies the Tamil decimal numeral system. This system has the digits ௦௧௨௩௪௫௬௭௮௯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Telugu decimal numeral system. + The string Telu, which identifies the Telugu decimal numeral system. This system has the digits ౦౧౨౩౪౫౬౭౮౯ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Thai decimal numeral system. + The string Thai, which identifies the Thai decimal numeral system. This system has the digits à¹à¹‘๒๓๔๕๖๗๘๙ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Tibetan decimal numeral system. + The string Tibt, which identifies the Tibetan decimal numeral system. This system has the digits ༠༡༢༣༤༥༦༧༨༩ which correspond to the Latin digits 0-9. + + + Gets the identifier for the Vai decimal numeral system. + The string Vaii, which identifies the Vai decimal numeral system. This system has the digits ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ which correspond to the Latin digits 0-9. + + + Provides read-only lists of character groupings. + + + A container for character group information. Characters are grouped in an index that enables an application to determine where the grouping boundaries are. + + + Gets the first item that appears in the grouping under this index. + The string that defines the start of the group that has the associated label. The start of the next group implicitly determines its end. + + + Gets the label that is associated with this index. + The string to use as the label for all strings of this group. This string may be empty, in which case the label is considered to be "other". + + + Contains the set of character groups and the functionality to get the label for any given string. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the set of character groups. + The iterator. The current position of the iterator is index 0, or the end of the set of character groups if the set is empty. + + + Returns the CharacterGrouping at the specified index in the set of character groups. + The CharacterGrouping at the specified index. + The zero-based index of the CharacterGrouping in the set to return. + + + Returns the CharacterGrouping objects that start at the specified index in the set of character groups. + The number of objects returned. + The zero-based index of the start of the CharacterGrouping objects in the set to return. + The CharacterGrouping objects in the set that start at startIndex. + + + Returns the index of a specified CharacterGrouping object in the set of character groups. + True if the object is found, otherwise false. + The CharacterGrouping object to find in the set. + The zero-based index of the CharacterGrouping object, if found. The method returns zero if the object is not found. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the label under which the provided text falls. + The first character grouping label that applies to the given text. + The string for which to get the label. + + + Gets the number of CharacterGrouping objects in the set of character groups. + The number of objects in the set. + + + Create a CharacterGroupings object for the default collation. + + + Enables formatting of dates and times. + + + Formats dates and times. + + + Creates a DateTimeFormatter object that is initialized with hour, minute, and second formats. + The desired hour format to include in the template. + The desired minute format to include in the template. + The desired second format to include in the template. + + + Creates a DateTimeFormatter object that is initialized by a format template string. + A format template string that specifies the requested components. The order of the components is irrelevant. +This can also be a format pattern. +See the remarks for the DateTimeFormatter class for a list of valid format templates and format patterns. + + + Creates a DateTimeFormatter object that is initialized by a format template string and language list. + A format template string that specifies the requested components. The order of the components is irrelevant. +This can also be a format pattern. +See the remarks for the DateTimeFormatter class for a list of valid format templates and format patterns. + The list of language identifiers, in priority order, that represent the choice of languages. These identifiers are used for resolving the template to a pattern and for formatting. See Remarks. + + + Creates a DateTimeFormatter object that is initialized by a format template string, language list, geographic region, calendar, and clock. + A format template string that specifies the requested components. The order of the components is irrelevant. +This can also be a format pattern. +See the remarks for the DateTimeFormatter class for a list of valid format templates and format patterns. + The list of language identifiers, in priority order, that represent the choice of languages. These identifiers are used for resolving the template to a pattern, and for formatting. See Remarks. + The identifier for the geographic region. This identifier is used for resolving the template to a pattern. + The calendar identifier to use. + The clock identifier to use. + + + Creates a DateTimeFormatter object that is initialized with year, month, day, and day of week formats. + The desired year format to include in the template. + The desired month format to include in the template. + The desired day format to include in the template. + The desired day of week format to include in the template. + + + Creates a DateTimeFormatter object that is initialized with year, month, day, day of week, hour, minute, and second formats, and a language list. + The year format to include in the template. + The month format to include in the template. + The day format to include in the template. + The day of week format to include in the template. + The hour format to include in the template. + The minute format to include in the template. + The second format to include in the template. + The list of language identifiers, in priority order, that represent the choice of languages. These identifiers are used for resolving the template to a pattern and for formatting. See Remarks. + + + Creates a DateTimeFormatter object with all formats and identifiers specified. + The desired year format to include in the template. + The desired month format to include in the template. + The desired day format to include in the template. + The desired day of week format to include in the template. + The desired hour format to include in the template. + The desired minute format to include in the template. + The desired second format to include in the template. + The list of language identifiers, in priority order, that represent the choice of languages. These identifiers are used for resolving the template to a pattern, and for formatting. See Remarks. + The identifier for the geographic region. This identifier is used for resolving the template to a pattern. + The calendar identifier to use. + The clock identifier to use. + + + Returns a string representation of the provided date and time. + A string that represents the date and time. + The date and time to be formatted. + + + Returns a string that represents the given date and time in the given time zone, conforming to the template the formatter is currently using. + A string that represents the date, time, and time zone. + The date and time to be formatted. + An identifier from the IANA Time Zone Database which identifies the time zone that should be used (for example, Americas/Los_Angeles for Pacific Time). + + + Gets the calendar that is used when formatting dates. + The calendar that is used. + + + Gets the clock that is used when formatting times. + The clock that is used. + + + Gets or sets the region that is used when formatting dates and times. + The region that is used. + + + Gets the DayFormat in the template. + Specifies whether the day is included. If it is, this property specifies the format for the day in the template. + + + Gets the DayOfWeekFormat in the template. + Specifies whether the day of week is included. If it is, this property specifies the format for the day of week in the template. + + + Gets the HourFormat in the template. + Specifies whether the hour is included. If it is, this property specifies the format for the hour in the template. + + + Gets the MinuteFormat in the template. + Specifies whether the minute is included. If it is, this property specifies the format for the minute in the template. + + + Gets the MonthFormat in the template. + Specifies whether the month is included. If it is, this property specifies the format for the month in the template. + + + Gets the SecondFormat in the template. + Specifies whether the second is included. If it is, this property specifies the format for the second in the template. + + + Gets the YearFormat in the template. + Specifies whether the year is included. If it is, this format specifies the format for the year in the template. + + + Gets the priority list of language identifiers that is used when formatting dates and times. + The list of languages that is used.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the DateTimeFormatter(String, IIterable(String)) constructor. + + + Gets the DateTimeFormatter object that formats dates according to the user's choice of long date pattern. + A DateTimeFormatter object equivalent to one constructed with the "longdate" template. + + + Gets the DateTimeFormatter object that formats times according to the user's choice of long time pattern. + A DateTimeFormatter object equivalent to one constructed with the "longtime" template. + + + Gets or sets the numbering system that is used to format dates and times. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥ ٦٧٨٩). + + + Gets the patterns corresponding to this template that are used when formatting dates and times. + The pattern that provides the requested components in the template. +See the remarks for the DateTimeFormatter class for a list of valid format patterns. + + + Gets the geographic region that was most recently used to format dates and times. + The geographic region that was most recently used to format dates and times. + + + Gets the language that was most recently used to format dates and times. + The language from the priority list of language identifiers that was most recently used to format dates and times.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the DateTimeFormatter(String, IIterable(String)) constructor. + + + Gets the DateTimeFormatter object that formats dates according to the user's choice of short date pattern. + A DateTimeFormatter object equivalent to one constructed with the "shortdate" template. + + + Gets the DateTimeFormatter object that formats times according to the user's choice of short time pattern. + A DateTimeFormatter object equivalent to one constructed with the "shorttime" template. + + + Gets a string representation of this format template. + A string that represents this format template. If the DateTimeFormatter object was constructed with a format template or format enumerations, the string can be used to construct the same DateTimeFormatter. If a pattern was used to construct the DateTimeFormatter, this property returns the empty string. +See the remarks for the DateTimeFormatter class for a list of valid format templates. + + + Specifies the intended format for the day in a DateTimeFormatter object. + + + Do not display the day. + + + Display the day in the most natural way. This will depend on the context, such as the language or calendar (for example, for the Hebrew calendar and Hebrew language, use the Hebrew numbering system). + + + Specifies the intended format for the day of the week in a DateTimeFormatter object. + + + Do not display the day of the week. + + + Display the day of the week in the most natural way. It may be abbreviated or full depending on the context, such as the language or calendar that is being used. + + + Display an abbreviated version of the day of the week (for example, "Thur" for Thursday). + + + Display the day of the week in its entirety (for example, "Thursday"). + + + Specifies the intended format for the hour in a DateTimeFormatter object. + + + Do not display the hour. + + + Display the hour in the most natural way. This will depend on the context, such as the language or clock that is being used. + + + Specifies the intended format for the minute in a DateTimeFormatter object. + + + Do not display the minute. + + + Display the minute in the most natural way. This will depend on the context, such as the language or clock that is being used. + + + Specifies the intended format for the month in a DateTimeFormatter object. + + + Do not display the month. + + + Display the month in the most natural way. It may be abbreviated, full, or numeric depending on the context, such as the language or calendar that is being used. + + + Display an abbreviated version of the month (for example, "Sep" for September). + + + Display the month in its entirety (for example, "September"). + + + Display the month as a number (for example, "9" for September). + + + Specifies the intended format for the second in a DateTimeFormatter object. + + + Do not display the second. + + + Display the second in the most natural way. This will depend on the context, such as the language or clock that is being used. + + + Specifies the intended format for the year in a DateTimeFormatter object. + + + Do not display the year. + + + Display the year in the most natural way. It may be abbreviated or full depending on the context, such as the language or calendar that is being used. + + + Display an abbreviated version of the year (for example, "11" for Gregorian 2011). + + + Display the year in its entirety (for example, "2011" for Gregorian 2011). + + + Provides classes that allow apps to select language-appropriate and script-appropriate fonts for text display. + + + Provides data related to a particular font recommendation for a given language. + + + Gets the family name of the font. + The font family name. + + + Gets the FontStretch property of the font. + The FontStretch property. + + + Gets the FontStyle property of the font. + The FontStyle property. + + + Gets the weight of the font (FontWeight). + The weight of the font. + + + Gets a recommended font size scaling factor for the font. + The recommended font size scaling factor. + + + Supplies a set of font recommendations for a given language. + + + Creates a LanguageFontGroup object for a given language or script. + A BCP-47 language tag, or an ISO 15924 script identifier. + + + Gets a font that is recommended as an additional option for use in documents beyond the recommendations provided by DocumentHeadingFont, ModernDocumentFont and TraditionalDocumentFont. + The recommended LanguageFont, or NULL if no font recommendation is available. + + + Gets a font that is recommended as an additional option for use in documents beyond the recommendations provided by DocumentHeadingFont, ModernDocumentFont and TraditionalDocumentFont. + The recommended LanguageFont, or NULL if no font recommendation is available. + + + Gets a font that is recommended for use in document headings. + The recommended LanguageFont. + + + Gets a font that is recommended for displaying fixed-width characters. + The recommended LanguageFont, or NULL if no font recommendation is available. + + + Gets a font that is recommended for typical document body text following modern style conventions. + The recommended LanguageFont. + + + Gets a font that is recommended for typical document body text following traditional style conventions. + The recommended LanguageFont. + + + Gets a font that is recommended for special UI elements, such as captions, that are displayed at sizes smaller than typical UI body text. + The recommended LanguageFont. + + + Gets a font that is recommended for special UI elements, such as headings, that are displayed at sizes somewhat larger than typical UI body text. + The recommended LanguageFont. + + + Gets a font that is recommended for special UI elements, such as headings in notifications or other app messages, that are displayed at UIbody text size or only slightly larger yet need to be differentiated from UI body text. + The recommended LanguageFont. + + + Gets a font that is recommended for typical UI body text. + The recommended LanguageFont. + + + Gets a font that is recommended for special UI elements set at sizes much larger than typical UI body text. + The recommended LanguageFont. + + + Provides classes for formatting currencies, decimal numbers, percent values, and permille values, based on the user's languages and geographic region. + + + Formats and parses currencies. + + + Creates a CurrencyFormatter object that is initialized with a currency identifier. + The currency identifier to use when formatting and parsing currency values. + + + Creates a CurrencyFormatter object initialized with a currency identifier, language list, and geographic region. + The currency identifier to use when formatting and parsing currency values. + The list of language identifiers, in priority order, representing the choice of languages. See Remarks. + The identifier for the geographic region. + + + Prepares the CurrencyFormatter object to format currency values with a specified rounding algorithm. + The desired rounding algorithm for the currency. This must be one of the members of RoundingAlgorithm, excluding None. + + + Returns a string representation of a Double currency value. + A string that represents the value. + The Double currency value to be formatted. + + + Returns a string representation of an Int64 currency value. + A string that represents the value. + The Int64 currency value to be formatted. + + + Returns a string representation of a UInt64 currency value. + A string that represents the value. + The UInt64 currency value to be formatted. + + + Returns a string representation of a Double currency value. + A string that represents the value. + The Double currency value to be formatted. + + + Returns a string representation of an Int64 currency value. + A string that represents the value. + The Int64 currency value to be formatted. + + + Returns a string representation of a UInt64 currency value. + The UInt64 currency value to be formatted. + The UInt64 currency value to be formatted. + + + Attempts to parse a string representation of a Double currency value. + If successful, a Double that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an integer currency value. + If successful, an Int64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an unsigned integer currency value. + If successful, a UInt64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Gets the identifier for the currency to be used for formatting and parsing currency values. + Currency may be read-only for releases after Windows 8.1. Instead, use a new CurrencyFormatter. + The currency identifier to use when formatting and parsing currency values. + + + Gets or sets the minimum number of digits to display for the fraction part of the currency value. + The minimum number of digits to display. + + + Gets the region that is used when formatting and parsing currency values. + The region that is used. + + + Gets or sets the minimum number of digits to display for the integer part of the currency value. + The minimum number of digits to display. + + + Gets or sets whether the decimal point of the currency value should always be displayed. + True if the decimal point of the value should always be displayed, and false otherwise. + + + Gets or sets whether the integer part of the currency value should be grouped. + True if the integer part of the value should be grouped, and false otherwise. + + + Gets or sets whether -0 is formatted as -0 or 0. + True if -0 is formatted as -0, and false if -0 is formatted as 0. + + + Gets the priority list of language identifiers that is used when formatting and parsing currency values. + The priority list of language identifiers.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the CurrencyFormatter(String, IIterable(String), String) constructor. + + + Gets or sets whether the currency is formatted with the currency symbol or currency code. + The CurrencyFormatterMode value which specifies how the currency is formatted. + + + Gets or sets the current rounding strategy to be used when formatting currency amounts. + A number rounder object: IncrementNumberRounder or SignificantDigitsNumberRounder. + + + Gets or sets the numbering system that is used to format and parse currency values. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the geographic region that was most recently used to format or parse currency values. + The geographic region that was most recently used to format or parse currency values. + + + Gets the language that was most recently used to format or parse currency values. + The language from the priority list of language identifiers that was most recently used to format or parse currency values.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the CurrencyFormatter(String, IIterable(String), String) constructor. + + + Gets or sets the current padding to significant digits when a currency amount is formatted. + The number of significant digits. + + + Specifies the use of symbols or codes when currency is formatted. + + + Default behavior. Currencies are formatted with the appropriate currency symbol (for example, $15). + + + Currencies are formatted with the Currency code provided to the CurrencyFormatter object (for example, 15 USD). + + + Formats and parses decimal numbers. + + + Creates a DecimalFormatter object and initializes it to default values. + + + Creates a DecimalFormatter object initialized by a language list and a geographic region. + The list of language identifiers, in priority order, representing the choice of languages. See Remarks. + The identifier for the geographic region. + + + Returns a string representation of a Double number. + A string that represents the number. + The Double value to be formatted. + + + Returns a string representation of an Int64 number. + A string that represents the number. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 number. + A string that represents the number. + The UInt64 value to be formatted. + + + Returns a string representation of a Double number. + A string that represents the number. + The Double value to be formatted. + + + Returns a string representation of an Int64 number. + A string that represents the number. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 number. + A string that represents the number. + The UInt64 value to be formatted. + + + Attempts to parse a string representation of a Double number. + If successful, a Double that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an integer. + If successful, an Int64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an unsigned integer. + If successful, a UInt64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Gets or sets the minimum number of digits to display for the fraction part of the number. + The minimum number of digits to display. + + + Gets the region that is used when formatting and parsing decimal numbers. + The region that is used. + + + Gets or sets the minimum number of digits to display for the integer part of the number. + The minimum number of digits to display. + + + Gets or sets whether the decimal point of the number should always be displayed. + True if the decimal point of the number should always be displayed, and false otherwise. + + + Gets or sets whether the integer part of the number should be grouped. + True if the integer part of the number should be grouped, and false otherwise. + + + Gets or sets whether -0 is formatted as -0 or 0. + True if -0 is formatted as -0, and false if -0 is formatted as 0. + + + Gets the priority list of language identifiers that is used when formatting and parsing decimal numbers. + The priority list of language identifiers.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the DecimalFormatter(IIterable(String), String) constructor. + + + Gets or sets the current rounding strategy to be used when formatting numbers. + A number rounder object: IncrementNumberRounder or SignificantDigitsNumberRounder. + + + Gets or sets the numbering system that is used to format and parse decimal numbers. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the geographic region that was most recently used to format or parse decimal values. + The geographic region that was most recently used to format or parse decimal values. + + + Gets the language that was most recently used to format or parse decimal values. + The language from the priority list of language identifiers that was most recently used to format or parse decimal values.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the DecimalFormatter(IIterable(String), String) constructor. + + + Gets or sets the current padding to significant digits when a decimal number is formatted. + The number of significant digits. + + + Rounds numbers to a specified increment. + + + Creates an IncrementNumberRounder object. + + + Rounds a Double number to the specified increment. + The rounded number. This result is a double precision floating point number, which is not necessarily an integer. + The Double value to be rounded. + + + Rounds an Int32 number to the specified increment. + The rounded 32 bit integer. + The Int32 value to be rounded. + + + Rounds an Int64 number to the specified increment. + The rounded 64 bit integer. + The Int64 value to be rounded. + + + Rounds a Single number to the specified increment. + The rounded number. This result is a single precision floating point number, which is not necessarily an integer. + The Single value to be rounded. + + + Rounds a UInt32 number to the specified increment. + The rounded unsigned 32 bit integer. + The UInt32 value to be rounded. + + + Rounds a UInt64 number to the specified increment. + The rounded unsigned 64 bit integer. + The UInt64 value to be rounded. + + + Gets or sets the increment this IncrementNumberRounder object uses for rounding. + The increment used for rounding. + + + Gets or sets the rounding strategy value for this IncrementNumberRounder object. + A value of the RoundingAlgorithm enumeration. + + + Translates digits of the Latin numerical system into digits of another numerical system. + + + Creates a NumeralSystemTranslator object initialized by the list of current runtime language values preferred by the user. + + + Creates a NumeralSystemTranslator object initialized by a language list. + A list of BCP-47 language tags, in priority order, representing the choice of languages. They must all be well-formed according to Windows.Globalization.Language.isWellFormed. + + + Converts a string of characters containing Latin digits to a string containing the corresponding digits of NumeralSystem. + A string containing the converted digits. This string may be a different length than value. + A string of characters containing Latin digits to be converted. + + + Gets the BCP-47 language tag(s) used to initialize this NumeralSystemTranslator object. + The BCP-47 language tag(s) used to initialize this NumeralSystemTranslator object. There is always at least one. + + + Gets or sets the numeral system that Latin digits will be converted to on calls to TranslateNumerals. + A string that indicates the target numeral system of the translator, such as Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the language used to determine the numeral system when this object was initialized. + The particular BCP-47 language tag used during the construction of this object to determine the initial value of NumeralSystem. + + + Formats and parses percentages. + + + Creates a PercentFormatter object and initializes it to default values. + + + Creates a PercentFormatter object initialized by a language list and a geographic region. + The list of language identifiers, in priority order, representing the choice of languages. See Remarks. + The identifier for the geographic region. + + + Returns a string representation of a Double percentage. + A string that represents the percentage. + The Double value to be formatted. + + + Returns a string representation of an Int64 percentage. + A string that represents the percentage. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 percentage. + A string that represents the percentage. + The UInt64 value to be formatted. + + + Returns a string representation of a Double percentage. + A string that represents the percentage. + The Double value to be formatted. + + + Returns a string representation of an Int64 percentage. + A string that represents the percentage. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 percentage. + A string that represents the percentage. + The UInt64 value to be formatted. + + + Attempts to parse a string representation of a Double percentage. + If successful, a Double that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an integer percentage. + If successful, an Int64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an unsigned integer percentage. + If successful, a UInt64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Gets or sets the minimum number of digits to display for the fraction part of the percentage. + The minimum number of digits to display. + + + Gets the region that is used when formatting and parsing percentages. + The region that is used. + + + Gets or sets the minimum number of digits to display for the integer part of the percentage. + The minimum number of digits to display. + + + Gets or sets whether the decimal point of the percentage should always be displayed. + True if the decimal point of the percentage should always be displayed, and false otherwise. + + + Gets or sets whether the integer part of the percentage should be grouped. + True if the integer part of the percentage should be grouped, and false otherwise. + + + Gets or sets whether -0 is formatted as -0 or 0. + True if -0 is formatted as -0, and false if -0 is formatted as 0. + + + Gets the priority list of language identifiers that is used when formatting and parsing percentages. + The priority list of language identifiers.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the PercentFormatter(IIterable(String), String) constructor. + + + Gets or sets the current rounding strategy to be used when formatting percents. + A number rounder object: IncrementNumberRounder or SignificantDigitsNumberRounder. + + + Gets or sets the numbering system that is used to format and parse percentages. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the geographic region that was most recently used to format or parse percent values. + The geographic region that was most recently used to format or parse percent values. + + + Gets the language that was most recently used to format or parse percent values. + The language from the priority list of language identifiers that was most recently used to format or parse percent values.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the PercentFormatter(IIterable(String), String) constructor. + + + Gets or sets the current padding to significant digits when a percent is formatted. + The number of significant digits. + + + Formats and parses permillages. + + + Creates a PermilleFormatter object and initializes it to default values. + + + Creates a PermilleFormatter object initialized by a language list and a geographic region. + The list of language identifiers, in priority order, representing the choice of languages. See Remarks. + The identifier for the geographic region. + + + Returns a string representation of a Double permillage. + A string that represents the permillage. + The Double value to be formatted. + + + Returns a string representation of an Int64 permillage. + A string that represents the permillage. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 permillage. + A string that represents the permillage. + The UInt64 value to be formatted. + + + Returns a string representation of a Double permillage. + A string that represents the permillage. + The Double value to be formatted. + + + Returns a string representation of an Int64 permillage. + A string that represents the permillage. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 permillage. + A string that represents the permillage. + The UInt64 value to be formatted. + + + Attempts to parse a string representation of a Double permillage. + If successful, a Double that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an integer permillage. + If successful, an Int64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an unsigned integer permillage. + If successful, a UInt64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Gets or sets the minimum number of digits to display for the fraction part of the permillage. + The minimum number of digits to display. + + + Gets the region that is used when formatting and parsing permille values. + The region that is used. + + + Gets or sets the minimum number of digits to display for the integer part of the permillage. + The minimum number of digits to display. + + + Gets or sets whether the decimal point of the permillage should always be displayed. + True if the decimal point of the permillage should always be displayed, and false otherwise. + + + Gets or sets whether the integer part of the permillage should be grouped. + True if the integer part of the permillage should be grouped, and false otherwise. + + + Gets or sets whether -0 is formatted as -0 or 0. + True if -0 is formatted as -0, and false if -0 is formatted as 0. + + + Gets the priority list of language identifiers that is used when formatting and parsing permille values. + The priority list of language identifiers.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the PermilleFormatter(IIterable(String), String) constructor. + + + Gets or sets the current rounding strategy to be used when formatting permilles. + A number rounder object: IncrementNumberRounder or SignificantDigitsNumberRounder. + + + Gets or sets the numbering system that is used to format and parse permille values. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the geographic region that was most recently used to format or parse permille values. + The geographic region that was most recently used to format or parse permille values. + + + Gets the language that was most recently used to format or parse permille values. + The language from the priority list of language identifiers that was most recently used to format or parse permille values.Starting in Windows 8.1 Preview: Language tags can support Unicode extensions. See the Remarks for the PermilleFormatter(IIterable(String), String) constructor. + + + Gets or sets the current padding to significant digits when a permille is formatted. + The number of significant digits. + + + Specifies the algorithm used to round numbers. + + + No rounding is performed. + + + Round towards negative infinity. (Return the largest integer, increment, or significant digit which does not exceed the input.) + + + Round towards infinity. (Return the smallest integer, increment, or significant digit which is not less than the input.) + + + Round towards zero. This is the equivalent of RoundDown if the input is positive, or RoundUp if the input is negative. + + + Round away from zero. This is the equivalent of RoundUp if the input is positive, or RoundDown if the input is negative. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, this is the equivalent of RoundDown. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, this is the equivalent of RoundUp. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, this is the equivalent of RoundTowardsZero. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, this is the equivalent of RoundAwayFromZero. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, round to the nearest even output. + + + Round to the integer, increment, or significant digit that is closest to the input. If the input is exactly halfway between the possible outputs, round to the nearest odd output. + + + Rounds numbers to a specified number of significant digits. + + + Creates a SignificantDigitsNumberRounder object. + + + Rounds a Double number to the specified number of significant digits. + The rounded number. This result is a double precision floating point number, which is not necessarily an integer. + The Double value to be rounded. + + + Rounds an Int32 number to the specified number of significant digits. + The rounded 32 bit integer. + The Int32 value to be rounded. + + + Rounds an Int64 number to the specified number of significant digits. + The rounded 64 bit integer. + The Int64 value to be rounded. + + + Rounds a Single number to the specified number of significant digits. + The rounded number. This result is a single precision floating point number, which is not necessarily an integer. + The Single value to be rounded. + + + Rounds a UInt32 number to the specified number of significant digits. + The rounded unsigned 32 bit integer. + The UInt32 value to be rounded. + + + Rounds a UInt64 number to the specified number of significant digits. + The rounded unsigned 64 bit integer. + The UInt64 value to be rounded. + + + Gets or sets the rounding strategy value for this SignificantDigitsNumberRounder object. + A value of the RoundingAlgorithm enumeration. + + + Gets or sets the number of significant digits this SignificantDigitsNumberRounder object uses for rounding. + The number of significant digits used for rounding. + + + An interface that returns a string representation of a provided value, using an overloaded Format method to format several data types. + + + Returns a string representation of a Double value. + A string that represents the value. + The Double value to be formatted. + + + Returns a string representation of an Int64 value. + A string that represents the value. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 value. + A string that represents the value. + The UInt64 value to be formatted. + + + An interface that returns a string representation of a provided value, using distinct format methods to format several data types. + + + Returns a string representation of a Double value. + A string that represents the value. + The Double value to be formatted. + + + Returns a string representation of an Int64 value. + A string that represents the value. + The Int64 value to be formatted. + + + Returns a string representation of a UInt64 value. + A string that represents the value. + The UInt64 value to be formatted. + + + An interface that gets and sets options for formatting numbers. + + + Gets or sets the minimum number of digits to display for the fraction part of the number. + The minimum number of digits to display. + + + Gets the region that is used when formatting and parsing numbers. + The region that is used. + + + Gets or sets the minimum number of digits to display for the integer part of the number. + The minimum number of digits to display. + + + Gets or sets whether the decimal point of the number should always be displayed. + True if the decimal point of the number should always be displayed, and false otherwise. + + + Gets or sets whether the integer part of the number should be grouped. + True if the integer part of the number should be grouped, and false otherwise. + + + Gets the priority list of language identifiers that is used when formatting and parsing numbers. + The priority list of language identifiers. + + + Gets or sets the numbering system that is used to format and parse numbers. + A string that indicates the numeral system of the formatter, such as Latn for the Latin numeral system (0123456789) or Arab for the Arabic-Indic numeral system (٠١٢٣٤٥٦٧٨٩). See the supported NumeralSystem values. + + + Gets the geographic region that was most recently used to format or parse numbers. + The geographic region that was most recently used to format or parse numbers. + + + Gets the language that was most recently used to format or parse numbers. + The language from the priority list of language identifiers that was most recently used to format or parse numbers. + + + An interface that parses a string representation of a numeric value. + + + Attempts to parse a string representation of a Double numeric value. + If successful, a Double that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an integer numeric value. + If successful, an Int64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + Attempts to parse a string representation of an unsigned integer numeric value. + If successful, a UInt64 that corresponds to the string representation, and otherwise null. + The text to be parsed. + + + An interface that returns rounded results for provided numbers of several data types. + + + Rounds a Double number. + The rounded number. This result is a double precision floating point number, which is not necessarily an integer. + The Double value to be rounded. + + + Rounds an Int32 number. + The rounded 32 bit integer. + The Int32 value to be rounded. + + + Rounds an Int64 number. + The rounded 64 bit integer. + The Int64 value to be rounded. + + + Rounds a Single number. + The rounded number. This result is a single precision floating point number, which is not necessarily an integer. + The Single value to be rounded. + + + Rounds a UInt32 number. + The rounded unsigned 32 bit integer. + The UInt32 value to be rounded. + + + Rounds a UInt64 number. + The rounded unsigned 64 bit integer. + The UInt64 value to be rounded. + + + An interface that gets and sets the option for rounding numbers. + + + Gets or sets the interface used to return rounded numbers. + An interface for returning rounded numbers. + + + An interface that gets and sets the option for specifying whether -0 is formatted as -0 or 0. + + + Gets or sets whether -0 is formatted as -0 or 0. + True if -0 is formatted as -0, and false if -0 is formatted as 0. + + + An interface that gets and sets the option for specifying significant digits. + + + Gets or sets the number of significant digits used in formatting or rounding numbers. + The number of significant digits. + + + Provides classes, a delegate, and enumerations to determine aspects of a physical display. + + + Monitors and controls physical display information. The class provides events to allow clients to monitor for changes in the display. + + + Gets and sets the preferred orientation of the app. + The orientation of a rectangular monitor. + + + Occurs when the physical display's color profile changes. + + + Gets the current orientation of a rectangular monitor. + The current orientation of a rectangular monitor. + + + Occurs when the display requires redrawing. + + + Occurs when the LogicalDpi property changes because the pixels per inch (PPI) of the display changes. + + + Asynchronously gets the default International Color Consortium (ICC) color profile that is associated with the physical display. + Object that manages the asynchronous retrieval of the color profile. + + + Gets the current physical display information. + A DisplayInformation object that contains the current physical display information. + + + Gets the pixels per logical inch of the current environment. + The pixels per logical inch of the current environment. + + + Gets the native orientation of the display monitor, which is typically the orientation where the buttons on the device match the orientation of the monitor. + The native orientation of the display monitor. + + + Occurs when either the CurrentOrientation or NativeOrientation property changes because of a mode change or a monitor change. + + + Gets the raw dots per inch (DPI) along the x axis of the display monitor. + The raw dots per inch (DPI) along the x axis of the display monitor. + + + Gets the raw dots per inch (DPI) along the y axis of the display monitor. + The raw dots per inch (DPI) along the y axis of the display monitor. + + + Gets the scale factor of the immersive environment. + The scale factor of the immersive environment. + + + Gets a value that indicates whether the device supports stereoscopic 3D. + TRUE if the device is capable of stereoscopic 3D and stereoscopic 3D is currently enabled; FALSE otherwise. + + + Occurs when the StereoEnabled property changes because support for stereoscopic 3D changes. + + + Describes the orientation of a rectangular monitor. + + + No display orientation is specified. + + + Specifies that the monitor is oriented in landscape mode where the width of the display viewing area is greater than the height. + + + Specifies that the monitor rotated 90 degrees in the clockwise direction to orient the display in portrait mode where the height of the display viewing area is greater than the width. + + + Specifies that the monitor rotated another 90 degrees in the clockwise direction (to equal 180 degrees) to orient the display in landscape mode where the width of the display viewing area is greater than the height. This landscape mode is flipped 180 degrees from the Landscape mode. + + + Specifies that the monitor rotated another 90 degrees in the clockwise direction (to equal 270 degrees) to orient the display in portrait mode where the height of the display viewing area is greater than the width. This portrait mode is flipped 180 degrees from the Portrait mode. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Provides various properties that are related to the physical display. + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets and sets the preferred orientation of the app. + The orientation of a rectangular monitor. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Occurs when the physical display's color profile changes. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets the current orientation of a rectangular monitor. + The current orientation of a rectangular monitor. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Occurs when the display requires redrawing. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Asynchronously gets the default International Color Consortium (ICC) color profile that is associated with the physical display. + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation. + Object that manages the asynchronous retrieval of the color profile. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets the pixels per logical inch of the current environment. + The pixels per logical inch of the current environment. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Occurs when the LogicalDpi property changes because the pixels per inch (PPI) of the display changes. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets the native orientation of the display monitor, which is typically the orientation where the buttons on the device match the orientation of the monitor. + The native orientation of the display monitor. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Occurs when either the CurrentOrientation or NativeOrientation property changes because of a mode change or a monitor change. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets the scale factor of the immersive environment. + The scale factor of the immersive environment. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Gets a value that indicates whether the device supports stereoscopic 3D. + TRUE if the device is capable of stereoscopic 3D and stereoscopic 3D is currently enabled; FALSE otherwise. + + + DisplayProperties may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Occurs when the StereoEnabled property changes because support for stereoscopic 3D changes. + + + The DisplayProperties type and related event handlers may be altered or unavailable for releases after Windows 8.1. Instead, use DisplayInformation.Represents a method that handles display property events. + The DisplayProperties type and related event handlers may be altered and or unavailable for releases after Windows 8.1. Instead, use DisplayInformation. + The object that raised the event. + + + Describes the scale factor of the immersive environment. + + + Specifies the scale of a display is invalid. + + + Specifies the scale of a display as 100 percent. This percentage indicates a minimum screen resolution for Windows all up is 1024x768. + + + This value isn't used. + + + Specifies the scale of a display as 140 percent. This percentage indicates a minimum screen resolution to scale at 140 is 1440x1080. + + + Applies to Windows Phone 8. + + + Applies to Windows Phone 8. + + + Specifies the scale of a display as 180 percent. This percentage indicates a minimum screen resolution to scale at 180 is 1920x1440. + + + This value isn't used. + + + Enables the decoding, editing, and encoding of image files. + + + Provides access to information about a decoder or encoder. + + + The unique identifier of the decoder or encoder. + The codec unique identifier. + + + A collection of all the file extensions supported by the decoder or encoder. + The list of supported file extensions. + + + The friendly name of the decoder or encoder. + The friendly name of the codec. + + + A collection of all the MIME/content types supported by the decoder or encoder. + The list of supported MIME/content types. + + + Provides read access to bitmap container data as well as data from the first frame. + + + The default alpha mode of the first frame. + The default alpha mode of the first frame. + + + Provides access to the container bitmap properties. + The container bitmap properties. + + + The pixel format that best fits the first frame. + The pixel format that best fits the first frame. + + + A read-only view of the metadata within the first frame. + A read-only view of the metadata within the first frame. + + + The unique identifier of the BMP decoder. + The unique identifier of the BMP decoder. + + + Asynchronously creates a new BitmapDecoder using a specific bitmap codec and initializes it using a stream. + An object that manages the asynchronous creation of a new BitmapDecoder. + The unique identifier of the specified bitmap codec. + The stream containing the image file to be decoded. + + + Asynchronously creates a new BitmapDecoder and initializes it using a stream. + An object that manages the asynchronous creation of a new BitmapDecoder. + The stream containing the image file to be decoded. + + + Information about the bitmap decoder. + The bitmap decoder information. + + + The horizontal resolution of the first frame in dots per inch. + The horizontal resolution of the first frame in dots per inch. + + + The vertical resolution of the first frame in dots per inch. + The vertical resolution of the first frame in dots per inch. + + + The number of frames within the image file. + The number of frames. + + + The bitmap decoders installed on the system and information about them. + A list of BitmapCodecInformation objects containing information about each decoder. + + + Asynchronously retrieves a frame from the image file. + Object that manages the asynchronous retrieval of the frame. + The zero-based index of the frame to be retrieved. + + + Asynchronously requests the pixel data for the frame. + Object that manages the asynchronous retrieval of the pixel data. + + + Asynchronously requests the pixel data for the frame using the specified parameters. + Object that manages the asynchronous retrieval of the pixel data. + The specified pixel format. + The specified alpha mode. + The set of transformations to be applied to the frame. + Indicates whether the EXIF orientation flag should be ignored or respected. + Indicates whether the pixel data should be color managed to the sRGB color space. + + + Asynchronously returns a stream containing the preview image. + Object that manages the asynchronous retrieval of the bitmap preview data.The preview data is returned in the form of an image stream. You can display it using an image control, or read and edit it using BitmapDecoder and BitmapEncoder. + + + Asynchronously returns a stream containing the thumbnail image. + Object that manages the asynchronous retrieval of the thumbnail stream.The thumbnail data is returned in the form of an image stream. You can display it using an image control, or read and edit it using BitmapDecoder and BitmapEncoder + + + The unique identifier of the GIF decoder. + The unique identifier of the GIF decoder. + + + The unique identifier of the ICO decoder. + The unique identifier of the ICO decoder. + + + The unique identifier of the JPEG decoder. + The unique identifier of the JPEG decoder. + + + The unique identifier of the JPEG-XR decoder. + The unique identifier of the JPEG-XR decoder. + + + The height of the first frame in pixels, after any EXIF orientation has been applied to the bitmap. + The height of the first frame in pixels, after any EXIF orientation has been applied. + + + The width of the first frame in pixels, after any EXIF orientation has been applied to the bitmap. + The width of the first frame in pixels, after any EXIF orientation has been applied. + + + The height of the first frame in pixels. + The height of the first frame in pixels. + + + The width of the first frame in pixels. + The width of the first frame in pixels. + + + The unique identifier of the PNG decoder. + The unique identifier of the PNG decoder. + + + The unique identifier of the TIFF decoder. + The unique identifier of the TIFF decoder. + + + Contains methods to create, edit and save images. + + + The metadata for the container. + A BitmapProperties object that provides both read and write access to the metadata for the container. + + + The metadata for the selected frame. + A BitmapProperties object that provides both read and write access to the metadata for the selected frame. + + + A BitmapTransform object that is used to specify how the frame bitmap is to be transformed. + A BitmapTransform object that is used to specify how the frame bitmap is to be transformed. + + + The unique identifier of the built-in BMP encoder. + The unique identifier of the built-in BMP encoder. + + + Asynchronously creates a new BitmapEncoder. + An object that manages the asynchronous creation of a new BitmapEncoder. + The unique identifier of the specified encoder. + The output stream. + + + Asynchronously creates a new BitmapEncoder for the specified codec with the specified encoding options and initializes it on a stream. + An object that manages the asynchronous creation of a new BitmapEncoder. + The unique identifier of the specified encoder. + A stream representing where the image file is to be written. + A collection of key-value pairs containing one or more codec-specific encoding options and the desired values. + + + Asynchronously creates a new BitmapEncoder for in-place property and metadata editing. + An object that manages the asynchronous initialization of a new BitmapEncoder using data from an existing BitmapDecoder. + A BitmapDecoder containing the image data to be edited. This parameter must be created on a stream with an access mode of ReadWrite.The encoder writes to the stream that the original BitmapDecoder was created on. You can't specify an output stream. + + + Asynchronously creates a new BitmapEncoder and initializes it using data from an existing BitmapDecoder. + An object that manages the asynchronous creation of a new BitmapEncoder using data from an existing BitmapDecoder. + The output stream. + A BitmapDecoder containing the image data to be copied. + + + Information about the bitmap encoder. + An object containing information about the bitmap encoder. + + + Asynchronously commits and flushes all of the image data. + An object that manages the asynchronous flush operation. + + + The height, in pixels, of any generated thumbnail. + The height of the thumbnail, in pixels. The default value is 120 pixels. + + + The width, in pixels, of any generated thumbnail. + The width of the thumbnail, in pixels. The default value is 160 pixels. + + + A list of the bitmap encoders installed on the system and information about them. + A list of BitmapCodecInformation objects containing information about each encoder. + + + The unique identifier of the built-in GIF encoder. + The unique identifier of the built-in GIF encoder. + + + Asynchronously commits the current frame data and appends a new empty frame to be edited. + An object that manages the asynchronous operation of committing the current frame data and appending a new empty frame to be edited. + + + Asynchronously commits the current frame data and appends a new empty frame, with the specified encoding options, to be edited. + An object that manages the asynchronous operation of committing the current frame data and appending a new empty frame to be edited. + The specified encoding options. A collection of key-value pairs containing one or more codec-specific encoding options and the desired values. + + + Indicates whether or not a new thumbnail is automatically generated. + A value that indicates whether or not the bitmap encoder will automatically generate a new thumbnail. The default value is False. + + + The unique identifier of the built-in JPEG encoder. + The unique identifier of the built-in JPEG encoder. + + + The unique identifier of the built-in JPEG-XR encoder. + The unique identifier of the built-in JPEG-XR encoder. + + + The unique identifier of the built-in PNG encoder. + The unique identifier of the built-in PNG encoder. + + + Sets pixel data on the frame. + The pixel format of the pixel data. + The alpha mode of the pixel data. + The width, in pixels, of the pixel data. + The height, in pixels, of the pixel data. + The horizontal resolution, in dots per inch, of the pixel data. + The vertical resolution, in dots per inch, of the pixel data. + The pixel data. + + + The unique identifier of the built-in TIFF encoder. + The unique identifier of the built-in TIFF encoder. + + + Provides read access to data within a single frame. + + + The default alpha mode of the frame. + The default alpha mode of the frame. + + + The pixel format that best fits the frame. + The pixel format that best fits the first frame. + + + A read-only view of the metadata within the frame. + A read-only view of the metadata within the frame. + + + The horizontal resolution of the frame in dots per inch. + The horizontal resolution of the frame in dots per inch. + + + The vertical resolution of the frame in dots per inch. + The vertical resolution of the frame in dots per inch. + + + Asynchronously requests the pixel data for the frame. + Object that manages the asynchronous retrieval of the pixel data. + + + Asynchronously requests the pixel data for the frame using the specified parameters. + Object that manages the asynchronous retrieval of the pixel data. + The specified pixel format. + The specified alpha mode. + The set of transformations to be applied to the frame. + Indicates whether the EXIF orientation flag should be ignored or respected. + Indicates whether the pixel data should be color managed to the sRGB color space. + + + Asynchronously returns a stream containing the thumbnail image. + Object that manages the asynchronous retrieval of the thumbnail data. + + + The height of the frame in pixels, after any EXIF orientation has been applied to the bitmap. + The height of the frame in pixels, after any EXIF orientation has been applied. + + + The width of the frame in pixels, after any EXIF orientation has been applied to the bitmap. + The width of the frame in pixels, after any EXIF orientation has been applied. + + + The height of the frame in pixels. + The height of the frame in pixels. + + + The width of the frame in pixels. + The width of the frame in pixels. + + + Provides read and write access to image properties and metadata. + + + Asynchronously retrieves one or more bitmap properties. + Object that manages the asynchronous retrieval of the bitmap properties. + A collection of strings containing the specified property keys. + + + Asynchronously sets one or more bitmap properties. + Object that manages the setting of the bitmap properties asynchronously. + A collection of key-value pairs representing the bitmap properties to be set. Each key is a string containing the Windows property or metadata query, and the corresponding value is a BitmapTypedValue with the data and the correct PropertyType. + + + Represents a property set of BitmapTypedValue objects. + + + Adds an item to the BitmapPropertySet. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the BitmapPropertySet. + The key-value pair to add. + + + Removes all items from the property set. + + + Returns a value that indicates whether a specified key-value pair exists in the BitmapPropertySet. + true if an item with that key exists in the BitmapPropertySet; otherwise, false. + The key-value pair to check for in the BitmapPropertySet. + + + Returns a value that indicates whether a specified key exists in the BitmapPropertySet. + true if an item with that key exists in the BitmapPropertySet; otherwise, false. + The key to check for in the BitmapPropertySet. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the property set. + The iterator. The current position of the iterator is index 0, or the end of the property set if the property set is empty. + + + Gets an immutable view of the property set. + The immutable view. + + + Indicates whether the property set has an item with the specified key. + True if the property set has an item with the specified key; otherwise, false. + The key. + + + Adds an item to the property set. + True if the method replaces a value that already exists for the key; false if this is a new key. + The key to insert. + The value to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the BitmapPropertySet. + The ICollection of all keys in this BitmapPropertySet. + + + Retrieves the value for the specified key. + The value, if an item with the specified key exists; otherwise, null. + The key. + + + Removes an item from the property set. + The key. + + + Removes a specific item from the BitmapPropertySet. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the BitmapPropertySet. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of items contained in the property set. + The number of items in the property set. + + + Returns a value that indicates whether a specified key exists in the BitmapPropertySet. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the BitmapPropertySet; otherwise, false. + The key to check for in the BitmapPropertySet. + The item, if it exists. Contains null if the item does not exist in the BitmapPropertySet. + + + Gets an ICollection object containing the values of the BitmapPropertySet . + The ICollection of all values in this BitmapPropertySet. + + + Creates and initializes a new instance of the bitmap property set. + + + Provides read access to image properties and metadata. + + + Asynchronously retrieves one or more bitmap properties. + Object that manages the asynchronous retrieval of the bitmap properties. + A collection of strings representing the property keys or queries that are being requested. Valid strings include Windows properties and Windows Imaging Component metadata queries. + + + Contains transformations that can be applied to pixel data. + + + Creates a new BitmapTransform object. + + + Specifies the bounding rectangle that is used to crop the bitmap. + A structure that specifies the bounding rectangle. + + + Specifies the flip operation that is used to transform the bitmap. + The type of flip operation. One of the values of the BitmapFlip enumeration. + + + Specifies the interpolation mode that is used to scale the bitmap. + The interpolation mode. One of the values of the BitmapInterpolationMode enumeration. + + + Specifies the rotation operation that is used to transform the bitmap. + The type of rotation. One of the values of the BitmapRotation enumeration. + + + Specifies the height, in pixels, of the transformed bitmap. + The height of the bitmap, in pixels. + + + Specifies the width, in pixels, of the transformed bitmap. + The width of the bitmap, in pixels. + + + A value along with an enumeration specifying its data type. + + + Creates a new BitmapTypedValue object. + The value to store. + The type of the value parameter. + + + Gets the PropertyType of the stored value. + The PropertyType of the stored value. + + + Gets the stored value. + The stored value Object. + + + An implementation of IRandomAccessStreamWithContent type used in the Imaging namespace. + + + Indicates if you can read the stream. + Indicates whether or not you can read the stream. + + + Indicates if you can write to the stream. + Indicates whether or not you can write to the stream. + + + Returns the file stream for the ImageStream. + The file stream for the image. + + + Closes the ImageStream. + + + Returns the data format of the stream. + The data format of the stream. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Asynchronously commits the current frame data and flushes all of the data on the image stream. + An object that manages the asynchronous flush operation. + + + Returns an input stream at a specified location in a stream. + The input stream. + The location in the stream at which to begin. + + + Returns an output stream at a specified location in a stream. + The output stream. + The location in the output stream at which to begin. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Reads data asynchronously from a sequential stream. + The byte reader operation. + The buffer into which the asynchronous read operation stores the data. + The size of the buffer. + The options for the stream to be read. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Gets or sets the size of the random access stream. + The size of the stream. + + + Provides access to the pixel data from a bitmap frame. + + + Returns the internally-stored pixel data. + The pixel data. + + + Specifies a bounding rectangle. + + + The X coordinate, in pixels, of the top left corner of the bounding box. + + + The Y coordinate, in pixels, of the top left corner of the bounding box. + + + The Width, in pixels, of the bounding box. + + + The Height, in pixels, of the bounding box + + + Specifies the alpha mode of pixel data. + + + The alpha value has been premultiplied. Each color is first scaled by the alpha value. + + + The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color. + + + The alpha value is ignored. + + + Specifies the flip operation to be performed on pixel data. + + + No flip operation will be performed. + + + Flip the bitmap around the y axis. + + + Flip the bitmap around the x axis. + + + Specifies the interpolation mode used for scaling pixel data. + + + A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation. The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered. + + + A bilinear interpolation algorithm. The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid. + + + A bicubic interpolation algorithm. Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid. + + + A Fant resampling algorithm. Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel in a box shaped kernel. + + + Specifies the pixel format of pixel data. Each enumeration value defines a channel ordering, bit depth, and data type. + + + The pixel format is unknown. + + + The pixel format is R16B16G16A16 unsigned integer. + + + The pixel format is R8G8B8A8 unsigned integer. + + + The pixel format is B8G8R8A8 unsigned integer. + + + Specifies the rotation operation to be performed on pixel data. + + + No rotation operation is performed. + + + Perform a clockwise rotation of 90 degrees. + + + Perform a clockwise rotation of 180 degrees. + + + Perform a clockwise rotation of 270 degrees. + + + Specifies the color management behavior when obtaining pixel data. + + + No color management is performed + + + Color management is performed from the color space embedded with the source bitmap to the sRGB color space. + + + Specifies the EXIF orientation flag behavior when obtaining pixel data. + + + The EXIF orientation flag is ignored. No rotation or flip operations are performed. + + + If the image frame contains a valid EXIF orientation flag, the specified rotation and/or flip operations are performed on the pixel data. + + + Specifies which chroma subsampling mode will be used for image compression in JPEG images. + + + The default mode will be used. + + + 4:2:0 (2x2) chroma subsampling will be used. + + + 4:2:2 (2x1) chroma subsampling will be used. + + + 4:4:4 (1x1) chroma subsampling will be used. + + + Specifies the filter used to optimize the image prior to image compression in PNG images. + + + The filter type will be chosen automatically. + + + The image is unmodified. + + + The Sub type filter is applied. + + + The Up filter type is applied. + + + The Average type filter is applied. + + + The Paeth type filter is applied. + + + The Adaptive type filter is applied. + + + Specifies the compression mode used for TIFF images. + + + The compression will be automatically selected. + + + No compression will be applied. + + + CCITT3 compression will be applied. + + + CCITT4compression will be applied. + + + LZW compression will be applied. + + + RLE compression will be applied. + + + ZIP compression will be applied. + + + LZWH Differencing compression will be applied. + + + Exposes methods for operating on a single frame of an image. + + + Returns the default alpha mode of the frame. + The default alpha mode of the frame. + + + Returns the default pixel format of the frame. + The default pixel format of the frame. + + + Returns a read-only view of the metadata within the frame. + A read-only view of the metadata within the frame. + + + Returns the horizontal resolution of the frame in dots per inch. + The horizontal resolution of the frame in dots per inch. + + + Returns the vertical resolution of the frame in dots per inch. + The vertical resolution of the frame in dots per inch. + + + Asynchronously requests the pixel data for the frame. + Object that manages the asynchronous retrieval of the pixel data. + + + Asynchronously requests the pixel data for the frame using the specified parameters. + Object that manages the asynchronous retrieval of the pixel data. + The specified pixel format. + The specified alpha mode. + The set of transformations to be applied to the frame. + Indicates whether the EXIF orientation flag should be ignored or respected. + Indicates whether the pixel data should be color managed to the sRGB color space. + + + Asynchronously retrieves the thumbnail data for the frame. + Object that manages the asynchronous retrieval of the thumbnail data. + + + Returns the height of the frame in pixels, after any EXIF orientation has been applied to the bitmap. + The height of the frame in pixels, after any EXIF orientation has been applied. + + + Returns the width of the frame in pixels, after any EXIF orientation has been applied to the bitmap. + The width of the frame in pixels, after any EXIF orientation has been applied. + + + Returns the height of the frame in pixels. + The height of the frame in pixels. + + + Returns the width of the frame in pixels. + The width of the frame in pixels. + + + Exposes methods for reading image metadata and properties. + + + Asynchronously retrieves one or more bitmap properties. + Object that manages the asynchronous retrieval of the bitmap properties. + A collection of strings containing the specified property keys. + + + Contains the classes, interfaces, structures and other components that are used by the print driver and by the Windows print system to create and manipulate documents. + + + Informs Windows that an application wishes to participate in printing. The PrintManager class is also used for programmatically initiating printing. + + + Retrieves the PrintManager object associated with the current window. + The PrintManager object. + + + Programattically initiates the user interface for printing content. + A Boolean value to indicate a TRUE for success or a FALSE for a failure. + + + Raised when a request to print has occurred. This event may be triggered by user action or via programmatic invocation of printing via the ShowPrintUIAsync method. + + + Represents a printing operation including the content to be printed, as well as providing access to information describing how the content is to be printed. + + + Raised when the print task is completed. + + + Gets or sets a value that indicates whether the PrintTask supports 3D manufacturing devices, like a 3D printer. + True, if 3D manufacturing devices are supported. + + + Gets or sets a value indicating whether the PrintTask supports printer targets. + True if the PrintTask supports the printer target. + + + Retrieves the PrintTaskOptions for the print task that defines how the content is to be formatted for printing. + The list of print task options. + + + Raised when the print system initializes print preview mode. + + + Raised to provide progress information about how much of the printed content has been submitted to the print subsystem for printing. + + + Retrieves a set of properties associated with the PrintTask. + The data package property set. + + + Returns a pointer to the app-provided object that represents the content to be printed. This object must support the IPrintDocumentSource interface. + The print task object. + + + Raised when a print task begins submitting content to the print subsystem to be printed. + + + Used to defer the request for a print task source. + + + Indicates when the deferral for a print task source request is over. + + + Arguments associated with the PrintTaskSourceRequestedHandler delegate. Provides a method for handing the content to be printed to the Print Task. + + + Gets the DateTime object that indicates the deadline for a print task source request. + The deadline for a print task source request. + + + Gets a PrintTaskSourceRequestedDeferral object that provides access to a Complete method. This method indicates then the deferral is over. + Provides access to a Complete method. + + + Informs the print task of the content to be printed. + A pointer to the IPrintDocumentSource interface. + + + Occurs when a print task requests the document to print. The supplied print document must implement the IPrintDocumentSource interface. + Pointer to a PrintTaskSourceRequestedArgs object. + + + Reports the completion of the print task. + + + Gets the completion status of the print task. + The completion status of the print task. + + + Represents a collection of methods and properties for managing the options which define how the content is to be printed. + + + Gets or sets the binding option for the print task. + The binding option. + + + Gets or sets the collation option of the print tasks. + The collation option. + + + Gets or sets the color mode option of the print task. + The color mode option. + + + Gets the list of options displayed for the print experience. + The list of displayed options. + + + Gets or sets the duplex option of the print task. + The duplex option. + + + Retrieves the physical dimensions of the printed page. + The page description data. + The page number. + + + Gets or sets the hole punch option of the print task. + The hole punch option. + + + Gets the maximum number of copies supported for the print task. + The maximum number of copies. + + + Gets or sets the media size option of the print task. + The media size option. + + + Gets or sets the media type option for the print task. + The media type option. + + + Gets the minimum number of copies allowed for the print task. + The minimum number of copies. + + + Gets or sets the value for the number of copies for the print task. + The value for the number of copies. + + + Gets or sets the orientation option for the print task. + The orientation for the print task. + + + Gets or sets the print quality option for the print task. + The print quality for the print task. + + + Gets or sets the staple option for the print task. + The staple option for the print task. + + + Contains the event arguments for the PrintTask.Progressing event. This event is raised during the submitting phase of the PrintTask. + + + Gets the page count for a print task. + The page count for a print task. + + + Contains the request from the system to create a print task. + + + Gets a DateTime value that indicates how long an app has to respond to the PrintTaskRequested event. + A value that indicates how long an app has to respond to the PrintTaskRequested event. + + + Creates a new PrintTask which indicates that the app has content to be printed. + Pointer to the print task that was created. + Title for the print task. + Pointer to a PrintTaskSourceRequestedHandler delegate for the print task. + + + Retrieves the deferral object associated with the PrintTaskRequest. + The PrintTaskRequestedDeferral for a print task. + + + Event arguments associated with the PrintTaskRequest. + + + Gets the PrintTaskRequest object for a print task. + The PrintTaskRequest object for a print task. + + + Used to defer the request for a print task. + + + Indicates when the deferral for the print task request is over. + + + Provides access to the canonical names for the options represented by the PrintTaskOptions class. + + + Gets the canonical name for the binding option of the print task. + The canonical name for the binding option of the print task. + + + Gets the canonical name for collation option of the print task. + The canonical name for collation option of the print task. + + + Gets the canonical name for color mode option of the print task. + The canonical name for color mode option of the print task. + + + Gets the canonical name for the copies option of the print task. + The canonical name for the copies option of the print task. + + + Gets the canonical name for the duplex option of the print task. + The canonical name for the duplex option of the print task. + + + Gets the canonical name for the hole punch option of the print task. + The canonical name for the hole punch option of the print task. + + + Gets the canonical name for the input bin option of the print task. + The canonical name for the input bin option of the print task. + + + Gets the canonical name for the media size option of the print task. + The canonical name for the media size option of the print task. + + + Gets the canonical name for the media type option of the print task. + The canonical name for the media type option of the print task. + + + Gets the canonical name for the NUp option of the print task. + The canonical name for the NUp option of the print task. + + + Gets the canonical name for the orientation option of the print task. + The canonical name for the orientation option of the print task. + + + Gets the canonical name for the print quality option of the print task. + The canonical name for the print quality option of the print task. + + + Gets the canonical name for the staple option of the print task. + The canonical name for the staple option of the print task. + + + Represents the data that describes a document page. + + + The page size in device independent pixels (DIPs). + + + The Rect within the page size on which content may actually be printed. Content outside of the ImageableRect, whether less or greater than the page size, will be cropped by the print target. The ImageableRect is specified in device independent pixels (DIPs). + + + The resolution in dots per inch (DPI) for the X dimension of the page. + + + The resolution in dots per inch (DPI) for the Y dimension of the page. + + + Specifies the print binding option. + + + The default binding option. + + + An unsupported binding option. + + + A custom option that is specific to the print device. + + + No binding required. + + + The bale binding option. + + + The option to bind the pages along their bottom edge. + + + The option to bind the pages along their left edge. + + + The option to bind the pages along their right edge. + + + The option to bind the pages along their top edge. + + + The option to bind the pages in booklet form. + + + The option to bind the pages along their bottom edge, with stiches. + + + The option to bind the pages along their left edge, with stiches. + + + The option to bind the pages along their right edge, with stiches. + + + The option to bind the pages along their top edge, with stiches. + + + The option to fold the pages. + + + The option to offset the positioning of the pages in the output tray. + + + The option to trim the printed sheets. + + + Specifies the collation option. + + + The default collation option. + + + An unsupported collation option. + + + A custom collation option that is specific to the print device. + + + An option to specify that collation has been selected for the printed output. + + + An option to specify that collation has not been selected for the printed output. + + + Specifies the color mode option. + + + The default color mode option. + + + An unsupported color mode option. + + + A custom color mode option that is specific to the print device. + + + An option to indicate that the printed output will be in color. + + + An option to indicate that the printed output will be in shades of gray. + + + An option to indicate that the printed output will be in one shade of a single color. + + + Specifies the duplex option. + + + The default duplex option. + + + An unsupported duplex option. + + + A custom duplex option that is specific to the print device. + + + The option to print on only one side of the sheet. + + + The option to print on both sides of the sheet, flipped along the short edge. + + + The option to print on both sides of the sheet, flipped along the long edge. + + + Specifies the hole punch option. + + + The default hole punch option. + + + An unsupported hole punch option. + + + A custom hole punch option that is specific to the print device. + + + The option to indicate that hole punching is not required. + + + The option to indicate that hole punching required along the left edges of the sheets. + + + The option to indicate that hole punching required along the right edges of the sheets. + + + The option to indicate that hole punching required along the top edges of the sheets. + + + The option to indicate that hole punching required along the bottom edges of the sheets. + + + Specifies the media size option. + + + The default media size. + + + A media size that is not available with the application, or a size that is not supported by the print device. + + + A media size that is specific to the print device. + + + A business card size. + + + A credit card size. + + + The IsoA0 media size. + + + The IsoA1 media size. + + + The IsoA10 media size. + + + The IsoA2 media size. + + + The IsoA3 media size. + + + The IsoA3Extra media size. + + + The IsoA3Rotated media size. + + + The IsoA4 media size. + + + The IsoA4Extra media size. + + + The IsoA4Rotated media size. + + + The IsoA5 media size. + + + The IsoA5Extra media size. + + + The IsoA5Rotated media size. + + + The IsoA6 media size. + + + The IsoA6Rotated media size. + + + The IsoA7 media size. + + + The IsoA8 media size. + + + The IsoA9 media size. + + + The IsoB0 media size. + + + The IsoB1 media size. + + + The IsoB10 media size. + + + The IsoB2 media size. + + + The IsoB3 media size. + + + The IsoB4 media size. + + + The IsoB4Envelope media size. + + + The IsoB5Envelope media size. + + + The IsoB5Extra media size. + + + The IsoB7 media size. + + + The IsoB8 media size. + + + The IsoB9 media size. + + + The IsoC0 media size. + + + The IsoC1 media size. + + + The IsoC10 media size. + + + The IsoC2 media size. + + + The IsoC3 media size. + + + The IsoC3Envelope media size. + + + The IsoC4 media size. + + + The IsoC4Envelope media size. + + + The IsoC5 media size. + + + The IsoC5Envelope media size. + + + The IsoC6 media size. + + + The IsoC6C5Envelope media size. + + + The IsoC6Envelope media size. + + + The IsoC7 media size. + + + The IsoC8 media size. + + + The IsoC9 media size. + + + The IsoDLEnvelope media size. + + + The IsoDLEnvelopeRotated media size. + + + The IsoSRA3 media size. + + + The Japan2LPhoto media size. + + + The JapanChou3Envelope media size. + + + The JapanChou3EnvelopeRotated media size. + + + The JapanChou4Envelope media size. + + + The JapanChou4EnvelopeRotated media size. + + + The JapanChouDoubleHagakiPostcard media size. + + + The JapanChouDoubleHagakiPostcardRotated media size. + + + The JapanHagakiPostcard media size. + + + The JapanHagakiPostcardRotated media size. + + + The JapanKaku2Envelope media size. + + + The JapanKaku2EnvelopeRotated media size. + + + The JapanKaku3Envelope media size. + + + The JapanKaku3EnvelopeRotated media size. + + + The JapanlPhoto media size. + + + The JapanQuadrupleHagakiPostcard media size. + + + The JapanYou1Envelope media size. + + + The JapanYou2Envelope media size. + + + The JapanYou3Envelope media size. + + + The JapanYou4Envelope media size. + + + The JapanYou4EnvelopeRotated media size. + + + The JapanYou6Envelope media size. + + + The JapanYou6EnvelopeRotated media size. + + + The JisB0 media size. + + + The JisB1 media size. + + + The JisB10 media size. + + + The JisB2 media size. + + + The JisB3 media size. + + + The JisB4 media size. + + + The JisB4 media size. + + + The JisB5 media size. + + + The JisB5Rotated media size. + + + The JisB6 media size. + + + The JisB6Rotated media size. + + + The JisB7 media size. + + + The JisB8 media size. + + + The JisB9 media size. + + + The NorthAmerica10x11 media size. + + + The NorthAmerica10x12 media size. + + + The NorthAmerica10x14 media size. + + + The NorthAmerica11x17 media size. + + + The NorthAmerica14x17 media size. + + + The NorthAmerica4x6 media size. + + + The NorthAmerica4x8 media size. + + + The NorthAmerica5x7 media size. + + + The NorthAmerica8x10 media size. + + + The NorthAmerica9x11 media size. + + + The NorthAmericaArchitectureASheet media size. + + + The NorthAmericaArchitectureBSheet media size. + + + The NorthAmericaArchitectureCSheet media size. + + + The NorthAmericaArchitectureDSheet media size. + + + The NorthAmericaArchitectureESheet media size. + + + The NorthAmericaCSheet media size. + + + The NorthAmericaDSheet media size. + + + The NorthAmericaESheet media sze. + + + The NorthAmericaExecutive media size. + + + The NorthAmericaGermanLegalFanfold media size. + + + The NorthAmericaGermanStandardFanfold media size. + + + The NorthAmericaLegal media size. + + + The NorthAmericaLegalExtra media size. + + + The NorthAmericaLetter media size. + + + The NorthAmericaLetterExtra media size. + + + The NorthAmericaLetterPlus media size. + + + The NorthAmericaLetterRotated media size. + + + The NorthAmericaMonarchEnvelope media size. + + + The NorthAmericaNote media size. + + + The NorthAmericaNumber10Envelope media size. + + + The NorthAmericaNumber10EnvelopeRotated media size. + + + The NorthAmericaNumber11Envelope media size. + + + The NorthAmericaNumber12Envelope media size. + + + The NorthAmericaNumber14Envelope media size. + + + The NorthAmericaNumber9Envelope media size. + + + The NorthAmericaPersonalEnvelope media size. + + + The NorthAmericaQuarto media size. + + + The NorthAmericaStatement media size. + + + The NorthAmericaSuperA media size. + + + The NorthAmericaSuperB media size. + + + The NorthAmericaTabloid media size. + + + The NorthAmericaTabloidExtra media size. + + + The OtherMetricA3Plus media size. + + + The OtherMetricA4Plus media size. + + + The OtherMetricFolio media size. + + + OtherMetricInviteEnvelope media size. + + + The OtherMetricItalianEnvelope media size. + + + The Prc10Envelope media size. + + + The Prc10EnvelopeRotated media size. + + + The Prc16K media size. + + + The Prc16KRotated media size. + + + The Prc1Envelope media size. + + + The Prc1EnvelopeRotated media size. + + + The Prc2Envelope media size. + + + The Prc2EnvelopeRotated media size. + + + The Prc32K media size. + + + The Prc32KBig media size. + + + The Prc32KRotated media size. + + + The Prc3Envelope media size. + + + The Prc3EnvelopeRotated media size. + + + The Prc4Envelope media size. + + + The Prc4EnvelopeRotated media size. + + + The Prc5Envelope media size. + + + The Prc5EnvelopeRotated media size. + + + The Prc6Envelope media size. + + + The Prc6EnvelopeRotated media size. + + + The Prc7Envelope media size. + + + The Prc7EnvelopeRotated media size. + + + The Prc8Envelope media size. + + + The Prc8EnvelopeRotated media size. + + + The Prc9Envelope media size. + + + The Prc9EnvelopeRotated media size. + + + The Roll04Inch media size. + + + The Roll06Inch media size. + + + The Roll08Inch media size. + + + The Roll12Inch media size. + + + The Roll15Inch media size. + + + The Roll18Inch media size. + + + The Roll22Inch media size. + + + The Roll24Inch media size. + + + The Roll30Inch media size. + + + The Roll36Inch media size. + + + The Roll54Inch media size. + + + Specifies the media types for the printed output. + + + The default media type for the printed output. + + + A media type that is not available with the application or one that is not supported by the print device. + + + A custom media type that is specific to the print device. + + + The option to auto select a media type. + + + The Archival media type. + + + The BackPrintFilm media type. + + + The Bond media type. + + + The CardStock media type. + + + The Continous media type. + + + The EnvelopePlain media type. + + + The EnvelopeWindow media type. + + + The Fabric media type. + + + The HighResolution media type. + + + The Label media type. + + + The MultiLayerForm media type. + + + The MultiPartForm media type. + + + The Photographic media type. + + + The PhotographicFilm media type. + + + The PhotographicGlossy media type. + + + The PhotographicHighGloss media type. + + + The PhotographicMatte media type. + + + The PhotographicSatin media type. + + + The PhotographicSemiGloss media type. + + + The Plain media type. + + + The Screen media type. + + + The ScreenPaged media type. + + + The Stationery media type. + + + The TabStockFull media type. + + + The TabStockPreCut media type. + + + The Transparency media type. + + + The TShirtTransfer media type. + + + The option to indicate that a media type has not been selected. + + + Specifies the orientation options for the printed output. + + + The default orientation option. + + + An orientaiton option that is not available with the application or one that is not supported by the print device. + + + A custom orientation that is specific to the print device. + + + The Portrait orientation option. + + + The PortraitFlipped orientation option. + + + The Landscape orientation option. + + + The LandscapeFlipped orientation option. + + + Specifies the print quality options for the printed output. + + + The default print quality option. + + + A print quality option that is not available with the application or one that is not supported by the print device. + + + A print quality option that is specific to the print device. + + + The option to automatically select the print quality. + + + The Draft print quality option. + + + The Fax print quality option. + + + The High print quality option. + + + The Normal print quality option. + + + The Photographic print quality option. + + + The Text print quality option. + + + Specifies the staple options. + + + The default staple option. + + + A staple option that is not available with the application or one that is not supported by the print device. + + + A custom staple option that is specific to the print device. + + + The option to indicate that no stapling is required. + + + The option to staple the top left of the printed output. + + + The option to staple the top right of the printed output. + + + The option to staple the bottom left of the printed output. + + + The option to staple the bottom right of the printed output. + + + The option to staple the printed output in two places along the left edge. + + + The option to staple the printed output in two places along the right edge. + + + The option to staple the printed output in two places along the top edge. + + + The option to staple the printed output in two places along the bottom edge. + + + The option to saddle stitch the printed output. + + + Specifies the completion status of a print task. + + + An abandoned print task. + + + A canceled print task. + + + A failed print task. + + + A submitted print task. + + + Initialized when a print task is initialized for the print system. + + + Represents the core functionality for a PrintTaskOptions object. + + + Gets the page description for a print job. + The page description data. + The job page number. + + + An interface with properties that provide access to the core options for a print task. + + + Gets or sets the binding option for a print task. + The binding option. + + + Gets or sets the collation option for a print task. + The collation option. + + + Gets or sets the color mode option for the print task. + The color mode option. + + + Gets or sets the duplex option for a print task. + The duplex option. + + + Gets or sets the hole punch option for the print task. + The hole punch option. + + + Gets the MaxCopies option for the print task. + The MaxCopies option. + + + Gets or sets the media size option of the print task. + The media size option. + + + Gets or sets the media type option for the print task. + The media type option. + + + Gets the MinCopies option for the print task. + The MinCopies option. + + + Gets or sets the NumberOfCopies option for a print task. + The NumberOfCopies option. + + + Gets or sets the orientation option for a print task. + The orientation option. + + + Gets or sets the print quality option for a print task. + The print quality option. + + + Gets or sets the staple option for a print task. + The staple option. + + + An interface that provides access to the core UI configuration functionality that is supported by the print task options. + + + Gets the DisplayedOptions option for a print task. + The DisplayedOptions option. + + + Extends the basic print task options to enable you to have greater control over the printing experience that you present to your users. + + + Represents the list of print binding options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print binding options. + A pointer to the list of items. + + + Gets the ID of the print binding option. + The ID of the print binding option. + + + Gets the option type of the print binding option. + The binding option type. + + + Gets or sets the state of the print binding option. + The binding option state. + + + Sets the value for the print binding option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print binding option. + + + Gets or sets the enumerated value of the print binding option. + The binding option value. + + + Represents the list of print collation options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print collation option. + Pointer to the list of items. + + + Gets the ID of the print collation option. + The ID of the collation option. + + + Gets the option type for the print collation option. + The option type. + + + Gets or sets the state of the print collation option. + The state of the collation option. + + + Sets the value for the print collation option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print collation option. + + + Gets or sets the enumerated value of the print collation option. + The value of the print collation option. + + + Represents the list of print color mode options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print color mode option. + Pointer to the list of items. + + + Gets the ID for the print color mode option. + The ID of the color mode option. + + + Gets the option type for the print color mode option. + The color mode option type. + + + Gets or sets the state of the print color mode option. + The state of the print color mode option. + + + Sets the value for the print color mode option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print color mode option. + + + Gets or sets the enumerated value of the print color mode option. + The state of the print color mode option. + + + Represents the option for the number of printed copies. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the value for the maximum number of printed copies allowed. + The maximum number of printed copies allowed. + + + Gets the value for the minimum number of printed copies allowed. + The minimum number of printed copies allowed. + + + Gets the ID for the option for the number of printed copies. + The ID of the option. + + + Gets the option type for the option for the number of printed copies. + The option type. + + + Gets or sets the state of the option for the number of printed copies. + The state of the option. + + + Sets the value for the print copies option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print copies option. + + + Gets or sets the number of copies for a print task. + The number of copies for a print task. + + + Allows apps to add a collection of enumerable options to the app print experience. + + + Gets or sets the display name of the custom print task option item. + The display name of the option item. + + + Gets the ID of the custom print task option item. + The ID of the print task option. + + + Represents a list of the custom print task option items. + + + Sets the ID or display name of an item in the list of custom print task options. + The ID of the option item. + The display name of the option item. + + + Gets or sets the display name of an item in the list of custom print task options. + The display name of the option item. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets an item from the list of custom print tasks. + Pointer to the item. + + + Gets the ID of a custom print task option. + The option ID. + + + Gets the option type for a custom print task option. + The option type. + + + Gets or sets the state of the list of custom print task option items. + The state value. + + + Sets the value for the item ID or the display name of the custom item. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the item ID or the display name of the custom item. + + + Gets or sets the value of the list of custom print tasks. + The value of the list. + + + Represents a custom print task option. + + + Gets or sets the display name of the custom print task option. + The display name of the option. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets or sets the maximum number of characters for the display name of the custom print task option. + The maximum number of characters. + + + Gets the ID of the custom print task option. + The ID of the custom option. + + + Gets the option type for the custom print task option. + The option type. + + + Gets or sets the state of a custom print task option. + The state of the custom option. + + + Sets the value for the custom print task. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the custom print task. + + + Gets or sets the value of a custom print task option. + The value of the custom option. + + + Represents the list of print duplex options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of print duplex options. + The list of print duplex options. + + + Gets the ID of the print duplex option. + The ID of the print duplex option. + + + Gets the option type of the print duplex option. + The option type of the print duplex option. + + + Gets or sets the state of the print duplex options. + The state of the print duplex option. + + + Sets the value for the duplex option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the duplex option. + + + Gets or sets the enumerated vlaue of the print duplex option. + The enumerated value of the print duplex option. + + + Represents the list of punch hole options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the hole punch option. + A pointer to the list. + + + Gets the ID for the hole punch option. + The ID for the option. + + + Gets the option type for the hole punch option. + The option type. + + + Gets or sets the state of the hole punch option. + The state of the hole punch option. + + + Sets the value for the hole punch option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the hole punch option. + + + Gets or sets the enumerated value of the hole punch option. + The enumerated value of the hole punch option. + + + Represents the list of media size options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of print media size option items. + A pointer to the list of items. + + + Gets the ID for the print media size option. + The ID for the media size option. + + + Gets the option type for the option for the number of printed copies. + The option type. + + + Gets or sets the state of the option for the number of printed copies. + The state of the option. + + + Sets the value for the media size option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the media size option. + + + Gets or sets the number of copies for a print task. + The number of copies for a print task. + + + Represents the list of print media type options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print media type options. + A pointer to the list of media type options. + + + Gets the ID for the print media type option. + The ID for the media type option. + + + Gets the option type for the print media type option. + The option type. + + + Gets or sets the state for the print media type option. + The state of the media type option. + + + Sets the value for the media type option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the media type option. + + + Gets or sets the enumerated value of the print media type option. + The enumerated value of the media type option. + + + Represents the list of print orientation options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print media type options. + A pointer to the list of media type options. + + + Gets the ID for the print orientation option. + The ID for the print orientation option. + + + Gets the option type for the print media type option. + The option type. + + + Gets or sets the state for the print media type option. + The state of the media type option. + + + Sets the value for the print orientation option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print orientation option. + + + Gets or sets the enumerated value of the print media type option. + The enumerated value of the media type option. + + + Represents the list of print quality options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the print quality options. + A pointer to the list of items. + + + Gets the ID for the print quality option. + The ID for the print quality option. + + + Gets the option type for the print quality option. + The option type. + + + Gets or sets the state of the print quality option. + The state of the print quality option. + + + Sets the value for the print quality option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print quality option. + + + Gets or sets the enumerated value of the print quality option. + The enumerated value of the print quality option. + + + Represents a list of the stapling options. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the list of items for the stapling options. + A pointer to the list of items. + + + Gets the ID for the stapling option. + The ID for the stapling option. + + + Gets the option type for the stapling option. + The option type. + + + Gets or sets the state of the stapling option. + The state of the stapling option. + + + Sets the value for the staple opiton. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the staple opiton. + + + Gets or sets the enumerated value of the stapling option. + The enumerated value of the stapling option. + + + Called when a print task option has changed. + + + Gets the ID of the print task option that changed. + The ID of the property that changed. + + + A collection of events, methods and properties for advanced print tasks. + + + Raised when the print system begins a validation pass on the current state of the print ticket. + + + Creates a custom list of items that allow the user to choose the page format. + The list of custom items. + The ID for the custom item. + The display name for the custom item. + + + Creates a CustomPrintTaskOptionText object to handle the display name and other parameters of the advanced print task option item. + The CustomPrintTaskOptionText object. + The ID of the print task option. + The display name of the print task option. + + + Gets the list of print task options that are currently displayed. + A pointer to the list of options. + + + Used to retrieve the available options for a print task. + Pointer to a PrintTaskOptionDetails object. + Pointer to a PrintTaskOptions object. + + + Returns a PrintPageDescription object for the referenced page number. + The PrintPageDescription object. + The page number. + + + Raised when any one of the advanced print task options is changed. + + + Gets the list of options for the advanced print task. + The list of options for the advanced print task. + + + Specifies the print task option states. + + + The UI for the print tasks has not been enabled. + + + The UI for the print tasks has been enabled. + + + The UI for the print tasks is visible to the user. + + + Specifies the print task option types. + + + Unknown option type. + + + A type of option that is numerical. + + + A type of option that is a string or some text. + + + A type of option that is a list of items. + + + Represents the base class for all CustomPrintTaskOptionXxx objects. + + + Gets or sets the display name of the custom print task option. + The display name of the custom print task option. + + + Represents objects that list print task option items. + + + Gets a list of the print task option items. + A pointer to the list of the print task option items. + + + Represents objects that define the enumerated values of the print task options. + + + Gets the maximum enumerated value of the print task option. + The maximum enumerated value of the print task option. + + + Gets the minimum enumerated value of the print task option. + The minimum enumerated value of the print task option. + + + Represents the base class for the PrintTaskOptionXxx objects. + + + Gets or sets the string for an error condition. + String that describes the error condition. + + + Gets the ID for a print task option. + The ID for the print task option. + + + Gets the option type for a print task option. + The option type for a print task option. + + + Gets or sets the state of a print task option. + The state of a print task option. + + + Sets the value for the print task option. + Boolean value that indicates TRUE for a successful Get or Set, and FALSE for a failed Get or Set. + Value for the print task option. + + + Gets the enumerated value of a print task option. + The enumerated value of a print task option. + + + Represents objects that describe the text of a print task option. + + + Gets the maximum allowed number of characters for the text of a print task option. + The maximum allowed number of characters for the text of a print task option. + + + Provides core functionality for managing apps. + + + Enables you to access and manage the app data store for a package family. + + + Provides access to the app data store for the specified package family. + The app data store. + The package family name. + + + Provides functionality for managing app packages. + + + Specifies the package deployment options. + + + The default behavior is used. + + + If this package, or any package that depends on this package, is currently in use, the processes associated with the package are shut down forcibly so that registration can continue. + + + When you set this option, the app is installed in development mode. For info about development mode, see Remarks. Use this option to enable key app development scenarios.You can't use this option in conjunction with a bundle package. If you use this option with a bundle package, your call returns ERROR_INSTALL_FAILED. + + + When you set this option, the app is instructed to skip resource applicability checks. This effectively stages or registers all resource packages that a user passes in to the command, which forces applicability for all packages contained in a bundle. If a user passes in a bundle, all contained resource packages will be registered. + + + Contains progress information for the deployment request. + + + The progress state of the deployment request. + + + The progress percentage of the deployment request. + + + Represents the state of a deployment request. + + + The deployment request is queued. + + + The deployment request is being processed. + + + Provides the result of a deployment request. + + + Gets the activity identifier used to look up an event in Windows Event Viewer. Gets the activity identifier used to look up an event. All events of a deployment operation are logged with the same activityId. + The activity identifier. + + + Gets extended error text for the error if the deployment operation is not successful. + The extended error text. + + + The extended error code can be used to distinguish a specific error condition which needs to be handled differently from the general error indicated by the return code. The extended error code may provide a more specific reason for the failure that caused the general error. +Also, it usually corresponds directly to the specific message in the ErrorText. + The error code. + + + Represents the install state of the package. + + + The package has not been installed. + + + The package has been downloaded. + + + The package is ready for use. + + + Manages the software available to a user. + + + Adds a package (main package) and its dependencies for the current logged-in user. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The source URI of the main package. The URI must follow file URI scheme (file://) since the only supported URI schemes are local file paths and local network paths. + The source URIs of the dependency packages. If there are no dependency packages or if the dependency packages are already registered, this parameter can be null. + One of the permitted enumeration values from the deployment options. ForceApplicationShutdown and None are the only valid options for this method and specifying any other option will result in an E_INVALIDARG return value. + + + Cleans up a specified package for a specified user. Used to cleanup packages installed for a user after their user profile is deleted. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The package name. + The user security identifier (SID). + + + Retrieves information about the specified package installed for any user. + If this method succeeds it returns a package object that contains information about the specified package, including but not limited to its name, publisher, version, and install location. If the specified package is not found, this method returns null. + The full name of the package. This parameter cannot be null. + + + Retrieves information about a specific package installed for a specific user or for all users. + The package. + This user security ID of the user for whom the specified package is being retrieved. If this parameter is null, the specified package is retrieved for the current user. + The full name of the package. + + + Retrieves information about a specified family of packages installed across all users. + If the method succeeds, an enumerable collection of package objects is returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. + + + Retrieves information about a specified family of packages installed across all users. + If the method succeeds, an enumerable collection of package objects with the same package family name will be returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified package family name are found, this method returns an empty list. + The package family name. This parameter cannot be null. + + + Finds all installed packages with the specified name and publisher. + If the method succeeds, an enumerable collection of package objects with the same package name and publisher name is returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified name and publisher are found, this method returns an empty list. + The package name. This parameter cannot be null. + The package publisher. This parameter cannot be null. + + + Finds all packages installed for the specified user. + If the method succeeds, an enumerable collection of package objects is returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. + + + Retrieves information about a specified family of packages installed for a specific user. + If the method succeeds, an enumerable collection of package objects is returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified package family name are found, this method returns an empty list. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. + The family name of packages to find. This parameter cannot be null. + + + Retrieves information about all packages with the specified package name and publisher name, installed for a specific user. + If the method succeeds, an enumerable collection of package objects is returned. Each Package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified name and publisher are found, this method returns an empty list. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. + The package name. This parameter cannot be null. + The package publisher. This parameter cannot be null. + + + Finds packages of specific types that are installed for the specified user. + If the method succeeds, an enumerable collection of package objects is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. The packageTypes parameter determines the types of packages to return. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. Any user SID other than that of current user requires administrative privileges. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Retrieves information about a specified family of packages and of specific types that are installed for the specified user. + If the method succeeds, an enumerable collection of package objects is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified package family name are found, this method returns an empty list. The packageTypes parameter determines the types of packages to return. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. Any user SID other than that of current user requires administrative privileges. + The family name of packages to find. This parameter can't be null. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Retrieves information about packages of specific types with the specified package name and publisher name, installed for a specific user. + If the method succeeds, an enumerable collection of package objects is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified package publisher and family name are found, this method returns an empty list. The packageTypes parameter determines the types of packages to return. + The user security identifier (SID). If this parameter is null, the packages are retrieved for the current user. Any user SID other than that of current user requires administrative privileges. + The package name. This parameter can't be null. + The package publisher. This parameter can't be null. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Retrieves information about specific package types that are installed across all users. + If the method succeeds, an enumerable collection of package objects is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. The packageTypes parameter determines the types of packages to return. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Retrieves information about a specified family of packages and specific package types that are installed across all users. + If the method succeeds, an enumerable collection of package objects with the same package family name is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified package family name are found, this method returns an empty list. The packageTypes parameter determines the types of packages to return. + The package family name. This parameter can't be null. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Finds all installed packages of specific types with the specified name and publisher. + If the method succeeds, an enumerable collection of package objects with the same package name and publisher name is returned. Each package object in this collection contains information about the package, including but not limited to its name, publisher, version, and install location. If no packages with the specified name and publisher are found, this method returns an empty list. The packageTypes parameter determines the types of packages to return. + The package name. This parameter can't be null. + The package publisher. This parameter can't be null. + A combination of PackageTypes-typed values that are combined by using a bitwise OR operation. The resulting value specifies the types of packages to be included in the result set. + + + Finds the users who have installed the specified package. + If the method succeeds, an enumerable collection of package user information objects is returned. Each PackageUserInformation object in this collection contains the user security identifier (user SID) of a user for whom the specified package is installed. If no packages with the specified package full name are found, this method returns an empty list. + The full name of the package. This parameter cannot be null. + + + Creates and initializes a new instance of the object. + + + Registers a package (the main package) and its dependency packages for the current user. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The path to the package manifest of the main package. + The paths to the dependency packages. If there are no dependency packages or if the dependency packages are already registered, this parameter can be null. When DeploymentOptions is set to DevelopmentMode this parameter should be null. + One of the enumeration values. + + + Registers a package (the main package) by its full name and its dependency packages for the current user. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + A string that specifies the full name of the main package to be registered. + Strings that specify the full names of the dependency packages to be registered. + A DeploymentOptions-typed value that specifies the package deployment option. + + + Removes a package for the current user asynchronously and receives progress and status messages on the removal operation. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + A string representation of the package identity to identify the package to be removed. + + + Removes a package for the current user asynchronously and receives progress and status messages on the removal operation. + A pointer that receives the address of an object that implements the IAsyncOperationWithProgress interface. + A string representation of the package identity to identify the package to be removed. + A RemovalOptions-typed value that modifies the removal operation. + + + Sets the state of a package, for example, to usable, tampered with, and so on. + The full name of the package. + One of the enumeration values. + + + Stages a package to the system without registering it. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The source URI of the main package. + The source URIs of the dependency packages. If there are no dependency packages or dependency packages are already staged, this parameter can be null. + + + Stages a package to the system without registering it. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The source URI of the main package. + The source URIs of the dependency packages. If there are no dependency packages or dependency packages are already staged, this parameter can be null. + A combination of DeploymentOptions-typed values that are combined by using a bitwise OR operation. The resulting value specifies the package deployment options. + + + Stages a package's user data to the system without registering it. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + A string that specifies the full name of the package that contains the user data to be staged. + + + Updates an installed package or its dependency packages for the current user. + The status of the deployment request. The DeploymentResult contains the final returned value of the deployment operation, once it is completed. The DeploymentProgress can be used to obtain the percentage of completion over the entire course of the deployment operation. + The source URI of the main package. + The source URIs of the dependency packages. + One of the permitted enumeration values. ForceApplicationShutdown and None are the only valid options for this method and specifying any other deployment option results in an E_INVALIDARG return value. + + + Represents the state of the package. + + + The package is usable. + + + The license of the package is not valid. + + + The package payload was modified by an unknown source. + + + The package payload was tampered with intentionally. + + + Defines the types of packages to be included in the result set of a query. + + + Default inventorying behavior. + + + Include the main packages when you enumerate the package repository. + + + Include the framework packages when you enumerate the package repository. + + + Include the resource packages when you enumerate the package repository. + + + Include the bundle packages when you enumerate the package repository. + + + Values that modify the removal of a package. + + + No removal options are specified. This is the default deployment behavior. + + + Don't remove any application data when the package is removed. This can only apply to packages that were deployed with the DeploymentOptions::DevelopmentMode value. +If you specify PreserveApplicationData on an incompatible package, PackageManager::RemovePackageAsync(String, RemovalOptions) returns E_INVALIDARG. + + + Provides information about the users of an installed package. + + + Gets the install state of the package for the user. + One of the enumeration values. + + + Gets the security identifier (SID) of the package user. + The SID. + + + Provides functionality for managing apps in an enterprise. + + + Enables Windows Store app to access select enterprise settings that are managed through group policy or other management services. + + + Gets a value that indicates whether an enterprise ID can be used instead of a Microsoft account. + true if an enterprise ID can be used instead of a Microsoft account; otherwise, false. + + + Provides classes for creating and working with media such as photos, audio recordings and videos. + + + Defines the audio processing modes. + + + Default audio processing mode. + + + Uncompressed audio processing mode. + + + Provides properties for image information that is displayed by SystemMediaTransportControlsDisplayUpdater class. + + + Gets or sets the subtitle of the image. + The subtitle of the image. + + + Gets or sets the title of the image. + The title of the image. + + + Encapsulates the method needed to set the configuration properties on a registered media parser or codec. + + + Sets the configuration properties that were supplied when the media parser or codec was registered. + The configuration properties for the media parser or codec. + + + Represents a marker at specific location in a media stream time-line. + + + Gets the type of the media marker. + The marker type. + + + Gets the text associated with the marker. + The text associated with the marker. + + + Gets the offset in the media time-line that the maker occurs. + The offset in the media time-line that the maker occurs. + + + Represents a collection of media markers. + + + Gets the collection of media markers. + The collection of media markers. + + + Describes the object that applications register with, to receive media focus and transport control notifications. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Gets or sets the path to the artwork for the album cover. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + Path to the artwork for the album cover. + + + Gets or sets the name of the artist. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + The name of the artist. + + + Event raised when a ChannelDown command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a ChannelUp command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a FastForward command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Gets or sets the state of the Play button. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + The state of the Play button. + + + Event raised when a NextTrack command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a Pause command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a PlayPauseToggle command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a Play command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a PreviousTrack command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a Record command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a Rewind command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Gets the current sound level. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + The current sound level. + + + Event raised when the sound level changes. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Event raised when a Stop command is issued to the application. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + + + Gets or sets the track name. + MediaControl may be altered or unavailable for releases after Windows 8.1. Instead, use SystemMediaTransportControls. + The name of the track. + + + Registers a media parser or codec. + + + Registers a scheme handler for the specified URL scheme. + The class identifier of the activatable runtime class of the scheme handler. The runtime class must implement the IMediaExtension interface. + The URL scheme that will be recognized to invoke the scheme handler. For example, myscheme://. + + + Registers a scheme handler for the specified URL scheme with an optional configuration parameter. + The class identifier of the activatable runtime class of the scheme handler. The runtime class must implement the IMediaExtension interface. + The URL scheme that will be recognized to invoke the scheme handler. For example, myscheme://. + An optional parameter that contains configuration properties for the scheme handler. + + + Registers a byte-stream handler by file name extension and MIME type. + The class identifier of the activatable runtime class of the byte-stream handler. The runtime class must implement the IMediaExtension interface. + The file name extension that is registered for this byte-stream handler. + The MIME type that is registered for this byte-stream handler. + + + Registers a byte-stream handler by file name extension and MIME type, with an optional configuration parameter. + The class identifier of the activatable runtime class of the byte-stream handler. The runtime class must implement the IMediaExtension interface. + The file name extension that is registered for this byte-stream handler. + The MIME type that is registered for this byte-stream handler. + An optional parameter that contains configuration properties for the byte-stream handler. + + + Registers an audio decoder for the specified input and output media types. + The class identifier of the activatable runtime class of the audio decoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the audio decoder accepts as input. + The guid identifier of the media type that is output by the audio decoder. + + + Registers an audio decoder for the specified input and output media types with an optional configuration parameter. + The class identifier of the activatable runtime class of the audio decoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the audio decoder accepts as input. + The guid identifier of the media type that is output by the audio decoder. + An optional parameter that contains the configuration properties to be passed to the audio decoder. + + + Registers an audio encoder for the specified input and output media types. + The class identifier of the activatable runtime class of the audio encoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the audio encoder accepts as input. + The guid identifier of the media type that is output by the audio encoder. + + + Registers an audio encoder for the specified input and output media types with an optional configuration parameter. + The class identifier of the activatable runtime class of the audio encoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the audio encoder accepts as input. + The guid identifier of the media type that is output by the audio encoder. + An optional parameter that contains the configuration properties to be passed to the audio encoder. + + + Registers an video decoder for the specified input and output media types. + The class identifier of the activatable runtime class of the video decoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the video decoder accepts as input. + The guid identifier of the media type that is output by the video decoder. + + + Registers a video decoder for the specified input and output media types with an optional configuration parameter. + The class identifier of the activatable runtime class of the video decoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the video decoder accepts as input. + The guid identifier of the media type that is output by the video decoder. + An optional parameter that contains the configuration properties to be passed to the video decoder. + + + Registers a video encoder for the specified input and output media types. + The class identifier of the activatable runtime class of the video encoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the video encoder accepts as input. + The guid identifier of the media type that is output by the video encoder. + + + Registers a video encoder for the specified input and output media types with an optional configuration parameter. + The class identifier of the activatable runtime class of the video encoder. The runtime class must implement the IMediaExtension interface. + The guid identifier of the media type that the video encoder accepts as input. + The guid identifier of the media type that is output by the video encoder. + An optional parameter that contains the configuration properties to be passed to the video encoder. + + + Creates a new MediaExtensionManager object that is used to register a media parser or codec. + + + Provides a static list of media marker types. + + + Gets the value of the Bookmark type which is returned as the string "Bookmark" + The bookmark type which is return as the string "Bookmark". + + + Defines values for the status of the media playback. + + + The media is closd. + + + The media is changing. + + + The media is stopped. + + + The media is playing. + + + The media is paused. + + + Defines values for the types of media playback. + + + The media type is unknown. + + + The media type is audio music. + + + The media type is video. + + + The media type is an image. + + + Provides properties for music information that is displayed by the SystemMediaTransportControlsDisplayUpdater class. + + + Gets or sets the name of the album artist. + The name of the album artist. + + + Gets or set the name of the song artist. + The name of the song artist. + + + Gets or set the title of the song. + The title of the song. + + + Represents an object that enables integrate with the system media transport controls and support for media commands. + + + Occurs when a button is pressed on the SystemMediaTransportControls. + + + Gets the display updater for the SystemMediaTransportControls which enable updating the information displayed about the currently playing song. + The display updater for the SystemMediaTransportControls. + + + The system transport controls for the current view. + The system transport controls for the current view. + + + Gets or sets a value that specifies if the channel down button is supported. + true if the channel down button is supported; otherwise, false. + + + Gets or sets a value that specifies if the channel up button is supported. + true if the channel up button is supported; otherwise, false. + + + Gets or sets a value that specifies if the fast forward button is supported. + true if the fast forward button is supported; otherwise, false. + + + Enables and disables the system media transport controls for the app. + true if the system transport controls are enabled for the app; otherwise, false. + + + Gets or sets a value that specifies if the next button is supported. + true if the next button is supported; otherwise, false. + + + Gets or sets a value that specifies if the pause button is supported. + true if the pause button is supported; otherwise, false. + + + Gets or sets a value that specifies if the play button is supported. + true if the play is supported; otherwise, false. + + + Gets or sets a value that specifies if the previous button is supported. + true if the previous button is supported; otherwise, false. + + + Gets or sets a value that specifies if the record button is supported. + true if the record button is supported; otherwise, false. + + + Gets or sets a value that specifies if the rewind button is supported. + true if the rewind button is supported; otherwise, false. + + + Gets or sets a value that specifies if the stop button is supported. + true if the stop button is supported; otherwise, false. + + + Gets the playback status of the media. + The playback status. + + + Occurs when a property on the SystemMediaTransportControls has changed. + + + Gets the sound level of the media for the capture and render streams. + The sound level. + + + Defines values for the buttons on the SystemMediaTransportControls. + + + The play button. + + + The pause button. + + + The stop button. + + + The record button. + + + The fast forward button. + + + The rewind button. + + + The next button. + + + The previous button. + + + The channel up button. + + + The channel down button. + + + The max button. + + + Provides data for the SystemMediaTransportControls.ButtonPressed event. + + + Gets the button on the SystemMediaTransportControls that was pressed. + The button that was pressed. + + + Provides functionality to update the music information that is displayed on the SystemMediaTransportControls. + + + Gets or sets the media id of the app. + The media id. + + + Clears out all of the media metadata. + + + Initialize the media properties using the specified file. + When this method completes, it returns a boolean value that indicates true if the operation succeeded; otherwise, false. + The type of media. + The file to initialize the media properties. + + + Gets the image properties associated with the currently playing media. + The image properties. + + + Gets the music properties associated with the currently playing media. + The music properties. + + + Gets or sets thumbnail image associated with the currently playing media. + The thumbnail image. + + + Gets or sets the type of media. + The type of media. + + + Updates the metadata for the currently playing media. + + + Gets the video properties associated with the currently playing media. + The video properties. + + + Defines values for the properties on the SystemMediaTransportControls. + + + The sound level property. + + + The max properties. + + + Occurs when a property is changed on the SystemMediaTransportControls. + + + The property that was changed on the SystemMediaTransportControls. + The property that was changed. + + + Provides properties for video information that is displayed by SystemMediaTransportControlsDisplayUpdater class. + + + Gets or sets the subtitle of the video. + The subtitle of the video. + + + Gets or sets the title of the video. + The title of the video. + + + Provides video-related effects. + + + Represents a video stabilization effect which can be used on a video object to reduce the shakiness in the video. + The name of the effect: "Windows.Media.VideoStabilizationEffect" + + + Specifies the sound level of the capture or render stream. + + + The sound level is muted. + + + The sound level is low. + + + The sound level is at full volume. + + + Provides classes for the capture of photos, audio recordings, and videos. + Required to access cameras. + Required to access microphones. + + + Provides a full window UI for capturing audio, video, and photos from a camera. As well as controls for trimming video, time delayed capture, and camera settings. + Required to access cameras. + Required to access microphones. + + + Create a new CameraCaptureUI object. + Required to access cameras. + Required to access microphones. + + + Launches the CameraCaptureUI user interface. + Required to access cameras. + Required to access microphones. + When this operation completes, a StorageFile object is returned. + Specifies whether the user interface that will be shown allows the user to capture a photo, capture a video, or capture both photos and videos. + + + Provides settings for capturing photos. + Required to access cameras. + Required to access microphones. + An object containing settings for capturing photos. + + + Provides settings for capturing videos. The settings include format, maximum resolution, maximum duration, and whether or not to allow trimming. + Required to access cameras. + Required to access microphones. + An object that provides settings for capturing videos. + + + Determines the highest resolution the user can select for capturing photos. + + + The user can select any resolution. + + + The user can select resolutions up to 320 X 240, or a similar 16:9 resolution. + + + The user can select resolutions up to 320 X 240, or a similar 16:9 resolution. + + + The user can select resolutions up to 1024 X 768, or a similar 16:9 resolution. + + + The user can select resolutions up to 1920 X 1080, or a similar 4:3 resolution. + + + The user can select resolutions up to 5MP. + + + Determines the highest resolution the user can select for capturing video. + + + The user can select any resolution. + + + The user can select resolutions up to low definition resolutions. + + + The user can select resolutions up to standard definition resolutions. + + + The user can select resolutions up to high definition resolutions. + + + Determines whether the user interface for capturing from the attached camera allows capture of photos, videos, or both photos and videos. + Required to access cameras. + Required to access microphones. + + + Either a photo or video can be captured. + + + The user can only capture a photo. + + + The user can only capture a video. + + + Provides settings for capturing photos. + Required to access cameras. + Required to access microphones. + + + Determines whether photo cropping will be enabled in the user interface for capture a photo. + Required to access cameras. + Required to access microphones. + True, if photo cropping will be enabled; otherwise, false. + + + The aspect ratio of the captured photo. + Required to access cameras. + Required to access microphones. + The aspect ratio of the captured photo. If zero, the aspect ratio is not enforced. + + + The exact size in pixels of the captured photo. + Required to access cameras. + Required to access microphones. + The size of the captured photo. + + + Determines the format that captured photos will be stored in. + Required to access cameras. + Required to access microphones. + A value that indicates the format for captured photos. + + + Determines the maximum resolution the user will be able to select. + Required to access cameras. + Required to access microphones. + A value that indicates the maximum resolution the user will be able to select. + + + Determines the format for storing captured photos. + Required to access cameras. + Required to access microphones. + + + JPEG format. + + + PNG format. + + + JPEG-XR format. + + + Provides settings for capturing videos. The settings include format, maximum resolution, maximum duration, and whether or not to allow trimming. + Required to access cameras. + Required to access microphones. + + + Determines whether or not the video trimming user interface will be enabled. + Required to access cameras. + Required to access microphones. + True, if the user will be allowed to trim videos; otherwise, false. + + + Determines the format for storing captured videos. + Required to access cameras. + Required to access microphones. + A value indicating the format for storing captured videos. + + + Determines the maximum duration of a video. + Required to access cameras. + Required to access microphones. + The maximum duration of a video. If this property is set to zero, no maximum duration is enforced. + + + Determines the maximum resolution that the user can select. + Required to access cameras. + Required to access microphones. + The maximum resolution that the user can select. + + + Determines the format for saving captured videos. + Required to access cameras. + Required to access microphones. + + + MP4/H.264/AAC format. + + + WMV format. + + + Provides a method for displaying a UI, by which the UI contains options for the capture of photos, audio recordings and videos. + Required to access cameras. + Required to access microphones. + + + Displays a UI that contains options for the capture of photos, audio recordings and videos. + Required to access cameras. + Required to access microphones. + The MediaCapture object that provides methods for the capture of photos, audio recordings and videos. + + + Represents a captured video frame. + + + Gets a value that indicates if the captured frame can be read from. + true if the captured frame can be read from; otherwise, false. + + + Gets a value that indicates if the captured frame can be written to. + true if the captured frame can be written to; otherwise, false. + + + Creates a copy of the stream. + The clone of the strem. + + + Closes the captured framed object. + + + Gets the content type of the captured frame. + The content type of the captured frame. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Asynchronously commits and flushes all of the data of the CapturedFrame. + When this method completes, a boolean value is returned which specifies true if the operation completed successfully; otherwise, false. + + + Gets the input stream at the specified position. + The input stream. + The position in the input stream. + + + Gets the output stream at the specified position. + The output stream. + The position in the output stream. + + + Gets the height of the captured frame + The height of the frame. + + + Gets the position of the captured frame. + The position of the captured frame. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Seeks the stream to the specified position. + The position in the stream to seek too. + + + Gets the size of the captured frame in bytes. + The size of the captured frame in bytes. + + + Gets the width of the captured frame. + The width of the captured frame. + + + Asynchronously writes the specified data to the stream. + Represents an asynchronous operation that returns a result and reports progress. + The data to write to the stream. + + + Represents a photo taken from a capture device such as a webcam attached. + + + Gets the photo data, represented as CapturedFrame object, associated with the CapturedPhoto object. + The captured frame. + + + Represents a thumbnail image of the capture photo. + The thumbnail image. + + + Provides methods for taking a low lag media recording. + + + Asynchronously releases the LowLagMediaRecording object and resources used by the media recording operation. + Object that is used to control the asynchronous operation. + + + Asynchronously starts the low lag media recording. + Object that is used to control the asynchronous operation. + + + Asynchronously stops the low lag media recording. + Object that is used to control the asynchronous operation. + + + Provides methods for taking a low shutter lag photo. + + + Asynchronously captures a low shutter lag photo. + When this method completes, a CapturedPhoto object is returned which contains the captured photo. + + + Asynchronously releases the LowLagPhotoCapture object and resources used by the capture photo operation. + Object that is used to control the asynchronous operation. + + + Provides methods for taking a rapid sequence of low shutter lag photos. + + + Asynchronously releases the LowLagPhotoSequenceCapture object and resources used by the photo sequence capture operation. + Object that is used to control the asynchronous operation. + + + Occurs when a photo has been captured. + + + Asynchronously starts capturing photos. + Object that is used to control the asynchronous operation. + + + Asynchronously stops capturing photos. + Object that is used to control the asynchronous operation. + + + Provides functionality for capturing photos, audio, and videos from a capture device, such as a webcam. + Required to access cameras. + Required to access microphones. + + + Adds an audio or video effect. + Required to access cameras. + Required to access microphones. + Returns an IAsyncAction object that is used to control the asynchronous operation. + Specifies the streams to which the effect will be applied. + The class identifier of the activatable runtime class that implements the effect. The runtime class must implement the IMediaExtension interface. + Configuration parameters for the effect. + + + Gets an object that controls settings for the microphone. + Required to access cameras. + Required to access microphones. + An AudioDeviceController object that controls settings for the microphone. + + + Captures a photo to a storage file. + Required to access cameras. + Required to access microphones. + Returns an IAsyncAction object that is used to control the asynchronous operation. + The encoding properties for the output image. + The storage file where the image is saved. + + + Captures a photo to a random-access stream. + Required to access cameras. + Required to access microphones. + Returns an IAsyncAction object that is used to control the asynchronous operation. + The encoding properties for the output image. + The stream where the image data is written. + + + Removes all audio and video effects from a stream. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + The stream from which to remove the effects. + + + Closes the media capture object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Raised when an error occurs during media capture. + Required to access cameras. + Required to access microphones. + + + Gets the value of an encoding property. + Required to access cameras. + Required to access microphones. + Returns the value of the encoding property. + Specifies the stream to query for the encoding property. + The encoding property to retrieve. + + + Queries whether the video stream is mirrored horizontally. + Required to access cameras. + Required to access microphones. + True if mirroring is enabled; false otherwise. + + + Gets the rotation of the video preview stream. + Required to access cameras. + Required to access microphones. + The amount by which the video preview stream is rotated. + + + Gets the rotation of the recorded video. + Required to access cameras. + Required to access microphones. + The amount by which the recorded video is rotated. + + + Initializes the MediaCapture object, using default settings. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + + + Initializes the MediaCapture object. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + The initialization settings. + + + Creates a new instance of the MediaCapture object. + Required to access cameras. + Required to access microphones. + + + Gets the configuration settings for the MediaCapture object. + Required to access cameras. + Required to access microphones. + A MediaCaptureSettings object that contains the settings. + + + Initializes the low shutter lag photo capture and provides the LowLagPhotoCapture object used to manage the recording. + When this method completes, a LowLagPhotoCapture object is returned which can be used to start the photo capture. + The encoding profile used for the image. + + + Initializes the low shutter lag photo sequence capture and provides the LowLagPhotoSequenceCapture object used to manage the recording. + When this method completes, a LowLagPhotoSequenceCapture object is returned which can be used to start the photo sequence capture. + The encoding profile used for the image. + + + Initializes the low lag recording using the specified custom sink to store the recording. This method provides the LowLagMediaRecording object used to managed the capture. + When this method completes, a LowLagMediaRecording object is returned which can be used to start the photo capture. + The encoding profile to use for the recording. + The media extension for the custom media sink. + + + Initializes the low lag recording using the specified custom sink to store the recording. This method provides the LowLagMediaRecording object used to managed the recording. + When this method completes, a LowLagMediaRecording object is returned which can be used to start the photo capture. + The encoding profile to use for the recording. + The activatable class ID of the media extension for the custom media sink. + Contains properties of the media extension. + + + Initializes the low lag recording using the specified file to store the recording. This method provides the LowLagMediaRecording object used to managed the recording. + When this method completes, a LowLagMediaRecording object is returned which can be used to start the photo capture. + The encoding profile for the recording. + The storage file where the image is saved. + + + Initializes the low lag recording using the specified random-access stream to store the recording. This method provides the LowLagMediaRecording object used to managed the recording. + When this method completes, a LowLagMediaRecording object is returned which can be used to start the photo capture. + The encoding profile for the recording. + The stream where the image data is written. + + + Occurs when the record limit is exceeded. + + + Sets an encoding property. + Required to access cameras. + Required to access microphones. + The type of media data the stream represents, such as video or audio. + The encoding property to set. + The new value of the encoding property. + + + Asynchronously sets the media encoding properties. + Object that is used to control the asynchronous operation. + The type of media data the stream represents, such as video or audio. + The properties for the media encoding. + The properties for the encoder. + + + Enables or disables horizontal mirroring of the video preview stream. + Required to access cameras. + Required to access microphones. + True to enable mirroring; false to disable mirroring. + + + Rotates the video preview stream. + Required to access cameras. + Required to access microphones. + The amount by which to rotate the video. + + + Rotates the recorded video. + Required to access cameras. + Required to access microphones. + The amount by which to rotate the video. + + + Starts preview. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + + + Starts sending a preview stream to a custom media sink using the specified encoding profile. + An object that is used to control the asynchronous operation. + The encoding profile to use for the recording. + The media extension for the custom media sink. + + + Starts sending a preview stream to a custom media sink using the specified encoding profile and sink settings. + An object that is used to control the asynchronous operation. + The encoding profile to use for the recording. + The activatable class ID of the media extension for the custom media sink. + Contains properties of the media extension. + + + Start recording to a custom media sink using the specified encoding profile. + An object that is used to control the asynchronous operation. + The encoding profile to use for the recording. + The media extension for the custom media sink. + + + Start recording to a custom media sink using the specified encoding profile and sink settings. + Anobject that is used to control the asynchronous operation. + The encoding profile to use for the recording. + The activatable class ID of the media extension for the custom media sink. + Contains properties of the media extension. + + + Starts recording asynchronously to a storage file. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + The encoding profile for the recording. + The storage file where the image is saved. + + + Starts recording to a random-access stream. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + The encoding profile for the recording. + The stream where the image data is written. + + + Stops preview. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + + + Stops recording. + Required to access cameras. + Required to access microphones. + Returns a IAsyncAction object that is used to control the asynchronous operation. + + + Gets an object that controls settings for the video camera. + Required to access cameras. + Required to access microphones. + A VideoDeviceController object. + + + Provides data for the MediaCapture.Failed event. + Required to access cameras. + Required to access microphones. + + + The error code of the error that caused the event. + Required to access cameras. + Required to access microphones. + The error code. + + + A message string for the error. + Required to access cameras. + Required to access microphones. + The message string. + + + Represents the method that will handle the MediaCapture.Failed event. + Required to access cameras. + Required to access microphones. + The MediaCapture object that raised the event. + Arguments that contain information about the event. + + + Contains initialization settings for the MediaCapture object which are passed to the MediaCapture.InitializeAsync method. + Required to access cameras. + Required to access microphones. + + + Gets the DeviceInformation.Id of the microphone. + Required to access cameras. + Required to access microphones. + The DeviceInformation.Id of the microphone. + + + Gets or sets a value that specifies the audio processing mode. + The audio processing mode. + + + Static method that gets a collection of the video capture devices on the system. + The video capture devices. + + + Creates a new instance of the MediaCaptureInitializationSettings object. + Required to access cameras. + Required to access microphones. + + + Gets or set the media category. + The media category. + + + Gets or sets the stream that is used for photo capture. + Required to access cameras. + Required to access microphones. + The stream that is used for photo capture. + + + Gets or sets the streaming mode. + Required to access cameras. + Required to access microphones. + The streaming mode. + + + Gets the DeviceInformation.Id of the video camera. + Required to access cameras. + Required to access microphones. + The DeviceInformation.Id of the video camera. + + + Contains read-only configuration settings for the MediaCapture object. + Required to access cameras. + Required to access microphones. + + + Gets the DeviceInformation.Id of the microphone. + Required to access cameras. + Required to access microphones. + The DeviceInformation.Id of the microphone. + + + Gets the audio processing mode. + The audio processing mode. + + + Gets a value that indicates if the operating system will make a sound when the capture device takes a picture. + true if a sound is played when the capture device takes a picture; otherwise, false. + + + Gets a value that indicates if the capture device supports recording video and taking a photo sequence at the same time. + true if the capture device supports concurrently recording video and capturing a photo sequence; otherwise, false. + + + Gets a value that indicates if the capture device supports recording video and taking a photo at the same time. + true if the capture device supports concurrently recording video and capturing a photo; otherwise, false. + + + Gets the horizontal 35mm equivalent focal length of the camera lens on the capture device. + The horizontal 35mm equivalent focal length of the camera lens. + + + Gets the media category of the media. + The media category + + + Gets the stream that is used for photo capture. + Required to access cameras. + Required to access microphones. + The stream that is used for photo capture. + + + Gets the pitch offset of the camera in degrees. + The pitch offset in degrees. + + + Gets the streaming mode. + Required to access cameras. + Required to access microphones. + The streaming mode. + + + Gets the vertical 35mm equivalent focal length of the camera lens on the capture device. + The vertical 35mm equivalent focal length of the camera lens. + + + Gets a value that indicates which video streams are independent of each other. + A value of VideoDeviceCharacteristic that indicates which video streams are independent pf each other. + + + Gets the DeviceInformation.Id of the video camera. + Required to access cameras. + Required to access microphones. + The DeviceInformation.Id of the video camera. + + + Defines values for types of media categories. + + + Media category is other. + + + Media is intended for real-time communications. + + + Specifies a type of stream on a media capture device. + Required to access cameras. + Required to access microphones. + + + A video preview stream. + + + A video recording stream. + + + An audio stream. + + + A photo stream. + + + Provides data for the photo sequence PhotoCaptured event. + + + Gets a value that indicates time offset in the photo sequence. + The + + + Gets the captured image associated with the event. + The captured image. + + + Gets a thumbnail version of the captured image associated with the event. + The thumbnail image. + + + Specifies which stream on a video camera is used to capture photos. + Required to access cameras. + Required to access microphones. + + + Automatically select the stream. + + + Use the video stream. + + + Use the photo stream. + + + Specifies the local power line frequency. + Required to access cameras. + Required to access microphones. + + + Power-line frequency control is disabled. + + + The power-line frequency is 50 Hz. + + + The power-line frequency is 60 Hz. + + + Represents the method that will handle RecordLimitationExceeded and related events. + The object where the event handler is attached. + + + Specifies the streaming mode for a media capture device. + Required to access cameras. + Required to access microphones. + + + Capture audio and video. + + + Capture audio only. + + + Capture video only. + + + Indicates which video streams are independent of each other. + + + All streams are independent. + + + Preview video streams are identical. + + + Preview photo streams are identical + + + Video and photo streams are identical + + + All streams are identical + + + Specifies the rotation of the video stream. + Required to access cameras. + Required to access microphones. + + + The video stream is not rotated. + + + The video stream is rotated 90 degrees clockwise. + + + The video stream is rotated 180 degrees clockwise. + + + The video stream is rotated 270 degrees clockwise. + + + Provides classes that define Family Safety settings for rated content. + + + Information used to filter a content catalog. + + + Gets the user's geographic region. + A String, representing the geographic region. + + + Gets the maximum allowed age rating level to show in a content catalog. No content rated above this level should be displayed. + An integer, that represents age. + + + Gets the maximum allowed rating level for content consumption. + An integer that represents the rating level. + + + Contains all behavior and functionality related to a user's Family Safety content settings. + + + Gets the user's region and max age ratings. + Returns a ContentRestrictionsBrowsePolicy object. + + + Indicates whether the rated content can be consumed. + This method returns these values:HideThe content's rating is higher than MaxBrowsableAgeRating and shouldn't be displayed in the content catalog. BlockRequestContentAccessAsync returns false if called with this content.Allow RequestContentAccessAsync allows this content. + The rated content info. + + + Initializes a new instance of the RatedContentRestrictions class. + + + Initializes a new instance of the RatedContentRestrictions class with the specified content. + The max age rating. + + + Determines whether the child is allowed to consume a piece of content. + Returns true if the child can consume the content. + The rated content info. + + + An event handler to notify apps when there are changes to the user's content settings. + + + Stores information about a piece of content. App developers create a RatedContentDescription object for each piece of content in their catalog. + + + The type of rating system applied to the content according to its region. + Specifies the type of a piece of content and the corresponding ratings system according to the region. + + + The ID of the content as determined by the app developer. + The ID of the content as a string. + + + The thumbnail image associated with the content. + An image associated with the content. + + + Initializes a new instance of the RatedContentDescription class. + The ID of the content, as specified by the app developer. + The title of the content. + The type of content that determines the ratings system associated with it. + + + The rating of the content, based on the corresponding rating system. + + + + The title of the content with the rating. + The title of the content as a string. Read/Write. + + + Specifies how the content is treated based on the child's settings. + + + Can be shown in the content catalog and consumed. + + + (Xbox only) If multiple users are logged in and the content is blocked for at least one user, then content is allowed with a warning displayed. + + + Can be shown in the content catalog, but will be blocked by RequestContentAccessAsync. + + + Can't be shown in the content catalog. It's rating is higher than the child's settings determined by MaxBrowsableAgeRating. + + + Specifies the type of the content to be rated. + + + In-app content for Windows 8.1 and Microsoft Xbox apps. + + + Apps on Windows 8.1 and Microsoft Xbox. + + + Apps on Windows 8.1 and Microsoft Xbox. + + + In-app content for Windows 8.1 and Microsoft Xbox apps. + + + In-app content for Windows 8.1 and Microsoft Xbox apps. + + + In-app content for Windows 8.1 and Microsoft Xbox apps. + + + Contains core media streaming API that support MediaStreamSource. The MediaStreamSource Sample demonstrates how to use the MediaStreamSource. + + + Defines an audio media stream. + + + Creates an instance of AudioStreamDescriptor class using the specified AudioEncodingProperties. + The encoding properties for the audio stream. + + + The encoding properties of the stream. + Describes the format of the audio stream. + + + Specifies whether the stream is currently in use by the MediaStreamSource. + true if the stream is currently in use by the MediaStreamSource; otherwise, false. + + + Gets or sets the RFC-1766 language code for the stream. + The RFC-1766 language code for the stream. + + + Gets or sets the name of the stream. + The name of the stream. + + + Represents a media source that delivers media samples to a media pipeline. + + + Defines a media stream. + + + Specifies whether the stream is currently in use by the MediaStreamSource. + true if the stream is currently in use by the MediaStreamSource; otherwise, false. + + + Gets or sets the RFC-1766 language code for the stream. + The RFC-1766 language code for the stream. + + + Gets or sets the name of the stream. + The name of the stream. + + + Represents a media sample used by the MediaStreamSource. + + + Gets the buffer which encapsulates the MediaStreamSample data. + The buffer. + + + Creates a MediaStreamSample from an IBuffer. + The sample created from the data in buffer. + The buffer that contains the media data used to create the MediaStreamSample. + The presentation time of this sample. + + + Asynchronously creates a MediaStreamSample from an IInputStream. + When this method completes, it returns the new file as a MediaStreamSample. + The stream that contains the media data used to create the MediaStreamSample. + The length of the data in the sample. This is the number of bytes that will be read from stream. + The presentation time of this MediaStreamSample. + + + Gets and sets the decode timestamp for this MediaStreamSample. + The decode timestamp. + + + Gets or sets a value to indicate that the previous MediaStreamSample in the sequence is missing. + true if the previous MediaStreamSample in the sequence is missing; otherwise, false. The default value is false. + + + Gets the duration of the sample. + The duration of the sample. + + + Gets a property map that enables getting and setting properties on the MediaStreamSample. + The extended properties map. + + + Gets or sets a value that indicates the MediaStreamSample contains a keyframe. + true if the MediaStreamSample contains a frame that can be decoded independently from other frames; otherwise, false. The default value is false. + + + Occurs when the MediaStreamSample has been processed by the media pipeline. + + + Gets a MediaStreamSampleProtectionProperties object, which is used for getting and setting properties that are specific to the Digital Rights Management (DRM) protection of the MediaStreamSample. + A collection of properties that are specific to the Digital Rights Management (DRM) protection of the MediaStreamSample. + + + Gets the time at which a sample should be rendered. This is also referred to as the presentation time. + The time at which the MediaStreamSample should be rendered. + + + Contains properties for the MediaStreamSample. + + + Adds an item to the MediaStreamSamplePropertySet. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the MediaStreamSamplePropertySet. + The key-value pair to add. + + + Removes all items from the property set. + + + Returns a value that indicates whether a specified key-value pair exists in the MediaStreamSamplePropertySet. + true if an item with that key exists in the MediaStreamSamplePropertySet; otherwise, false. + The key-value pair to check for in the MediaStreamSamplePropertySet. + + + Returns a value that indicates whether a specified key exists in the MediaStreamSamplePropertySet. + true if an item with that key exists in the MediaStreamSamplePropertySet; otherwise, false. + The key to check for in the MediaStreamSamplePropertySet. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the property set. + The iterator. The current position of the iterator is index 0, or the end of the property set if the property set is empty. + + + Gets an immutable view of the property set. + The immutable view. + + + Indicates if the specified key exists in the property set. + true if the key exists; otherwise, false. + The key to check. + + + Adds the specified key and value to the property set. + True if the method replaces a value that already exists for the key; false if this is a new key. + The key to add. + The value of the key. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the MediaStreamSamplePropertySet. + The ICollection of all keys in this MediaStreamSamplePropertySet. + + + Retrieves the value for the specified key. + The value, if an item with the specified key exists; otherwise, null. + The key to retrieve the value for. + + + Removes an item from the property set. + The key to remove. + + + Removes a specific item from the MediaStreamSamplePropertySet. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the MediaStreamSamplePropertySet. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of items contained in the property set. + The number of items in the property set. + + + Returns a value that indicates whether a specified key exists in the MediaStreamSamplePropertySet. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the MediaStreamSamplePropertySet; otherwise, false. + The key to check for in the MediaStreamSamplePropertySet. + The item, if it exists. Contains null if the item does not exist in the MediaStreamSamplePropertySet. + + + Gets an ICollection object containing the values of the MediaStreamSamplePropertySet. + The ICollection of all values in this MediaStreamSamplePropertySet. + + + Represents a collection properties that are specific to the Digital Rights Management (DRM) protection of the MediaStreamSample. + + + Gets the Digital Rights Management (DRM) initialization vector from the MediaStreamSample. + The initialization vector. + + + Gets the Digital Rights Management (DRM) key identifier from the MediaStreamSample. + Receives the key identifier used to decrypt the data. + + + Gets the Digital Rights Management (DRM) sub-sample mapping from the MediaStreamSample. + Receives the sub-sample mapping. + + + Sets the Digital Rights Management (DRM) initialization vector for the MediaStreamSample. + The value to set the Digital Rights Management (DRM) initialization vector to. + + + Sets the Digital Rights Management (DRM) key identifier for the MediaStreamSample. + The value to set the Digital Rights Management (DRM) key identifier to. + + + Sets the Digital Rights Management (DRM) sub-sample mapping for the MediaStreamSample. + The value to set the Digital Rights Management (DRM) sub-sample mapping to. + + + Represents a media source that delivers media samples directly to the media pipeline. + + + Adds a Digital Rights Management (DRM) protection key which is used by the MediaProtectionManager to encrypt and decrypt the specified stream. + The stream the key is used to encrypt and decrypt. + The key used to encrypt and decrypt the stream. + The Digital Rights Management (DRM) licence for the media. + + + Adds a new stream descriptor to the MediaStreamSource. + The descriptor to add. + + + Gets or sets the amount of data that is buffered by the MediaStreamSource. + The duration of the buffer which corresponds to the number of MediaStreamSamples the MediaStreamSource requests. The default value is 3 seconds. + + + Gets or sets whether or not the application supports changing its position in the media time-line. + true if the application supports changing its position in the media time-line; otherwise, false. The default value is false. + + + Occurs when the MediaStreamSource is shutting down. + + + Gets or sets the duration of the media time-line. + The duration of the media time-line. The default value is 0. + + + Gets or sets the Digital Rights Management (DRM) MediaProtectionManager used to protect the media. + The media protection manager. + + + Creates an instance of MediaStreamSource from the specified IMediaStreamDescriptor. + The AudioStreamDescriptor or VideoStreamDescriptor to create the MediaStreamSource from. + + + Creates an instance of MediaStreamSource from two IMediaStreamDescriptor objects. + The first AudioStreamDescriptor or VideoStreamDescriptor to create the MediaStreamSource from. + The second AudioStreamDescriptor or VideoStreamDescriptor to create the MediaStreamSource from. + + + Gets the music properties which are used for musicrelated metadata. + The music properties. + + + Notifies the MediaStreamSource that an error has occurred which is preventing the application from continuing to deliver data to the MediaStreamSource. + The cause of the error. + + + Occurs when the MediaStreamSource is paused and stops requesting MediaStreamSample objects for an unspecified period of time, but is expected to resume requesting MediaStreamSample objects from the current position. + + + Occurs when the MediaStreamSource request a MediaStreamSample for a specified stream. + + + Sets the range of data that the application is currently buffering. + The smallest time stamp of a MediaStreamSample buffered by the application. + The largest time stamp of a MediaStreamSample buffered by the application. + + + Occurs when the MediaStreamSource is ready to start requesting MediaStreamSample objects. The event can specify a position in the media time-line from which the first MediaStreamSample should be delivered. + + + Occurs when the MediaStreamSource will stop requesting MediaStreamSample objects for a certain stream and will start requesting MediaStreamSample objects from a different stream instead. + + + Gets or sets the thumbnail which is a reference to a stream for a video thumbnail image or music album art. + The reference to the thumbnail stream. + + + Gets the video properties which are used for video related metadata. + The video properties. + + + Provides data for the MediaStreamSource.Closed event. + + + Gets the object that represents the notification that the MediaStreamSource has been closed. + Provides information regarding why the MediaStreamSource was closed. + + + Specifies the reason why a MediaStreamSource was closed. + + + No error has occurred. + + + An unspecified error has occurred. + + + The app reported an error by calling the NotifyError method on the MediaStreamSource. + + + Components needed to implement the protection system are missing. + + + A failure occurred while initializing the protection system + + + One or more media streams use an encoding format which cannot be handled by the media pipeline. + + + The MediaStreamSource object does not have an event handler for the SampleRequested event. + + + Represents an object to be used by the MediaStreamSource.closed event to provide information to the application. + + + Gets the reason why the media stream source was closed. + The reason why the media stream source was closed. + + + Specifies errors related to MediaStreamSource. + + + An unspecified error has occurred in the application. + + + The application ran out of memory. + + + The application failed to open a file + + + The application failed to connect to a streaming media server or web server. + + + The network connection to the server was lost. + + + An unspecified network related error has occurred. + + + The application encountered an error while attempting to decode the media data. + + + The application does not support the media storage format or media encoding format. + + + Represents an object to be used by the MediaStreamSource.SampleRequest event to provide information to the application. + + + Defers assigning a MediaStreamSample to MediaStreamSourceSampleRequest object. + The deferral. + + + Provides a status update to the MediaStreamSource while the application is temporarily unable to deliver a requested MediaStreamSample. + A value between 0 to 100 that indicates the progress towards being able to deliver the requested MediaStreamSample. + + + Sets the MediaStreamSample requested by the MediaStreamSource. Applications deliver a MediaStreamSample to the MediaStreamSource by assigning a value to this property. + The sample which is delivered to the MediaStreamSource when this property is set. The default value is null. + + + Gets the IMediaStreamDescriptor interface of the stream for which a MediaStreamSample is being requested. + The stream for which the MediaStreamSample is being requested. + + + Provides a way for the application to asynchronously report that it has completed retrieving the MediaStreamSample. + + + Reports that the application has completed retrieving the MediaStreamSample. + + + Provides the data for the SampleRequested event. + + + Gets the object that represents the request for a MediaStreamSample. + Provides information regrading the request for a MediaStreamSample. + + + Provides data for the MediaStreamSource.Starting event. + + + Gets the object that represents the request to start accumulating MediaStreamSample data. + Provides information regrading the request to start accumulating MediaStreamSample data. + + + Represents a request from the MediaStreamSource.Starting event for the application to start accumulating MediaStreamSample objects from a specific position in the media. + + + Defers completing the MediaStreamSource.Starting event. + The deferral. + + + Specifies the starting position in the media time-line for subsequent MediaStreamSamples that will be delivered to the MediaStreamSource. + The actual starting point in the media time-line chosen by the application. + + + Specifies a reference to a TimeSpan object which represents a time position in the media time-line from which the application should return MediaStreamSample objects. + A reference that points to a TimeSpan which specifies the position in the media time-line to start sending MediaStreamSample objects. If the reference is null, the application should continue to return MediaStreamSample objects from the current position. + + + Provides a way for the application to asynchronously report that it has completed processing the MediaStreamSource.Starting event. + + + Reports that the application has completed processing the Starting event. + + + Represents an object to be used by the MediaStreamSource.SwitchStreamsRequest event to provide information to the application. + + + Defers completing the MediaStreamSource.SwitchStreamsRequested event. + The deferral. + + + Gets the stream descriptor for the stream that is now selected by the MediaStreamSource. + The selected stream. + + + Gets the stream descriptor for the stream which is no longer selected by the MediaStreamSource. + The previously selected stream. + + + Provides a way for the application to asynchronously report that it has completed the MediaStreamSource.SwitchStreamsRequested event. + + + Reports that the application has completed processing the MediaStreamSource.SwitchStreamsRequested event. + + + Provides data for the MediaStreamSource.SwitchStreamsRequested event. + + + Gets the object that represents the request to switch the streams. + Provides information regrading the request to switch the streams. + + + Defines an video media stream. + + + Gets the encoding properties on the video stream. + The encoding properties on the video stream. + + + Specifies whether the stream is currently in use by the MediaStreamSource. + true if the stream is currently in use by the MediaStreamSource; otherwise, false. + + + Gets or sets the RFC-1766 language code for the stream. + The RFC-1766 language code for the stream. + + + Gets or sets the name of the stream. + The name of the stream. + + + Creates an instance of the VideoEncodingProperties class using the specified video encoding. + The encoding properties for the video stream. + + + Accesses and controls devices for audio, video, and communications. + + + Controls device settings on the microphone. + + + Gets a list of the supported encoding properties for the device. + A list of the supported encoding properties. + The type of media stream for which to get the properties. + + + Gets the encoding properties for the specified media stream type for the device. + The encoding properties. + The type of media stream for which to get the properties. + + + Mutes or unmutes the microphone. + True if the microphone is muted; false otherwise. + + + Sets the encoding properties asynchronously for the specified media stream type for the device. + An IAsyncAction object that is used to control the asynchronous operation. + The type of media stream for which to set the properties. + The encoding properties to set. + + + Gets or sets the volume of the microphone. + The volume of the microphone. The value ranges from 0.0 (silent) to 100.0 (full volume). + + + Represents the properties, commands and events for handling calls on a telephony related device. + + + Occurs when the device receives a request to answer a call. + + + Occurs when the device receives a request for an audio transfer. + + + Occurs when a number is dialed from the device. + + + Ends the specified call. + The unique identifier of the specified call. + + + Returns a CallControl class that represents the audio communications device specified by the DeviceInformation ID being passed. + A class that represents the specified audio communications device. + The DeviceInformation ID of the specified audio communications device. + + + Returns a CallControl class that represents the default audio communications device. + A class that represents the default audio communications device. + + + Occurs when the device receives a request to hang up a call. + + + Indicates whether the telephony device has a built-in ringer. + A Boolean value that is True if the telephony device has a ringer, and False if it does not. + + + Indicates that the specified call is now active. + The unique identifier of the specified call. + + + Informs the device that there is an incoming call. + A call token that uniquely identifies this call. + Specifies whether the device should activate its built-in ringer. + A numeric string that specifies the incoming caller ID. This parameter can be null, and often is for many VoIP calls. + + + Updates device indicators to indicate an outgoing call. + A call token that uniquely identifies this call. + + + Occurs when a keypad button on the device has been pressed. + + + Occurs when the device receives a request to redial. + + + Contains information about a default audio capture device change event. + + + Gets the ID of the newly selected audio capture device that caused the change event. + ID of the newly selected audio capture device that caused the change event. + + + Gets the role of the newly selected audio capture device that caused the change event. + The role of the newly selected audio capture device that caused the change event. + + + Contains information about a default audio render device change event. + + + Gets the ID of the newly selected default audio render device that caused the change event. + ID of the newly selected default audio render device that caused the change event. + + + Gets the role of the newly selected default audio render device that caused the change event. + The role of the newly selected default audio render device that caused the change event. + + + Contains information for the DialRequested event. + + + Returns the contact that was dialed. + The contact. + + + Indicates that the DialRequested event has been handled. + + + Provides functionality for modifying exposure levels of captured photos. + + + Gets the maximum exposure time. + The maximum exposure time. + + + Gets the minimum exposure time. + The minimum exposure time. + + + Asynchronously sets the exposure compensation. + The object that is used to control the asynchronous operation. + The exposure compensation level to set the Value property to. The minimum and maximum values are specified by Min and Max. + + + Gets the smallest exposure compensation increment supported by the capture device. + The smallest exposure compensation increment. + + + Gets a value that specifies if the capture device supports the exposure compensation control. + true if the exposure compensation control is supported; otherwise, false. + + + Gets the exposure compensation level. + The exposure time. + + + Provides functionality for controlling the exposure settings on a capture device. + + + Gets a value that indicates if auto exposure is enabled. + true if auto exposure is enabled; otherwise, false. + + + Gets the maximum exposure time. + The maximum exposure time. + + + Gets the minimum exposure time. + The minimum exposure time. + + + Asynchronously enables or disable auto exposure. + The object that is used to control the asynchronous operation. + Specifies whether or not to enable or disable auto exposure. + + + Asynchronously sets the exposure time. + The object that is used to control the asynchronous operation. + The exposure time to set the Value property to. The minimum and maximum values are specified by Min and Max. + + + Gets the smallest exposure time increment supported by the capture device. + The smallest exposure time increment. + + + Gets a value that specifies if the capture device supports the exposure control. + true if the exposure control is supported; otherwise, false. + + + Gets the exposure time. + The exposure time. + + + Provides functionality for controlling the flash settings on a capture device. + + + Gets or sets a value that specifies if flash is automatically set. + true if auto flash is set; otherwise, false. + + + Gets a value that specifies if the flash on the capture device is enabled or disabled. + true if the flash is enabled; otherwise, false. + + + Gets or sets the intensity of the flash. + The power percent the torch LED is set to. + + + Gets a value that specifics if the device allows the torch LED power settings to be changed. + true if the device allows the torch LED power settings to be changed; otherwise, false. + + + Gets a value that specifies if the red eye reduction is enabled or disabled. + true if red eye reduction is enabled; otherwise, false. + + + Gets a value that specifies if the capture device supports red eye reduction. + true if the capture device supports red eye reduction; otherwise, false. + + + Gets a value that specifies if the capture device supports the flash control. + true if the capture device supports the FlashControl; otherwise, false. + + + Provides functionality for controlling the focus settings on a capture device. + + + Asynchronously focuses the device. + The object that is used to control the asynchronous operation. + + + Gets the maximum focus length, specified in millimeters. + The maximum focus. + + + Gets the minimum focus length, specified in millimeters. + The minimum focus length. + + + Gets the focus preset. + The focus preset. + + + Asynchronously sets the focus Preset. + The object that is used to control the asynchronous operation. + The focus preset to set the Preset property to. + + + Asynchronously sets the focus Preset, specifying if the operation must complete before the device is focused. + The object that is used to control the asynchronous operation. + The focus preset to set the Preset property to. + Specifies if the asynchronous operation must compelte before the device if focused. + + + Asynchronously sets the focus Value specified in millimeters. + The object that is used to control the asynchronous operation. + The value to set the focus to. The minimum and maximum values are specified by Min and Max. + + + Gets the smallest focus increment supported by the capture device. + The smallest focus increment. + + + Gets a value that specifies if the capture device supports the focus control. + true if the capture device supports the FocusControl; otherwise, false. + + + Gets the focus presets that the capture device supports. + The supported focus presets. + + + Asynchronously sets the focus Value. + The focus value to set the Value property to. The minimum and maximum values are specified by Min and Max. + + + Provides functionality for controlling the ISO film speed settings on a capture device. + + + Gets the ISO film speep preset. + The ISO preset. + + + Asynchronously sets the ISO film speed Preset. + The object that is used to control the asynchronous operation. + The ISO preset value to set the Preset property to. + + + Gets a value the specifies if the capture device supports the ISO speed control. + true if the ISO control is supported; otherwise, false. + + + Gets the ISO presets that the capture device supports. + The supported ISO presets. + + + Contains information for the KeypadPressed event. + + + Returns the value of the keypad button on the device that was pressed. + The key. One of the values of the TelephonyKey enumeration. + + + Provides functionality for managing the low shutter lag photo capture mode on the capture device. + + + Gets or sets the desired size for thumbnails, which is the largest length of the image, either width or height. + The desired thumbnail size. + + + Gets the current frame rate at which pictures can be taken. + The current frame rate. + + + Gets the highest frame rate supported when video and photos are being captured concurrently. + The highest concurrent frames per second. + The media encoding properties. + + + Gets a value that specifies if hardware acceleration is supported for thumbnails. + true if hardware acceleration for thumbnails is supported; otherwise, false. + + + Gets a value that enables and disables thumbnail support. + true if thumbnails are enabled; otherwise, false. + + + Gets or sets the media format for the thumbnails. + The media format for the thumbnails. + + + Provides functionality for managing the low shutter lag photo sequence mode on the capture device. + + + Gets or sets the desired size for thumbnails, which is the largest length of the image, either width or height. + The desired thumbnail size. + + + Gets the current frame rate at which pictures can be taken. + The current frame rate. + + + Gets the highest frame rate supported when video and photos sequences are being captured concurrently. + The highest concurrent frames per second. + The media encoding properties. + + + Gets a value that specifies if hardware acceleration is supported for thumbnails in photo sequence mode. + true if hardware acceleration is supported for thumbnails in photo sequence mode; otherwise, false. + + + Gets the maximum number of past photos that can be stored. + The maximum number of past photos. + + + Gets the maximum number of photos that can be taken per second. + The maximum number of photos per second. + + + Gets or sets a value that specifies the number of past photos to store. + The number of past photos to store. To determine the maximum number of past photos that can be stored, check the MaxPastPhotos property. + + + Gets or sets the number of photos that are taken per second. + The number of photos taken per second. + + + Gets a value that specifies if the capture device supports low shutter lag photo sequence mode. + true if photo sequence mode is supported; otherwise, false. + + + Gets a value that enables and disables thumbnail support in photo sequence mode. + true if thumbnails are enabled; otherwise, false. + + + Gets or sets the media format for the thumbnails. + The media format for the thumbnails. + + + Provides methods used to select devices for capturing and rendering audio, and for capturing video. + + + Raised when the default audio capture device is changed. + + + Raised when the default audio render device is changed. + + + Returns the identifier string of a device for capturing audio. + The identifier string of the audio capture device. + + + Returns the identifier string of a device for rendering audio. + The identifier string of the audio rendering device. + + + Returns the identifier string of the default device for capturing audio in the specified role. + The identifier string of the default device. + The specified audio device role (console, media, or communications). + + + Returns the identifier string of the default device for rendering audio in the specified role. + The identifier string of the default device. + The specified audio device role (console, media, or communications). + + + Returns the identifier string of a device for capturing video. + The identifier string of the video capture device. + + + Gets or sets a device setting on a camera. + + + Gets the capabilities of the camera for this camera setting. + The capabilities, including the supported range of values, the default value, and the step size. + + + Indicates whether automatic adjustment of the camera setting is enabled. + Returns true if the method succeeds, or false otherwise. + True if automatic adjustment is enabled; false otherwise. + + + Gets the value of the camera setting. + Returns true if the method succeeds, or false otherwise. + The current value of the setting. The units depend on the setting. + + + Enables or disables automatic adjustment of the camera setting. + Returns true if the method succeeds, or false otherwise. + True to enable automatic adjustment; or false to disable automatic adjustment. If false, call TrySetValue to adjust the setting. + + + Sets the camera setting. + Returns true if the method succeeds, or false otherwise. + The new value of the camera setting. The units depend on the setting. + + + Gets the capabilities of a camera setting. + + + Queries whether the camera supports automatic adjustment of the setting. + True if the camera supports automatic adjustment of the setting; otherwise false. + + + Gets the default value of the camera setting. + The default value. + + + Sets the maximum value of the camera setting. + The maximum value. + + + Gets the minimum value of the camera setting. + The minimum value. + + + Ges the step size for the setting. + The step size. + + + Indicates whether the camera supports this camera setting. + True if the camera supports the setting; otherwise false. + + + Contains information for the RedialRequested event. + + + Indicates that the RedialRequested event has been handled. + + + Represents a region of interest which is a rectangular region on the image which is used for functions such as focus and exposure. + + + Gets or sets a value that specifies if auto exposure is enabled. + true if auto exposure is enabled; otherwise, false. + + + Gets or sets a value that specifies if auto focus is enabled. + true if auto focus is enabled; otherwise, false. + + + Gets or sets a value that specifies if auto white balance is enabled. + true if auto white balance; otherwise, false. + + + Gets or sets the rectangle that defines the region of focus. + The rectangle that defines the region of focus. + + + Creates a new instance of the RegionOfInterest control. + + + Provides functionality to mange the regions of interest on a device. + + + Gets a value that specifies if auto exposure is supported on the capture device. + true if auto exposure is supported; otherwise, false. + + + Gets a value that specifies if auto focus is supported on the capture device. + true if auto focus is supported; otherwise, false. + + + Gets a value that specifies if auto white balance is supported on the capture device. + true if auto white balance is supported; otherwise, false. + + + Asynchronously clears the regions of interests. + The object that is used to control the asynchronous operation. + + + Gets the maximum number of regions of interest that can be specified. + The maximum number of regions of interest. + + + Asynchronously sets the regions of interest. + The object that is used to control the asynchronous operation. + The regions of interest. + + + Asynchronously sets the regions of interest. + The object that is used to control the asynchronous operation. + The regions of interests. + Specifies if the values should be locked. + + + Provides functionality for controlling the scene mode settings on a capture device. + + + Asynchronously sets the color temperature Value. + The object that is used to control the asynchronous operation. + The scene mode to set the Value property to. + + + Gets the scene modes supported on the capture device. + The supported scene modes. + + + Gets the current scene mod ethe capture device is set to. + The scene mode. + + + Provides functionality for controlling the torch LED settings on a capture device. + + + Gets or sets a value that enables and disables the torch LED on the device. + true if the torch LED is enabled; otherwise, false. + + + Gets or sets the intensity of the torch LED. + The power percent the torch LED is set to. + + + Gets a value that specifics if the device allows the torch LED power settings to be changed. + true if the power settings can be modified; otherwise, false. + + + Gets a value that specifies if the capture device supports the torch control. + true if the capture device supports the torch control; otherwise, false. + + + Controls device settings on the camera. + + + Gets the exposure compensation control for this video device. + The exposure compensation control + + + Gets the exposure control for this video device. + The exposure control. + + + Gets the flash control for this video device. + The flash control. + + + Gets the focus control for this video device. + The focus control. + + + Gets the ISO film speed control for this video device. + The ISO film speed control. + + + Gets the low shutter lag photo control for this video device. + The low shutter lag photo control. + + + Gets the low shutter lag photo sequence control for this video device. + The photo sequence control. + + + Gets or sets the primary use for the device. + The primary use for the device. + + + Gets the regions of interest control for this video device. + The regions of interest control. + + + Gets the scene mode control for this video device. + The scene mode control. + + + Gets the torch control for this video device. + The torch control. + + + Gets the white balance control for this video device. + The white balance control. + + + Specifies whether back-light compensation is enabled on the camera. + A MediaDeviceControl object that provides methods to get and set the back-light compensation. + + + Gets or sets the brightness level on the camera. + A MediaDeviceControl object that provides methods to get and set the brightness. + + + Gets or sets the contrast level on the camera. + A MediaDeviceControl object that provides methods to get and set the contrast. + + + Gets or sets the camera's exposure time. + A MediaDeviceControl object that provides methods to get and set the exposure time. + + + Gets or sets the camera's focus setting. + A MediaDeviceControl object that provides methods to get and set the focus. + + + Gets a list of the supported encoding properties for the video device. + A list of the supported encoding properties. + The type of media stream for which to get the properties. + + + Gets a property on the camera. + The property value. + The property identifier. + + + Gets the encoding properties for the specified media stream type for the video device. + The encoding properties. + The type of media stream for which to get the properties. + + + Gets or sets the camera's hue setting. + A MediaDeviceControl object that provides methods to get and set the hue. + + + Gets or sets the camera's pan setting. + A MediaDeviceControl object that provides methods to get and set the pan. + + + Gets or sets the camera's roll setting. + A MediaDeviceControl object that provides methods to get and set the roll. + + + Sets a property on the device. + The property identifier. + The new value of the property. + + + Sets the encoding properties asynchronously for the specified media stream type for the video device. + An IAsyncAction object that is used to control the asynchronous operation. + The type of media stream for which to set the properties. + The encoding properties to set. + + + Gets or sets the camera's tilt setting. + A MediaDeviceControl object that provides methods to get and set the tilt. + + + Gets the local power line frequency. + Returns true if the method succeeded, or false otherwise. + The power line frequency. + + + Sets the local power line frequency. + Returns true if the method succeeded, or false otherwise. + The power line frequency. + + + Gets or sets the white balance on the camera. + A MediaDeviceControl object that provides methods to get and set the white balance. + + + Gets and sets the camera's zoom setting. + A MediaDeviceControl object that provides methods to get and set the zoom. + + + Provides functionality for controlling the white balance settings on a capture device. + + + Gets the maximum white balance value. + The maximum white balance value. + + + Gets the minimum white balance value. + The minimum white balance value. + + + Gets the color temperature preset. + The color temperature preset. + + + Asynchronously sets the color temperature Preset. + The object that is used to control the asynchronous operation. + The color temperate preset to set the Preset property to. + + + Asynchronously sets the color temperature Value. + The object that is used to control the asynchronous operation. + The temperature value to set the Value property to. + + + Gets the step value. + The step value. + + + Gets a value that specifies if the capture device supports the white balance control. + true if the capture device supports the white balance control; otherwise, false. + + + Gets the color temperature value. + The color temperature value. + + + Indicates the role of an audio device. + + + The audio device is used in the default role. + + + The audio device is used for communications. + + + Defines the possible capture scene modes. + + + Indicates that the best settings and exposure optimization are automatically performed. + + + Indicates that no optimization is performed on the captured frame. + + + Indicates that the captured framed is optimized for macro photos. + + + Indicates that the captured framed is optimized for portrait photos. + + + Indicates that the captured framed is optimized for sports photos. + + + Indicates that the captured framed is optimized for photos that include snow. + + + Indicates that the captured framed is optimized for night photos + + + Indicates that the captured framed is optimized for beach photos. + + + Indicates that the captured framed is optimized for sunset photos. + + + Indicates that the captured framed is optimized for candlelight photos. + + + Indicates that the captured framed is optimized for photos of landscape. + + + Indicates that the captured framed is optimized for low-light portrait photos. + + + Indicates that the captured framed is optimized for photos that are backlit. + + + Defines the values for the primary use of the capture device. + + + The capture device is used primarily for photos. + + + The capture device is used primarily for video. + + + Defines the values for the possible color temperature presets. + + + Indicates that the color temperature is set automatically. + + + Indicates that the color temperature is set manually. + + + Indicates that the color temperature is adjusted for a cloudy scene. + + + Indicates that the color temperature is adjusted for a daylight scene. + + + Indicates that the color temperature is adjusted for a scene lit by a flash. + + + Indicates that the color temperature is adjusted for a scene lit by florescent light. + + + Indicates that the color temperature is adjusted for a scene lit by tungsten light. + + + Indicates that the color temperature is adjusted for a scene lit by candlelight. + + + Defines the values for the possible focus presets. + + + Indicates that focus is automatically set by the capture. + + + Indicates that focus is manually set. + + + Indicates that the capture device uses a close autofocus range. + + + Indicates that the capture device uses a normal autofocus range. + + + Indicates that the capture device uses an infinite autofocus range. + + + Indicates that the capture device uses a hyperfocal autofocus range. + + + Defines the possible values for ISO speed presets. + + + The film speed is automatically set. + + + The film speed is set to 50 ISO. + + + The film speed is set to 80 ISO. + + + The film speed is set to 100 ISO. + + + The film speed is set to 200 ISO. + + + The film speed is set to 400 ISO. + + + The film speed is set to 800 ISO. + + + The film speed is set to 1600 ISO. + + + The film speed is set to 3200 ISO. + + + The film speed is set to 6400 ISO. + + + The film speed is set to 12800 ISO. + + + The film speed is set to 25600 ISO. + + + Indicates the keypad button that was pressed on a telephony device. + + + The 0 keypad button. + + + The 1 keypad button. + + + The 2 keypad button. + + + The 3 keypad button. + + + The 4 keypad button. + + + The 5 keypad button. + + + The 6 keypad button. + + + The 7 keypad button. + + + The 8 keypad button. + + + The 9 keypad button. + + + The * keypad button. + + + The # keypad button. + + + Keypad button A. + + + Keypad button B. + + + Keypad button C. + + + Keypad button D. + + + Called when the default audio device is changed for either audio render or capture. + + + Gets the ID of the newly selected audio device that raised the device change event. + ID of the newly selected audio device that raised the device change event. + + + Gets the role of the newly selected audio device that raised the device change event. + The role of the newly selected audio device that raised the device change event. + + + Controls device settings on a video camera or microphone. + + + Gets a list of the supported encoding properties for the device. + A list of the supported encoding properties. + The type of media stream for which to get the properties. + + + Gets the encoding properties for the specified media stream type for the device. + The encoding properties. + The type of media stream for which to get the properties. + + + Sets the encoding properties asynchronously for the specified media stream type for the device. + An IAsyncAction object that is used to control the asynchronous operation. + The type of media stream for which to set the properties. + The encoding properties to set. + + + Handles the AnswerRequested and AudioTransferRequested events. + The CallControl object that raised the event. + + + Handles the DialRequested event. + The CallControl object that raised the event. + A class containing information for the event. + + + Handles the KeypadPressed event. + The CallControl object that raised the event. + A class containing information for the event. + + + Handles the RedialRequested event. + The CallControl object that raised the event. + A class containing information for the event. + + + Contains classes for discovering the audio processing chain on a device. + + + Represents an audio effect. + + + Gets the type of the audio effect. + The type of the audio effect + + + Represent an audio capture effects manager which can be used to discover the audio processing chain on a device for a specific media category and audio processing mode. + + + Occurs when audio process chain changes. + + + Gets the list of audio effects on the device. + The list of audio effects. + + + Provides functionality for creating audio capture and render effects manager objects. + + + Creates a AudioCaptureEffectsManager object for the specified device for a specific media category. + The new audio capture effects manager. + The device id. + The media category. + + + Creates a AudioCaptureEffectsManager object for the specified device for a specific media category and audio processing mode. + The new audio capture effects manager. + The device id. + The media category. + The audio processing mode. + + + Creates a AudioRenderEffectsManager object for the specified device for a specific media category. + The new audio render effects manager. + The device id. + The audio render category. + The audio precessing mode. + + + Creates a AudioRenderEffectsManager object for the specified device for a specific media category and audio processing mode. + The new audio render effects manager. + The device id. + The audio render category. + + + Represent an audio render effects manager which can be used to discover the audio processing chain on a device for a specific media category and audio processing mode. + + + Occurs when audio process chain changes. + + + Gets the list of audio effects on the device. + The list of audio effects. + + + Defines values for audio effect types. + + + Other. + + + An acoustic echo cancellation effect. + + + A noise suppression effect. + + + A automatic gain control effect. + + + A beam forming effect. + + + A constant tone removal effect. + + + A equalizer effect. + + + A loudness equalizer effect. + + + A bass boost effect. + + + A virtual surround sound effect. + + + A virtual headphones effect. + + + A speaker fill effect. + + + A room correction effect. + + + A bass management effect. + + + An environmental effect. + + + A speaker protection effect. + + + A speaker compensation effect. + + + A dynamic range compression effect. + + + Provides classes and other programming elements needed to create properties for media formats. + + + Describes the format of an audio stream. + + + Creates a new instance of the AudioEncodingProperties class. + + + Gets or sets the audio bit rate. + The average bit rate of the audio stream, in bits per second. + + + Gets or sets the number of bits per audio sample. + The number of bits per audio sample. + + + Gets or sets the number of audio channels. + The number of audio channels. + + + Creates an instance of AudioEncodingProperties for Advanced Audio Coding (AAC) audio. + The audio encoding properties. + The audio sampling rate. + The number of audio channels. + The audio bit rate. + + + Creates an instance of AudioEncodingProperties for Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The audio encoding properties. + The audio sampling rate. + The number of audio channels. + The audio bit rate. + + + Creates an instance of AudioEncodingProperties for MPEG Audio Layer-3 (MP3) audio. + The audio encoding properties. + The audio sampling rate. + The number of audio channels. + The audio bit rate. + + + Creates an instance of AudioEncodingProperties for Pulse Code Modulation (PCM) audio. + The audio encoding properties. + The audio sampling rate. + The number of audio channels. + The audio bit rate. + + + Creates an instance of AudioEncodingProperties for Windows Media Audio (WMA). + The audio encoding properties. + The audio sampling rate. + The number of audio channels. + The audio bit rate. + + + Gets the media format user data. + Receives the media format data. + + + Gets additional format properties for the audio stream. + A property set that contains format properties. + + + Gets or sets audio sampling rate. + The number of audio samples per second. + + + Sets the media format user data. + The media data to set. + + + Gets or sets the subtype of the format. + The subtype. + + + Gets the format type. + The format type. For audio streams, the format type is Audio. + + + Describes the level of quality of the audio encoding. The higher the quality, the better the audio fidelity, and the larger the resulting file. + + + Auto fills in the proper settings based on the current camera settings. So when Auto is used, settings that are manually modified are ignored. For example, if you create a preset profile using one the static create methods, such as CreateM4a, and specify Auto as the encoding quality, any changes you make to the properties will be overwritten with values based on the current camera settings. + + + Stereo, Professional audio sampling rate (48 kHz), 192 kilobits per second (kbps) data transfer rate. + + + Stereo, CD quality sampling rate (44.1 kHz), 128 kilobits per second (kbps) data transfer rate. + + + Mono, CD quality sampling rate (44.1 kHz), 96 kilobits per second (kbps) data transfer rate. + + + Describes a media container format. + + + Creates a new instance of the ContainerEncodingProperties class. + + + Gets additional format properties for the media container. + A property set that contains format properties. + + + Gets or sets the subtype of the media container. + The subtype. + + + Gets the format type. + The format type. For media containers, the format type is Container. + + + Provides properties for getting H.265 profile ids. + + + Gets the H.264 baseline profile. + The baseline profile. + + + Gets the H.264 constrained baseline profile. + The constrained baseline profile. + + + Gets the H.264 extended profile. + The extended profile. + + + Gets the H.264 high profile. + The high profile. + + + Gets the H.264 high 10 profile. + The high 10 profile. + + + Gets the H.264 high 4:2:2 profile. + The high 4:2:2 profile. + + + Gets the H.264 high 4:4:4 profile. + The high 4:4:4 profile. + + + Gets the H.264 main profile. + Gets the main profile. + + + Gets the H.264 multiview profile. + The multiview profile. + + + Gets the H.264 stereo high profile. + The stereo high profile. + + + Describes the format of an image stream. + + + Creates an instance of ImageEncodingProperties for a BMP image. + The image encoding properties. + + + Creates an instance of ImageEncodingProperties for a JPEG image. + The properties for the image stream. + + + Creates an instance of ImageEncodingProperties for a JPEG XR image. + The properties for the image stream. + + + Creates an instance of ImageEncodingProperties for a PNG image. + The properties for the image stream. + + + Creates an instance of ImageEncodingProperties for an uncompressed image. + The image encoding properties. + The media pixel format. + + + Gets or sets the image height. + The height of the image, in pixels. + + + Creates a new instance of the ImageEncodingProperties class. + + + Gets additional format properties for the image stream. + A property set that contains format properties. + + + Gets or sets the subtype of the format. + The subtype. + + + Gets the format type. + The format type. For image streams, the format type is Image. + + + Gets or sets the image width. + The width of the image, in pixels. + + + Describes the format of a media stream or media container. + + + Gets additional format properties. + A property set that contains format properties. + + + Gets or sets the subtype of the format. + The subtype. + + + Gets the format type. + The format type. The value can be the string representation of a GUID in canonical form, or one of the predefined values listed in the following table.ValueDescriptionAudioAudio stream. +To get details of the audio format, use AudioEncodingProperties. ContainerMedia container. +ImageStill image data. To get details of the image format, use ImageEncodingProperties. VideoVideo stream. +To get details of the video format, use VideoEncodingProperties. + + + Describes the encoding profile for an audio or video file. The encoding profile includes descriptions of the audio and video encoding formats, and a description of the media container. + + + Gets or sets the encoding properties for the audio stream. + The encoding properties of the audio stream. If the profile does not contain an audio stream, the value is null. + + + Gets or sets the properties of the media container. + The properties of the media container. + + + Creates an instance of MediaEncodingProfile for AVI. + The media encoding profile. + The video quality. + + + Creates an encoding profile from an existing media file. + An object that is used to control the asynchronous operation. + The media file from which to create the profile. + + + Creates an encoding profile from a stream that contains media data. + An object that is used to control the asynchronous operation. + The media stream from which to create the profile. + + + Creates an encoding profile for AAC audio. + Returns a media encoding profile. + Specifies whether to create a profile with a low bit rate, medium bit rate, or high bit rate. + + + Creates an encoding profile for MP3 (MPEG-1 layer 3) audio. + Returns a media encoding profile. + Specifies whether to create a profile with a low bit rate, medium bit rate, or high bit rate. + + + Creates an encoding profile for H.264 video. + Returns a media encoding profile. + Specifies the video resolution of the profile. + + + Creates an instance of MediaEncodingProfile for WAV + The media encoding profile. + The audio encoding quality. + + + Creates an encoding profile for Windows Media Audio (WMA). + Returns a media encoding profile. + Specifies whether to create a profile with a low bit rate, medium bit rate, or high bit rate. + + + Creates an encoding profile for Windows Media Video (WMV). + Returns a media encoding profile. + Specifies the video resolution of the profile. + + + Creates a new instance of the MediaEncodingProfile class. + + + Gets or sets the encoding properties for the video stream. + The encoding properties of the video stream. If the profile does not contain a video stream, the value is null. + + + Provides properties for getting the standard names for media subtypes. + + + Gets the name for Advanced Audio Coding (AAC). + The name for AAC. + + + Gets the name for Advanced Audio Coding (AAC) audio in Audio Data Transport Stream (ADTS) format. + The name for AAC ADTS. + + + Gets the name for Dolby Digital audio (AC-3). + The name for AC-3. + + + Gets the name for Adaptive Multi-Rate (AmrNb). + The name of AMR-NB. + + + Gets the name for Adaptive Multi-Rate Wideband. + The name for AMR-WB + + + Gets the name for RGB 32 with alpha channel. + The name for AGB32. + + + Gets the name for Advanced Systems Format (ASF). + The name for ASF. + + + Gets the name for Audio Video Interleave (AVI). + The name for AVI. + + + Gets the name for BGRA8. + The name for BGRA8. + + + Gets the name for BMP file format. + The name from BMP. + + + Gets the name Dolby Digital Plus (E-AC-3). + Gets the name for E-AC-3. + + + Gets the name for Uncompressed IEEE floating-point audio. + Gets the name for float. + + + Gets the name for Graphics Interchange Format (GIF). + Gets the name for GIF. + + + Gets the name for H.263. + The name for H.263. + + + The name for H.264. + The name for H.264. + + + Get the name for H.264Es. + The name for H.264Es. + + + Gets the name for High Efficiency Video Coding (HEVC). + The name for HEVC. + + + Gets the name for HEVCES. + The name for HEVCES. + + + Gets the name for IYUV. + The name for IYUV. + + + Gets the name for JPEG. + The name for JPEG. + + + Gets the name for JPEG-XR. + The name for JPEG-XR. + + + Gets the name for Motion JPEG (MJPG). + The name for MJPG. + + + Gete the name for MPEG Audio Layer-3 (MP3). + The name for MP3. + + + Gets the name for MPEG. + The name for MPEG. + + + Gets the name for MPEG-1. + The name for MPEG-1. + + + Gets the name for MPEG-2. + The name for MPEG-2. + + + Gets the name for MPEG-4. + The name for MPEG-4. + + + Gets the name for NV12. + The name for NV12. + + + Gets the name for PCM. + The name for PCM. + + + Gets the name for Portable Network Graphics (PNG). + Gets the name for PNG. + + + Gets the name RGB 24. + The name for RGB 24. + + + Gets the name for RGB 32. + The name for RGB 32. + + + Gets the name for TIFF. + The name for TIFF. + + + Gets the name for Waveform Audio File (WAVE). + The name for WAVE. + + + Gets the name for Windows Media Audio 8. + Gets the name for WMA 8. + + + Gets the name for Windows Media Audio 8. + The name for WMA 9. + + + Gets the name for Windows Media Video 9. + Gets the name for WMV3. + + + Gets the name for Windows Media Video 9 Advanced Profile. + Gets the name for WVC1. + + + Gets the name for YUY2. + The name for YUY2. + + + Gets the name for YV12. + The name for YV12. + + + Defines values for media pixel formats. + + + NV12 media pixel format. + + + BGRA8 media pixel format. + + + Represents a set of media properties. + + + Adds an item to the MediaPropertySet. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the MediaPropertySet. + The key-value pair to add. + + + Removes all items from the property set. + + + Returns a value that indicates whether a specified key-value pair exists in the MediaPropertySet. + true if an item with that key exists in the MediaPropertySet; otherwise, false. + The key-value pair to check for in the MediaPropertySet. + + + Returns a value that indicates whether a specified key exists in the MediaPropertySet. + true if an item with that key exists in the MediaPropertySet; otherwise, false. + The key to check for in the MediaPropertySet. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator to enumerate the items in the property set. + The iterator. The current position of the iterator is index 0, or the end of the property set if the property set is empty. + + + Returns an immutable view of the property set. + The immutable view. + + + Indicates whether the property set has an item with the specified key. + True if the property set has an item with the specified key; otherwise, false. + The key. + + + Adds an item to the property set. + True if the method replaced a value that already existed for the key; false if this is a new key. + The key of the item to insert. + The value of the item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the MediaPropertySet. + The ICollection of all keys in this MediaPropertySet. + + + Retrieves the value for the specified key. + The value, if an item with the specified key exists. Otherwise, null. + The key. + + + Creates an instance for MediaPropertySet. + + + Removes an item from the property set. + The key of the item to remove. + + + Removes a specific item from the MediaPropertySet. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the MediaPropertySet. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of items contained in the property set. + The number of items in the property set. + + + Returns a value that indicates whether a specified key exists in the MediaPropertySet. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the MediaPropertySet; otherwise, false. + The key to check for in the MediaPropertySet. + The item, if it exists. Contains null if the item does not exist in the MediaPropertySet. + + + Gets an ICollection object containing the values of the MediaPropertySet . + The ICollection of all values in this MediaPropertySet. + + + Represents ratios used in media operations. + + + The denominator of the MediaRatio. + The denominator value. + + + The numerator of the MediaRatio. + The numerator value. + + + Defines values for media formats for thumbnails. + + + BMP media format. + + + BGRA8 media format. + + + Provides properties for getting MPEG-2 profile ids. + + + Gets the MPEG-2 high profile. + The MPEG-2 high profile. + + + Gets the MPEG-2 main profile. + The MPEG-2 main profile. + + + Gets the MPEG-2 signal to noise ratio scalable profile. + The MPEG-2 signal to noise ratio scalable profile. + + + Gets the MPEG-2 simple profile. + The MPEG-2 simple profile. + + + Gets the MPEG-2 spatially scalable profile. + The MPEG-2 spatially scalable profile. + + + Describes the format of a video stream. + + + Creates an instance of VideoEncodingProperties for a H.263 video. + The video encoding properties. + + + Creates an instance of VideoEncodingProperties for a MPEG-2 video. + The video encoding properties. + + + Creates an instance of VideoEncodingProperties for a uncompressed video. + The video encoding properties. + The media subtype of the format. + The video image width. + The video image height. + + + Gets the media format user data. + Receives the media format data. + + + Gets or sets the media format profile. + The media format profile. + + + Sets the media format user data. + The media data to set. + + + Gets or sets the video bit rate. + The average bit rate of the video stream, in bits per second. + + + Gets or sets the video frame rate. + The frame rate, in frames per second.The frame rate is expressed as a ratio. For example, if the frame rate is 30 frames per second (fps), the ratio is 30/1. If the frame rate is 29.97 fps, the ratio is 30,000/1001. + + + Gets or sets the video image height. + The height of the video image, in pixels. + + + Gets or sets the pixel aspect ratio. + The pixel aspect ratio. + + + Gets additional format properties for the video stream. + A property set that contains format properties. + + + Gets or sets the subtype of the format. + The subtype. + + + Gets the format type. + The format type. For video streams, the format type is Video. + + + Gets or sets the video image width. + The width of the video image, in pixels. + + + Creates a new instance of the VideoEncodingProperties class. + + + Determines the video encoding format. + + + Auto fills in the proper settings based on the current camera settings. So when Auto is used, settings that are manually modified are ignored. For example, if you create a preset profile using one the static create methods, such as CreateWmv, and specify Auto as the encoding quality, any changes you make to the properties will be overwritten with values based on the current camera settings. + + + HD1080p format. + + + HD720p format. + + + Wvga format. + + + Ntsc format. + + + Pal format. + + + Vga format. + + + Qvga format. + + + Provides classes for creating and saving media playlists for playback. + + + Provides access to a media playlist. + + + Creates a new instance of a Playlist object. + + + Asynchronously loads files into a playlist. + Represents the asynchronous operation for loading the playlist. The GetResults method of this IAsyncOperation object returns the playlist. + Represents the files to load. + + + Asynchronously saves the playlist to a specified file and folder. + Represents the asynchronous operation to save the playlist to a specified file and folder. + The folder in which to save the playlist. + The name of the playlist to save. + The action to take if the playlist is saved to an existing file. One of the values of the NameCollisionOption enumeration. + + + Asynchronously saves the playlist to a specified file and folder, in a specified format. + Represents the asynchronous operation to save the playlist to a specified file and folder. + The folder in which to save the playlist. + The name of the playlist to save. + The action to take if the playlist is saved to an existing file. One of the values of the NameCollisionOption enumeration. + The playlist format. One of the values of the PlaylistFormat enumeration. + + + Asynchronously saves the playlist. + Represents the asynchronous action to save the playlist. + + + The set of media files that make up the playlist. + The list of media files that make up the playlist. + + + Indicates the format of a playlist file. + + + Windows Media playlist. + + + Zune playlist. + + + M3U playlist. + + + Supports the streaming of audio, video, and images to remote devices. + + + Provides information about the CurrentTimeChangeRequested event. + + + Gets the new time that the Play To source audio or video stream has been changed to. + The new time that the Play To source audio or video has been changed to. + + + Provides information about the MuteChangeRequested event. + + + Gets a value that indicates whether mute or unmute was requested. + True if mute was requested; otherwise false. + + + Provides information about the PlaybackRateChangeRequested event. + + + Gets the new playback rate. + The new playback rate. + + + Provides information about a Play To connection. + + + Occurs when an error is encountered for the Play To connection. + + + Gets the state of the Play To connection. + The state of the Play To connection. + + + Occurs when the state of the Play To connection has changed. + + + Occurs when the Play To connection is transferred to the next Play To source. + + + Describes an error on a Play To connection. + + + No error occurred. + + + The Play To target device has not responded for at least 5 seconds. + + + The Play To target device has encountered an error. + + + The Play To target device is locked. + + + The Play To target device failed to play the protected content. + + + Provides information about the Error event. + + + Gets the error code for a Play To connection error. + The error code for a Play To connection error. + + + Gets the error message for a Play To connection error. + The error message for a Play To connection error. + + + Describes the status of a Play To connection. + + + The connection is disconnected. + + + The connection is connected. + + + The connection is rendering media on the Play To target device. + + + Provides information about the StateChanged event. + + + Gets the current state after the Play To connection state has changed. + The current state after the Play To connection state has changed. + + + Gets the previous state before the Play To connection state was changed. + The previous state before the Play To connection state was changed. + + + Provides information about the Transferred event. + + + Gets the current Play To source that a connection was transferred to. + The current Play To source that a connection was transferred to. + + + Gets the previous Play To source that a connection was transferred from. + The previous Play To source that a connection was transferred from. + + + Provides access to Play To capabilities. + + + Enables or disables the default source selection for Play To. + True to enable default source selection; otherwise false. The default is true. + + + Gets the Play To manager for the current view. + The Play To manager for the current view. + + + Displays the Play To UI. + + + Occurs when a user requests media to stream to a Play To target device. + + + Occurs when a Play To source element has been selected. + + + Represents a Play To target. + Required to access home and work networks (Intranet). + + + Occurs when the time location of the playback has changed. + + + Gets or sets the display name of the Play To target. + Required to access home and work networks (Intranet). + The display name of the Play To target. + + + Occurs when the audio has been muted or unmuted. + + + Notifies the Play To receiver that the duration of the audio or video playback has changed. + Required to access home and work networks (Intranet). + The new duration of the audio or video media. + + + Notifies the Play To receiver that the audio or video playback has ended. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that an error has occurred in displaying or playing the media. + + + Notifies the Play To receiver that metadata for the media has finished loading. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that the audio or video playback has been paused. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that the audio or video playback has started. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that the rate of the audio or video playback has changed. + Required to access home and work networks (Intranet). + The new value of the playback rate. + + + Notifies the Play To receiver that the audio or video playback element has started at a new playback location. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that the audio or video playback element is seeking a new playback location. + Required to access home and work networks (Intranet). + + + Notifies the Play To receiver that the audio or video playback has stopped. + + + Notifies the Play To receiver that the time location of the audio or video playback has changed. + Required to access home and work networks (Intranet). + The new time location of the playback. + + + Notifies the Play To receiver that the volume of the audio or video playback has changed. + Required to access home and work networks (Intranet). + The new value for the volume. + True if the volume was muted; otherwise false. + + + Occurs when audio or video playback has been paused. + + + Occurs when the rate of audio or video playback has changed. + + + Occurs when audio or video playback starts. + + + Creates a new instance of a Play To receiver. + Required to access home and work networks (Intranet). + + + Gets a set of custom properties for the Play To receiver. + Required to access home and work networks (Intranet). + A set of custom properties for the Play To receiver. + + + Occurs when the source media for the Play To receiver have changed. + + + Start receiving Play To commands. + An asynchronous handler that's called when the start operation is complete. + + + Stop receiving Play To commands. + An asynchronous handler that's called when the stop operation is complete. + + + Occurs when a request has been made for the Play To receiver to stop playing the streamed media. + + + Gets or sets a value that indicates whether the Play To target supports audio. + Required to access home and work networks (Intranet). + True if the Play To target supports audio; otherwise false. + + + Gets or sets a value that indicates whether the Play To target supports images. + Required to access home and work networks (Intranet). + True if the Play To target supports images; otherwise false. + + + Gets or sets a value that indicates whether the Play To target supports video. + Required to access home and work networks (Intranet). + True if the Play To target supports video; otherwise false. + + + Occurs when the current playback position has changed. + + + Occurs when the volume for the source audio or video has changed. + + + Represents a media element to connect to a Play To target. + + + Gets the connection to the Play To target. + The connection to the Play To target. + + + Gets or sets the next Play To source element. + The next Play To source element. + + + Connects the next Play To source element to the Play To target. + + + Specifies a preferred Uniform Resource Identifier (URI) for the media stream, such as a cloud based media server, used is used for Play To by reference. + The preferred URI to stream the media from. + + + Represents a deferred operation when you're supplying a source media element for Play To. + + + Ends the deferral. + + + Represents a request to connect a media element with a Play To target. + + + Gets the time limit to supply the Play To source element. + The time limit to supply the Play To source element. + + + Displays an error message in the Play To UI. + The error message to display in the Play To UI. + + + Defers connecting a media source to a Play To target. + A deferral object that you can use to identify when the deferral is complete. + + + Sets the source element to connect to the Play To target. + The source element to connect to the Play To target. + + + Provides information about the SourceRequested event. + + + Gets the media object to connect to a Play To target. + The media object to connect to a Play To target. + + + Provides information about the SourceSelected event. + + + Gets the display name of the selected Play To source. + The display name of the selected Play To source. + + + Gets the display icon for the selected Play To source. + The display icon for the selected Play To source. + + + Gets a value that indicates whether the selected Play To source supports audio. + True if the selected Play To source supports audio; otherwise false. + + + Gets a value that indicates whether the selected Play To source supports displaying images. + True if the selected Play To source supports displaying images; otherwise false. + + + Gets a value that indicates whether the selected Play To source supports video. + True if the selected Play To source supports video; otherwise false. + + + Provides information about the SourceChangeRequested event. + + + Gets the name of the album that contains the song in the audio stream. + The name of the album that contains the song in the audio stream. + + + Gets the author of the content in the media stream. + The author of the content in the media stream. + + + Gets the date that the content in the media stream was published. + The date that the content in the media stream was published. + + + Gets the description of the content in the media stream. + The description of the content in the media stream. + + + Gets the names of the genres that the content in the media stream belongs to. + Gets the names of the genres that the content in the media stream belongs to. + + + Gets custom property names and values for the content in the media stream. + Custom property names and values for the content in the media stream. + + + Gets the rating for the content in the media stream. + The rating for the content in the media stream. + + + Gets the media stream for the Play To receiver. + The media stream for the Play To receiver. + + + Gets the thumbnail image for the content in the media stream. + The thumbnail image for the content in the media stream. + + + Gets the title of the content in the media stream. + The title of the content in the media stream. + + + Provides information about the VolumeChangeRequested event. + + + Gets the new volume level. + The new volume level. + + + Provides types that provide content protection management for media content. + + + Enables applications to initiate renewal of components which need updating in order to play protected media content. + + + Initiates updating of critical content protection components after prompting the user. + An object that is used to control the asynchronous operation. + Revocation and renewal information. + + + Contains event data for a MediaProtectionManager object when the load of binary data fails. + + + Returns an indication of the completion of the event. + An object that contains an indication of the completion of the event. + + + Returns a list of components in the RevocationAndRenewalInformation object that need to be revoked and renewed with updated components. + An object that contains a list of components to be revoked and renewed with updated components. + + + Contains a content protection manager object, for an application that handles protected media content. + + + Fires when the load of binary data fails. + + + Initializes a new instance of the MediaProtectionManager class. + + + Gets a PropertySet object containing any properties attached to the protection manager. + The PropertySet object that contains the properties for this protection manager. + + + Fires when a reboot is needed after the component is renewed. + + + Fires when a service is requested. + + + Contains a method that indicates whether a protection service has completed successfully. + + + Indicates whether a protection service has completed successfully. + Indicates the successful completion of a protection service. + + + Contains information about components that need to be revoked and renewed. + + + Returns a list of components that need to be revoked and renewed with updated components. + List of components that need to be revoked and renewed. + + + Represents a component that is being revoked and renewed with a trusted component. + + + Returns the header hash for the component being revoked. + The string for the header hash. + + + Returns the name for the component being revoked. + The name of the component. + + + Returns the public key hash for the component. + The public key hash. + + + Returns the reason for revocation of component. + Defines reasons for the revocation and renewal of a certificate for a media component. + + + Returns the GUID for the renewal object. + The renewal object GUID. + + + Contains event data for a MediaProtectionManager object when a service is requested. + + + Returns an indication of the completion of the service request. + An object that contains an indication of the completion of the service request. + + + Contains the service request. + Contains the service request. + + + Describes the status of graphics trusted output. + + + Trusted output is not required. + + + Trust output has been established. + + + The environment is not supported for trusted output. + + + Driver not supported for trusted output. + + + Driver signing failed for trusted output. + + + Unspecified error occurred. + + + Defines the possible values returned from RenewSystemComponentsAsync. + + + Specifies that renewal has not started. + + + Specifies that there are updates and the user has allowed updated to proceed + + + Specifies that the user declined to allow updates to proceed. + + + Specifies that no system components were detected that need updating. But app components may need to be updated, in which case the user may need to get an updated application from the store. + + + Specifies that no components were found that need to be updated. + + + Defines reasons for the revocation and renewal of a certificate for a media component. + + + User-mode component. + + + Kernel-mode component. + + + App component. + + + Could not load the global revocation list (GRL). + + + The GRL signature is invalid. + + + The GRL was not found. + + + A trusted component was revoked. + + + A certificate's extended key usage (EKU) object is invalid. + + + A certificate in a trusted component's certificate chain was revoked. + + + The root certificate is not valid. + + + The high-security certificate for authenticating the protected environment (PE) was revoked. The high-security certificate is typically used by ITAs that handle high-definition content and next-generation formats such as HD-DVD. + + + The low-security certificate for authenticating the PE was revoked. The low-security certificate is typically used by ITAs that handle standard-definition content and current-generation formats. + + + A boot driver could not be verified. + + + A component was signed by a test certificate. + + + A certificate chain was not well-formed, or a boot driver is unsigned or is signed with an untrusted certificate. + + + Allows a content enabler object to be exposed directly to an application rather than through a wrapper supplied by the ContentEnabler object. + + + Allows the application to identify the content protection system being used and therefore how to interpret the protection task. + The vendor content protection system ID. + + + Retrieves the GUID for the type of operation that the IMediaProtectionServiceRequest performs. + The GUID to retrieve. + + + Represents the method that handles the data passed by the MediaProtectionManager when a load of binary data fails. + Contains the MediaProtectionManager object that was loading the binary data when the load failed. + Contains event data for a MediaProtectionManager object when the load of binary data fails. + + + Represents the method that handles the data passed by the MediaProtectionManager that requires a reboot. + Contains the MediaProtectionManager object that requires a reboot to occur. + + + Represents the method that handles the data passed by the MediaProtectionManager when the resume operation is completed. + Contains the MediaProtectionManager object that is requesting the service. + Contains event data for a MediaProtectionManager object when a service is requested. + + + Provides classes for managing media rendering. + + + Describes the purpose of the audio information in an audio stream. + + + All other streams. + + + Audio is for general media, for example audio for video, or streaming audio, but should not be played as background. + + + Audio is for general media, for example audio for video, or streaming audio, and can be played as background. + + + Audio is for peer-to-peer communications, for example chat or VoIP. + + + Audio is for system or application notifications, for example ring tones. + + + Audio is for sound effects. + + + Audio is for game-specific sound effects. + + + Audio is background (non-event or ambient) audio for games. + + + Provides support for initializing and configuring a speech synthesis engine (voice) to convert a text string to an audio stream, also known as text-to-speech (TTS). Voice characteristics, pronunciation, volume, pitch, rate or speed, emphasis, and so on are customized through Speech Synthesis Markup Language (SSML). + + + Specifies the gender settings for an installed speech synthesis engine (voice). + + + Male + + + Female + + + Provides info about an installed speech synthesis engine (voice). + + + Gets the description of the speech synthesis engine (voice). + The description, based on a combination of DisplayName and Language. For example, Microsoft David - English (United States). + + + Gets the display name associated with the speech synthesis engine (voice). + The display name of the voice. + + + Gets the gender setting of the speech synthesis engine (voice). + The gender of the voice. + + + Gets the unique ID of the speech synthesis engine (voice). + The unique ID. + + + Gets the normalized BCP-47 language tag of the speech synthesis engine (voice). + The normalized BCP-47 language tag. + + + Supports reading and writing audio data generated by the speech synthesis engine (voice) to/from a random access stream. + + + Gets or sets the size of the SpeechSynthesisStream. + The size of the stream. + + + Gets whether SpeechSynthesisStream can be read from. + True if the stream can be read from; otherwise false. + + + Gets a value that indicates whether SpeechSynthesisStream can be written to. + True if the stream can be written to; otherwise false. + + + Gets the position within SpeechSynthesisStream. + The current position within the stream. + + + Gets the MIME type of the content of SpeechSynthesisStream. + The MIME type (audio/wav) of the stream. + + + Gets the collection of timeline markers associated with SpeechSynthesisStream. + When this method completes successfully, it returns a collection of IMediaMarker objects that represent the timeline markers in the stream. + + + Retrieves an input stream at a specified location in SpeechSynthesisStream. + The input stream. + The location in the stream at which to begin. + + + Retrieves an output stream at a specified location in SpeechSynthesisStream. + The output stream. + The location in the stream at which to begin. + + + Goes to the specified position within SpeechSynthesisStream. + The desired position within the stream. + + + Creates a copy of SpeechSynthesisStream that references the same bytes as the original stream. + The new stream. The Position (0), Seek pointer, and lifetime of this new stream are independent from those of the original stream. + + + Releases system resources that are exposed by SpeechSynthesisStream. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Reads data asynchronously in a sequential stream. + An asynchronous operation that includes progress updates. For more information, see ReadAsync method. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Writes data asynchronously in a sequential stream. + An asynchronous operation that includes progress updates. For more information, see WriteAsync method. + The buffer into which the asynchronous writer operation places the bytes to write. + + + Flushes data asynchronously in a sequential stream. + An asynchronous operation. For more information, see FlushAsync method. + + + Provides access to the functionality of an installed speech synthesis engine (voice). + + + Gets or sets the speech synthesis engine (voice). + A speech synthesis engine (voice). The default value is the system voice. + + + Gets a collection of all installed speech synthesis engines (voices). + All installed voices. + + + Gets the default speech synthesis engine (voice). + A voice based on language settings and installed voices. + + + Asynchronously generate speech output from a string. + A SpeechSynthesisStream that represents the speech generated from the text. + The text to speak. + + + Asynchronously generate speech output from a string containing Speech Synthesis Markup Language (SSML). + A SpeechSynthesisStream that represents the speech generated from the Speech Synthesis Markup Language (SSML). + The SSML-modified text to speak. + + + Closes the SpeechSynthesizer and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Initializes a new instance of a SpeechSynthesizer object. + + + Contains classes for transcoding audio and video files. + + + Transcodes audio and video files. + + + Adds the specified audio effect. + The identifier of the audio effect. + + + Adds the specified audio effect with configuration properties, and indicates whether the effect is required. + The identifier of the audio effect. + Indicates whether the audio effect is required. + Configuration properties for the audio effect. + + + Adds the specified video effect. + The identifier of the video effect. + + + Adds the specified video effect with configuration properties and indicates whether the effect is required. + The identifier of the video effect. + Indicates whether the video effect is required. + Configuration properties for the video effect. + + + Specifies whether the media transcoder always re-encodes the source. + true if the media transcoder always re-encodes the source; otherwise false . The default value is false. + + + Removes all audio and video effects from the transcode session. + + + Specifies whether hardware acceleration is enabled. + Set to true if enabled, otherwise false. + + + Creates a new instance of the MediaTranscoder class. + + + Asynchronously initializes the trancode operation on the specified file and returns a PrepareTranscodeResult object which can be used to start the transcode operation. + When this method completes, a PrepareTranscodeResult object is returned which can be used to start the transcode. + The source file. + The destination file. + The profile to use for the operation. + + + Asynchronously initializes the trancode operation on the specified media source and returns a PrepareTranscodeResult object which can be used to start the transcode operation. + When this method completes, a PrepareTranscodeResult object is returned which can be used to start the transcode. + The media source to perform the transcode operation on. + The destination stream for the transcoded media data. + The profile to use for the operation. + + + Asynchronously initializes the trancode operation on the specified stream and returns a PrepareTranscodeResult object which can be used to start the transcode operation. + When this method completes, a PrepareTranscodeResult object is returned which can be used to start the transcode. + The source stream. + The destination stream. + The profile to use for the operation. + + + Gets or sets the time interval to trim from the start of the output. + A TimeSpan structure that contains the time interval. + + + Gets or sets the time interval to trim from the end of the output. + A TimeSpan structure that contains the time interval. + + + Gets or sets the video processing algorithm which will be used for transcoding. + The video processing algorithm. + + + Defines the available algorithms used by the Transcode Video Processor (XVP). + + + Default video processing algorithm. This algorithm prefers performance, speed, and space over quality. This algorithm will makes use of hardware. + + + Prefers quality over performance. This mode always runs in software and insures that hardware implementations, which may differ from the XVP are not used. + + + Represents an asynchronous media transcode deferral operation which can be used to start the transcode operation. + + + Indicates whether the trancode operation can be performed successfully. + True if the trancode operation can be performed successfully; false otherwise. + + + Specifies the reason for the transcode failure. + The reason for the transcode failure. + + + Creates an object to perform an asynchronous media transcode operation on media data. + An object that is used to control the asynchronous operation. + + + Specifies the reason the transcode operation failed. + + + None. + + + Reason unknown. + + + Profile is invalid. + + + The codec was not found. + + + Provides access to hostnames and endpoints used by network apps. + + + Provides data for the local endpoint and remote endpoint for a network connection used by network apps. + + + Get or set the local hostname for the EndpointPair object. + The local hostname for the EndpointPair object. + + + Get or set the local service name for the EndpointPair object. + The local service name for the EndpointPair object. + + + Get or set the remote hostname for the EndpointPair object. + The remote hostname for the EndpointPair object. + + + Get or set the remote service name for the EndpointPair object. + The remote service name for the EndpointPair object. + + + Creates a new EndpointPair object. + The local hostname or IP address for the EndpointPair object. + The local service name or the local TCP or UDP port number for the EndpointPair object. + The remote hostname or IP address for the EndpointPair object. + The remote service name or the remote TCP or UDP port number for the EndpointPair object. + + + Provides data for a hostname or an IP address. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Gets the canonical name for the HostName object. + The canonical name for the HostName object. + + + Compares two strings to determine if they represent the same hostname. + The return value indicates the lexicographic relation of value1 to value2. If the two parameters represent the same canonical hostname, then zero is returned. If value1 is less than value2, the return value is less than zero. If value1 is greater than value2, the return vale is greater than zero. + A hostname or IP address. + A hostname or IP address. + + + Gets the display name for the HostName object. + The display name for the HostName object. + + + Gets the IPInformation object for a local IP address assigned to a HostName object. + The IPInformation object for the IP address. + + + Determines whether the specified HostName object has an equivalent value to the current HostName object. + A Boolean value that indicates whether the specified HostName object is equal to the current HostName object. + A HostName object that is compared with the current HostName. + + + Gets the original string used to construct the HostName object. + The original string used to construct the HostName object. + + + Returns a string that represents the HostName object. + A string that represents the HostName object. + + + Gets the HostNameType of the HostName object. + The HostNameType of the HostName object. + + + Creates a new HostName object from a string that contains a hostname or an IP address. + A string that contains a hostname or an IP address. + + + The domain type of the HostName object when the HostNameType is a domain name. + + + The suffix of a domain name. + + + A fully-qualified domain name. + + + Options for how a list of EndpointPair objects is sorted. + + + Sort a list of EndpointPair objects by the default criteria used the system which is to minimize connection delays. + + + Sort a list of EndpointPair objects to optimize for long connections. + + + The type of a HostName object. + + + A domain name. + + + An IPv4 address. + + + An IPv6 address. + + + A Bluetooth address. This represents the hardware or media access control (MAC) address for a Bluetooth device. + + + Enables advanced download and upload transfer capabilities within an app. + + + Used to configure downloads prior to the actual creation of the download operation using CreateDownload. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets or sets the TileNotification used to define the visuals, identification tag, and expiration time of a tile notification used to update the app tile when indicating failure of a download to the user. + The TileNotification used to indicate download failure. + + + Gets or sets the ToastNotification that defines the content, associated metadata, and events used in a toast notification to indicate failure of a download to the user. + The ToastNotification used to indicate download failure. + + + Gets or sets the TileNotification used to define the visuals, identification tag, and expiration time of a tile notification used to update the app tile when indicating success of a download to the user. + The TileNotification used to indicate download success. + + + Gets or sets the ToastNotification that defines the content, associated metadata, and events used in a toast notification to indicate success of a download to the user. + The ToastNotification used to indicate download success. + + + Instantiates a new BackgroundDownloader object. + + + Gets or sets the cost policy for the background download operation. + Indicates whether transfers can occur on costed networks. + + + Initializes a DownloadOperation object with the resource Uri, the file that the response is written to, and the request entity body. + The resultant download operation. + The location of the resource. + The file that the response will be written to. + A file that represents the request entity body, which contains additional data the server requires before the download can begin. The file this object points to must be valid for the duration of the download. + + + Initializes a DownloadOperation object that contains the specified Uri and the file that the response is written to. + The resultant download operation. + The location of the resource. + The file that the response will be written to. + + + Creates an asynchronous download operation that includes a URI, the file that the response will be written to, and the IInputStream object from which the file contents are read. + The resultant asynchronous download operation. + The location of the resource. + Represents the file that the response will be written to. + A stream that represents the request entity body. + + + Returns a collection of pending downloads that are not associated with a group. + A collection of pending downloads for the current application instance. + + + Returns a collection of pending downloads for a specific Group. + GetCurrentDownloadsAsync(group) may be altered or unavailable for releases after Windows 8.1. Instead, use GetCurrentDownloadsForTransferGroupAsync. + A collection of pending downloads for the specific group. + A string indicating a specific group of transfers. + + + Gets all downloads associated with the provided BackgroundTransferGroup + A list of downloads currently associated with the specified group. + Contains information used to identify a group of downloads. + + + Gets or sets a string value (e.g. a GUID) indicating the group the transfer will belong to. A download operation with a group ID will only appear in operation enumerations using GetCurrentDownloadsAsync(String) + Group may be altered or unavailable for releases after Windows 8.1. Instead, use TransferGroup. + The group name. + + + Gets or sets the HTTP method used for the background download + The method to use for the background download. Setting this property will override the default method used for the operation. + + + Gets or sets the proxy credentials for the background transfer. + The credentials used to authenticate with an HTTP proxy. + + + Used to request an unconstrained download operation. When this method is called the user is provided with a UI prompt that they can use to indicate their consent for an unconstrained operation. + Indicates if the operations will run unconstrained. + The download operation to run unconstrained. + + + Gets or sets the credentials to use to authenticate with the origin server. + The credential to use for authentication. + + + Used to set an HTTP request header. + The header name. + The header value. + + + Gets or sets the group that a download operation will belong to. + The group to associate with the download. + + + Represents a content part of a multi-part transfer request. Each BackgroundTransferContentPart object can represent either a single string of text content or a single file payload, but not both. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Creates a BackgroundTransferContentPart object. + + + Creates a BackgroundTransferContentPart object that identifies the file content and the name of the file that it represents. + Identifies the content. + The fully qualified file name, including the local path. + + + Creates a BackgroundTransferContentPart object that identifies the content it represents. + Identifies the content. + + + Sets the source file for a BackgroundTransferContentPart containing the file for upload. + The source file. + + + Sets content disposition header values that indicate the nature of the information that this BackgroundTransferContentPart represents. + The header name. + The header value. + + + Use this method to set text information that the BackgroundTransferContentPart represents. + A string value used to represent text information. (e.g. api_sig, api_key, auth_token, etc...) + + + Used to provide errors encountered during a transfer operation. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets the specific error using the returned HRESULT value. Possible values are defined by WebErrorStatus. + The error encountered. + An HRESULT returned during the operation. + + + A named group used to associate multiple download or upload operations. This class makes it easy for your app to create these groups and to complete downloads and uploads simultaneously, in serial, or based on priority. + + + Creates a transfer group using the provided group name. + The new BackgroundTransferGroup. + The name of the group. If a group with the this name already exists, this method will return a reference to the existing group object. + + + Gets the name of the group. + The group name. + + + Gets or sets the property used to specify if transfers within this group run simultaneously or in serial. Possible values are defined by BackgroundTransferBehavior. + The group transfer behavior. + + + Used to configure upload prior to the actual creation of the upload operation using CreateUpload. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets and sets the TileNotification used to define the visuals, identification tag, and expiration time of a tile notification used to update the app tile when indicating failure of an upload to the user. + The TileNotification used to indicate upload failure. + + + Gets or sets the ToastNotification that defines the content, associated metadata, and events used in a toast notification to indicate failure of an upload to the user. + The ToastNotification used to indicate upload failure. + + + Gets and sets the TileNotification used to define the visuals, identification tag, and expiration time of a tile notification used to update the app tile when indicating success of an upload to the user. + The TileNotification used to indicate upload success. + + + Gets or sets the ToastNotification that defines the content, associated metadata, and events used in a toast notification to indicate success of an upload to the user. + The ToastNotification used to indicate upload success. + + + Instantiates a new BackgroundUploader object. + + + Gets or sets the cost policy for the background upload operation. + Indicates whether transfers can occur on costed networks. + + + Initializes an UploadOperation that indicates the location for and file for upload. + The resultant upload operation. + The location for the upload. + The file for upload. + + + Returns an asynchronous operation that, on completion, returns an UploadOperation with the specified URI and one or more BackgroundTransferContentPart objects. + The resultant asynchronous UploadOperation + The location for the upload. + One or more BackgroundTransferContentPart objects. + + + Returns an asynchronous operation that, on completion, returns an UploadOperation with the specified URI, multipart subtype, one or more BackgroundTransferContentPart objects, and the delimiter boundary value used to separate each part. + The resultant asynchronous UploadOperation + The location for the upload. + One or more BackgroundTransferContentPart objects. + The multipart subtype. For example, "related" for content of type "multipart/related". + A string that is used to identify the delimiter used to indicate separation between provided content parts. + + + Returns an asynchronous operation that, on completion, returns an UploadOperation with the specified URI, one or more BackgroundTransferContentPart objects, and the multipart subtype. + The resultant asynchronous UploadOperation. + The location for the upload. + One or more BackgroundTransferContentPart objects. + The multipart subtype. For example, "related" for content of type "multipart/related". + + + Returns an asynchronous operation that, on completion, returns an UploadOperation with the specified URI and the source stream. + The resultant asynchronous upload operation. + The URI associated with the resource. + Represents the source stream. + + + Returns a collection of pending uploads that are not associated with a group. + A collection of pending uploads for the current application instance. + + + Returns a collection of pending uploads for a specific Group. + GetCurrentUploadsAsync(group) may be altered or unavailable for releases after Windows 8.1. Instead, use GetCurrentUploadsForTransferGroupAsync. + A collection of pending uploads for the specific group. + A string indicating a specific group of uploads. + + + Gets all uploads associated with the provided BackgroundTransferGroup + A list of uploads currently associated with the specified group. + Contains information used to identify a group of uploads. + + + Gets or sets a string value (e.g. a GUID) indicating the group the upload will belong to. An upload operation with a group ID will only appear in operation enumerations using GetCurrentDownloadsAsync(String) with the specific group string value. + Group may be altered or unavailable for releases after Windows 8.1. Instead, use TransferGroup. + The group name. + + + Gets or sets the HTTP method used for the upload + The method to use for the background upload. Setting this property will override the default method used for the operation. + + + Gets or sets the proxy credentials for the upload. + The credentials used to authenticate with an HTTP proxy. + + + Used to request an unconstrained upload operation. When this method is called the user is provided with a UI prompt that they can use to indicate their consent for an unconstrained operation. + Indicates if the operations will run unconstrained. + The upload operation to run unconstrained. + + + Gets or sets the credentials to use to authenticate with the origin server. + The credential to use for authentication. + + + Used to set an HTTP request header. + The header name. + The header value. + + + Gets or sets the group that an upload operation will belong to. + The group to associate with the upload. + + + Provides properties for specifying web resources to be prefetched. Windows will use heuristics to attempt to download the specified resources in advance of your app being launched by the user. + + + Array of URIs to download when prefetch is performed for the app. + A list of Uri objects. + + + Specifies the location of a well-formed XML file that contains a list of resources to be prefetched. + A Uri for a web resource. + + + Performs an asynchronous download operation. The Background Transfer sample demonstrates this functionality. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets or sets the transfer priority of this download operation when within a BackgroundTransferGroup. Possible values are defined by BackgroundTransferPriority. + The operation priority. + + + Returns an asynchronous operation that can be used to monitor progress and completion of the attached download. Calling this method allows an app to attach download operations that were started in a previous app instance. + Download operation with callback. + + + Gets and sets the cost policy for the download. + Specifies whether the transfer can happen over costed networks. + + + Gets the response information. + Contains the data returned by a server response. + + + Gets the partially downloaded response at the specified position. + The result stream. + The position at which to start reading. + + + Gets a string value indicating the group the transfer belongs to. + Group may be altered or unavailable for releases after Windows 8.1. Instead, use TransferGroup. + The group name. + + + This is a unique identifier for a specific download operation. A GUID associated to a download operation will not change for the duration of the download. + The unique ID for this download operation. + + + Gets the method to use for the download. + The method to use for the download. This value can be GET, PUT, RETR, or STOR. + + + Pauses a download operation. + + + Gets the current progress of the upload operation. + The download operation status change. + + + Gets the URI from which to download the file. + The URI to download from. + + + Returns the IStorageFile object provided by the caller when creating the DownloadOperation object using CreateDownload. + The returned file object. + + + Resumes a paused download operation. + + + Starts an asynchronous download operation. + An asynchronous download operation that includes progress updates. + + + Gets the group that this download operation belongs to. + The transfer group. + + + Represents data that is returned by a server response. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets the URI that contains the requested data. + The URI that contains the requested data. + + + Gets all response headers sent by the server. + Contains all response headers sent by the server. + + + Gets a value that specifies whether the download is resumable. + This property returns true if a download is resumable; otherwise false is returned. + + + Gets the status code returned by the server. + The status code returned by the server. + + + Represents the result a request for unconstrained transfers from a BackgroundDownloader or BackgroundUploader object. + + + Gets a value that indicates if the download or upload operations will run without the resource restrictions normally associated with background network operations while a device running on battery. + true if the operation runs unconstrained; otherwise, false. + + + Performs an asynchronous upload operation. + Required to access the Internet. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Gets or sets the transfer priority of this upload operation when within a BackgroundTransferGroup. Possible values are defined by BackgroundTransferPriority. + The operation priority. + + + Returns an asynchronous operation that can be used to monitor progress and completion of the attached upload. Calling this method allows an app to attach upload operations that were started in a previous app instance. + Upload operation with callback. + + + Gets and sets the cost policy for the upload. + Specifies whether the transfer can happen over costed networks. + + + Gets the response information. + Contains the data returned by a server response. + + + Gets the partially uploaded response at the specified location. + The result stream. + The position at which to start reading. + + + Gets a string value indicating the group the upload belongs to. + Group may be altered or unavailable for releases after Windows 8.1. Instead, use TransferGroup. + The group name. + + + This is a unique identifier for a specific upload operation. A GUID associated to a upload operation will not change for the duration of the upload. + The unique ID for this upload operation. + + + Gets the method to use for the upload. + The method to use for the upload. This value can be GET, PUT, POST, RETR, STOR, or any custom value supported by the server. + + + Gets the current progress of the upload operation. + The delegate to invoke when progress is available for a transfer operation. + + + Gets the URI to upload from. + The URI to upload from. + + + Starts an asynchronous upload operation. + An asynchronous upload operation that includes progress updates. + + + Specifies the IStorageFile to upload. + The file item to upload. + + + Gets the group that this upload operation belongs to. + The transfer group. + + + Contains status information about the download operation. + + + Current total number of bytes received. This value does not include bytes received as response headers. If the download operation has restarted, this value may be smaller than in the previous progress report. + + + The total number of data bytes to download. If the number is unknown, this value is 0 by default. + + + Indicates the current operation status. + + + TRUE if the download request response has changed; otherwise, FALSE. Whenever new response information is available due to a new request being invoked, this field is set to true. The application can then choose to read the new response information and update its state, if needed. + + + TRUE if a data transfer operation has restarted; otherwise FALSE. When a download is interrupted and a new request is sent to the server to resume the download, HasRestarted is set to true if the server does not support resume and the download had to start over. + + + Contains status information about the upload operation. + + + The current number of bytes received. This value does not include bytes received as part of response headers. +If the upload operation has restarted, this value may be smaller than in the previous progress report. + + + The current number of bytes sent. If the upload operation has restarted, this value may be smaller than in the previous progress report. + + + The total number of data bytes to upload. If the number is unknown, this value is 0. + + + The total number of bytes to upload. + + + Specifies the current status of the transfer. + + + TRUE if the upload request response has changed; otherwise, FALSE. Whenever new response information is available due to a new request being invoked, this field is set to true. The application can then choose to read the new response information and update its state, if needed. + + + TRUE if a upload transfer operation has restarted; otherwise FALSE. Uploads cannot be resumed. Whenever a new request is sent to the server to restart the upload, this property is set to true in the first progress notification for the new request. + + + Defines values used to indicate if downloads and uploads within a BackgroundTransferGroup run in simultaneously or in serial. + + + Background Transfer operations run simultaneously. + + + Background Transfer operations run in serial. + + + Defines values used to specify whether transfers can occur on metered networks. + + + Allow transfers on metered networks. + + + Do not allow transfers on metered networks. + + + Always download regardless of network cost. (e.g. even while a user is roaming)This behavior is based only on network cost policy, and doesn't affect other app scenarios, like system suspension. + + + Defines the values used to indicate the priority of a download or upload operation when within a BackgroundTransferGroup. + + + Default priority setting for an operation. By default when a new operation is created, it is placed at the end of the current transfer queue. + + + High priority setting for an operation. Ensures that the operation doesn't get placed at the very end of the queue, and is instead placed near the front. + + + Defines transfer operation status values. + + + The application is idle. + + + The transfer is currently in progress. + + + The application has paused the transfer operation. + + + The transfer operation is paused due to cost policy (e.g. transitioned to a costed network). + + + The transfer operation is paused due to a lack of network connectivity. + + + The transfer operation has completed. + + + The transfer operation has been cancelled. + + + An error was encountered during the transfer operation. + + + Represents a background transfer operation. + + + Gets or sets the cost policy for the background transfer operation. + Specifies whether transfers can occur over costed networks. + + + Gets are sets a string value indicating the group the transfer will belong to. + Group may be altered or unavailable for releases after Windows 8.1. Instead, use the relevant DownloadOperation or UploadOperation TransferGroup. + The group name. + + + Gets or sets the method to use for the background transfer. + The method to use for the download. This value can be GET, PUT, RETR, or STOR. + + + Gets or sets the proxy credentials for the background transfer. + The proxy credentials for the transfer. + + + Gets or sets the credentials used to authenticate with the origin server. + The credential to use for authentication. + + + Sets the request headers. + The header name. + The header value. + + + Creates a BackgroundTransferContentPart object. + + + Creates a BackgroundTransferContentPart object that indicates the specified content type. + The resultant BackgroundTransferContentPart. + Identifies the content type. + + + Creates a BackgroundTransferContentPart object that identifies the content type and name of the file. + The resultant BackgroundTransferContentPart object. + Identifies the content type. + The fully qualified file name; this includes the local path. + + + Represents a background transfer operation. + + + Gets and sets the cost policy for the background transfer. + Specifies whether the transfer can happen over costed networks. + + + Gets the response infomation. + Contains the data returned by a server response. + + + Gets the partial response at the specified position. + The result stream. + The position at which to start reading. + + + Gets a string value indicating the group the transfer belongs to. + Group may be altered or unavailable for releases after Windows 8.1. Instead, use the relevant DownloadOperation or UploadOperation TransferGroup. + The group name. + + + Gets the Guid for the background transfer operation. + The unique ID for the background transfer operation. + + + Specifies the method to use for the background transfer operation. + The method to use. This value can be GET, PUT, RETR, or STOR. + + + Gets the URI for the background transfer. + The URI. + + + Use this interface to determine the priority of a downloads or uploads within a BackgroundTransferGroup. Possible values are defined by the BackgroundTransferPriority enumeration. + + + Gets or sets the priority of a download or upload operation. Possible values are defined by the BackgroundTransferPriority enumeration. + The priority of the operation. + + + Retrieves connection profiles that provide connectivity, usage, and data plan information for established network connections. + + + This class contains properties used to specify an Access Point Name (APN) for a 3GPP based cellular Data Connection (PDP context). + + + Indicates the name of the access point to establish a connection with. + The access point name. + + + Indicates the authentication method, as defined by CellularApnAuthenticationType, that is used by the access point. + The authentication type. + + + Creates an instance of CellularApnContext. + + + Indicates if data compression will be used at the data link for header and data transfer. + A Boolean value. TRUE if enabled; otherwise FALSE. + + + Indicates the password used to authenticate when connecting to the access point. + The password associated with the user name. + + + Indicates the provider ID associated with the access point. + The provider ID. + + + Indicates the user name used to authenticate when connecting to the access point. + The user name. + + + Provides access to property values that indicate the current cost of a network connection. + + + Gets a value that indicates if a connection is approaching the data usage allowance specified by the data plan. + TRUE if the connection profile is close to the data limit threshold; otherwise, FALSE. + + + Gets a value that indicates the current network cost for a connection. + The network cost of the connection. + + + Gets a value that indicates if the connection has exceeded the data usage allowance specified by the data plan. + TRUE if the current total data usage is over the specified data limit; otherwise, FALSE. + + + Gets a value that indicates whether the connection is connected to a network outside of the home provider. + TRUE if the connection on a roaming network; otherwise, FALSE. + + + Represents a network connection, which includes either the currently connected network or prior network connections. Provides information about the connection status and connectivity statistics. + + + Gets a list of ConnectivityInterval objects, which indicate the timestamp for when the network connection began, and a time-span for the duration of that connection. + When the method completes, it returns a list of ConnectivityInterval objects, which indicate the start time and duration for the current or prior connections. + The start time over which to retrieve data. Can be no more than 60 days prior to the current time. + The end time over which to retrieve data. + The state of the connection profile for which usage data should be returned. + + + Gets the cost information for the connection. + The cost information for the connection. + + + Gets the current status of the data plan associated with the connection. + Current data plan status information. + + + Gets the current domain authentication status for a network connection. Possible values are defined by DomainConnectivityLevel. + A value indicating the authentication status for a connection to a network domain. + + + Gets the estimated data usage for a connection during over a specific period of time. + GetLocalUsage may be altered or unavailable for releases after Windows 8.1. Instead, use GetNetworkUsageAsync + The requested local data usage information. + The start date/time for the usage data request. + The end date/time for the usage data request. + + + Gets the estimated data usage for a connection over a specific period of time and roaming state. + GetLocalUsage may be altered or unavailable for releases after Windows 8.1. Instead, use GetNetworkUsageAsync + The requested local data usage information. + The start date/time for the usage data request. + The end date/time for the usage data request. + The roaming state to scope the request to. + + + Gets the network connectivity level for this connection. This value indicates what network resources, if any, are currently available. + The level of network connectivity. + + + Retrieves names associated with the network with which the connection is currently established. + An array of string values representing friendly names used to identify the local endpoint. + + + Gets a list of the estimated data traffic and connection duration over a specified period of time, for a specific network usage state. + When the method completes, it returns a list of NetworkUsage objects, which indicate the sent and received values, in bytes, and the total amount of time the profile was connected during the corresponding time interval. + The start time over which to retrieve data. Can be no more than 60 days prior to the current time. If the specified granularity is PerMinute, the start time can be no more than 120 minutes prior to the current time. + The end time over which to retrieve data. + The desired granularity of the returned usage statistics. Each elements in the list corresponds to the network usage per the specified granularity, e.g., usage per hour. + The state of the connection profile for which usage data should be returned. + + + Gets a value that indicates if connection profile is a WLAN (WiFi) connection. This determines whether or not WlanConnectionProfileDetails is null. + Indicates if the connection profile represents a WLAN (WiFi) connection. + + + Gets a value that indicates if connection profile is a WWAN (mobile) connection. This determines whether or not WwanConnectionProfileDetails is null. + Indicates if the connection profile represents a WWAN (mobile) connection. + + + Gets a value that indicates the current number of signal bars displayed by the Windows UI for the connection. + An integer value within a range of 0-5 that corresponds to the number of signal bars displayed by the UI. + + + Gets the ID of the network operator who provisioned the connection profile. + The network operator ID. + + + Contains properties and methods defined by WlanConnectionProfile that are specific to WLAN (WiFi) connections. + The WLAN (WiFi) connection details defined by the WlanConnectionProfile. + + + Contains the properties and methods defined by WwanConnectionProfile that are specific to mobile broadband connections. + The mobile broadband connection details defined by the WwanConnectionProfile. + + + Gets the object representing the network adapter providing connectivity for the connection. + The network adapter object. + + + Retrieves the security settings for the network. + The current network security settings. + + + Gets the name of the connection profile. + The name of the connection profile. + + + The ConnectionProfileFilter class defines a set of properties that are used to improve the relevance of FindConnectionProfilesAsync results. + + + Creates an instance of ConnectionProfileFilter, which contains a set of properties that are used to improve the relevance of FindConnectionProfilesAsync results. + + + Indicates if connection profiles that represent currently established connections are included in query results. + A Boolean value that determines if profiles for established connections are included. + + + Indicates if connection profiles that represent WLAN (WiFi) connections are included in query results. + A Boolean value that indicates if WLAN (WiFi) connections are included. + + + Indicates if connection profiles that represent WWAN (mobile) connections are included in query results. + A Boolean value that indicates if WWAN (mobile) connections are included. + + + Defines a specific NetworkCostType value to query for. + The connection network cost type. + + + Indicates a specific network operator ID to query for. + The network operator ID. + + + The ConnectionSession class is used to represent a connection to an access point established with AcquireConnectionAsync. + + + Closes the connection to the access point. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Retrieves the ConnectionProfile associated with the connection session. + The connection profile used to define the properties of the access point connection. + + + Provides the start time and duration for an established or prior connection. + + + Indicates the duration of connectivity. + The period of time that represents the duration of connectivity. + + + Indicates when the connection was initially established. + The time at which the connection was established. + + + Methods defined by the ConnectivityManager class enable enforcement of traffic routing on a specific network adapter for the specified destination suffix. + + + Establishes a connection to a specific access point on a network. The request is defined using a CellularApnContext object. + The established APN connection. + Provides specific details about the APN. + + + Specifies a RoutePolicy that the Http stack (WinInet) will follow when routing traffic. + Indicates the policy for traffic routing. + + + Removes a previously specified RoutePolicy from the Http stack (WinInet). + The RoutePolicy to remove. + + + Represents the current status information for the data plan associated with a connection. + + + Gets a value indicating the maximum data transfer allowance for a connection within each billing cycle, as defined by the data plan. + The maximum number of megabytes allowed as defined by the network carrier. + + + Gets a DataPlanUsage object that indicates the amount of data transferred over the connection, in megabytes, and the last time this value was refreshed. + The data usage and the last updated time. + + + Gets a value indicating the nominal rate of the inbound data transfer occurring on the connection. + The rate of inbound data transfer. + + + Gets a value indicates the maximum size of a transfer that is allowed without user consent on a metered network. + The maximum size of a transfer that is allowed without user consent on a metered network. + + + Gets a value indicating the date and time of the next billing cycle. + The date and time of the next billing cycle. + + + Gets a value indicating the nominal rate of the outbound data transfer. + The outbound data transfer rate. + + + Represents data plan specific data usage information for a connection. + + + Gets a DateTime object indicating when the network operator last updated the MegabytesUsed property. + The date and time the MegabytesUsed property was last updated. + + + Gets a value indicating the total amount of data transferred, in megabytes, over the connection. + The number of megabytes of data transferred. + + + Represents data usage information returned by the ConnectionProfile.GetLocalUsage method. + DataUsage may be altered or unavailable for releases after Windows 8.1. Instead, use NetworkUsage + + + Gets a value indicating the number of bytes received by a connection over a specific period of time. + DataUsage may be altered or unavailable for releases after Windows 8.1. Instead, use NetworkUsage + The number of bytes received. + + + Gets a value indicating the number of bytes sent by the connection over a specific period of time. + DataUsage may be altered or unavailable for releases after Windows 8.1. Instead, use NetworkUsage + The number of bytes sent. + + + Represents the association between an IP address and an adapter on the network. + + + Retrieves the network adapter associated with the IP address. + The associated network adapter. + + + Retrieves the length of the prefix, or network part of the IP address. + The length, in bytes, of the prefix or network part. + + + Represents physical identification data for a specific NetworkAdapter object. + + + Gets a LanIdentifierData object containing locality identification information for the network adapter's connection. + Location information for the network adapter providing connectivity for the connection. + + + Gets the adapter GUID that identifies the network adapter to associate with the locality information. + The adapter ID for the network adapter associated with the LanIdentifier information. + + + Gets a LanIdentifierData object containing the port ID from the Link Layer Discovery Protocol (LLDP) locality information for an Ethernet type network adapter. + The port ID information for the network adapter. + + + Represents the port specific data that enables LAN locality capabilities. + + + Gets a value indicating the type of data stored in the value field of the LanIdentifierData object according to the Link Layer Discovery Protocol (LLDP) protocol. + A numeric value that maps to a value-type defined by the LLDP protocol used to define the locality information. + + + Gets the serialized value. + A byte array that contains the serialized value of the data. + + + Represents a network adapter. + + + Gets the connection profile currently associated with the network adapter. + The connection profile associated with this network adapter. + + + Gets a value indicating the network interface type as defined by the Internet Assigned Names Authority (IANA) for the NetworkAdapter. + The interface type as defined by the Internet Assigned Names Authority (IANA). The table below lists common values for the interface type although many other values are possible. + + + Gets a value indicating the maximum inbound data transfer rate in bits per second. + The maximum inbound transfer rate in bits per second. + + + Gets the network adapter ID. + The network adapter ID. + + + Gets the NetworkItem object that represents the connected network. + The connected network. + + + Gets a value indicating the maximum outbound speed in bits per second. + The maximum outbound transfer rate in bits per second. + + + Provides access to network connection information for the local machine. + + + Returns an array of ConnectionProfile objects that match the filtering criteria defined by ConnectionProfileFilter. + An array of ConnectionProfile objects. + Provides the filtering criteria. + + + Gets a list of profiles for connections, active or otherwise, on the local machine. + An array of ConnectionProfile objects. + + + Gets a list of host names associated with the local machine. + An array of host names for the local machine. + + + Gets the connection profile associated with the internet connection currently used by the local machine. + The profile for the connection currently used to connect the machine to the internet. + + + Gets an array of LanIdentifier objects that contain locality information for each NetworkAdapter object that currently connected to a network. + An array of LanIdentifier objects. + + + Gets a proxy configuration for the connection using the specified URI. + Information about the connection proxy. + The proxy configuration URI. + + + Gets a sorted list of EndpointPair objects. + A sorted array of EndpointPair objects. + A list of EndpointPair objects to be sorted. + Indicates sorting options for the returned array. + + + Occurs when the network status changes for a connection. + + + Represents a connected network. + + + Gets a NetworkTypes value indicating the network type for a NetworkItem. + The type of a network. + + + Gets the network ID. + The network ID. + + + Represents the current network security settings. + + + Retrieves the type of authentication used by the network. + The network authentication type. + + + Retrieves the type of encryption used by the network. + The network encryption type. + + + Indicates which properties of a network have changed after a network state change background trigger. + + + Indicates if a connected network has a new connection cost. + true if there is a new connection cost; otherwise, false. + + + Indicates a connected network has a new domain connectivity level. + true if the connectivity level changed; otherwise, false. + + + Indicates if the list of host names returned by GetHostNames has changed. + true if a new Host Name list was provided; otherwise, false. + + + Indicates if the local machine has a new connection profile associated with the current internet connection. + true if the connection has changed; otherwise, false. + + + Indicates if the network connectivity level for any connection profiles has changed. + true if the network connectivity level changed; otherwise, false. + + + Indicates if the network state change event represents a change to the registration state of a WWAN connection. The current registration state can be retrieved from WwanConnectionProfileDetails.GetNetworkRegistrationState + true if the registration state has changed; otherwise, false. + + + Represents network usage statistics returned by the ConnectionProfile.GetNetworkUsageAsync method. + + + Indicates the number of bytes received by the connection of a specific period of time. + The number of bytes received. + + + Indicates the number of bytes sent by a connection over a specific period of time. + The number of bytes sent. + + + Indicates the duration of connectivity. + The period of time that represents the duration of connectivity. + + + Represents the proxy configuration for the current user. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Gets a value that indicates if this configuration can connect directly. + TRUE if this configuration can connect directly; otherwise, FALSE. + + + Gets a list of URIs for the proxy configuration. + A list of URIs for the proxy configuration. + + + The RoutePolicy class is used to represent the traffic routing policy for a special PDP Context/APN . + + + Retrieves the connection profile for an access point connection. + The associated connection profile. + + + Provides the host name for the route policy to the special PDP context. + The host name. + + + Creates an instance of RoutePolicy using the defined connection profile and host name values. + The connection profile + The host name for the route policy to the special PDP context. + + + Used to access information specific to a WLAN connection. + + + Retrieves the Service Set Identifier (SSID) for a WLAN connection. + The service set identifier (SSID). + + + Used to access information specific to a WWAN connection. + + + Indicates the name of the access point used to establish the WWAN connection. + The access point name. + + + Indicates the class of data service offered by the network currently in use for the WWAN connection. + The class of data service currently provided. + + + Retrieves the current network registration state for the WWAN connection. + The current network registration state. + + + Indicates the Home Network Provider ID. + The Home Network Provider ID. + + + Defines values that indicate the authentication type used for a APN. These values are referenced when providing APN details using a CellularApnContext object. + + + No authentication. + + + Password authentication. + + + Challenge-Handshake authentication. + + + Microsoft Challenge-Handshake authentication (v2) + + + Defines levels of granularity used when retrieving data usage statistics with GetNetworkUsageAsync + + + Provide data usage per minute. + + + Provide data usage per hour. + + + Provide data usage per day. + + + Provide data usage overall. + + + Defines the domain authentication status for a network connection. + + + No domain controller detected on this network. + + + A domain controller has been detected, but the current user or local machine have not been authenticated on the domain. + + + The machine or user is authenticated on the domain connection. + + + Defines the level of connectivity currently available. + + + No connectivity. + + + Local network access only. + + + Limited internet access. This value indicates captive portal connectivity, where local access to a web portal is provided, but access to the Internet requires that specific credentials are provided via the portal. This level of connectivity is generally encountered when using connections hosted in public locations (e.g. coffee shops and book stores). This doesn't guarantee detection of a captive portal. Windows Store apps should also test if the captive portal can be reached using a URL for the captive portal, or by attempting access to a public web site which will then redirect to the captive portal when Windows reports LocalAccess as the current NetworkConnectivityLevel. + + + Local and Internet access. + + + Defines the network cost types. + + + Cost information is not available. + + + The connection is unlimited and has unrestricted usage charges and capacity constraints. + + + The use of this connection is unrestricted up to a specific limit. + + + The connection is costed on a per-byte basis. + + + Defines values that indicate the type of authentication used by the network. + + + No authentication enabled. + + + Authentication method unknown. + + + Open authentication over 802.11 wireless. Devices are authenticated and can connect to an access point, but communication with the network requires a matching Wired Equivalent Privacy (WEP) key. + + + Specifies an IEEE 802.11 Shared Key authentication algorithm that requires the use of a pre-shared Wired Equivalent Privacy (WEP) key for the 802.11 authentication. + + + Specifies a Wi-Fi Protected Access (WPA) algorithm. IEEE 802.1X port authorization is performed by the supplicant, authenticator, and authentication server. Cipher keys are dynamically derived through the authentication process. + + + Specifies a Wi-Fi Protected Access (WPA) algorithm that uses pre-shared keys (PSK). IEEE 802.1X port authorization is performed by the supplicant and authenticator. Cipher keys are dynamically derived through a pre-shared key that is used on both the supplicant and authenticator. + + + Wi-Fi Protected Access. + + + Specifies an IEEE 802.11i Robust Security Network Association (RSNA) algorithm. IEEE 802.1X port authorization is performed by the supplicant, authenticator, and authentication server. Cipher keys are dynamically derived through the authentication process. + + + Specifies an IEEE 802.11i RSNA algorithm that uses PSK. IEEE 802.1X port authorization is performed by the supplicant and authenticator. Cipher keys are dynamically derived through a pre-shared key that is used on both the supplicant and authenticator. + + + Specifies an authentication type defined by an independent hardware vendor (IHV). + + + Defines values that indicate the type of encryption used for authentication. + + + No encryption enabled. + + + Encryption method unknown. + + + Specifies a WEP cipher algorithm with a cipher key of any length. + + + Specifies a Wired Equivalent Privacy (WEP) algorithm, which is the RC4-based algorithm that is specified in the IEEE 802.11-1999 standard. This enumerator specifies the WEP cipher algorithm with a 40-bit cipher key. + + + Specifies a WEP cipher algorithm with a 104-bit cipher key. + + + Specifies a Temporal Key Integrity Protocol (TKIP) algorithm, which is the RC4-based cipher suite that is based on the algorithms that are defined in the WPA specification and IEEE 802.11i-2004 standard. This cipher also uses the Michael Message Integrity Code (MIC) algorithm for forgery protection. + + + Specifies an AES-CCMP algorithm, as specified in the IEEE 802.11i-2004 standard and RFC 3610. Advanced Encryption Standard (AES) is the encryption algorithm defined in FIPS PUB 197. + + + Specifies a Wifi Protected Access (WPA) Use Group Key cipher suite. For more information about the Use Group Key cipher suite, refer to Clause 7.3.2.25.1 of the IEEE 802.11i-2004 standard. + + + Specifies a Robust Security Network (RSN) Use Group Key cipher suite. For more information about the Use Group Key cipher suite, refer to Clause 7.3.2.25.1 of the IEEE 802.11i-2004 standard. + + + Specifies an encryption type defined by an independent hardware vendor (IHV). + + + Defines the network connection types. + + + No network. + + + Internet. + + + Private network. + + + Defines the roaming states. + + + No roaming information. + + + The connection is not currently roaming. + + + The connection is currently roaming. + + + Used with the NetworkUsageStates structure to define the desired roaming state and shared state of a network connection. + + + Used when the corresponding state should not be used as a filter, e.g., both yes and no. + + + The corresponding state is not set. + + + The corresponding state is set. + + + Defines values used to indicate the class of data service provided by a WWAN network connection. + + + The network does not provide a data service. + + + The network provides General Packet Radio Service (GPRS) data service. + + + The network provides Enhanced Data for Global Evolution (EDGE). + + + The network provides Universal Mobile Telecommunications System (UMTS) data service. + + + The network provides High-Speed Downlink Packet Access (HSDPA) data service. + + + The network provides High-Speed Uplink Packet Access (HSUPA) data service. + + + The network provides LTE Advanced data service. + + + The network provides CDMA 1x Radio Transmission Technology (1xRTT) data service. + + + This network provides CDMA Evolution-Data Optimized (originally Data Only, 1xEDVO, also known as CDMA2000 1x EV-DO, or 1x EVDO) data service. + + + The network provides 1xEVDO RevA data service. + + + The network provides CDMA Evolution-Data/Voice (also known as CDMA 2000 1x EV-DV, or 1x EVDV) data service is supported. + + + The network provides CDMA 3x Radio Transmission Technology (3xRTT) data service. + + + The network provides 1xEVDO RevB data service. + + + The network provides UMB data service. + + + The network provides a data service not listed in this table. + + + Defines the network registration states for a WWAN connection. + + + No networks found for this connection. + + + The connection is not registered with a network. + + + Searching for available networks. + + + The connection is registered with a home network. + + + The connection is registered with a roaming network. + + + The connection is registered with a roaming network partner. + + + Registration of the connection with all available networks is denied. However, emergency voice calls may still be made. This value applies only to voice connections, and not to data connections. + + + Defines the desired state of the connection profile for which usage data is returned by the method GetNetworkUsageAsync. + + + Defines the desired roaming state of the network connection. + + + Defines the desired sharing state of the network connection. + + + Represents the method that handles network status change notifications. This method is called when any properties exposed by the NetworkInformation object changes while the app is active. + A Object that raised the event. + + + Contains classes that support Mobile Broadband Account management. + + + Provides the authentication context that contains details of the current authentication attempt and provides methods to perform the authentication. + + + Aborts the current authentication attempt and disconnects the WLAN interface from the hotspot. + If true, Windows disables the auto-connect property for the corresponding WLAN profile and avoids future auto-connects to this hotspot. Otherwise, false. + + + Gets the HTTPS URL specified in the Wireless Internet Service Provider roaming (WISPr) redirect message. + A URI that contains the HTTPS authentication URL. + + + Provides credentials to Windows for hotspot authentication + The UserName parameter of the Wireless Internet Service Provider roaming (WISPr) authentication protocol. IssueCredentials performs URL encoding before submitting the value to the server. If this string is empty, the corresponding authentication parameter is skipped. + The Password parameter of the WISPr authentication protocol. IssueCredentials performs URL encoding before submitting the value to the server. If this string is empty, the corresponding authentication parameter is skipped. + Additional parameters to be appended to the authentication string. IssueCredentials appends this parameter after an & character to the HTTP POST string as is without any encoding. This can be used to add multiple parameters. The default for this parameter is an empty string. + If true, an application permanently disables the auto-connect property on a connection. If authentication fails, the connection will be disconnected and not retried in the current user session. Otherwise, false. + + + Asynchronously provides credentials to Windows for hotspot authentication + Results of the Hotspot authentication request. + The UserName parameter of the Wireless Internet Service Provider roaming (WISPr) authentication protocol. IssueCredentials performs URL encoding before submitting the value to the server. If this string is empty, the corresponding authentication parameter is skipped. + The Password parameter of the WISPr authentication protocol. IssueCredentials performs URL encoding before submitting the value to the server. If this string is empty, the corresponding authentication parameter is skipped. + Additional parameters to be appended to the authentication string. IssueCredentials appends this parameter after an & character to the HTTP POST string as is without any encoding. This can be used to add multiple parameters. The default for this parameter is an empty string. + If true, an application permanently disables the auto-connect property on a connection. If authentication fails, the connection will be disconnected and not retried in the current user session. Otherwise, false. + + + Gets the network interface that is connected to the WLAN access point of the hotspot. + An object that uniquely identifies the network. + + + Gets the URL of the web page where the Wireless Internet Service Provider roaming (WISPr) redirect message was found. + A URI that contains the HTTPS or HTTP redirect URL. + + + Gets the XML blob of the Wireless Internet Service Provider roaming (WISPr) redirect message of the hotspot. + The WISPr XML blob from the hotspot redirect message. + + + Skips Wireless Internet Service Provider roaming (WISPr) Windows authentication. + + + Called by a background task handler to launch the foreground application when there is an authentication attempt to complete. + The foreground application ID within its application package. The application must belong to the same package as the background task handler. + Optional command line parameters that are passed to the application at launch. + + + Gets the context of an authentication attempt. + If true, the authentication context was retrieved. The authentication context can only be retrieved if the calling application matches the application ID specified in the hotspot profile of the underlying WLAN connection and if the authentication hasn't be completed by the corresponding context already or timed out. + The event token retrieved from the network operator hotspot authentication event. The token is a GUID in string format. + The network operator hotspot authentication context. + + + Gets the SSID of the WLAN access point of the hotspot. + A byte array that contains the SSID. + + + Represents the results of a Hotspot authentication request. + + + Provides the XML blob containing the WISPr authentication reply message from the server. + Authentication reply message. + + + Indicates if a network error has occurred that prevented the authentication attempt. If true, the other properties should not be examined. + true if an error occurred; otherwise, false. + + + Provides the most recent Logoff URL as returned from the server in the authentication reply or from an earlier redirect message. If no Logoff URL was provided by the server, this property returns an empty URI. + The most recent Logoff URL. + + + Provides the WISPr Response Code for the authentication attempt as returned from the server. Possible values are defined by HotspotAuthenticationResponseCode. + The authentication result. + + + Provides the content of the event that is raised for background task handlers for the hotspot authentication event. + + + Gets a GUID that uniquely identifies the authentication attempt for which this event was raised. + A GUID that uniquely identifies the connection attempt. + + + Represents a mobile broadband account and related information about the network provider for the account. + + + A list of all network account IDs for the network service provider. + A list of all network account IDs for the network service provider. + + + Creates a mobile broadband account for the mobile device associated with the supplied network account ID. + A mobile broadband account for the mobile device associated with the supplied network account ID. + The network account ID to use to select the corresponding mobile broadband device to use for the account. + + + Gets the mobile broadband device information associated with this account. + The mobile broadband device information associated with this account. + + + Gets the Mobile Broadband network object for this account. + The Mobile Broadband network object for this account. + + + Retrieves an array of ConnectionProfile objects that represent connections associated with the Mobile Broadband account. + An array of ConnectionProfile objects. + + + Gets a unique identifier for the mobile broadband account. + A unique identifier for the mobile broadband account. + + + A unique identifier for the network provider for the mobile broadband account. + A unique identifier for the network provider for the mobile broadband account. + + + The name of the network provider for the mobile broadband account. + The name of the network provider for the mobile broadband account. + + + Provides information for the AccountAdded and AccountRemoved events. + + + Gets the network account Id that was added or removed. + The network account Id that was added or removed. + + + Provides information for the AccountUpdated event. + + + Gets a value indicating whether the device information has changed for the account. + A value indicating whether the device information has changed for the account. + + + Gets a value that indicates if the CurrentNetwork was updated for the account. + A value that indicates if the CurrentNetwork was updated for the account. + + + Gets the network account Id of the updated account. + The network account Id of the updated account. + + + Provides information regarding availability of and updates to Mobile Broadband Accounts. + + + Occurs when a Mobile Broadband Account is added to the client. + + + Occurs when a Mobile Broadband Account is removed from the client. + + + Occurs when a Mobile Broadband Account is updated on the client. + + + Occurs when the account watcher has finished enumerating accounts for the client. + + + Creates a new instance of a MobileBroadbandAccountWatcher. + + + Starts the account watcher. + + + Gets the status of the account watcher. + The status of the account watcher. + + + Stops the account watcher. + + + Occurs when the MobileBroadbandAccountWatcher has stopped. + + + Represents a mobile broadband network and the current network state. + + + The name of the currently connected access point. + The name of the currently connected access point. + + + Attempts to get the latest network activation error. + The latest network activation error. + + + Gets the unique network interface that identifies the mobile broadband network. + An object that uniquely identifies the network. + + + Gets the current network registration state. + The current network registration state. + + + Gets the latest packet attach network error. + The latest packet attach network error. + + + Gets the data class of the current mobile network. + The data class of the current mobile network. + + + Gets the provider ID for the currently registered mobile network. + The provider ID for the currently registered mobile network. + + + Gets the provider name for the currently registered mobile network. + The provider name for the currently registered mobile network. + + + Gets the latest network registration error. + The latest network registration error. + + + Displays the connect UI for a specific mobile network. + + + Represents the current state of the mobile broadband network device for the account. + + + Gets the cellular technology used by the mobile broadband network device. + The cellular technology used by the mobile broadband network device. + + + Gets a value indicating the radio state of the device. + A value indicating the radio state of the device. + + + Gets the name of the data class when the DataClasses property returns Custom. + The name of the data class when the DataClasses property returns Custom. + + + Gets the cellular data services supported by the mobile broadband network device. + The cellular data services supported by the mobile broadband network device. + + + Gets the DeviceInformation Id of the mobile broadband device. + The DeviceInformation Id of the mobile broadband device. + + + Gets a value indicating the type of Mobile Broadband device. + A value indicating the type of Mobile Broadband device. + + + Gets the device-specific firmware information for the mobile broadband network device. + The device-specific firmware information for the mobile broadband network device. + + + Gets the name of the manufacturer of the mobile broadband network device. + The name of the manufacturer of the mobile broadband network device. + + + Gets the value that uniquely identifies the mobile broadband device to the network provider. + The value that uniquely identifies the mobile broadband device to the network provider. + + + Gets the name of the model of the mobile broadband network device. + The name of the model of the mobile broadband network device. + + + Gets the readiness status of the mobile broadband network device. + The readiness status of the mobile broadband network device. + + + Gets the SIM integrated circuit card identifier (ICCID) for the mobile broadband network device. + The SIM integrated circuit card identifier (ICCID) for the mobile broadband network device. + + + Gets the subscriber identifier for the mobile broadband network device. + The subscriber identifier for the mobile broadband network device. + + + Gets the telephone numbers for the mobile broadband device. + The telephone numbers for the mobile broadband device. + + + Provides details for a network operator notification. + + + Used to indicate if tethering is permitted for a device. If it is not, a reason can be provided. + true if tethering is permitted; otherwise, false. + The reason tethering is not permitted. + + + Gets the data-coding scheme (DCS) of the received message. + The data-coding scheme (DCS) of the received message. + + + Gets the message for the network operator notification. + The message for the network operator notification. + + + Gets a unique identifier for the mobile broadband account that received the notification. + A unique identifier for a mobile broadband account. + + + Gets the type of the network notification. + The type of the network notification. + + + Gets the identifier of the provisioned rule that matched and triggered the notification. + The provisioned rule identifier. + + + Gets an SMS message for the mobile broadband account that received the notification. + If the network operator notification is triggered by a new mobile network operator SMS, it contains the SMS message object for the network operator notification. NULL if no SMS message was received as part of the notification. + + + Provides the ability to configure and create a NetworkOperatorTetheringAccessPointConfiguration object that contains a specific network account id and specifies the pass-phrase used for authentication when establishing a tethered network connection. + + + Creates an instance of the NetworkOperatorTetheringAccessPointConfiguration. + + + Gets or sets the pass-phrase used to authenticate the connection. + The network pass-phrase. + + + Gets or sets the network account ID. + The network account ID + + + This interface exposes the methods and properties used to control and configure tethering capabilities for a specific network account. + + + Gets the current number of clients on the tethering network. + The current number of clients. + + + Use this method to provide tethering network configuration details for a network account. + The asynchronous action. + Provides a network account id and specifies the pass-phrase used for authentication when establishing a tethered network connection. + + + Creates an instance of NetworkOperatorTetheringManager for a specific network account using the provided network account ID. + A NetworkOperatorTetheringManager object. + The network account ID. + + + Gets the current access point configuration for a network account as defined by a NetworkOperatorTetheringAccessPointConfiguration object. + Indicates the network account id and specifies the pass-phrase used for authentication when establishing a connection over the tethering network. + + + Gets the current tethering capabilities for the specified network account. Possible values are defined by TetheringCapability. + The tethering capabilities of a network account. + The network account ID. + + + Gets the maximum number of client connections over a tethered network. + The maximum number of client connections + + + Establishes the tethering network. + The result of the tethering network operation. + + + Shuts down the tethering network. + The result of the tethering network operation. + + + Gets the current operational state of a device's tethering capability. Possible values are defined by TetheringOperationalState + The current operational state. + + + Represents the results of a StartTetheringAsync or StopTetheringAsync operation. In addition to the TetheringOperationStatus value, it can include an optional error message string that provides mobile operator specific context to the error. + + + An optional error message string that provides mobile operator specific context to the error. + The mobile operator defined error context. + + + Indicates the result of a tethering operation. Possible values are defined by TetheringOperationStatus. + The result of a tethering operation. + + + Updates cost and usage information for a mobile broadband profile. + + + Called by the application to update the cost for a specific profile. + Updates the cost for the profile. + + + Called by the application to update the usage for a specific profile. + Updates the usage for a profile. + + + The results object returned to the application when the provisioning operation has completed. + + + Determines whether all elements specified in the provisioning XML were applied. + True if all elements specified in the provisioning XML could be applied; otherwise false. + + + Indicates which elements in the provisioning profile could not be successfully provisioned. + An instance of ResultsSchema that indicates which elements in the provisioning profile could not be successfully provisioned. + + + Represents an agent that provisions connectivity and subscription information with a network provider. + + + Creates a provisioning agent for the mobile device associated with the supplied network account ID. + The provisioning agent for the mobile device associated with the supplied network account ID. + The network account ID to use to select the corresponding mobile broadband device to use for the provisioning agent. + + + Retrieves cost and plan information associated with the mobile broadband profile. + The profile. + The media type that the profile belongs to. + The name of the profile that the cost will be applied to. + + + Provisions a device for network connectivity asynchronously, based on the supplied XML document. + An asynchronous handler to start the provisioning attempt and track its completion. + An instance of CarrierControlSchema that contains the network connectivity provisioning information. + + + Creates a new instance of a ProvisioningAgent. + + + Represents a USSD message that is used for sending messages to and receiving messages from the network. + + + Gets or sets the encoding scheme of the payload of this UssdMessage. + The encoding scheme of the payload of this UssdMessage. + + + Gets the raw payload of this UssdMessage. + The raw payload of this UssdMessage. + + + Gets or sets the payload of this UssdMessage as text. + The payload of this UssdMessage as text. + + + Sets the raw payload of this UssdMessage. + The raw payload of this UssdMessage. + + + Creates a new instance of a UssdMessage and encodes the supplied string into the message payload. + The payload for the UssdMessage. + + + Represents the network response after sending a USSD message. + + + Gets the message for the USSD response. + The message for the USSD response. + + + Gets the result code for the USSD response. + The result code for the USSD response. + + + Represents a session of the USSD network protocol. + + + Closes the USSD session with the network. + + + Creates a USSD session for the mobile device associated with the supplied network account ID. + The USSD session for the mobile device associated with the supplied network account ID. + The network account ID to use to select the corresponding mobile broadband device to use for the USSD session. + + + Creates a USSD session for the mobile device associated with the supplied network interface ID. + The USSD session for the mobile device associated with the supplied network interface ID. + The network interface ID to use to select the corresponding mobile broadband device to use for the USSD session. + + + Sends a message to a USSD session and returns a handler to retrieve the reply asynchronously. + An asynchronous handler to retrieve the USSD response to the sent message. + The message to send to the USSD session. + + + Used to update the usage of plan data. + + + Updates the usage in megabytes. + + + The last time UsageInMegabytes was updated. + + + Describes the cellular data services supported by a mobile broadband network device. + + + No data services supported. + + + The device supports the GPRS data service implemented by GSM providers. + + + The device supports the EDGE data service implemented by GSM providers. + + + The device supports the UMTS data service implemented by GSM providers. + + + The device supports the HSDPA data service implemented by GSM providers. + + + The device supports the HSUPA (High Speed Uplink Packet Access) data service. + + + The device supports the HSDPA Lite data service implemented by GSM providers. + + + The device supports the 1xRTT data service implemented by CDMA providers. + + + The device supports the 1xEV-DO data service implemented by CDMA providers. + + + The device supports the 1xEV-DO RevA data service implemented by CDMA providers. + + + The device supports the 1xEV-DV data service implemented by CDMA providers. + + + The device supports the 3xRTT data service implemented by CDMA providers. + + + The device supports the 1xEV-DO RevB data service, which is identified for future use. + + + The device supports the UMB data service implemented by CDMA providers. + + + The device supports a custom data service. + + + Defines values used to indicate status of connection authentication with a mobile hotspot. Provides the response code from the WISPr server for an authentication attempt. + + + No response returned. + + + Hotspot authentication successful. + + + Hotspot authentication failed. + + + No response from authentication server. + + + An error occurred that requires contacting the network administrator. + + + The authentication request was aborted. + + + An internal error occurred in the access gateway. + + + Describes different states of a MobileBroadbandAccountWatcherStatus object. + + + The watcher has been created but not started and is in its initial state. + + + The watcher has been started and has yet to enumerate the existing accounts. + + + The watcher is running and has finished enumerating the existing accounts. + + + The watcher has been stopped. No events will be delivered while the watcher is in this state. + + + The watcher has aborted its watching operation due to an unexpected error condition. No events will be delivered while the watcher is in this state. + + + Describes different types of Mobile Broadband devices. + + + The device type is unknown. + + + The device is embedded in the system. + + + The device is removable. + + + The device is remote. For example, a tethered cellular phone modem. + + + Describes radio states for a Mobile Broadband device. + + + The radio is off. This can be because it has been turned off using a physical switch on the device, or using a software mechanism such as Airplane Mode on the control panel. + + + The radio is on. + + + Describes the readiness of a device to connect to a wireless network. + + + The mobile broadband device is off. + + + The device is powered on and ready for mobile broadband operations. + + + The mobile broadband device does not have a SIM card. + + + The SIM card is not valid. This can occur when PIN Unblock Key attempts have exceeded the limit. + + + The mobile broadband device hardware is not responding. + + + A subscription account for the mobile broadband device is not active. + + + The mobile broadband device is locked by a PIN or password preventing the device from initializing and registering with a wireless network. + + + The mobile broadband device is blocked by a PIN or password preventing the device from initializing and registering with a wireless network. + + + Describes the type of a network operator notification message. + + + The message type is GSM. + + + The message type is CDMA. + + + The message type is USSD. + + + Data plan data threshold has been reached. + + + Data plan has been reset. + + + Data plan has been deleted. + + + Profile connected to mobile operator. + + + Profile disconnected from mobile operator. + + + Mobile broadband device registered as roaming. + + + Mobile broadband device registered as home. + + + Mobile broadband device can be used for tethering. + + + Describes the network registration state of a mobile broadband device. + + + No connectivity. + + + The device is not registered and is not searching for a network provider. + + + The device is not registered and is searching for a network provider. + + + The device is on a home network provider. + + + The device is on a roaming network provider. + + + The device is on a roaming partner network provider. + + + The device was denied registration. Emergency voice calls may be made. This applies to voice and not data. + + + Describes network types for provisioned network connectivity profiles. + + + The profile is for a wireless local area network (WLAN). + + + The profile is for a wireless wide area network (WWAN). + + + Describes the USSD response codes for messages sent to the network. + + + The USSD message that was received is either a USSD notification from the network or a response to an earlier request. No further information is necessary. The USSD session is closed. + + + The USSD message that was received is either a USSD request from the network or a response to a message sent to the network. Additional information is needed. The USSD session is open. + + + The USSD session has been terminated by the network or a local client. + + + The previous USSD request failed because another local client has an active USSD session. + + + The previous USSD request failed because the request was invalid or cannot be handled by the driver, device, or network. + + + The USSD session has been closed because there was no response from the network. + + + Contains classes that support connections between devices that are within close range. + Required to establish connections with proximity devices. + + + Contains properties that are passed to an application with the ConnectionRequested event. + Required to establish connections with proximity devices. + + + Gets the information for a peer that's requesting a connection. + Required to establish connections with proximity devices. + The information for a peer that's requesting a connection. + + + Enables you to discover another instance of your app on a nearby device and create a socket connection between the peer apps by using a tap gesture or by browsing. + Required to establish connections with proximity devices. + + + Specifies whether the PeerFinder class may connect a StreamSocket object by using Bluetooth. + Required to establish connections with proximity devices. + True if the PeerFinder class may connect a StreamSocket object by using Bluetooth; otherwise false. The default is true. + + + Specifies whether the PeerFinder class may connect to a StreamSocket object using TCP/IP. + Required to establish connections with proximity devices. + True if the PeerFinder class may connect to a StreamSocket object using TCP/IP; otherwise false. + + + Specifies whether the PeerFinder class may connect a StreamSocket object by using Wi-Fi Direct. + Required to establish connections with proximity devices. + True if the PeerFinder class may connect a StreamSocket object by using Wi-Fi Direct; otherwise false. The default is true. + + + Gets a list of alternate appId values to match with peer applications on other platforms. + Required to establish connections with proximity devices. + A list of alternate appId values to match with peer applications on other platforms. + + + Connects to a peer discovered by a call to the FindAllPeersAsync method. + Required to establish connections with proximity devices. + An asynchronous operation for connecting to a remote peer using the supplied StreamSocket object. + A peer information object representing the peer to connect to. + + + Occurs when a remote peer requests a connection using the ConnectAsync method. + Required to establish connections with proximity devices. + + + Creates a new instance of a PeerWatcher object for dynamic discovery of peer apps. + An instance of a PeerWatcher object for dynamic discovery of peer apps. + + + Gets or sets user or device data to include during device discovery. + User or device data to include during device discovery. Must be less than 32 bytes. + + + Gets or sets the name that identifies your computer to remote peers. + Required to establish connections with proximity devices. + The name that identifies your computer to remote peers. + + + Asynchronously browses for peer computers that are running the same app within wireless range. + Required to establish connections with proximity devices. + The asynchronous operation for browsing for peers by using Wi-Fi Direct. + + + Gets or sets app-specific metadata for the app in peer-to-peer connections. + The app-specific metadata for the app in peer-to-peer connections. + + + Gets or sets the role of the app in peer-to-peer connections. + The role of the app in peer-to-peer connections. + + + Starts the process of finding peer apps and makes an app discoverable to remote peers. + Required to establish connections with proximity devices. + + + Delivers a message to a peer app on a proximate device. + Required to establish connections with proximity devices. + The message to deliver to the proximate device. + + + Stops the process of finding peer apps or advertising for a peer connection. + Required to establish connections with proximity devices. + + + Gets a value that indicates which discovery options are available to use with the PeerFinder class. + Required to establish connections with proximity devices. + A value that indicates which discovery options are available to use with the PeerFinder class. + + + Occurs during a tap gesture from a remote peer. + Required to establish connections with proximity devices. + + + Contains information that identifies a peer. + Required to establish connections with proximity devices. + + + Gets or sets user or device data to include during device discovery. + User or device data to include during device discovery. Must be less than 32 bytes. + + + Gets the display name of the peer. + Required to establish connections with proximity devices. + The display name of the peer. + + + Gets the app id for the peer app. + The app id for the peer app. + + + Gets app-specific metadata for the peer app. + App-specific metadata for the peer app. + + + Dynamically discovers peer apps within wireless range. + + + Occurs when a peer app is found within wireless range. + + + Occurs after a scan operation is complete and all peer apps within wireless range have been found. + + + Occurs when a peer app is no longer within wireless range. + + + Begin dynamically searching for peer apps within wireless range. + + + Gets the current state of the PeerWatcher object. + The current state of the PeerWatcher object. + + + Stop dynamically searching for peer apps within wireless range. + + + Occurs when the PeerWatcher object has been stopped. + + + Occurs when the DisplayName or Metadata for a peer app within wireless range has changed. + + + Enables you to publish messages to proximate devices or subscribe to messages from proximate devices. + Required to establish connections with proximity devices. + + + Gets the transfer rate of a proximity device. + Required to establish connections with proximity devices. + The transfer rate of a proximity device. + + + Occurs when a device enters the proximate range. + Required to establish connections with proximity devices. + + + Occurs when a device leaves the proximate range. + Required to establish connections with proximity devices. + + + Gets the DeviceInformation Id for a proximity device. + Required to establish connections with proximity devices. + The DeviceInformation Id for a proximity device. + + + Creates an instance of a ProximityDevice class and activates the specified proximity device interface. + Required to establish connections with proximity devices. + A new ProximityDevicethat uses the specified proximity device interface. Throws a System.IO.FileNotFoundException exception if the specified proximity device interface isunavailable. + The DeviceInformation Id of a proximity device. + + + Creates an instance of a ProximityDevice class and activates the default proximity provider. + Required to establish connections with proximity devices. + A new proximity device that uses the default proximity provider. Returns NULL if no proximity devices are installed. + + + Returns the class selection string that you can use to enumerate proximity devices. + Required to establish connections with proximity devices. + The class selection string for proximity devices. + + + Gets the maximum size of a published message that this proximity device supports. + Required to establish connections with proximity devices. + The maximum size of a published message that this proximity device supports. + + + Publishes a message that contains binary data to subscribers of the specified message type. + Required to establish connections with proximity devices. + A unique publication ID for the published message. + The type of message to deliver to subscribers. + The binary message data to deliver to subscribers. + + + Publishes a message that contains binary data to subscribers of the specified message type. The specified handler is called when the message has been transmitted. + Required to establish connections with proximity devices. + A unique publication ID for the published message. + The type of message to deliver to subscribers. + The binary message data to deliver to subscribers. + The handler to call when the message has been transmitted. + + + Publishes a message to subscribers of the specified message type. + Required to establish connections with proximity devices. + A unique publication ID for the published message. Pass this value to the StopPublishingMessage method to stop publishing the message. + The type of message to deliver to subscribers. + The message to deliver to subscribers. + + + Publishes a message to subscribers of the specified message type. The specified handler is called when the message has been transmitted. + Required to establish connections with proximity devices. + A unique publication ID for the published message. + The type of message to deliver to subscribers. + The message to deliver to subscribers. + The handler to call when the message has been transmitted. + + + Publishes a Uniform Resource Identifier (URI) to a proximate device. + Required to establish connections with proximity devices. + The publication ID of the message. + The URI to publish. + + + Publishes a Uniform Resource Identifier (URI) to a proximate device. The specified handler is called when the message has been transmitted. + Required to establish connections with proximity devices. + The publication ID of the message. + The URI to publish. + The handler to call when the message has been transmitted. + + + Stops publishing a message. + Required to establish connections with proximity devices. + The publication ID for the message. + + + Cancels a message subscription. + Required to establish connections with proximity devices. + The subscription ID for the message. + + + Creates a subscription for a specified message type. + Required to establish connections with proximity devices. + A unique ID for the subscription. + The type of message to deliver to this subscription. + The handler that the proximity provider will call when it delivers a message. + + + Represents a message that's received from a subscription. + Required to establish connections with proximity devices. + + + Gets the binary data of the message. + Required to establish connections with proximity devices. + The binary data of the message. + + + Gets the message data as text. + Required to establish connections with proximity devices. + The message data as text. + + + Gets the type of the message. + Required to establish connections with proximity devices. + The type of the message. + + + Gets the subscription ID of the message. + Required to establish connections with proximity devices. + The subscription ID of the message. + + + Contains properties that the TriggeredConnectionStateChanged event passes to an application. + Required to establish connections with proximity devices. + + + Gets the unique identifier for the connection in progress. + Required to establish connections with proximity devices. + The unique identifier for the connection in progress. + + + Gets the StreamSocket instance for the connection. + Required to establish connections with proximity devices. + The StreamSocket instance for the connection. + + + Gets the state of the connection in progress. + Required to establish connections with proximity devices. + The state of the connection in progress. + + + Indicates which discovery options are available to use with the PeerFinder class. + Required to establish connections with proximity devices. + + + No supported discovery types are available. You can't use the PeerFinder class. + + + You can use Wifi-Direct to find peers by using the FindAllPeersAsync and ConnectAsync methods of the PeerFinder class. + + + You can tap to connect to peers by using the PeerFinder class. + + + Describes the role of the peer app when connected to multiple peers. + + + The app is part of a two-peer connection. + + + The app is the host peer app in a multi-peer connection. + + + The app is a client peer app in a multi-peer connection. + + + Describes the status of a PeerWatcher object. + + + The peer watcher has been created and can start watching for peer apps within wireless range. + + + The peer watcher has started watching for peer apps within wireless range. + + + A scan operation is complete and all peer apps within wireless range have been found. + + + The peer watcher is stopping. + + + The peer watcher has stopped watching for peer apps within wireless range. + + + Watching for peers has stopped due to a failure. + + + Indicates the current state of a connection to a peer application. + Required to establish connections with proximity devices. + + + A device that supports proximity socket connections is within proximity. The tap gesture is complete. + + + This side of the socket connection will be the host and is waiting for a connection from the peer. + + + This side of the socket connection will be the client and is attempting to connect to the peer. + + + The connection is complete, and the StreamSocket class can now be used to communicate with the peer. + + + The connection was stopped before it was completed. + + + An error prevented a successful connection. + + + Describes the method that handles the DeviceArrived event. + Required to establish connections with proximity devices. + The proximity device that raised the DeviceArrived event. + + + Describes the method that handles the DeviceDeparted event. + Required to establish connections with proximity devices. + The proximity device that raised the DeviceDeparted event. + + + Describes the method that will handle the event that's fired when a message that has been subscribed to has been received. + Required to establish connections with proximity devices. + The proximity device that received the message. + The message and related data that were passed to the event handler. + + + Describes the method that will handle the event that's fired when a published message has been transmitted. + Required to establish connections with proximity devices. + The proximity device that published the message. + The publication ID of the message. + + + Contains classes and interfaces that encapsulate push notifications. + Required to access the Internet. + + + Represents a delivery vehicle and addressing mechanism for push notifications. The channel Uniform Resource Identifier (URI) represented by this interface is used by a third-party application server to communicate with the Windows Push Notification Services (WNS). The push notification channel is used by the client to intercept notifications. + Required to access the Internet. + + + Explicitly invalidates this channel. Any notifications pushed to this channel after this method is called are not delivered. + Required to access the Internet. + + + Gets the time at which the channel expires. Notifications sent to this channel after this time are rejected. + Required to access the Internet. + The time at which the channel expires. Notifications sent to this channel after this time are rejected. + + + Fires when a push notification has arrived on this channel. + Required to access the Internet. + + + Gets the Uniform Resource Identifier (URI) to which an app server sends a push notification intended for an application or secondary tile bound to this channel. This Uniform Resource Identifier (URI) is transmitted to and stored by the third-party app server. + Required to access the Internet. + The Uniform Resource Identifier (URI) (https) that the app server uses to post notifications. + + + Creates objects that you use to retrieve push notification channels from the Windows Push Notification Services (WNS). These channels are bound to an app or secondary tile. + Required to access the Internet. + + + Creates an object, bound to the calling app, through which you retrieve a push notification channel from Windows Push Notification Services (WNS). + The object, bound to the calling app, that is used to request a PushNotificationChannel from the Windows Push Notification Services (WNS). + + + Creates an object, bound to a specified app, through which you retrieve a push notification channel from Windows Push Notification Services (WNS). + The object, bound to the app specified in applicationId, that is used to request a PushNotificationChannel from the Windows Push Notification Services (WNS). + The Package Relative Application ID (PRAID) of the app to bind to the push notification channel. + + + Creates an object, bound to a secondary tile, through which you retrieve a push notification channel from Windows Push Notification Services (WNS). + The object, bound to the secondary tile, that is used to request a PushNotificationChannel from the Windows Push Notification Services (WNS). + The ID of the secondary tile to bind to the push notification channel. + + + Encapsulates a push notification that has been received from the app server, identifying the type and supplying the content of the notification. Windows passes this information in the PushNotificationReceived event. + Required to access the Internet. + + + Gets the content of a badge update to perform in response to this push notification. + Required to access the Internet. + Holds the update information. If NotificationType is not of type Badge, this value is NULL. + + + Gets or sets whether Windows should perform its default handling of the notification. + Required to access the Internet. + True to prevent default processing of the notification by Windows, otherwise false. The default value is false. + + + Gets the type of push notification that has been received from the app server. + Required to access the Internet. + The type (badge, tile, toast, or raw) of push notification that has been received. + + + Gets the app-defined content contained in this push notification, the contents of which are used to perform a background task on the app. + Encapsulates the app-defined content of the raw notification. If NotificationType is not of type Raw, this value is NULL. + + + Gets the content of a tile update to perform in response to this push notification. + Required to access the Internet. + Holds the update information. If NotificationType is not of type Tile, this value is NULL. + + + Gets the content of a toast to display in response to this push notification. + Required to access the Internet. + Holds the toast information. If NotificationType is not of type Toast, this value is NULL. + + + The type of push notification that has been received from the app server. + Required to access the Internet. + + + A push notification to display as toast. + + + A push notification to update one or more elements of a tile. + + + A push notification to update a tile's badge overlay. + + + A push notification to perform an update to a tile that does not involve UI. + + + Encapsulates the app-defined content of a raw notification (a push notification that does not involve UI). Its contents can be used in an app's background task, if the app has that capability, or otherwise consumed by the app and acted on as needed. + + + Gets the content of the raw notification as a string. This string specifies a background task associated with the app. + A string that contains the app-defined notification content, as set by the app server. + + + Provides sockets and WebSockets classes to use for network communications and classes for real-time network notifications received in the background for Windows Store app. + + + Enables real time notifications to be received in the background for class elements in the Windows.Networking.Sockets namespace and other networking transports. + + + Closes the ControlChannelTrigger object. + + + Gets a string that can be used to differentiate various control channel triggers on the local computer. + A string that can be used to differentiate various control channel triggers. + + + Gets the network keep-alive interval, in minutes, maintained by low-level network components in the TCP stack based on current network conditions. + The network keep-alive interval, in minutes, maintained by low-level network components in the TCP stack based on current network conditions. + + + Provides a way for an app to indicate that the network keep-alive interval maintained by the system with network intermediaries to wake up was too long and should be decreased. This method applies to class elements in the Windows.Networking.Sockets and related namespaces. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes any networking data used by the transport connection associated with the ControlChannelTrigger to the networking stack. + + + Gets an object that represents the keep-alive trigger associated with the ControlChannelTrigger object that an app should use to bind the activation class with the background broker infrastructure. + A string that represents the activation class ID for the keep-alive background task. + + + Gets an object that represents the push notification trigger associated with the ControlChannelTrigger object that an app should use to bind the activation class with the background broker infrastructure. + A string that represents the activation class ID for the push notification background task. + + + Get or set the server keep-alive interval, in minutes, registered with the system to indicate when the app and associated network connections used should wake up. + The server keep-alive interval, in minutes, registered with the system to indicate when the app and associated network connections used should wake up. + + + Gets the transport object that the system is using for the transport connection associated with the ControlChannelTrigger object. + The transport object that the system is using for the transport connection + + + Sets the transport connection to be used by a control channel trigger by class elements in the Windows.Networking.Sockets and related namespaces. + The instance of the network class that represents the network transport. + + + Allows an app to notify the system that a connection has been established and the system should complete the internal configuration of the control channel trigger. + A value that indicates if the system was able to complete configuration of a ControlChannelTrigger object. + + + Creates a new ControlChannelTrigger object with a control channel trigger ID and a value for the server keep-alive interval. + A string used to differentiate various control channel triggers on the local computer. The maximum length allowed for this string is 64 characters. + The keep-alive interval, in minutes, registered with the system to indicate when the app and network connections used should wake up. The minimum value that can be set for this parameter is 15 minutes. The maximum value that can be set is 1439 minutes (approximately 24 hours). + + + Creates a new ControlChannelTrigger object with a control channel trigger ID, a value for the server keep-alive interval, and the resource type requested for the control channel trigger. + A string used to differentiate various control channel triggers on the local computer. The maximum length allowed for this string is 64 characters. + The keep-alive interval, in minutes, registered with the system to indicate when the app and network connections used should wake up. The minimum value that can be set for this parameter is 15 minutes. The maximum value that can be set is 1439 minutes (approximately 24 hours). + The resource type requested for the control channel trigger. + + + Supports network communication using a UDP datagram socket. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Starts a bind operation on a DatagramSocket to a local hostname and a local service name. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous bind operation on a DatagramSocket object. + The local hostname or IP address on which to bind the DatagramSocket object. + The local service name or UDP port on which to bind the DatagramSocket object. + + + Starts a bind operation on a DatagramSocket to a local service name. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous bind operation on a DatagramSocket object. + The local service name or UDP port on which to bind the DatagramSocket object. + + + Starts a bind operation on a DatagramSocket to a local service name and specific network interface. + An asynchronous bind operation on a DatagramSocket object. + The local service name or UDP port on which to bind the DatagramSocket object. + The network adapter on which to bind the DatagramSocket object. + + + Closes the DatagramSocket object. + + + Starts a connect operation on a DatagramSocket to a remote destination specified by a remote hostname and a remote service name. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a DatagramSocket object. + The hostname or IP address of the remote network destination. + The service name or UDP port of the remote network destination. + + + Starts a connect operation on a DatagramSocket to a remote network destination specified as an EndpointPair object. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a DatagramSocket object. + An EndpointPair object that specifies local hostname or IP address, local service name or UDP port, the remote hostname or remote IP address, and the remote service name or remote UDP port for the remote network destination. + + + Gets socket control data on a DatagramSocket object. + Socket control data on a DatagramSocket object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets a list of EndpointPair objects based on a remote hostname and remote service name that can be used to send datagrams to a remote network destination. + A list of EndpointPair objects. + The remote hostname or IP address. + The remote service name or UDP port. + + + Gets a list of EndpointPair objects based on a remote hostname and remote service name and the sort order to be used. + A list of EndpointPair objects. + The remote hostname or IP address. + The remote service name or UDP port. + The sort order to use when returning the list. + + + Starts an operation to get an IOutputStream to a remote destination specified by a remote hostname and a remote service name that can then be used to send network data. + An IOutputStream that representing the asynchronous operation. + The remote hostname or remote IP address. + The remote service name or remote UDP port. + + + Starts an operation to get an IOutputStream to a remote network destination specified by an EndpointPair object that can then be used to send network data. + An IOutputStream that represents the asynchronous operation. + An endpoint pair that represents the local hostname or local IP address, the local service name or local UDP port, the remote hostname or remote IP address, and the remote service name or remote UDP port. + + + Creates a new DatagramSocket object. + + + Gets socket information on the local and remote hostnames and local and remote service names for the DatagramSocket object. + Socket information for the DatagramSocket object. + + + Joins a DatagramSocket object to a multicast group. + The hostname or IP address for the multicast group. + + + An event that indicates that a message was received on the DatagramSocket object. + + + Gets the output stream to write to the remote host. + A stream of bytes to be written to the remote host in a UDP datagram. + + + Provides socket control data on a DatagramSocket object. + + + Gets or sets a Boolean value that specifies whether the DatagramSocket allows IP datagrams for UDP to be fragmented. + Whether the DatagramSocket allows datagrams to be fragmented.true if the DatagramSocket shouldn't fragment datagrams; otherwise, false. The default is false which allows datagrams to be fragmented. + + + Get or set the size, in bytes, of the buffer used for receiving data on the DatagramSocket object. + The size, in bytes, of the buffer used for receiving data on the DatagramSocket object. The default is 8192. + + + Gets or sets the hop limit on an outbound packet sent to a unicast IP address by the DatagramSocket object. + The hop limit on an outbound packet sent by the DatagramSocket object. The default is 64. + + + Gets or sets the quality of service on a DatagramSocket object. + The quality of service on a DatagramSocket object. The default is normal. + + + Provides socket information on a DatagramSocket object. + + + The local IP address associated with a DatagramSocket object. + The local hostname or IP address. + + + The local service name or UDP port number associated with a DatagramSocket. + The local service name or UDP port number. + + + The IP address of the remote network destination associated with a DatagramSocket object. + The IP address of the remote network destination. + + + The UDP port number of the remote network destination associated with a DatagramSocket object. + The UDP port number of the remote network destination. + + + Provides data for a MessageReceived event on a DatagramSocket. + + + Gets a DataReader object to read incoming data received from the remote network destination on a DatagramSocket object. + A DataReader object to read incoming data received from the remote network destination on a DatagramSocket object. + + + Gets an IInputStream object that represents a sequential stream of bytes to be read as a message from the remote network destination on a DatagramSocket object. + An IInputStream object that represents a sequential stream of bytes to be read as a message. + + + Gets the local IP address associated with a DatagramSocket when a message was received. + The local IP address where the message was received by the DatagramSocket. + + + Gets the IP address of the remote sender of the datagram on the DatagramSocket when a message is received. + The IP address of the remote network destination when the message is received on a DatagramSocket. + + + Gets the UDP port number of the remote sender of the datagram received on the DatagramSocket. + The UDP port number of the remote network destination when a message is received on a DatagramSocket. + + + Supports network communication that allows reading and writing whole messages using a WebSocket. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Closes the MessageWebSocket object and indicates a reason for the closure. + Status code indicating the reason for closure. + Optional UTF-8-encoded data with additional information about the closure. + + + Closes the MessageWebSocket object and sends an empty close frame to the server. + + + Occurs when a close frame is received on the MessageWebSocket object as part of the close handshake. + + + Starts an asynchronous operation to connect to a remote network destination on a MessageWebSocket object. + An asynchronous connect operation on a MessageWebSocket object. + An absolute Uri for the server to connect to. + + + Gets socket control data on a MessageWebSocket object. + Socket control data on a MessageWebSocket object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets socket information on a MessageWebSocket object. + Socket information on a MessageWebSocket object. + + + An event that indicates that a message was received on the MessageWebSocket object. + + + Creates a new MessageWebSocket object. + + + Gets the output stream to write to the remote network destination on a MessageWebSocket object. + A sequential stream of bytes to be written to the remote destination as a single message. + + + Adds an HTTP request header to the HTTP request message used in the WebSocket protocol handshake by the MessageWebSocket object. + The name of the request header. + The value of the request header. + + + Provides socket control data on a MessageWebSocket. + + + The maximum message size, in bytes, for a WebSocket message to be configured on the MessageWebSocket object. + The maximum message size, in bytes, to be configured on the MessageWebSocket object. + + + The WebSocket message type to be configured on a MessageWebSocket object for write operations. + The WebSocket message type. + + + The size, in bytes, of the send buffer to be used for sending data on a MessageWebSocket object. + The size, in bytes, of the send buffer to be used for sending data. + + + The credential to use to authenticate to the proxy server through HTTP header authentication using a MessageWebSocket object. + The credential to use to authenticate to the proxy server through HTTP header authentication. + + + The credential to use to authenticate to the WebSocket server through HTTP header authentication using a MessageWebSocket object. + The credential to use to authenticate to the WebSocket server through HTTP header authentication. + + + Gets a collection that can be used to add a list of supported sub-protocols that will be advertised to the server during the connect handshake. + A collection that contains the WebSocket sub-protocols supported by the MessageWebSocket object. + + + Provides socket information on a MessageWebSocket. + + + Gets bandwidth information for network data transfer on a MessageWebSocket object. + Bandwidth information for network data transfer on a MessageWebSocket object. + + + Gets the IP address associated with a MessageWebSocket object. + The IP address associated with a MessageWebSocket object. + + + Gets the WebSocket sub-protocol negotiated with the server during WebSocket handshake on a MessageWebSocket object. + The sub-protocol negotiated with the server during the WebSocket handshake. + + + Provides data for a message received event on a MessageWebSocket. + + + Gets a DataReader object to read incoming data received from the remote network destination on a MessageWebSocket. + A DataReader object to read incoming data received from the remote network destination on a MessageWebSocket. + + + Gets an IInputStream object (a message represented as a sequential stream of bytes) from the remote network destination on a MessageWebSocket object. + A message represented as a sequential stream of bytes. + + + Gets the type of the message received by a MessageWebSocket object. + The type of the message received. + + + Provides socket error status for operations on a DatagramSocket, StreamSocket, or StreamSocketListener. + + + Gets a SocketErrorStatus value based on an error encountered by a socket operation. + The socket error status value for a socket operation. + The error encountered by a socket operation represented as an HRESULT. + + + Supports network communication using a stream socket over TCP or Bluetooth RFCOMM. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Closes the StreamSocket object. + + + Starts an asynchronous operation on a StreamSocket object to connect to a remote network destination specified as an EndpointPair object. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a StreamSocket object. + An EndpointPair object that specifies the local hostname or IP address, the local service name or TCP port, the remote hostname or remote IP address, and the remote service name or remote TCP port for the remote network destination. + + + Starts an asynchronous operation on a StreamSocket object to connect to a remote network destination specified as an EndpointPair object and a SocketProtectionLevel enumeration. This method is not callable from JavaScript. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a StreamSocket object. + An EndpointPair object that specifies local hostname or IP address, local service name or TCP port, the remote hostname or remote IP address, and the remote service name or remote TCP port for the remote network destination. + The protection level that represents the integrity and encryption for a StreamSocket object. + + + Starts an asynchronous operation on a StreamSocket object to connect to a remote network destination specified by a remote hostname and a remote service name. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a StreamSocket object. + The hostname or IP address of the remote network destination. For Bluetooth RFCOMM, this is a MAC address. + The service name or TCP port number of the remote network destination. For Bluetooth RFCOMM, this is the Bluetooth address. + + + Starts an asynchronous operation on a StreamSocket object to connect to a remote destination specified by a remote hostname, a remote service name, and a SocketProtectionLevel. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous connect operation on a StreamSocket object. + The hostname or IP address of the remote network destination. For Bluetooth RFCOMM, this is a MAC address. + The service name or TCP port number of the remote network destination. For Bluetooth RFCOMM, this is the Bluetooth address. + The protection level that represents the integrity and encryption for the StreamSocket object. + + + Starts an asynchronous operation on a StreamSocket object on a specified local network adapter to connect to a remote destination specified by a remote hostname, a remote service name, and a SocketProtectionLevel. + An asynchronous connect operation on a StreamSocket object. + The hostname or IP address of the remote network destination. For Bluetooth RFCOMM, this is a MAC address. + The service name or TCP port number of the remote network destination. For Bluetooth RFCOMM, this is the Bluetooth address. + The protection level that represents the integrity and encryption for the StreamSocket object. + The local network adapter to use for the connect operation on the StreamSocket object. + + + Gets socket control data on a StreamSocket object. + Socket control data on a StreamSocket object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets socket information on a StreamSocket object. + Socket information on a StreamSocket object. + + + Gets the input stream to read from the remote destination on a StreamSocket object. + A sequential stream of bytes to be read from the remote destination. + + + Gets the output stream to write to the remote host on a StreamSocket object. + A sequential stream of bytes to be written to the remote destination. + + + Creates a new StreamSocket object. + + + Starts an asynchronous operation to upgrade a connected socket to use SSL on a StreamSocket object. + An asynchronous operation to upgrade to use SSL on a StreamSocket object. + The protection level that represents the integrity and encryption on the StreamSocket object. + The hostname of the remote network destination that is used for validation when upgrading to SSL. + + + Provides socket control data on a StreamSocket object. + + + Get a vector of SSL server errors to ignore when making an SSL connection with a StreamSocket. + A vector of SSL server errors to ignore. + + + A value that indicates whether keep-alive packets are sent to the remote destination on a StreamSocket object. + Whether keep-alive packets are sent to the remote destination. + + + A value that indicates whether the Nagle algorithm is used on a StreamSocket object. + A value that indicates whether the Nagle algorithm is used on the TCP connection of a StreamSocket object + + + The size, in bytes, of the send buffer to be used for sending data on a StreamSocket object. + The size, in bytes, of the send buffer to be used for sending data. + + + The hop limit on an outbound packet sent to a unicast IP address by the StreamSocket object. + The hop limit on an outbound packet sent by the StreamSocket object. + + + The quality of service on a StreamSocket object. + The quality of service on a StreamSocket object. + + + Provides socket information on a StreamSocket object. + + + Gets bandwidth information for network data transfer on a StreamSocket object. + Bandwidth information for network data transfer on a StreamSocket object. + + + Gets the local IP address associated with a StreamSocket object. + The local IP address or hostname. + + + Get the TCP port number associated with a StreamSocket. + The local TCP port number of service name. + + + Gets the protection level that represents the integrity and encryption set on a StreamSocket object. + The protection level that represents the integrity and encryption set on a StreamSocket object. + + + Get the IP address or hostname of the remote network destination associated with a StreamSocket object. + The IP address of the remote network endpoint after a connection is established. + + + Get the hostname or IP address of the remote network destination associated with a StreamSocket object. + The hostname or IP address of the remote network destination. + + + Get the TCP port number or service name of the remote network destination associated with a StreamSocket object. + The TCP port number of the remote network endpoint after a connection is established. + + + Get the service name or TCP port number of the remote network destination associated with a StreamSocket object. + The service name or TCP port number of the remote network destination. + + + Gets round trip time information for a StreamSocket object. + Round trip time information for a StreamSocket object. + + + Get a byte array that represents the private shared secret exchanged by proximity devices. + A byte array that represents the private shared secret exchanged by proximity devices. + + + Gets the certificate from the server when making an SSL connection with a StreamSocket. + The certificate from the server with the SSL information. + + + Gets the category of an error that occurred making an SSL connection with a StreamSocket. + The category of error on an SSL connection. + + + Gets the list of errors that occurred making an SSL connection with a StreamSocket. + The list of errors that occurred making an SSL connection. + + + Gets the intermediate certificates sent by the server during SSL negotiation when making an SSL connection with a StreamSocket. + The set of certificates sent by the server during SSL negotiation. + + + Supports listening for an incoming network connection using a TCP stream socket or Bluetooth RFCOMM. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + + + Starts a bind operation on a StreamSocketListener to a local hostname and a local service name. + Required to access the Internet and receive unsolicited connections. + Required to access home and work networks (Intranet). + An asynchronous bind operation on a StreamSocketListener object. + The local hostname or IP address on which to bind the StreamSocketListener object. + The local service name or TCP port on which to bind the StreamSocketListener object. + + + Starts a bind operation on a StreamSocketListener to a local service name. + The asynchronous bind operation on a StreamSocketListener object. + The local service name or TCP port on which to bind the StreamSocketListener object. For Bluetooth RFCOMM, this parameter is the Bluetooth Service ID. + + + Starts a bind operation on a StreamSocketListener to a local service name with a specified SocketProtectionLevel to set on any bound sockets. + The asynchronous bind operation on a StreamSocketListener object. + The local service name or TCP port on which to bind the StreamSocketListener object. For Bluetooth RFCOMM, this parameter is the Bluetooth Service ID. + The protection level for encryption to set on any bound sockets. + + + Starts a socket bind operation on a StreamSocketListener to a local service name on a specified network adapter with a specified SocketProtectionLevel to set on any bound sockets. + The asynchronous bind operation on a StreamSocketListener object. + The local service name or TCP port on which to bind the StreamSocketListener object. For Bluetooth RFCOMM, this parameter is the Bluetooth Service ID. + The protection level for encryption to set on any bound sockets. + The network adapter on which to bind the StreamSocketListener object. + + + Closes the StreamSocketListener object. + + + An event that indicates that a connection was received on the StreamSocketListener object. + + + Gets socket control data on a StreamSocketListener object. + Socket control data on a StreamSocketListener object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets socket information for the StreamSocketListener object. + Socket information for the StreamSocketListener object. + + + Creates a new StreamSocketListener object. + + + Provides data for a ConnectionReceived event on a StreamSocketListener object. + + + The StreamSocket object created when a connection is received by the StreamSocketListener object. + The StreamSocket object created when a connection is received by the StreamSocketListener object. + + + Provides socket control data on a StreamSocketListener object. + + + The quality of service to be set on a StreamSocket object created when a connection is received by the StreamSocketListener object. + The quality of service set on a StreamSocket object created when a connection is received by the StreamSocketListener object. + + + Provides socket information on a StreamSocketListener object. + + + Get the local TCP port number associated with a StreamSocketListener object. + The local TCP port number or service name. + + + Supports network communication that allows reading and writing streams using a WebSocket. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Closes the StreamWebSocket and indicates a reason for the closure. + Status code indicating the reason for closure. + Optional UTF-8-encoded data with additional information about the closure. + + + Closes the StreamWebSocket and sends an empty close frame to the server. + + + Occurs when a close frame is received on the StreamWebSocket object as part of the close handshake. + + + Starts an asynchronous operation to connect to a remote network destination on a StreamWebSocket object. + An asynchronous connect operation on a StreamWebSocket object. + An absolute Uri for the server to connect to. + + + Gets socket control data on a StreamWebSocket object. + Socket control data on a StreamWebSocket object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets socket information on a StreamWebSocket object. + Socket information on a StreamWebSocket object. + + + Gets the input stream to read from the remote destination on a StreamWebSocket object. + A sequential stream of bytes to be read from the remote destination. + + + Gets the output stream to write to the remote network destination on a StreamWebSocket object. + A sequential stream of bytes to be written to the remote destination. + + + Adds an HTTP request header to the HTTP request message used in the WebSocket protocol handshake by the StreamWebSocket object. + The name of the request header. + The value of the request header. + + + Creates a new StreamWebSocket object. + + + Provides socket control data on a StreamWebSocket object. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + A value that indicates whether the Nagle algorithm is used on a StreamWebSocket object. + A value that indicates whether the Nagle algorithm is used on the TCP connection of a StreamWebSocket object. + + + The size, in bytes, of the send buffer to be used for sending data on a StreamWebSocket object. + The size, in bytes, of the send buffer to be used for sending data. + + + The credential to use to authenticate to the proxy server through HTTP header authentication using a StreamWebSocket object. + The credential to use to authenticate to the proxy server through HTTP header authentication. + + + The credential to use to authenticate to the WebSocket server through HTTP header authentication using a StreamWebSocket object. + The credential to use to authenticate to the WebSocket server through HTTP header authentication. + + + Gets a collection that can be used to add a list of supported sub-protocols that will be advertised to the server during the connect handshake. + A collection that contains the WebSocket sub-protocols supported by the StreamWebSocket object. + + + Provides socket information on a StreamWebSocket object. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Gets bandwidth information for network data transfer on a StreamWebSocket object. + Bandwidth information for network data transfer on a StreamWebSocket object. + + + Gets the IP address associated with a StreamWebSocket object. + The IP address associated with a StreamWebSocket object. + + + Gets the WebSocket sub-protocol negotiated with the server during WebSocket handshake on a StreamWebSocket object. + The sub-protocol negotiated with the server during WebSocket handshake. + + + Provides data for a closed event on a MessageWebSocket, StreamWebSocket, or IWebSocket object. + + + Gets information about the reason that a WebSocket object was closed. + Status code indicating the reason for closure. + + + Gets additional details about the reason that a WebSocket object was closed. + Detailed information about the closure. + + + Provides socket error status on a MessageWebSocket or StreamWebSocket object. + + + Gets a WebErrorStatus value based on an error encountered by a WebSocket operation. + The socket error status value for a WebSocket operation. + The error encountered by a WebSocket operation represented as an HRESULT. + + + Provides the ability to send a WebSocket protocol keep-alive on a connected WebSocket. + + + Sends a WebSocket protocol keep-alive on a connected WebSocket. + Specific instance of a background task. + + + Creates a new WebSocketKeepAlive object. + + + Represents bandwidth information for network data transfer using a StreamSocket, StreamWebSocket, or MessageWebSocket object. + + + The computed outbound bandwidth estimate in bits per second. + + + The computed inbound bandwidth estimate in bits per second. + + + A measure of the instability of the outbound bandwidth estimate in bits per second. + + + A measure of the instability of the inbound bandwidth estimate in bits per second. + + + A Boolean value that indicates whether the computed outbound bandwidth estimate for the network path has peaked. This member is set to true when the app is using enough of the connection bandwidth that the system can get a good estimate of the bandwidth delay product and can determine that the congestion window is a substantial fraction of the bandwidth delay product. This member can change from true to false if the app sends less data. + + + A Boolean value that indicates whether the computed inbound bandwidth estimate for the network has peaked. This member is set to true when the app is using enough of the connection bandwidth that the system can get a good estimate of the bandwidth delay product and can determine that the congestion window is a substantial fraction of the bandwidth delay product. This member can change from true to false if the app sends less data. + + + Represents round trip time information for a StreamSocket object. + + + The round trip time variation, in microseconds, for a StreamSocket object. This value is used for receive window auto-tuning. + + + The maximum sampled round trip time, in microseconds, for a StreamSocket object. + + + The minimum sampled round trip time, in microseconds, for a StreamSocket object. + + + A smoothed value round trip time, in microseconds, computed from all sampled round trip times for a StreamSocket object. The smoothing is a weighted additive function that uses the Variance member. + + + The reason why a ControlChannelTrigger was reset. + + + The ControlChannelTrigger was reset as a result of fast user switching. + + + The ControlChannelTrigger was reset as a result of a low power exit (Connected Standby exit). + + + The ControlChannelTrigger was reset as a result of quiet hours being set on the device and quiet hours having ended.This value is supported on Windows 8.1 Preview, Windows Server 2012 R2 Preview, and later. + + + he ControlChannelTrigger was reset as a result of an app restart.This value is supported on Windows 8.1 Preview, Windows Server 2012 R2 Preview, and later. + + + The resource type used by a control channel trigger. + + + Request a software slot from the system. + + + Request a hardware slot from the system. + + + Specifies if the system was able to complete configuration of a ControlChannelTrigger object for use by class elements in the Windows.Networking.Sockets and related namespaces. + + + The policy check succeeded and a hardware slot has been requested from the system. + + + The policy check succeeded and a software slot was allocated by the system. + + + A hardware slot was allocated by the system. + + + A policy error occurred when the system tried to complete configuration of a ControlChannelTrigger. This error can occur when an app has requested more connections for hardware or software slots than are permitted by system policy. + + + A system error occurred when the system tried to complete configuration of a ControlChannelTrigger for a hardware slot. + + + The network transport associated with the ControlChannelTrigger was disconnected. The underlying TCP connection was already disconnected by a TCP reset received from the remote destination or a graceful disconnect by either the app or the remote destination. The most common occurrence is a TCP reset or a graceful disconnect sent by the remote destination. + + + The service provided by the ControlChannelTrigger is unavailable. This can happen if the network connection broker service is not yet ready but the app is trying to establish a ControlChannelTrigger channel. This status code is provided under the following conditions:When there is fast user switching and the new user is trying to establish the ControlChannelTrigger channel.When the system is entering a low power mode (Connected standby mode) and the app is trying to create a software slot. Software slots are available only when the system is active and not in low power mode. The mitigation in both these cases is to listen for System Event broker events and register the ControlChannelTrigger channel at that point. + + + Specifies status values for a socket operation. + + + The socket status is unknown. + + + The operation was aborted. + + + A bad response was received from the HTTP server. + + + A connection timeout was exceeded. + + + The address family is not supported. + + + The socket type is not supported. + + + The host was not found. + + + The requested name is valid and was found in the database, but it does not have the correct associated data being resolved for. + + + This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server. + + + The specified class was not found. + + + The address is already in use. + + + Cannot assign requested address. + + + The connection was refused. + + + The network is unreachable. + + + The host is unreachable. + + + The network is down. + + + The network dropped connection on reset. + + + Software caused a connection abort. + + + The connection was reset by the peer. + + + The host is down. + + + The pipe is being closed. + + + Too many open files. + + + A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram was smaller than the datagram itself. + + + A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file. This error is also returned if the validity periods of the certification chain do not nest correctly. + + + A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider. This error is also returned if a certificate chain could not be built to a trusted root authority. + + + The certificate is not valid for the requested usage. This error is also returned if the certificate has an invalid name. The name is not included in the permitted list or is explicitly excluded. + + + The certificate is not valid for the requested usage. + + + A certificate was explicitly revoked by its issuer. This error is also returned if the certificate was explicitly marked as untrusted by the user. + + + The revocation function was unable to check revocation for the certificate. + + + The revocation function was unable to check revocation because the revocation server was offline. + + + The supplied certificate is invalid. This can be returned for a number of reasons: A certificate that can only be used as an end-entity is being used as a CA or vice versa. A path length constraint in the certification chain has been violated. A certificate contains an unknown extension that is marked critical. A certificate is being used for a purpose other than the ones specified by its CA. A parent of a given certificate in fact did not issue that child certificate. A certificate is missing or has an empty value for an important field, such as a subject or issuer name. The signature of the certificate cannot be verified. The certificate has an invalid policy. A certificate's basic constraint extension has not been observed. + + + Specifies the type of a message for a MessageWebSocket object. + + + The message type is binary. + + + The message type is UTF-8 text. + + + Specifies the level of encryption to use on a StreamSocket object. + + + A plain socket with no encryption. + + + A socket that must use the Secure Sockets Layer (SSL) for encryption. This value requires encryption and never allows a NULL cipher. + + + A socket that prefers to use SSL for encryption. This value prefers that full encryption be used, but allows a NULL cipher (no encryption) based on the server configuration. + + + A Bluetooth socket that prefers to use SSL for encryption. This value prefers that full encryption be used, but allows a NULL cipher (no encryption) based on the configuration of the Bluetooth service. This value is supported on Windows 8.1 Preview, Windows Server 2012 R2 Preview, and later. + + + A Bluetooth socket that must use SSL for encryption. This value requires encryption and never allows a NULL cipher.This value is supported on Windows 8.1 Preview, Windows Server 2012 R2 Preview, and later. + + + Specifies the quality of service for a DatagramSocket or StreamSocket object. + + + Normal quality of service. + + + Low latency quality of service commonly used for audio. + + + The category of error that occurs on an SSL connection. + + + No error occurs on the SSL connection. + + + Ignorable errors indicate that the SSL server's certificate cannot be properly validated. Disregarding Ignorable errors may result in the loss of privacy or integrity of the content passed over the SSL session. Reasons for encountering this severity level include:The certificate for the SSL server is expired.The certificate for the SSL server does match the SSL server's domain name.The certificate for the SSL server was not issued by a trusted certification authority + + + Fatal errors indicate the SSL server's certificate cannot be validated. Reasons for encountering this severity level include:The certificate for the SSL server was revoked by the issuing certification authority.The signature for the SSL server's certificate or the content in the certificate is invalid +• • + + + An object instantiated by the background broker infrastructure that is used to differentiate control channel triggers. + + + Gets the ControlChannelTrigger object associated with an IControlChannelTriggerEventDetails object. + A ControlChannelTrigger object. + + + An object instantiated by the background broker infrastructure for a ControlChannelReset event to indicate that a ControlChannelTrigger was reset. + + + A value that indicates if a hardware slot was affected by a ControlChannelTrigger reset event. + A value that indicates if a hardware slot was affected by a ControlChannelTrigger reset event. + + + A value that indicates the reason why a ControlChannelTrigger was reset. + A value that indicates the reason why a ControlChannelTrigger was reset. + + + A value that indicates if a software slot was affected by a ControlChannelTrigger reset event. + A value that indicates if a software slot was affected by a ControlChannelTrigger reset event. + + + Provides access to network communication that allows reading and writing using a WebSocket. + + + Closes the IWebSocket. + Status code indicating the reason for closure. + Optional UTF-8-encoded data with additional information about the closure. + + + Occurs when a close frame is received on the IWebSocket object as part of the close handshake. + + + Starts an asynchronous operation to connect to a remote network destination on a IWebSocket object. + An asynchronous connect operation on a IWebSocket object. + An absolute Uri for the server to connect to. + + + Gets the output stream to write to the remote network destination on a IWebSocket object. + A sequential stream of bytes to be written to the remote destination. + + + Adds an HTTP request header to the HTTP request message used in the WebSocket protocol handshake by the IWebSocket object. + The name of the request header. + The value of the request header. + + + Provides socket control data on an IWebSocket object. + + + The size, in bytes, of the send buffer to be used for sending data on an IWebSocket object. + The size, in bytes, of the send buffer to be used for sending data. + + + The credential to use to authenticate to the proxy server through HTTP header authentication using an IWebSocket object. + The credential to use to authenticate to the proxy server through HTTP header authentication. + + + The credential to use to authenticate to the WebSocket server through HTTP header authentication using an IWebSocket object. + The credential to use to authenticate to the WebSocket server through HTTP header authentication. + + + Gets a collection that can be used to add a list of supported sub-protocols that will be advertised to the server during the connect handshake. + A collection that contains the WebSocket sub-protocols supported by the IWebSocket object. + + + Provides socket information on an IWebSocket object. + + + Gets bandwidth information for network data transfer on an IWebSocket object. + Bandwidth information for network data transfer on an IWebSocket object. + + + Gets the IP address associated with an IWebSocket object. + The IP address associated with an IWebSocket object. + + + Gets the WebSocket sub-protocol negotiated with the server during WebSocket handshake on a IWebSocket object. + The sub-protocol negotiated with the server during WebSocket handshake. + + + For more information about the Windows.Networking.Vpn namespace, please work with your Microsoft Account Team representative. + + + Enables both Windows Store apps and desktop apps to use Live to authenticate users by using their Microsoft account. After authentication, apps can get back a JSON token with an ID that can be used for that user with your application. + + + Provides the ability to control when to show or hide the credential prompt user interface. This includes the user interface for the app to collect user consent to access data stored in Live. The user must see the user interface in order for the app to obtain any user data, if not app will see an error when they try to obtain user data. + + + Show the UI only if an error occurred. + + + Always show the UI. If a default username exists, the username is automatically inserted into the appropriate field. + + + Never show the UI, even if an error occurs. + + + Provides an app with the ability to start the authentication request to get JavaScript Object Notation (JSON) tokens to use with your service or request tickets that can be used to get data that the user has consented to for your app using the Live ConnectAPI. + + + Returns the ID of the application as a GUID. + The ID of the application. + + + Returns the ID of a user who has been successfully authenticated for your app. + The ID of a user who has been successfully authenticated for your app. + + + Starts the async authentication request with one OnlineIdServiceTicketRequest. If a user is signed into a Windows 8 system with a Microsoft account, this user will be used for the authentication request. + An object representing the authentication operation. + A request object that provides the ability for an app to specify the service and policy used to authenticate a Live user to obtain identity properties and tickets. + + + Starts the async authentication request with multiple OnlineIdServiceTicketRequests and provides the ability to control the user experience by setting the CredentialPromptType to get the tickets. If a user is signed into a Windows 8 system with a Microsoft account, this user will be used for the authentication request. + An object representing the authentication operation. + A collection of requests. + The type of credentials. + + + Indicates whether a user can sign out of the app, and whether to show the sign out link in the app. + True if the user can sign out and the sign out link should be shown in the app, otherwise false. + + + Creates an instance of the OnlineIdAuthenticator. + + + Allows users to sign out of your app. + An object that contains additional information about the why the user signed out. + + + Contains the ticket that is obtained after the user authenticates to this app or has provided consent to access user data stored in Live. + + + If there was an error in obtaining the ticket, then the error code is captured here. + The error code number. + + + Represents the OnlineIdServiceTicketRequest for which the ticket was obtained. + Provides the ability for an app to specify the service and policy that is used to authenticate a Live user to obtain identity properties and tickets. + + + The ticket. + A string that represents the ticket. + + + Provides the ability for an app to specify the service and policy that is used to authenticate a Live user to obtain identity properties and tickets. + + + Creates an instance of the OnlineIdServiceTicketRequest class. + The service for the request. + The policy for the request. + + + Creates an instance of the OnlineIdServiceTicketRequest class. + The service for the request. + + + The policy used to authenticate users. Supported values are JWT, which returns data using the JSON format. For apps that are requesting user consent to access stored in Live, app developer must pass a policy of DELEGATION. + A string that represents the policy. + + + Identifies the service your app uses. The service name must match the DNS name you supplied when registering your app on http://go.microsoft.com/fwlink/p/?linkid=241860. Tickets are issued only for this service. For apps that are requesting user consent to access stored in Live, you must pass the offers to which your app needs access. The available list of offers can be found at our Scopes and Permissions page. The ticket can then be used with the Live Connect REST apis to access data that a user has consented to give to the app. Check out our REST APIs topic to learn more. Alternatively, the app can use the Live Connect SDK which will make these calls itself. + A string that represents the service. + + + Allows users to sign out of your app. + + + Requests the cancellation of the operation. + + + Requests that work associated with the operation should terminate. + + + Gets or sets a handler that is called when the operation completes. + A method or function that is called when the operation completes. + + + Gets the error code should the operation fail. + The structure that contains the error code. + + + Returns the results of the operation. For this class, there are no results to return if the operation succeeds. + + + Gets a unique identifier that represents the operation. + The operation's unique ID as defined in the package manifest. + + + Gets the current status of the operation. + One of the enumeration values that indicates the status. + + + Asynchronously gets the user's identity and corresponding tickets and properties. + + + Requests the cancellation of the operation. + + + Requests that work associated with the operation should terminate. + + + Gets or sets a handler that's called when the operation completes. + The method or function that is called when the operation completes. + + + Gets the error code should the operation fail. + The structure that contains the error code. + + + Returns a UserIdentity object that contains information about the user. + An object containing information about the user's identity. + + + Gets a unique identifier that represents the operation. + The operation's unique ID as defined in the package manifest. + + + Gets the current status of the operation. + One of the enumeration values that indicates the status. + + + Contains the ID, tickets, and other information associated with a user + + + Contains the first name of the user. This value is available only to Microsoft application partners. + The user's first name. + + + Indicates if the user is part of a beta program. This value is available only to Microsoft application partners. + True if the user is part of a beta program; false otherwise. + + + Indicates if the user is on a PC that they have confirmed as their PC. This value is available only to Microsoft application partners. + True if the user is on a confirmed PC; false otherwise. + + + Returns the user's safe customer id. This value is available only to Microsoft application partners. + A string that represents the safe customer id. + + + The sign in name of the user. This value is available only to Microsoft application partners. + The name of the user. + + + Contains a pair-wise user ID (PUID) to identify the user. + The PUID that identifies the user. + + + Contains the user's last name. This value is available only to Microsoft application partners. + The user's last name. + + + Contains an array of tickets that identify the user + An array of tickets that identify the user. + + + Enables apps to integrate with online web services without exposing a user's credentials. The web authentication broker provides a set of APIs and infrastructure for apps to use Internet authentication and authorization protocols like OAuth and OpenID. + + + Starts the asynchronous authentication operation. + Required to access the Internet. + + + Starts the asynchronous authentication operation with three inputs. + The way to query the status and get the results of the authentication operation. If you are getting an invalid parameter error, the most common cause is that you are not using HTTPS for the requestUri parameter. + The options for the authentication operation. + The starting URI of the web service. This URI must be a secure address of https://. + The callback URI that indicates the completion of the web authentication. The broker matches this URI against every URI that it is about to navigate to. The broker never navigates to this URI, instead the broker returns the control back to the application when the user clicks a link or a web server redirection is made. + + + Starts the asynchronous authentication operation with two inputs. + The way to query the status and get the results of the authentication operation. If you are getting an invalid parameter error, the most common cause is that you are not using HTTPS for the requestUri parameter. + The options for the authentication operation. + The starting URI of the web service. This URI must be a secure address of https://. + + + Gets the current application callback URI. + The URI of the current application. + + + Contains the options available to the asynchronous operation. + + + No options are requested. + + + Tells the web authentication broker to not render any UI. For use with Single Sign On (SSO). If the server tries to display a webpage, the authentication operation fails. You should try again without this option. + + + Tells the web authentication broker to return the window title string of the webpage in the ResponseData property. + + + Tells the web authentication broker to return the body of the HTTP POST in the ResponseData property. For use with single sign-on (SSO) only. + + + Tells the web authentication broker to render the webpage in an app container that supports privateNetworkClientServer, enterpriseAuthentication, and sharedUserCertificate capabilities. Note the application that uses this flag must have these capabilities as well. + + + Indicates the result of the authentication operation. + + + Contains the protocol data when the operation successfully completes. + The returned data. + + + Returns the HTTP error code when ResponseStatus is equal to WebAuthenticationStatus.ErrorHttp. This is only available if there is an error. + The specific HTTP error, for example 400. + + + Contains the status of the asynchronous operation when it completes. + One of the enumerations. + + + Contains the status of the asynchronous operation. + + + The operation succeeded, and the response data is available. + + + The operation was canceled by the user. + + + The operation failed because a specific HTTP error was returned, for example 404. + + + Provides a common way to securely store and manage your passcodes, passphrases, and other identification information. + + + Represents the password credential store. + + + Gets or sets the password string of the credential. + The password string of the credential. + + + Creates and initializes a new, empty instance of the PasswordCredential object. + + + Creates and initializes a new instance of the PasswordCredential object that contains the provided credential data. + The resource for which the credentials are used. + The user name that must be present in the credentials. + The password for the created credentials. + + + Gets the properties collection of the credential. + The properties collection of the credential. + + + Gets or sets the resource of the credential. + The resource of the credential. + + + Populates the password for the credential. + + + Gets or sets the user name of the credential. + The user name of the credential. + + + Represents the password credential property store. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This property is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + + + This method is reserved for internal use and is not intended to be used in your code. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This property is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This property is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This property is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + + + This method is reserved for internal use and is not intended to be used in your code. + Reserved. + Reserved. + Reserved. + + + This property is reserved for internal use and is not intended to be used in your code. + Reserved. + + + This method is reserved for internal use and is not intended to be used in your code. + + + Represents a Credential Locker of credentials. + + + Adds a credential to the Credential Locker. + The credential to be added. + + + Searches the Credential Locker for credentials matching the resource specified. + When this method returns, contains an IVectorView of credential objects that match the search criteria. + The resource to be searched for. + + + Searches the Credential Locker for credentials that match the user name specified. + When this method returns, contains an IVectorView of credential objects that match the search criteria. + The user name to be searched for. + + + Creates and initializes a new instance of the PasswordVault object. + + + Removes a credential from the Credential Locker. + The credential to be removed. + + + Reads a credential from the Credential Locker. + The returned credential that contains all the data. + The resource for which the credential is used. + The user name that must be present in the credential. + + + Retrieves all of the credentials stored in the Credential Locker. + When this method returns, contains an IVectorView output of credential objects that match the search criteria. This output is a snapshot and not dynamic. If the results are used for updating or deleting credentials, those changes won't be reflected in the previous output. + + + Identifies an account from a web account provider. + + + Creates an instance of the WebAccount class + The web account provider associated with the web account. + The user name of the web account. + The state of the web account. + + + Gets the connected state of the web account. + The connected state of the web account. + + + Gets the username for the web account. + The username for the web account. + + + Gets the web authentication provider for the account. + The web authentication provider for the account. + + + Represents a web account authentication provider. + + + Creates an instance of the WebAccountProvider class. + The web account provider id. + The display name for the web account provider. + The Uri of the icon image to display for the web account provider. + + + Gets the display name for the web account provider. + The display name for the web account provider. + + + Gets the Uri of the icon image to display for the web account provider. + The Uri of the icon image to display for the web account provider. + + + Gets the web account provider id. + The web account provider id. + + + Describes the state of a WebAccount object. + + + The account is currently not connected. + + + The account is connected. + + + The account was unable to connect. + + + Enables you to use credentials without the complexity of the underlying operations, providing a uniform experience for credentials that reduces credential prompting to an absolute minimum. + + + Identifies which authentication protocol to use. + + + The authentication protocol is basic. Credentials are returned to the caller as plaintext. + + + The authentication protocol is digest. Credentials are returned to the caller as plaintext. + + + The authentication protocol is NTLM. Credentials are transformed before being returned to the caller. + + + The authentication protocol is Kerberos. Credentials are transformed before being returned to the caller. + + + The authentication protocol is negotiate, including negotiate extensions. Credentials are transformed before being returned to the caller. + + + The authentication protocol is for remote access using the Credential Security Support Provider (CredSSP) protocol. + + + The authentication protocol is anything other than the previous ones. Credentials are returned to the caller as plaintext. + + + Creates an asynchronous object that displays a dialog box of credentials to the user and collects the user's response. + + + Displays a dialog box to the user and collects credentials from the user. + The credential and options from the user. + The options on displaying and collecting the credential box. + + + Constructor used to initiate asynchronous prompting operations using two inputs. + The credential and options from the user. + The target name to display. + The message to display in the dialog box. + + + Constructor used to initiate asynchronous prompting operations using three inputs. + The credential and options from the user. + The target name to display. + The message to display in the dialog box. + The caption to display in the dialog box. + + + Controls the appearance and behavior of a credential prompt. + + + Gets or sets the option of whether the dialog box is displayed. + Gets or sets the option of always displaying the dialog box. The default value is False. + + + Gets or sets the authentication protocol. + Name of the authentication protocol to use for credential authentication. The default value is Negotiate. + + + Gets or sets whether the caller wants to save the credentials. + Gets or sets whether the caller wants to save the credentials. The default value is False. + + + Gets or sets the caption text that is displayed to the user. + Text that appears in the message header of the dialog box. The default value is the caller's app name. + + + Creates and initializes a new, empty instance of the CredentialPickerOptions object. + + + Gets or sets the option on saving credentials. + The option specifies the initial state of the dialog's Save Credential check box. The default value is clear (unchecked). This property is ignored if the caller specifies Hidden in the CredentialSaveOption enumeration. + + + Gets or sets whether the authentication protocol is custom rather than a standard authentication protocol. + The authentication protocol is custom rather than a standard authentication protocol. The default value is none. + + + Gets or sets the error code. + If nonzero, represents a Win32 ERROR_* status value that identifies the error information to be formatted and displayed in the dialog box. The default value is ERROR_SUCCESS if no error occurred. + + + Gets or sets the body of text that displays to the user. + Text that appears in the message body of the dialog box. The default value is Enter credentials or localized equivalent. + + + Gets or sets whether to fill dialog box fields with previous credentials. + Determines whether dialog box fields are filled with previous credentials. The default value is not to prepopulate the fields. + + + Gets or sets the name of the target computer. + Name of the target computer. The default value is the caller's computer. + + + Describes the results of the dialog box operation. + + + Gets the opaque credential. + A byte buffer that contains the opaque credential. If the credential is not available, a valid, but empty IBuffer object is returned. + + + Gets the domain name portion of the unpacked credential. + The domain name of the credential. If the domain name is not available, an empty string is returned. + + + Gets the password portion of the unpacked credential. + The password of the credential. If the password is not available, an empty string is returned. + + + Gets the status of the credential save operation. + Indicates whether the credential was successfully saved by the credential manager. This value is always False if the caller specified the CallerSavesCredential property. + + + Gets the state of the Save Credentials check box. + Indicates the state of the dialog box Save check box. If no check box was displayed, the value is None. + + + Gets the user name of the unpacked credential. + The user name of the credential used. If the user name is not available, an empty string is returned. + + + Gets the value of the error code. + The value of the error code. If the operation status indicates a failure, this property contains the extended error information. If the operation status is anything except failure, the value is zero. + + + Identifies the state of the dialog box option on whether to save credentials. + + + The Save credentials? dialog box is not selected, indicating that the user doesn't want their credentials saved. + + + The Save credentials? dialog box is selected, indicating that the user wants their credentials saved. + + + The Save credentials? dialog box is not displayed at all. + + + Describes the result of a biometric (fingerprint) verification operation. + + + The fingerprint was verified. + + + There is no biometric verifier device available. + + + A biometric verifier device is not configured for this user. + + + Group policy has disabled the biometric verifier device. + + + The biometric verifier device is performing an operation and is unavailable. + + + After 10 attempts, the original verification request and all subsequent attempts at the same verification were not verified. + + + The verification operation was canceled. + + + Checks for availability of a biometric (fingerprint) verifier device and performs a biometric verification. + + + Checks to see whether a biometric (fingerprint) verifier device is available. + A UserConsentVerifierAvailability value that describes the result of the availability check operation. + + + Performs a fingerprint (biometric) verification. + A UserConsentVerificationResult value that describes the result of the biometric verification. + A message to display to the user for this biometric verification request. + + + Describes the result of a check for a biometric (fingerprint) verifier device. + + + A biometric verifier device is available. + + + There is no biometric verifier device available. + + + A biometric verifier device is not configured for this user. + + + Group policy has disabled the biometric verifier device. + + + The biometric verifier device is performing an operation and is unavailable. + + + Contains a class that can be used for encoding and decoding data, generating random numbers, and converting between byte arrays and buffers. + + + Contains encoding formats that can be used in the ConvertStringToBinary and ConvertBinaryToString methods. + + + Eight bit Unicode Transformation Format. The process encodes each Unicode code point into one to four 8-bit bytes. Code points represented by lower numerical values are encoded using fewer bytes. In particular, the first 128 characters correspond exactly to the ASCII character set and are encoded by using a single octet. + + + Sixteen bit Unicode Transformation Format in little-endian byte order. The encoding process creates a variable length result of one or two 8-bit bytes per Unicode code point. + + + Sixteen bit Unicode Transformation Format in big-endian byte order. + + + Contains static methods that implement data management functionality common to cryptographic operations. + + + Compares two IBuffer objects. + True specifies that the buffers are equal. Two buffers are equal if each code point in one matches the corresponding code point in the other. + Buffer to be used for comparison. + Buffer to be used for comparison. + + + Converts a buffer to an encoded string. + A string that contains the encoded data. + Encoding format. + Data to be encoded. + + + Converts a string to an encoded buffer. + Encoded buffer. + String to be encoded. + Encoding format. + + + Copies a buffer to an array of bytes. + Input buffer. + An array of bytes that contains the values copied from the input buffer. You must declare the array before calling this method and pass it by using the ref keyword. + + + Creates a buffer from an input byte array. + Output buffer. + An array of bytes used to create the buffer. + + + Decodes a string that has been base64 encoded. + Output buffer that contains the decoded string. + Base64 encoded input string. + + + Decodes a string that has been hexadecimal encoded. + Output buffer that contains the decoded string. + Encoded input string. + + + Encodes a buffer to a base64 string. + Base64-encoded output string. + Input buffer. + + + Encodes a buffer to a hexadecimal string. + Hexadecimal encoded output string. + Input buffer. + + + Creates a buffer that contains random data. + Output buffer that contains the random data. + Length, in bytes, of the buffer to create. + + + Creates a random number. + Integer that contains the random data. + + + Contains types that you can use to create certificate requests and install certificate responses. + + + Represents a cryptography certificate. + + + Create a new instance of the Certificate class using the specified certificate data. + The certificate data as an ASN.1 DER encoded certificate blob (.cer or .p7b). + + + Build a certificate chain for the specified certificates starting from the end entity certificate to the root using the specified chain building parameters. + An asynchronous operation to retrieve the CertificateChain object that contains the entire certificate chain. + The intermediate certificates to use when building the certificate chain. + The chain building paramaters to use when building the certificate chain. + + + Build a certificate chain for the specified certificates starting from the end entity certificate to the root . + An asynchronous operation to retrieve the CertificateChain object that contains the entire certificate chain. + The intermediate certificates to use when building the certificate chain. + + + Gets a collection of object identifiers (OIDs) for the enhanced key usage extension. + A collection of object identifiers (OIDs) for the enhanced key usage extension + + + Gets or sets the friendly name for the certificate. + The friendly name for the certificate. If the certificate does not have a friendly name set, then an empty string is returned. + + + Gets the ASN.1 DER encoded certificate blob. + The ASN.1 DER encoded certificate blob. + + + Gets the hash value for the certificate for a specified algorithm. + The hash value of the certificate. + The hash algorithm to use for the hash value of the certificate. + + + Gets the SHA1 hash value for the certificate. + The SHA1 hash value for the certificate. + + + Gets a value indicating whether the certificate has a private key. + True if the certificate has a private key; otherwise false. + + + Gets a value that indicates whether the private key associated with the certificate is strongly protected. + True if the certificate is strongly protected; otherwise false. + + + Gets the name of the certificate issuer. + The name of the certificate issuer. + + + Gets the serial number of the certificate. + The serial number of the certificate. + + + Gets the subject name of the certificate. + The subject name of the certificate. + + + Gets the date and time after which the certificate is valid. + The date and time after which the certificate is valid. + + + Gets the date and time after which the certificate is no longer valid. + The date and time after which the certificate is no longer valid. + + + Represents a certificate chain used for signature verification. + + + Gets the list of certificates from the certificate chain. + The list of certificates from the certificate chain. + True to include the root certificate in the results; otherwise false. + + + Verifies whether or not the certificate chain is valid. + The result of the certificate chain verification operation. + + + Verifies whether or not the certificate chain is valid using the specified validation parameters. + The result of the certificate chain verification operation. + The validation parameters to use when verifying the certificate chain. + + + Represents a certificate enrollment manager. + + + Asynchronously creates a PKCS #10 certificate request based on properties specified in a CertificateRequestProperties object. + This method returns a string that contains the base64 encoded PKCS #10 certificate request. + A CertificateRequestProperties object that contains the property values used to create the certificate request. + + + Asynchronously imports a certificate from a Personal Information Exchange (PFX) message. + This method does not return a value. + Base64-encoded PFX message. + The password used to decrypt and verify the PFX packet. The password must be exactly the same as the password that was used to encrypt the packet. + A value of the ExportOption enumeration that specifies whether the key can be exported. + A value of the KeyProtectionLevel enumeration that specifies the strength of the key protection. The default is NoConsent. + An InstallOptions enumeration value that specifies the certificate installation option. + The display name of the enrolled certificate. This value overwrites the FriendlyName property inside the PFX message. + + + Asynchronously Installs a certificate chain into the app container on the local computer. + This method does not return a value. + The encoded certificate. The certificate is encoded by using Distinguished Encoding Rules (DER) as defined by the Abstract Syntax Notation One (ASN.1) standard. + An InstallOptions enumeration value that specifies the certificate installation option. + + + Gets the associated UserCertificateEnrollmentManager. + The associated UserCertificateEnrollmentManager. + + + Represents parameters for a query for certificates from the certificate store for an app. + + + Creates a new instance of a certificate query. + + + Gets a collection of object identifiers (OIDs) for the enhanced key usage extension to search for. + A collection of object identifiers (OIDs) for the enhanced key usage extension to search for. + + + Gets or sets the certificate friendly name to search for. + The certificate friendly name to search for. + + + Gets or sets a value that indicates whether only hardware certificates (SC or TPM) are to be returned from the query. + True if only hardware certificates (SC or TPM) are to be returned from the query; otherwise false. + + + Gets or sets the name of the certificate issuer to search for. + The name of the certificate issuer to search for. + + + Gets or sets a certificate thumbprint to search for. + A certificate thumbprint to search for. + + + Represents the properties of a certificate request. + + + Gets or sets the CA exchange certificate that is used to encrypt a key attestation certificate request. + The CA exchange certificate that is used to encrypt a key attestation certificate request. + + + Creates and initializes a new instance of the CertificateRequestProperties. + + + Gets or sets a value that specifies whether the private key created for the request can be exported. + Specifies whether the key can be exported. + + + Gets or sets the display name of the enrolled certificate. + The display name. + + + Gets or sets the hash algorithm used when creating the certificate request signature. + Hash algorithm. + + + Gets or sets the public key algorithm. + Algorithm name. + + + Gets or sets the level of strong key protection. + Strong key protection level. + + + Gets or sets the size, in bits, of the private key to be generated. + The size, in bits, of the private key. + + + Gets or sets the name of the key storage provider (KSP) that will be used to generate the private key. + The KSP name. The default value is Microsoft Software Key Storage Provider. + + + Gets or sets the operation that can be performed by the private key created for this certificate request. The default value is Signing. + Private key usage. + + + Gets or sets the certificate used to sign the requested certificate. + The certificate used to sign the requested certificate. + + + Gets or sets the name of the smart card reader used to create the certificate request. + The name of the smart card reader used to create the certificate request. + + + Gets or sets the subject name. + The X.500 distinguished name (DN). + + + Represents a certificate store for an app. + + + Adds a certificate to the certificate store. + The certificate to add to the certificate store. + + + Deletes a certificate from the certificate store. + The certificate to delete from the certificate store. + + + Represents a collection of certificate stores. + + + Get all certificates from the certificate stores. + An asynchronous operation to retrieve the list of certificates. + + + Get all certificates from the certificate stores that match the specified query parameters. + An asynchronous operation to retrieve the list of certificates. + The certificate values to search for. + + + Gets a certificate store from the collection of certificate stores by name. + The requested certificate store. + The name of the certificate store to return. The storeName parameter value cannot be "MY". + + + Gets the certificate store of intermediate certification authorities for an app. + The certificate store of intermediate certification authorities for an app. + + + Gets the certificate store of trusted root certificates for an app. + The certificate store of trusted root certificates for an app. + + + Represents parameters to use when building a certificate chain. + + + Creates a new instance of the ChainBuildingParameters class. + + + Gets or sets a value that indicates whether Authority Information Access (AIA) is enabled. + True to enable Authority Information Access (AIA); otherwise false. The default is true. + + + Gets or sets a value indicating that the current time is to be used for the validation timestamp. + True to use the current time as the validation timestamp; otherwise false. The default is true. + + + Gets or sets a collection of object identifiers (OIDs) for the enhanced key usage extension. + A collection of object identifiers (OIDs) for the enhanced key usage extension. + + + Gets or sets the list of root certificates that will be trusted. + The list of root certificates that will be trusted. + + + Gets or sets a value indicating whether to request new URLs to use for chain building and revocation checking or to use cached URLs. + True torequest new URLs to use for chain building and revocation checking; false to use cached URLs. + + + Gets or sets a value indicating whether revocation checking is enabled. + True to enable revocation checking; otherwise false. + + + Gets or sets the time stamp used to determine whether the certificate chain was time valid. + The time stamp used to determine whether the certificate chain was time valid. + + + Represents values to use when verifying a certificate chain. + + + Creates a new instance of the ChainValidationParameters class. + + + Gets or sets the certificate chain policy to use when verifying the certificate chain. + The certificate chain policy to use when verifying the certificate chain. + + + Gets or sets the server DNS name to use for SSL policy. + The server DNS name to use for SSL policy. + + + Represents a signature attached to a signed CMS message. + + + Creates a new instance of the CmsAttachedSignature class for the specified signed CMS message. + A signed CMS message blob. + + + Gets the list of certificates that are used for chain building for the signer certificate. + The list of certificates that are used for chain building for the signer certificate. + + + Gets the content of the signed CMS message. + The content of the signed CMS message. + + + Signs the specified input data using the specified signer information and creates an attached signed CMS message. + An asynchronous operation to retrieve the attached signed CMS message. + The input data to be signed. + The signer information used to compute the signature. + The list of certificates to build the chain for the signer certificates. + + + Gets the list of signers that are used for creating or verifying the signature. + The list of signers that are used for creating or verifying the signature. + + + Verifies the signature contained in the signed CMS message. + The result of the signature verification operation. + + + Represents a detached signature for a signed CMS message. + + + Creates a new instance of the CmsDetachedSignature class for the specified signed CMS message. + A signed CMS message blob. + + + Gets the list of certificates that are used for chain building for the signer certificate. + The list of certificates that are used for chain building for the signer certificate. + + + Signs the specified input data using the specified signer information and creates a detached signed CMS message. + An asynchronous operation to retrieve the detached signed CMS message. + The input data to be signed. + The signer information used to compute the signature. + The list of certificates to build the chain for the signer certificates. + + + Gets the list of signers that are used for creating or verifying the signature. + The list of signers that are used for creating or verifying the signature. + + + Verifies a signed CMS message against the original streaming input. + An asynchronous operation to retrieve the result of the signature validation operation. + The original input stream for the signed CMS message. + + + Represents signer information for a signed CMS message which contains a set of properties. + + + Creates a new instance of the CmsSignerInfo class. + + + Gets or sets the signer certificate that is used to sign the message. + The signer certificate that is used to sign the message. + + + Gets or sets the hash algorithm that is used to sign the CMS message. + The hash algorithm that is used to sign the CMS message. + + + Gets the RFC3161 unauthenticated timestamp information. + The RFC3161 unauthenticated timestamp information. + + + Represents an RFC3161 unauthenticated timestamp attribute in a signed CMS message. + + + Gets the list of certificates that is used for chain building for the signing certificate. + The list of certificates that is used for chain building for the signing certificate. + + + Gets the certificate that is used to sign the timestamp. + The certificate that is used to sign the timestamp. + + + Gets the date and time of the timestamp. + The date and time of the timestamp. + + + Defines several commonly used public key algorithm names. You can use this class in the KeyAlgorithmName property on the CertificateRequestProperties class. + + + Returns DSA as the key algorithm name. + The key algorithm name. + + + Returns ECDH256 as the key algorithm name. + The key algorithm name. + + + Returns ECDH384 as the key algorithm name. + The key algorithm name. + + + Returns ECDH521 as the key algorithm name. + The key algorithm name. + + + Returns ECDSA256 as the key algorithm name. + The key algorithm name. + + + Returns ECDSA384 as the key algorithm name. + The key algorithm name. + + + Returns ECDSA521 as the key algorithm name. + The key algorithm name. + + + Returns RSA as the key algorithm name. + The key algorithm name. + + + Provides access to key attestation methods. + + + Decrypts a TPM key attestation credential. + The decrypted TPM key attestation credential. + The TPM key attestation credential to decrypt. + + + Gets the credential ID from a TPM key attestation credential. + The credential ID from the TPM key attestation credential. + The TPM key attestation credential to get the credential ID from. + + + Defines several commonly used key storage provider names. You can use this class in the KeyStorageProviderName property on the CertificateRequestProperties class. + + + Returns Microsoft Platform Key Storage Provider as the provider name. + The provider name. + + + Returns Microsoft Smart Card Key Storage Provider as the provider name. + The provider name. + + + Returns Microsoft Software Key Storage Provider as the provider name. + The provider name. + + + Provides access to certificate creation, import, and enrollment methods. + + + Asynchronously creates a PKCS #10 certificate request based on properties specified in a CertificateRequestProperties object. + An asynchronous operation to retrieve the base64 encoded PKCS #10 certificate request. + A CertificateRequestProperties object that contains the property values used to create the certificate request. + + + Asynchronously imports a certificate from a Personal Information Exchange (PFX) message. + This method does not return a value. + Base64-encoded PFX message. + The password used to decrypt and verify the PFX packet. The password must be exactly the same as the password that was used to encrypt the packet. + A value of the ExportOption enumeration that specifies whether the key can be exported. + A value of the KeyProtectionLevel enumeration that specifies the strength of the key protection. The default is NoConsent. + An InstallOptions enumeration value that specifies the certificate installation option. + The display name of the enrolled certificate. This value overwrites the FriendlyName property inside the PFX message. + + + Asynchronously installs a certificate chain into the app container on the local computer. + This method does not return a value. + The encoded certificate. The certificate is encoded by using Distinguished Encoding Rules (DER) as defined by the Abstract Syntax Notation One (ASN.1) standard. + An InstallOptions enumeration value that specifies the certificate installation option. + + + Describes the policy to use when performing a certificate chain validation. + + + Use the base chain policy verification checks. + + + Use the SSL client/server chain policy verification checks. + + + Use the Windows NT Authentication chain policy checks. + + + Check the last element of the first simple chain for a Microsoft root public key. + + + Describes the result of a certificate chain verification operation. + + + The certificate chain was verified. + + + A certificate in the chain is not trusted. + + + A certificate in the chain has been revoked. + + + A certificate in the chain has expired. + + + The certificate chain is missing one or more certificates. + + + The signature of a certificate in the chain cannot be verified. + + + A certificate in the chain is being used for a purpose other than one specified by its CA. + + + A certificate in the chain has a name that is not valid. The name is either not included in the permitted list or is explicitly excluded. + + + A certificate in the chain has a policy that is not valid. + + + The basic constraint extension of a certificate in the chain has not been observed. + + + A certificate in the chain contains an unknown extension that is marked "critical". + + + No installed or registered DLL was found to verify revocation. + + + Unable to connect to the revocation server. + + + An unexpected error occurred while validating the certificate chain. + + + Specifies the cryptographic operations that can be performed by the private key. This enumeration type is used in the KeyUsages property of a CertificateRequestProperties object. + + + No usage is specified for the key. + + + The key can be used for decryption. + + + The key can be used for signing. + + + The key can be used for secret agreement encryption. + + + The key can be used for decryption, signing. and key agreement. + + + Specifies whether a private key can be exported. This enumeration type is used in the Exportable property of a CertificateRequestProperties object. + + + The private key is not exportable. + + + The private key is exportable. + + + Specifies certificate installation options. + + + No options are specified. + + + Delete expired certificates. + + + Specifies the key protection level. This enumeration type is used in the KeyProtectionLevel property of a CertificateRequestProperties object. + + + No strong key protection. + + + The user is notified through a dialog box when the private key is created or used. + + + The user is prompted to enter a password for the key when the key is created or used. + + + The user is prompted to enter a fingerprint verification for the key when the key is created or used. + + + Specifies commonly used RSA algorithm key sizes. This enumeration type can be used in the KeySize property of a CertificateRequestProperties object. + + + No size is specified. + + + The key length is 2048 bits. + + + The key length is 4096 bits. + + + Describes the result of a signature verification operation. + + + The signature was verified. + + + An invalid argument was encountered while verifying the signature. + + + A severe error occurred such as missing key provider information or an incorrect algorithm id. + + + The signature was not verified. + + + Additional errors were encountered. + + + Contains classes that enable you to create cryptographic keys, to hash and sign content, create message authentication codes, and to encrypt or decrypt data. + + + Contains static properties that enable you to retrieve algorithm names that can be used in the OpenAlgorithm method of the AsymmetricKeyAlgorithmProvider class. + + + Retrieves a string that contains "DSA_SHA1". + String that contains "DSA_SHA1". + + + Retrieves a string that contains "DSA_SHA256". + String that contains "DSA_SHA256". + + + Retrieves a string that contains "ECDSA_P256_SHA256". + String that contains "ECDSA_P256_SHA256". + + + Retrieves a string that contains "ECDSA_P384_SHA384". + String that contains "ECDSA_P384_SHA384". + + + Retrieves a string that contains "ECDSA_P521_SHA512". + String that contains "ECDSA_P521_SHA512". + + + Retrieves a string that contains "RSA_OAEP_SHA1". + String that contains "RSA_OAEP_SHA1". + + + Retrieves a string that contains "RSA_OAEP_SHA256". + String that contains "RSA_OAEP_SHA256". + + + Retrieves a string that contains "RSA_OAEP_SHA384". + String that contains "RSA_OAEP_SHA384". + + + Retrieves a string that contains "RSA_OAEP_SHA512". + String that contains "RSA_OAEP_SHA512". + + + Retrieves a string that contains "RSA_PKCS1". + String that contains "RSA_PKCS1". + + + Retrieves a string that contains "RSASIGN_PKCS1_SHA1". + String that contains "RSASIGN_PKCS1_SHA1". + + + Retrieves a string that contains "RSASIGN_PKCS1_SHA256". + String that contains "RSASIGN_PKCS1_SHA256". + + + Retrieves a string that contains "RSASIGN_PKCS1_SHA384". + String that contains "RSASIGN_PKCS1_SHA384". + + + Retrieves a string that contains "RSASIGN_PSS_SHA512". + String that contains "RSASIGN_PSS_SHA512". + + + Retrieves a string that contains "RSASIGN_PSS_SHA1". + String that contains "RSASIGN_PSS_SHA1". + + + Retrieves a string that contains "RSASIGN_PSS_SHA256". + String that contains "RSASIGN_PSS_SHA256". + + + Retrieves a string that contains "RSASIGN_PSS_SHA384". + String that contains "RSASIGN_PSS_SHA384". + + + Retrieves a string that contains "RSASIGN_PSS_SHA512". + String that contains "RSASIGN_PSS_SHA512". + + + Represents a provider of asymmetric (public) key algorithms. + + + Gets the name of the open asymmetric algorithm. + Algorithm name. + + + Creates a public/private key pair. + Represents the asymmetric key pair. + Size, in bits, of the key. Typical key sizes are 512, 1024, 2048, or 4096 bits. + + + Imports a public/private key pair from a buffer in the specified format. + Represents the imported key pair. + Buffer that contains the key pair to import. + A CryptographicPrivateKeyBlobType enumeration value that specifies information about the private key contained in the keyBlob buffer. The default value is Pkcs8RawPrivateKeyInfo. + + + Imports a public/private key pair from a buffer. + Represents the imported key pair. + Buffer that contains the key pair to import. + + + Imports a public key into a buffer for a specified format. + Represents the imported key. + Buffer that contains the key to import. + A CryptographicPublicKeyBlobType enumeration value that specifies the format of the public key contained in the keyBlob buffer. The default value is X509SubjectPublicKeyInfo. + + + Imports a public key into a buffer. + Represents the imported key. + Buffer that contains the key to import. + + + Creates an instance of the AsymmetricKeyAlgorithmProvider class and opens the specified algorithm for use. + Represents a public key algorithm provider. + Algorithm name. + + + Encrypts, decrypts, and signs content, and verifies digital signatures. + + + Decrypts content that was previously encrypted by using a symmetric or asymmetric algorithm. + Decrypted data. + Cryptographic key to use for decryption. This can be an asymmetric or a symmetric key. For more information, see AsymmetricKeyAlgorithmProvider and SymmetricKeyAlgorithmProvider. + Buffer that contains the encrypted data. + Buffer that contains the initialization vector. If an initialization vector (IV) was used to encrypt the data, you must use the same IV to decrypt the data. For more information, see Encrypt. + + + Decrypts and authenticates data. + A buffer that contains the decrypted data.If the method fails, authentication fails; if the method succeeds, the authentication succeeded as well. + Symmetric key to use. + Data to be decrypted and authenticated. + Nonce to be used. This must be the same nonce used by the EncryptAndAuthenticate method. + Authentication tag. + Authenticated data. This can be Null. + + + Decrypts the encrypted input data using the supplied key. + The decrypted data. + The key to use to decrypt the encrypted input data. + The encrypted data to decrypt. + The initial vector for a symmetric key. For an asymmetric key, set this value to null. + + + Derives a key from another key by using a key derivation function. + Buffer that contains the derived key. + The symmetric or secret key used for derivation. + Derivation parameters. The parameters vary depending on the type of KDF algorithm used. + Requested size, in bits, of the derived key. + + + Encrypts data by using a symmetric or asymmetric algorithm. + Encrypted data. + Cryptographic key to use for encryption. This can be an asymmetric or a symmetric key. For more information, see AsymmetricKeyAlgorithmProvider and SymmetricKeyAlgorithmProvider. + Data to encrypt. + Buffer that contains the initialization vector. This can be null for a symmetric algorithm and should always be null for an asymmetric algorithm. If an initialization vector (IV) was used to encrypt the data, you must use the same IV to decrypt the data. You can use the GenerateRandom method to create an IV that contains random data. Other IVs, such as nonce-generated vectors, require custom implementation. For more information, see Symmetric Key Encryption.Cipher block chaining (CBC) block cipher mode algorithms require an initialization vector. For more information, see Remarks. + + + Performs authenticated encryption. + The encrypted and authenticated data.If the method fails, authentication fails; if the method succeeds, the authentication succeeded as well. + Symmetric key to use for encryption. + Data to be encrypted and authenticated. + Nonce to be used. A nonce is a variable that has minimal chance of repeating. For example, +you can use a random value that is newly generated for each use, a +time stamp, a sequence number, or some combination of these. The Microsoft GCM implementation requires a 12-byte nonce. The CCM implementation requires a 7- to 13- byte nonce. + Authenticated data. This can be Null. + + + Signs digital content. + Signed data. + Key used for signing. + Data to be signed. + + + Computes a hash for the supplied input data, and then signs the computed hash using the specified key. + An asynchronous operation to retrieve the hashed and signed data. + The key to use to compute and sign the hash. + The raw input data to sign. The data is not hashed. + + + Signs the hashed input data using the specified key. + The signed data. + The key to use to sign the hash. + The input data to sign. The data is a hashed value which can be obtained through incremental hash. + + + Signs the hashed input data using the specified key. + An asynchronous operation to retrieve the signed data. + The key to use to sign the hash. + The input data to sign. The data is a hashed value which can be obtained through incremental hash. + + + Verifies a message signature. + true if the message is verified. + Key used for verification. This must be the same key previously used to sign the message. + Message to be verified. + Signature previously computed over the message to be verified. + + + Verifies the signature of the specified input data against a known signature. + True if the signature is verified; otherwise false. + The key to use to retrieve the signature from the input data. + The data to be verified. The data is a hashed value of raw data. + The known signature to use to verify the signature of the input data. + + + Represents a reusable hashing object and contains the result of a hashing operation. + + + Appends a binary encoded string to the data stored in the CryptographicHash object. + Data to append. + + + Gets hashed data from the CryptographicHash object and resets the object. + Hashed data. + + + Represents a symmetric key or an asymmetric key pair. + + + Exports the key pair to a buffer. + Buffer that contains the key pair. + + + Exports the key pair to a buffer given a specified format. + Buffer that contains the key pair. + A CryptographicPrivateKeyBlobType enumeration value that specifies the format of the key in the buffer. The default value is Pkcs8RawPrivateKeyInfo. + + + Exports a public key to a buffer. + Buffer that contains the public key. + + + Exports a public key to a buffer given a specified format. + Buffer that contains the public key. + A CryptographicPublicKeyBlobType enumeration value that specifies the format of the key in the buffer. The default value is X509SubjectPublicKeyInfo. + + + Gets the size, in bits, of the key. + Integer that contains the number of bits in the key. + + + Contains data that can be retrieved from encrypted and authenticated data. + + + Gets the authentication tag. + Buffer that contains the tag. + + + Gets the encrypted data. + Buffer that contains the encrypted data. + + + Contains static properties that enable you to retrieve algorithm names that can be used in the OpenAlgorithm method of the HashAlgorithmProvider class. + + + Retrieves a string that contains "MD5". + String that contains "MD5". + + + Retrieves a string that contains "SHA1". + String that contains "SHA1". + + + Retrieves a string that contains "SHA256". + String that contains "SHA256". + + + Retrieves a string that contains "SHA384". + String that contains "SHA384". + + + Retrieves a string that contains "SHA512". + String that contains "SHA512". + + + Represents a cryptographic hash provider. + + + Gets the name of the open hash algorithm. + Algorithm name. + + + Creates a reusable CryptographicHash object. + Reusable hash object. + + + Hashes binary data. + Hashed data. + Data to be hashed. + + + Gets the length, in bytes, of the hash. + Number of bytes in the hash. + + + Creates a HashAlgorithmProvider object and opens the specified algorithm for use. + Represents a provider that implements hash algorithms. + Algorithm name. + + + Contains static properties that enable you to retrieve algorithm names that can be used in the OpenAlgorithm method of the KeyDerivationAlgorithmProvider class. + + + Retrieves a string that contains "PBKDF2_MD5". + String that contains "PBKDF2_MD5". + + + Retrieves a string that contains "PBKDF2_SHA1". + String that contains "PBKDF2_SHA1". + + + Retrieves a string that contains "PBKDF2_SHA256". + String that contains "PBKDF2_SHA256". + + + Retrieves a string that contains "PBKDF2_SHA384". + String that contains "PBKDF2_SHA384". + + + Retrieves a string that contains "PBKDF2_SHA512". + String that contains "PBKDF2_SHA512". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_MD5". + String that contains "SP800_108_CTR_HMAC_MD5". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA1". + String that contains "SP800_108_CTR_HMAC_SHA1". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA256". + String that contains "SP800_108_CTR_HMAC_SHA256". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA384". + String that contains "SP800_108_CTR_HMAC_SHA384". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA512". + String that contains "SP800_108_CTR_HMAC_SHA512". + + + Retrieves a string that contains "SP800_56A_CONCAT_MD5". + String that contains "SP800_56A_CONCAT_MD5". + + + Retrieves a string that contains "SP800_56A_CONCAT_SHA1". + String that contains "SP800_56A_CONCAT_SHA1". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA256". + String that contains "SP800_108_CTR_HMAC_SHA256". + + + Retrieves a string that contains "SP800_108_CTR_HMAC_SHA384". + String that contains "SP800_108_CTR_HMAC_SHA384". + + + Retrieves a string that contains "SP800_56A_CONCAT_SHA512". + String that contains "SP800_56A_CONCAT_SHA512". + + + Represents a key derivation algorithm provider. + + + Gets the name of the open key derivation function (KDF) algorithm. + Algorithm name. + + + Creates a KDF key. + Represents the KDF key. + Data used to create the key. + + + Creates an instance of the KeyDerivationAlgorithmProvider class and opens the specified algorithm for use. + The algorithm provider. + Represents a KDF algorithm provider. + + + Represents parameters used when deriving a key. + + + Creates a KeyDerivationParameters object for use in the password-based key derivation function 2 (PBKDF2). + Refers to the parameters used during key derivation. + The salt, a random or pseudorandom value to be combined with the password in multiple iterations. A salt is used to increase entropy above what can be obtained from using a password alone. + Number of iterations to be used to derive a key. + + + Creates a KeyDerivationParameters object for use in a counter mode, hash-based message authentication code (HMAC) key derivation function. + Refers to the parameters used during key derivation. + Buffer that specifies the purpose for the derived keying material. + Buffer that specifies information related to the derived keying material. For example, the context can identify the parties who are deriving the keying material and, optionally, a nonce known by the parties. + + + Creates a KeyDerivationParameters object for use in the SP800-56A key derivation function. + Refers to the parameters used during key derivation. + Specifies the intended purpose of the derived key. + Contains public information contributed by the initiator. + Contains public information contributed by the responder. + Contains public information known to both initiator and responder. + Contains private information known to both initiator and responder, such as a shared secret. + + + Retrieves the number of iterations used to derive the key. + Iteration count. + + + Gets or sets the parameters used by the key derivation algorithm. + Buffer that contains the parameters. + + + Contains static properties that enable you to retrieve algorithm names that can be used in the OpenAlgorithm method of the MacAlgorithmProvider class. + + + Retrieves a string that contains "AES_CMAC". + String that contains "AesCmac". + + + Retrieves a string that contains "HMAC_MD5". + String that contains "HMAC_MD5". + + + Retrieves a string that contains "HMAC_SHA1". + String that contains "HMAC_SHA1". + + + Retrieves a string that contains "HMAC_SHA256". + String that contains "HMAC_SHA256". + + + Retrieves a string that contains "HMAC_SHA384". + String that contains "HMAC_SHA384". + + + Retrieves a string that contains "HMAC_SHA512". + String that contains "HMAC_SHA512". + + + Represents a message authentication code (MAC). + + + Gets the name of the open MAC algorithm. + Algorithm name. + + + Creates a CryptographicHash object that supports incremental hash operations. + A CryptographicHash object that supports incremental hash operations. + Random data used to help generate the hash. You can call the GenerateRandom method to create the random data. + + + Creates a symmetric key that can be used to create the MAC value. + Symmetric key. + Random data used to help generate the key. You can call the GenerateRandom method to create the random data. + + + Gets the length, in bytes, of the message authentication code. + Number of bytes in the MAC. + + + Creates a MacAlgorithmProvider object and opens the specified algorithm for use. + Represents a provider that implements MAC algorithms. + Algorithm name. + + + Contains static properties that enable you to retrieve algorithm names that can be used in the OpenAlgorithm method of the SymmetricKeyAlgorithmProvider class. + + + Retrieves a string that contains "AES_CBC". + String that contains "AES_CBC". + + + Retrieves a string that contains "AES_CBC_PKCS7". + String that contains "AES_CBC_PKCS7". + + + Retrieves a string that contains "AES_CCM". + String that contains "AES_CCM". + + + Retrieves a string that contains "AES_ECB". + String that contains "AES_ECB". + + + Retrieves a string that contains "AES_ECB_PKCS7". + String that contains "AES_ECB_PKCS7". + + + Retrieves a string that contains "AES_CCM". + String that contains "AES_CCM". + + + Retrieves a string that contains "DES_CBC". + String that contains "DES_CBC". + + + Retrieves a string that contains "DES_CBC_PKCS7". + String that contains "DES_CBC_PKCS7". + + + Retrieves a string that contains "DES_ECB". + String that contains "DES_ECB". + + + Retrieves a string that contains "DES_ECB_PKCS7". + String that contains "DES_ECB_PKCS7". + + + Retrieves a string that contains "RC2_CBC". + String that contains "RC2_CBC". + + + Retrieves a string that contains "RC2_CBC_PKCS7". + String that contains "RC2_CBC_PKCS7". + + + Retrieves a string that contains "RC2_ECB". + String that contains "RC2_ECB". + + + Retrieves a string that contains "RC2_ECB_PKCS7". + String that contains "RC2_ECB_PKCS7". + + + Retrieves a string that contains "RC4". + String that contains "RC4". + + + Retrieves a string that contains "3DES_CBC". + String that contains "3DES_CBC". + + + Retrieves a string that contains "3DES_CBC_PKCS7". + String that contains "3DES_CBC_PKCS7". + + + Retrieves a string that contains "3DES_ECB". + String that contains "3DES_ECB". + + + Retrieves a string that contains "3DES_ECB_PKCS7". + String that contains "3DES_ECB_PKCS7". + + + Retrieves a persisted key from a Certificate object. + + + Opens the persisted private key from the specified Certificate object. + An asynchronous operation for retrieving a private key from the supplied Certificate object. + The certificate that contains the private key. + The hash algorithm for signature operations. For encryption, the hash algorithm is ignored. + The padding mode for asymmetric algorithm signature or encryption operations. + + + Opens the persisted public key from the specified Certificate object. + The public key retrieved from the supplied Certificate object. + The certificate that contains the public key. + The has algorithm for signature operations. + The padding mode for asymmetric algorithm signature or encryption operations. + + + Represents a provider of symmetric key algorithms. + + + Gets the name of the open symmetric algorithm. + Algorithm name. + + + Gets the size, in bytes, of the cipher block for the open algorithm. + Block size. + + + Creates a symmetric key. + Symmetric key. + Data used to generate the key. You can call the GenerateRandom method to create random key material. + + + Creates an instance of the SymmetricKeyAlgorithmProvider class and opens the specified algorithm for use. + Represents a symmetric key algorithm provider. + Algorithm name. + + + Specifies a padding mode for asymmetric algorithm signature or encryption operations. + + + Do not use padding. + + + Use the Optimal Asymmetric Encryption Padding (OAEP) scheme. + + + Use the standard padding scheme for public-key cryptography based on the RSA algorithm as defined in RFC 3447. + + + Use the Probabilistic Signature Scheme (PSS) scheme. + + + Specifies the type of the private key contained in a buffer. + + + This is the default value. The private key is encoded as an ASN.1 PrivateKeyInfo type defined in the PKCS#8 standard. The private key information syntax is defined as follows in RFC 5208.PrivateKeyInfo ::= SEQUENCE { version Version, privateKeyAlgorithm PrivateKeyAlgorithmIdentifier, privateKey PrivateKey, attributes [0] IMPLICIT Attributes OPTIONAL } Version ::= INTEGER PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier PrivateKey ::= OCTET STRING Attributes ::= SET OF Attribute + + + The key is an RSA private key defined in the PKCS #1 standard. For more information, see the RSA Cryptography Specification in RFC 3347. + + + Microsoft private key format defined by Cryptography API: Next Generation (CNG). For examples, see the following CNG structures:BCRYPT_DH_KEY_BLOBBCRYPT_DSA_KEY_BLOBBCRYPT_ECCKEY_BLOBBCRYPT_KEY_BLOBBCRYPT_RSAKEY_BLOB + + + Microsoft private key format defined by the legacy Cryptography API (CAPI). For more information, see Base Provider Key BLOBs. + + + Specifies the type of the public key contained in a buffer. + + + This is the default value. The public key is encoded as an ASN.1 SubjectPublicKeyInfo type defined in RFC 5280 and RFC 3280.SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } + + + The key is an RSA public key defined in the PKCS #1 standard. For more information, see the RSA Cryptography Specification in RFC 3347. + + + Microsoft public key format defined by Cryptography API: Next Generation (CNG). For examples, see the following CNG structures:BCRYPT_DH_KEY_BLOBBCRYPT_DSA_KEY_BLOBBCRYPT_ECCKEY_BLOBBCRYPT_KEY_BLOBBCRYPT_RSAKEY_BLOB + + + Microsoft public key format defined by the legacy Cryptography API (CAPI). For more information, see Base Provider Key BLOBs. + + + Contains a class that enables you to easily encrypt and decrypt static data or a data stream. + + + Represents a cryptographic provider that can be used to asynchronously encrypt and decrypt static data or a data stream. + + + Constructor used for decryption operations. + + + Constructor used for encryption operations. + Contains the protection descriptor that determines the entity to which the data will be encrypted. For more information, see Remarks. + + + Asynchronously protects static data. + Represents an asynchronous operation. + Data to protect. + + + Asynchronously protects a data stream. + Represents an asynchronous action. + Stream to be protected. + Protected stream. + + + Asynchronously decrypts static data. + Represents an asynchronous operation. + Data to decrypt. + + + Asynchronously decrypts a data stream. + Represents an asynchronous action. + Stream to decrypt. + Decrypted stream. + + + Contains classes that support Selective Wipe. + + + Describes the selective wipe protection state of a file or folder. + + + The item is either encrypting or decrypting and the selective wipe status cannot be determined. Check again later. + + + The item is not protected using selective wipe. + + + The item has been revoked using selective wipe. + + + The item is protected using selective wipe. + + + Another user has protected the item using selective wipe. + + + The item is protected for another enterprise id using selective wipe. + + + The item is encrypted or is a system file and cannot be protected using selective wipe. + + + Provides access to Selective Wipe operations. + + + Copy the selective wipe protection state of a file or folder to a new file or folder. + True if the copy operation was successful; otherwise false. + The source item to copy the selective wipe protection status from. + The target item to copy the selective wipe protection status to. + + + Protects a file or folder for selective wipe. + An asynchronous operation that retrieves the selective wipe protection status for the storageItem. + The file or folder to protect for selective wipe. + The enterprise id that the file or folder is protected for. The enterpriseIdentity value must be formatted as an Internationalized Domain Name (IDN) and cannot contain spaces. For example, contoso.com. + + + Revokes all files and folders protected for selective wipe for a specified enterprise id. + Revoke all files and folders protected by selective wipe for this enterprise id. The enterpriseIdentity value must be formatted as an Internationalized Domain Name (IDN) and cannot contain spaces. For example, contoso.com. + + + Gets the selective wipe protection status for a file or folder. + An aysnchronous operation that retrieves the selective wipe protection status for the storageItem. + The file or folder to get the selective wipe protection status for. + + + Enables an app for mail to evaluate and apply the Exchange Active Synchronization (EAS) policies. + + + Provides the app the ability to retrieve device information from the local computer. + + + Creates an instance of an object that allows the caller app to retrieve device information from the local computer. + + + Returns the friendly name of the local computer. + The friendly name of the local computer as the NetBIOS computer name. The value must be less than 1024 characters. + + + Returns the identifier of the local computer. + The identifier of the local computer. The value range is 16 bytes. + + + Returns the operating system of the local computer. + The operating system of the local computer. The value returns Windows. + + + Returns the system manufacturer of the local computer. + The system manufacturer of the local computer. The value must be less than 1024 characters. + + + Returns the system product name of the local computer. + The system product name of the local computer. The value must be less than 1024 characters. + + + Returns the system SKU of the local computer. + The system SKU of the local computer. + + + Modern mail apps evaluate and apply the EAS security policies. + + + Applies the EAS policies in asynchronous mode once the user consents. + Returns the evaluation of the callback results, in asynchronous mode, back to the calling app. + + + Evaluates the EAS policies. + Returns the results of the compliance check, in synchronous mode. + + + Gets or sets the ability to prevent convenience logons. + TRUE prevents convenience logons. + + + Creates an instance of an object that allows the caller app to set policies received from the Exchange server for evaluation or application. + + + Gets or sets the maximum length of time the computer can remain inactive before it is locked. + The length of time allows for inactivity before the computer is locked. + + + Gets or sets the maximum number of failed password attempts for logging on. + The range is between 4 and 16. + + + Gets or sets the minimum number of complex characters that are required for a password. + The range is between 1 and 4. + + + Gets or set the minimum length of password allowed. + The range is between 1 and 16. + + + Gets or set the length of time that a password is valid. + The length of time before the password expires and must be reset. + + + Gets or set the password information previously used. + The password information that was previously used. + + + Gets or sets whether encryption is required. + TRUE means encryption is required. + + + Provides the mail app with the results of the evaluation of the EAS security policies. + + + Returns the result of whether the computer is compliant with the EAS policies. + The result of whether the computer is compliant with the EAS policies. The Compliant property is set to TRUE if all of the policies being evaluated are compliant. Otherwise, it is set to FALSE. + + + Returns the result of whether convenience logons are disallowed. + The result of whether convenience logons are disallowed. + + + Gets the type of the Exchange ActiveSync encryption provider. + The type of the Exchange ActiveSync encryption provider. + + + Returns the result of the maximum time of inactivity allowed before the computer is locked. + The result of the maximum time of inactivity allowed before the computer is locked. + + + Returns the result of the maximum number of failed password attempts allowed. + The result of the maximum number of failed password attempts allowed. + + + Returns the result of the minimum number of complex password characters required. + The result of the minimum number of complex password characters required. + + + Returns the result of the minimum length of the password required. + The result of the minimum length of the password required. + + + Returns the result of whether the password is expired. + The result of whether the password is expired. + + + Returns the result of the history of passwords. + The result of the history of passwords. + + + Returns the result of whether encryption is required. + The result of whether encryption is required. + + + Results of whether the logon can occur. + + + The policy is not set for evaluation. + + + This computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + Describes the type of Exchange ActiveSync encryption provider. + + + The encryption provider type has not yet been determined. + + + The encryption provider is a Windows provider. + + + The encryption provider is a non-Windows provider. + + + Represents the maximum length of time result before locking the computer. + + + The policy is not set for evaluation. + + + This computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + Represents the maximum number of password attempts results. + + + The policy is not set for evaluation. + + + This computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + Represents the minimum complexity result for passwords. + + + The policy is not set for evaluation. + + + This computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The EAS policy being evaluated cannot be enforced by the system.HRESULT: EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + The EAS password policies for the user cannot be evaluated as the user has a blank password.HRESULT: EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD + + + The EAS password policies cannot be evaluated as one or more admins have blank passwords. HRESULT: EAS_E_ADMINS_HAVE_BLANK_PASSWORD + + + The user is not allowed to change the password. HRESULT: EAS_E_USER_CANNOT_CHANGE_PASSWORD + + + One or more admins are not allowed to change their passwords. HRESULT: EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD + + + There are other standard users present who are not allowed to change their passwords. HRESULT: EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD + + + The EAS password policy cannot be enforced by the connected account provider of at least one administrator.HRESULT: EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS + + + The EAS password policy cannot be enforced by the connected account provider of the current user.HRESULT: EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER + + + There is at least one administrator whose connected account password must be changed for EAS password policy compliance.HRESULT: EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD + + + The connected account password for the current user must be changed for EAS password policy compliance.HRESULT: EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD + + + Represents the minimum length result for passwords. + + + The policy is not set for evaluation. + + + This computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The EAS policy being evaluated cannot be enforced by the system.HRESULT: EAS_E_REQUESTED_POLICY_NOT_ENFORCEABLE + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + The EAS password policies for the user cannot be evaluated as the user has a blank password.HRESULT: EAS_E_CURRENT_USER_HAS_BLANK_PASSWORD + + + The EAS password policies cannot be evaluated as one or more admins have blank passwords. HRESULT: EAS_E_ADMINS_HAVE_BLANK_PASSWORD + + + The user is not allowed to change the password. HRESULT: EAS_E_USER_CANNOT_CHANGE_PASSWORD + + + One or more admins are not allowed to change their passwords. HRESULT: EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD + + + There are other standard users present who are not allowed to change their passwords. HRESULT: EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD + + + The EAS password policy cannot be enforced by the connected account provider of at least one administrator.HRESULT: EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CONNECTED_ADMINS + + + The EAS password policy cannot be enforced by the connected account provider of the current user.HRESULT: EAS_E_PASSWORD_POLICY_NOT_ENFORCEABLE_FOR_CURRENT_CONNECTED_USER + + + There is at least one administrator whose connected account password must be changed for EAS password policy compliance.HRESULT: EAS_E_CONNECTED_ADMINS_NEED_TO_CHANGE_PASSWORD + + + The connected account password for the current user must be changed for EAS password policy compliance.HRESULT: EAS_E_CURRENT_CONNECTED_USER_NEED_TO_CHANGE_PASSWORD + + + Results of querying on the password expiration information. + + + The policy is not set for evaluation. + + + The computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + The computer can be compliant using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The EAS password expiration policy cannot be met as the password expiration interval is less than the minimum password interval for the system.HRESULT: EAS_E_REQUESTED_POLICY_PASSWORD_EXPIRATION_INCOMPATIBLE + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + The user is not allowed to change the password. HRESULT: EAS_E_USER_CANNOT_CHANGE_PASSWORD + + + One or more admins are not allowed to change their passwords. HRESULT: EAS_E_ADMINS_CANNOT_CHANGE_PASSWORD + + + There are other standard users present who are not allowed to change their passwords. HRESULT: EAS_E_LOCAL_CONTROLLED_USERS_CANNOT_CHANGE_PASSWORD + + + Represents the password history. + + + The policy is not set for evaluation. + + + The computer is compliant to the policy.HRESULT: S_OK and the user is controlled. + + + The computer can be compliant using the ApplyAsync method.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is an admin.HRESULT: S_OK but the user is not controlled. + + + The requested policy is stricter than the computer policies.HRESULT: EAS_E_POLICY_COMPLIANT_WITH_ACTIONS and the user is not an admin. + + + The policy value is not in a valid range.HRESULT: HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER) + + + Represents the type of encryption required. + + + The policy is not set for evaluation. + + + This computer is already DeviceProtected.HRESULT: S_OK and the user is controlled. + + + This computer can be compliant by using the ApplyAsync method.HRESULT: S_OK but the user is not controlled. + + + This computer is not provisioned to support device encryption. Enable BitLocker on all volumes to comply with device encryption policy. HRESULT: FVE_E_NOT_PROVISIONED_ON_ALL_VOLUMES + + + This value is no longer supported. Starting with Windows 8.1 Preview, use FixedDataNotSupported. + This value is no longer supported. Starting with Windows 8.1 Preview, use FixedDataNotSupported. + + + This computer cannot support device encryption because unencrypted fixed data volumes are present.HRESULT: FVE_E_DE_FIXED_DATA_NOT_SUPPORTED + + + This value is no longer supported. Starting with Windows 8.1 Preview, use HardwareNotCompliant. + This value is no longer supported. Starting with Windows 8.1 Preview, use HardwareNotCompliant. + + + This computer does not meet the hardware requirements to support device encryption.HRESULT: FVE_E_DE_HARDWARE_NOT_COMPLIANT + + + This value is no longer supported. Starting with Windows 8.1 Preview, use LockNotConfigured. + This value is no longer supported. Starting with Windows 8.1 Preview, use LockNotConfigured. + + + This computer cannot support device encryption because WinRE is not properly configured.HRESULT: FVE_E_DE_WINRE_NOT_CONFIGURED + + + This value is no longer supported. Starting with Windows 8.1 Preview, use ProtectionSuspended. + This value is no longer supported. Starting with Windows 8.1 Preview, use ProtectionSuspended. + + + Protection is enabled on this volume but has been suspended. This is most likely due to an update of your computer. Reboot and try again.HRESULT: FVE_E_DE_PROTECTION_SUSPENDED + + + This value is no longer supported. Starting with Windows 8.1 Preview, use OsVolumeNotProtected. + This value is no longer supported. Starting with Windows 8.1 Preview, use OsVolumeNotProtected. + + + This computer is not provisioned with device encryption. Enable Device encryption on all volumes to comply with device encryption policy if it is supported. +HRESULT: FVE_E_DE_OS_VOLUME_NOT_PROTECTED + + + This value is no longer supported. Starting with Windows 8.1 Preview, use ProtectionNotYetEnabled. + This value is no longer supported. Starting with Windows 8.1 Preview, use ProtectionNotYetEnabled. + + + Protection has not been enabled on the volume. Enabling protection requires a connected account. If you already have a connected account and are seeing this error, refer to the event log for more information.HRESULT: FVE_E_DE_PROTECTION_NOT_YET_ENABLED + + + This computer does not have a feature license.HRESULT: FVE_E_NO_FEATURE_LICENSE + + + The operating system drive is not protected by BitLocker drive encryption.HRESULT: FVE_E_OS_NOT_PROTECTED + + + An unexpected failure occurred. + + + Manages files, folders, and application settings. + + + Provides access to the application data store. + + + Removes all application data from the local, roaming, and temporary app data stores. + An object that is used to manage the asynchronous clear operation. + + + Removes all application data from the specified app data store. + An object that is used to manage the asynchronous clear operation. + One of the enumeration values. + + + Provides access to the app data store associated with the app's app package. + The app data store. + + + Occurs when roaming application data is synchronized. + + + Gets the root folder in the local app data store. + The file system folder that contains the files. + + + Gets the application settings container in the local app data store. + The application settings container. + + + Gets the root folder in the roaming app data store. + The file system folder that contains the files. + + + Gets the application settings container in the roaming app data store. + The application settings container. + + + Gets the maximum size of the data that can be synchronized to the cloud from the roaming app data store. + The maximum size of the data, in KB. + + + Sets the version number of the application data in the app data store. + An object that is used to manage the asynchronous set version operation. + The new version number. + The set version event handler. + + + Sends a DataChanged | datachanged event to all registered event handlers. + + + Gets the root folder in the temporary app data store. + The file system folder that contains the files. + + + Gets the version number of the application data in the app data store. + The version number of the application data. + + + Represents related app settings that must be serialized and deserialized atomically. + + + Creates and initializes a new, initially empty, instance of the object. + + + Adds an item to the ApplicationDataCompositeValue. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the ApplicationDataCompositeValue. + The key-value pair to add. + + + Removes all application settings previously inserted into the composite value object, returning the object to its empty state. + + + Returns a value that indicates whether a specified key-value pair exists in the ApplicationDataCompositeValue. + true if an item with that key exists in the ApplicationDataCompositeValue; otherwise, false. + The key-value pair to check for in the ApplicationDataCompositeValue. + + + Returns a value that indicates whether a specified key exists in the ApplicationDataCompositeValue. + true if an item with that key exists in the ApplicationDataCompositeValue; otherwise, false. + The key to check for in the ApplicationDataCompositeValue. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator to enumerate the settings in the composite value. + The iterator. + + + Returns a read-only snapshot of the contents of the composite value. + The view of the composite value. + + + Determines whether there is an application setting with the specified key. + True if the key is found; otherwise false. + The key. + + + Creates or replaces an application setting. + True if an item with the specified key is an existing item and was replaced; otherwise, false. + The key of the setting to insert or replace. + The setting value. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ApplicationDataCompositeValue. + The ICollection of all keys in this ApplicationDataCompositeValue. + + + Retrieves the specified application setting. + The application setting. + The key of the setting. + + + Occurs when the map changes. + + + Removes the specified application setting. + The key of the setting. + + + Removes a specific item from the ApplicationDataCompositeValue. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the ApplicationDataCompositeValue. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of related application settings. + The number of related settings. + + + Returns a value that indicates whether a specified key exists in the ApplicationDataCompositeValue. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ApplicationDataCompositeValue; otherwise, false. + The key to check for in the ApplicationDataCompositeValue. + The item, if it exists. Contains null if the item does not exist in the ApplicationDataCompositeValue. + + + Gets an ICollection object containing the values of the ApplicationDataCompositeValue . + The ICollection of all values in this ApplicationDataCompositeValue. + + + Represents a container for app settings. + + + Gets the child application settings containers of this application settings container. + The application settings containers. + + + Creates or opens the specified settings container in the current settings container. + The settings container. + The name of the container. + One of the enumeration values. + + + Deletes the specified settings container, its subcontainers, and all application settings in the hierarchy. + The name of the settings container. + + + Gets the type (local or roaming) of the app data store that is associated with the current settings container. + One of the enumeration values. + + + Gets the name of the current settings container. + The name of the settings container. + + + Gets an object that represents the settings in this settings container. + The settings map object. + + + Provides access to the settings in a settings container. + + + Adds an item to the ApplicationDataContainerSettings. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the ApplicationDataContainerSettings. + The key-value pair to add. + + + Removes all related application settings. + + + Returns a value that indicates whether a specified key-value pair exists in the ApplicationDataContainerSettings. + true if an item with that key exists in the ApplicationDataContainerSettings; otherwise, false. + The key-value pair to check for in the ApplicationDataContainerSettings. + + + Returns a value that indicates whether a specified key exists in the ApplicationDataContainerSettings. + true if an item with that key exists in the ApplicationDataContainerSettings; otherwise, false. + The key to check for in the ApplicationDataContainerSettings. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator to enumerate the settings in the settings container. + The iterator. + + + Returns a read-only snapshot of the contents of the settings container. + The view of the settings container. + + + Determines whether there is an application setting with the specified key. + True if the key is found; otherwise false. + The key. + + + Inserts or replaces an application setting. + True if an item with the specified key is an existing item and was replaced; otherwise, false. + The key of the setting to insert or replace. + The setting value. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ApplicationDataContainerSettings. + The ICollection of all keys in this ApplicationDataContainerSettings. + + + Retrieves the specified application setting. + The application setting. + The key of the setting. + + + Occurs when the map changes. + + + Removes the specified application setting. + The key of the setting. + + + Removes a specific item from the ApplicationDataContainerSettings. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the ApplicationDataContainerSettings. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of related application settings. + The number of related settings. + + + Returns a value that indicates whether a specified key exists in the ApplicationDataContainerSettings. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ApplicationDataContainerSettings; otherwise, false. + The key to check for in the ApplicationDataContainerSettings. + The item, if it exists. Contains null if the item does not exist in the ApplicationDataContainerSettings. + + + Gets an ICollection object containing the values of the ApplicationDataContainerSettings . + The ICollection of all values in this ApplicationDataContainerSettings. + + + Lets apps manage real-time updates to files. + + + Initiates updates for the specified file. + When this method completes, it returns a FileUpdateStatus enum value that describes the status of the updates to the file. + The file to update. + + + Lets apps defer real-time updates for a specified file. + The file to defer updates for. + + + Creates files and folders inside the Downloads folder. + + + Creates a new file inside the Downloads folder. + When this method completes, it returns the new file as a StorageFile object. + The desired name of the file to create. If a file with the specified name already exists, a similar but unique name will be used. For example, if desiredName is MyFileName.jpg and a file by that name already exists in the Downloads folder, the new file will be created with a name like MyFileName (1).jpg instead. + + + Creates a new file in the Downloads folder, and specifies what to do if a file with the same name already exists in the Downloads folder. + When this method completes, it returns the new file as a StorageFile object. + The desired name of the file to create. If there is an existing file in the current folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing file in the current folder.Because the app can only access files in the Downloads folder that it created, you can't specify OpenIfExists or ReplaceExisting for this parameter. + + + Creates a new subfolder in the Downloads folder. + When this method completes, it returns the new subfolder as a StorageFolder. + The desired name of the subfolder to create. If a subfolder with the specified name already exists, a similar but unique name will be used. For example, if desiredName is MyFolder and a subfolder by that name already exists in the Downloads folder, the new subfolder will be created with a name like MyFolder (1) instead. + + + Creates a new subfolder in the Downloads folder, and specifies what to do if a subfolder with the same name already exists in the Downloads folder. + When this method completes, it returns the new subfolder as a StorageFolder. + The desired name of the subfolder to create. If there is an existing subfolder in the Downloads folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing subfolder in the Downloads folder.Because the app can only access folders in the Downloads folder that it created, you can't specify OpenIfExists or ReplaceExisting for this parameter. + + + Provides helper methods for reading and writing files that are represented by objects of type IStorageFile. + + + Appends lines of text to the specified file. + No object or value is returned when this method completes. + The file that the lines are appended to. + The list of text strings to append as lines. + + + Appends lines of text to the specified file using the specified character encoding. + No object or value is returned when this method completes. + The file that the lines are appended to. + The list of text strings to append as lines. + The character encoding of the file. + + + Appends text to the specified file. + No object or value is returned when this method completes. + The file that the text is appended to. + The text to append. + + + Appends text to the specified file using the specified character encoding. + No object or value is returned when this method completes. + The file that the text is appended to. + The text to append. + The character encoding of the file. + + + Reads the contents of the specified file and returns a buffer. + When this method completes, it returns an object (type IBuffer) that represents the contents of the file. + The file to read. + + + Reads the contents of the specified file and returns lines of text. + When this method completes successfully, it returns the contents of the file as a list (type IVector) of lines of text. Each line of text in the list is represented by a String object. + The file to read. + + + Reads the contents of the specified file using the specified character encoding and returns lines of text. + When this method completes successfully, it returns the contents of the file as a list (type IVector) of lines of text. Each line of text in the list is represented by a String object. + The file to read. + The character encoding to use. + + + Reads the contents of the specified file and returns text. + When this method completes successfully, it returns the contents of the file as a text string. + The file to read. + + + Reads the contents of the specified file using the specified character encoding and returns text. + When this method completes successfully, it returns the contents of the file as a text string. + The file to read. + The character encoding to use. + + + Writes data from a buffer to the specified file. + No object or value is returned when this method completes. + The file that the buffer of data is written to. + The buffer that contains the data to write. + + + Writes an array of bytes of data to the specified file. + No object or value is returned when this method completes. + The file that the byte is written to. + The array of bytes to write. + + + Writes lines of text to the specified file. + No object or value is returned when this method completes. + The file that the lines are written to. + The list of text strings to write as lines. + + + Writes lines of text to the specified file using the specified character encoding. + No object or value is returned when this method completes. + The file that the lines are written to. + The list of text strings to write as lines. + The character encoding of the file. + + + Writes text to the specified file. + No object or value is returned when this method completes. + The file that the text is written to. + The text to write. + + + Writes text to the specified file using the specified character encoding. + No object or value is returned when this method completes. + The file that the text is written to. + The text to write. + The character encoding of the file. + + + Provides access to common locations that contain user content. + + + Windows Phone only. Gets the Camera Roll folder. + The Camera Roll folder. + + + Gets the Documents library. + Required to read from and write to the user's Documents library. + The Documents library. + + + Gets the HomeGroup folder. + The HomeGroup folder. + + + Gets the media server (Digital Living Network Alliance (DLNA)) devices folder. + The folder of media server (Digital Living Network Alliance (DLNA)) devices. + + + Gets the Music library. + Required to read from and write to the user's Music library. + The Music library. + + + Gets the Pictures library. + Required to read from and write to the user's Pictures library. + The Pictures library. + + + Gets the play lists folder. + The play lists folder. + + + Gets the removable devices folder. + Required to read from and write to removable storage. + The removable devices folder. + + + Gets the Saved Pictures folder. + The Saved Pictures folder. + + + Gets the Videos library. + Required to read from and write to the user's Videos library. + The Videos library. + + + Provides helper methods for reading and writing a file using the absolute path or Uniform Resource Identifier (URI) of the file. + + + Appends lines of text to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path or Uniform Resource Identifier (URI) of the file that the lines are appended to. + The list of text strings to append as lines. + + + Appends lines of text to the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding. + No object or value is returned when this method completes. + The path of the file that the lines are appended to. + The list of text strings to append as lines. + The character encoding of the file. + + + Appends text to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path of the file that the text is appended to. + The text to append. + + + Appends text to the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding. + No object or value is returned when this method completes. + The path of the file that the text is appended to. + The text to append. + The character encoding of the file. + + + Reads the contents of the file at the specified path or Uniform Resource Identifier (URI) and returns a buffer. + When this method completes, it returns an object (type IBuffer) that represents the contents of the file. + The path of the file to read. + + + Reads the contents of the file at the specified path or Uniform Resource Identifier (URI) and returns lines of text. + When this method completes successfully, it returns the contents of the file as a list (type IVector) of lines of text. Each line of text in the list is represented by a String object. + The path of the file to read. + + + Reads the contents of the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding and returns lines of text. + When this method completes successfully, it returns the contents of the file as a list (type IVector) of lines of text. Each line of text in the list is represented by a String object. + The path of the file to read. + The character encoding of the file. + + + Reads the contents of the file at the specified path or Uniform Resource Identifier (URI) and returns text. + When this method completes successfully, it returns the contents of the file as a text string. + The path of the file to read. + + + Reads the contents of the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding and returns text. + When this method completes successfully, it returns the contents of the file as a text string. + The path of the file to read. + The character encoding of the file. + + + Writes data from a buffer to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path of the file that the data is written to. + The buffer that contains the data to write. + + + Writes a single byte of data to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path of the file that the byte is written to. + An array of bytes to write. + + + Writes lines of text to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path of the file that the lines are written to. + The list of text strings to append as lines. + + + Writes lines of text to the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding. + No object or value is returned when this method completes. + The path of the file that the lines are appended to. + The list of text strings to append as lines. + The character encoding of the file. + + + Writes text to the file at the specified path or Uniform Resource Identifier (URI). + No object or value is returned when this method completes. + The path of the file that the text is written to. + The text to write. + + + Writes text to the file at the specified path or Uniform Resource Identifier (URI) using the specified character encoding. + No object or value is returned when this method completes. + The path of the file that the text is written to. + The text to write. + The character encoding of the file. + + + Manages a delayed set version operation. + + + Notifies the system that the app has set the version of the application data in its app data store. + + + Provides data when an app sets the version of the application data in its app data store. + + + Gets the current version. + The current version. + + + Gets the requested version. + The requested version. + + + Requests that the set version request be delayed. + The set version deferral. + + + Represents a file. Provides information about the file and its content, and ways to manipulate them. + Required to read from and write to the user's Pictures library. + Required to read from and write to the user's Videos library. + Required to read from and write to the user's Music library. + Required to read from and write to the user's Documents library. + + + Gets the attributes of a file. + The file attributes. + + + Gets the MIME type of the contents of the file. + The MIME type of the file contents. For example, a music file might have the audio/mpeg MIME type. + + + Replaces the specified file with a copy of the current file. + No object or value is returned when this method completes. + The file to replace. + + + Creates a copy of the file in the specified folder. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + + + Creates a copy of the file in the specified folder, using the desired name. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + The desired name of the copy. If there is an existing file in the destination folder that already has the specified desiredNewName, Windows generates a unique name for the copy. + + + Creates a copy of the file in the specified folder, using the desired name. This method also specifies what to do if an existing file in the specified folder has the same name. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + The desired name of the copy. If there is an existing file in the destination folder that already has the specified desiredNewName, the specified NameCollisionOption determines how Windows responds to the conflict. + An enum value that determines how Windows responds if the desiredNewName is the same as the name of an existing file in the destination folder. + + + Creates a StorageFile to represent the specified stream of data. This method lets the app produce the data on-demand by specifying a function to be invoked when the StorageFile that represents the stream is first accessed. + When this method completes, it returns a StorageFile object that represents the new stream of data. + The user-friendly name of the StorageFile to create, including a file type extension. + The function that should be invoked when the StorageFile that is returned is first accessed. This function should produce the data stream represented by the returned StorageFile and lets the app produce data on-demand instead of writing the contents of the file at creation time. + The thumbnail image for the StorageFile to create. For a high-quality thumbnail, one edge of this thumbnail should be at least 1024 pixels. + + + Creates a StorageFile to represent a stream of data from the specified Uniform Resource Identifier (URI) resource. This method lets the app download the data on-demand when the StorageFile that represents the stream is first accessed. + When this method completes, it returns a StorageFile object that represents the Uniform Resource Identifier (URI) resource. + The user-friendly name of the StorageFile to create, including a file type extension. + The Uniform Resource Identifier (URI) of the resource used to create the StorageFile. + The thumbnail image for the StorageFile to create. For a high-quality thumbnail, one edge of this thumbnail should be at least 1024 pixels. + + + Gets the date and time when the current file was created. + The date and time when the current file was created. For example, in string format the DateTime that a file was created might be Fri Sep 16 13:47:08 PDT 2011. + + + Deletes the current file. + No object or value is returned by this method when it completes. + + + Deletes the current file, optionally deleting the item permanently. + No object or value is returned by this method when it completes. + A value that indicates whether to delete the item permanently. + + + Gets a user-friendly name for the file. + The user-friendly name for the file. + + + Gets a user-friendly description of the type of the file. + The user-friendly description of the type of the file. + + + Gets the type (file name extension) of the file. + The file name extension of the file. + + + Gets an identifier for the file. This ID is unique for the query result or StorageFolder that contains the file and can be used to distinguish between items that have the same name. + The identifier for the file. + + + Gets the basic properties of the current file. + When this method completes successfully, it returns the basic properties of the current file as a BasicProperties object. + + + Gets a StorageFile object to represent the specified Uniform Resource Identifier (URI) app resource. + When this method completes, it returns a StorageFile object that represents the Uniform Resource Identifier (URI) resource. + The Uniform Resource Identifier (URI) of the app resource to get a StorageFile to represent. + + + Gets a StorageFile object to represent the file at the specified path. + When this method completes, it returns the file as a StorageFile. + The path of the file to get a StorageFile to represent.If your path uses slashes, make sure you use backslashes (\). Forward slashes (/) are not accepted by this method. + + + Gets the parent folder of the current file. + When this method completes, it returns the parent folder as a StorageFolder. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail, the requested size, and the specified options + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Gets the search hits specified in a query. + When this method completes, it returns the object that you use to get the hits. + The object that specifies the query. + + + Retrieves an adjusted thumbnail image for the file, determined by the purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the file. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Retrieves an adjusted thumbnail image for the file, determined by the purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the file. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Retrieves an adjusted thumbnail image for the file, determined by the purpose of the thumbnail, the requested size, and the specified options. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the file. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Indicates if the file is local, is cached locally, or can be downloaded. + True if the file is local, is cached locally, or can be downloaded. Otherwise, false. + + + Indicates whether the current file is equal to the specified file. + Returns true if the current file is equal to the specified file; otherwise false. + The IStorageItem object that represents a file to compare against. + + + Determines whether the current StorageFile matches the specified StorageItemTypes value. + True if the StorageFile matches the specified value; otherwise false. + The value to match against. + + + Moves the current file to the location of the specified file and replaces the specified file in that location. + No object or value is returned by this method. + The file to replace. + + + Moves the current file to the specified folder. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + + + Moves the current file to the specified folder and renames the file according to the desired name. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + The desired name of the file after it is moved. If there is an existing file in the destination folder that already has the specified desiredNewName, Windows generates a unique name for the file. + + + Moves the current file to the specified folder and renames the file according to the desired name. This method also specifies what to do if a file with the same name already exists in the specified folder. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + The desired name of the file after it is moved. If there is an existing file in the destination folder that already has the specified desiredNewName, the specified NameCollisionOption determines how Windows responds to the conflict. + An enum value that determines how Windows responds if the desiredNewName is the same as the name of an existing file in the destination folder. + + + Gets the name of the file including the file name extension. + The name of the file including the file name extension. + + + Opens a random-access stream over the file. + When this method completes, it returns the random-access stream (type IRandomAccessStream). + The type of access to allow. + + + Opens a random-access stream over the current file for reading file contents. + When this method completes, it returns the random-access stream (type IRandomAccessStreamWithContentType). + + + Opens a sequential-access stream over the current file for reading file contents. + When this method completes, it returns the sequential-access stream (type IInputStream). + + + Opens a random-access stream to the file that can be used for transacted-write operations. + When this method completes, it returns a StorageStreamTransaction that contains the random-access stream and methods that can be used to complete transactions. + + + Gets the full file-system path of the current file, if the file has a path. + The full path of the file, if the file has a path in the user's file-system. + + + Gets an object that provides access to the content-related properties of the file. + The object that provides access to the content-related properties of the file. + + + Gets the StorageProvider object that contains info about the service that stores the current file. + The StorageProvider object that contains info about the service that stores the current file. The file may be stored by the local file system or by a remote service like Microsoft SkyDrive. + + + Renames the current file. + No object or value is returned by this method when it completes. + The desired, new name of the current item. + + + Renames the current file. This method also specifies what to do if an existing item in the current file's location has the same name. + No object or value is returned by this method when it completes. + The desired, new name of the current file. If there is an existing item in the current file's location that already has the specified desiredName, the specified NameCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing item in the current file's location. + + + Replaces the contents of the file referred to by the specified IStorageFile object with a new data stream. This method lets the app produce the data on-demand by specifying a function to be invoked when the StorageFile that represents the stream is first accessed. + When this method completes, it returns a StorageFile object that represents the new data stream. Subsequently, this StorageFile object should be used to access file content instead of the file (type IStorageFile) that was specified to be replace. + The file (type IStorageFile) that the new data stream should be written to. + The function that should be invoked when the StorageFile that is returned is first accessed. This function should produce the data stream represented by the returned StorageFile and lets the app produce data on-demand instead of writing the contents of the file at creation time. + The thumbnail image for the StorageFile to create. For a high-quality thumbnail, one edge of this thumbnail should be at least 1024 pixels. + + + Replaces the contents of the file referred to by the specified IStorageFile object with a new data stream of the specified Uniform Resource Identifier (URI). This method lets the app download the data on-demand when the StorageFile that represents the stream is first accessed. + When this method completes, it returns a StorageFile object that represents the streamed file. Subsequently, this StorageFile object should be used to access file content instead of the file (type IStorageFile) that was specified to be replace. + The file that the created StorageFile will provide a stream of. + The Uniform Resource Identifier (URI) of the resource used to create the StorageFile. + The thumbnail image for the StorageFile to create. For a high-quality thumbnail, one edge of this thumbnail should be at least 1024 pixels. + + + Manipulates folders and their contents, and provides information about them. + Required to read from and write to the user's Pictures library. + Required to read from and write to the user's Videos library. + Required to read from and write to the user's Music library. + Required to read from and write to the user's Documents library. + + + Determines whether the current folder supports the specified QueryOptions. + True if the folder or file group supports the specified QueryOptions; otherwise false. + The QueryOptions to check. + + + Gets the attributes of the current folder. + The attributes of the current folder. + + + Creates a new file in the folder or file group. + When this method completes, it returns the new file as a StorageFile. + The desired name of the file to create. + + + Creates a new file in the current folder, and specifies what to do if a file with the same name already exists in the current folder. + When this method completes, it returns the new file as a StorageFile. + The desired name of the file to create. If there is an existing file in the current folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing file in the current folder. + + + Creates a query result object to filter and enumerate top-level files in the current folder. + A query result object to filter and enumerate the top-level files in the current folder. + + + Creates a query result object to filter and enumerate all the files in the current folder and its subfolders. Files are filtered and sorted based on the specified CommonFileQuery. + A query result object of all the files in the current folder and its subfolders based on the specified CommonFileQuery. + The enum value that identifies the files to include in the query result object and how those files are sorted. + + + Creates a query result object to filter and enumerate the files in the current folder and its subfolders. Files are included in the query result and sorted based on the specified QueryOptions. + A query result object of all the files in the current folder and its subfolders based on the specified QueryOptions. + The criterion that are applied to include and sort files in the query result object. + + + Creates a new subfolder inside the current folder. + When this method completes, it returns the new subfolder as a StorageFolder. + The desired name of the new subfolder to create. + + + Creates a new sub-folder inside the current folder, and specifies what to do if a folder with the same name already exists in the current folder. + When this method completes, it returns the new subfolder as a StorageFolder. + The desired name of the new subfolder to create. If there is an existing subfolder in the current folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing subfolder in the current folder. + + + Creates a query result object to filter and enumerate top-level sub-folders of the current folder. + A query result object that can be used to filter and enumerate files in the current folder by their sub-folder. + + + Creates a query result object to enumerate files in the current folder by grouping them into StorageFolder objects. Files are filtered and grouped based on the specified CommonFolderQuery. + A query result object that can be used to filter and enumerate files in the current folder by their StorageFolder. + The enum value that identifies how to group files into StorageFolder objects in the query result object. + + + Creates a query result object to filter and enumerate files in the current folder by grouping them into sub-folders. Files are included in the query result and grouped into sub-folders based on the specified QueryOptions. + A query result object that can be used to filter and enumerate files in the current folder by their sub-folder. + The criterion that are applied to include and group files in the query result object. + + + Creates a query result object to filter and enumerate top-level items (files and sub-folders) in the current folder. + A query result object to filter and enumerate the top-level files and sub-folders in the current folder. + + + Creates a query result object to filter and enumerate top-level items (files and sub-folders) in the current folder. Items are included in the query result and sorted based on the specified QueryOptions. + A query result object to filter and enumerate the top-level files and sub-folders in the current folder. + The enum value that identifies the items (files and folders) to include in the query result object and how those items are sorted. + + + Gets the date and time that the current folder was created. + The date and time that the current folder was created as type DateTime. For example: Fri Sep 16 13:47:08 PDT 2011. + + + Deletes the current folder or file group. + No object or value is returned by this method when it completes. + + + Deletes the current folder or file group, optionally deleting it permanently. + No object or value is returned by this method when it completes. + A value that indicates whether to delete the current folder or file group permanently. + + + Gets the user-friendly name of the current folder. + The user-friendly name of the current folder. + + + Gets the user-friendly type of the folder or file group. + The user-friendly type of the folder or file group. + + + Gets an identifier for the current folder. This ID is unique for the query result or StorageFolder that contains the current folder or file group, and can be used to distinguish between items that have the same name. + The identifier for the current folder or file group within a query result or StorageFolder. + + + Gets the basic properties of the current folder or file group. + When this method completes successfully, it returns the basic properties of the current folder or file group as a BasicProperties object. + + + Gets a single file from the current folder using the specified file name. + When this method completes successfully, it returns a StorageFile that represents the file. + The name (or path relative to the current folder) of the file to retrieve. + + + Gets the top-level files in the current folder. + When this method completes successfully, it returns a list of the files (type IVectorView) in the folder. Each file in the list is represented by a StorageFile object. + + + Gets a list of all files in the current folder and its sub-folders. Files are filtered and sorted based on the specified CommonFileQuery. + When this method completes successfully, it returns a list of the files (type IVectorView) in the folder. Each file in the list is represented by a StorageFile object. + The enum value that identifies the files to include in the list and how those files are sorted. + + + Gets an index-based range of files from the list of all files in the current the current folder and its sub-folders. Files are filtered and sorted based on the specified CommonFileQuery and are included in the range based on the resulting indexes. + When this method completes successfully, it returns a list of the files (type IVectorView) in the folder. Each file in the list is represented by a StorageFile object. + The enum value that identifies the files to include in the list and how those files are sorted. + The zero-based index of the first file in the range to retrieve. + The maximum number of files to retrieve. + + + Gets a single sub-folder from the current folder using the specified folder name. + When this method completes successfully, it returns a StorageFolder that represents the sub-folder. + The name (or path relative to the current folder) of the sub-folder to retrieve. + + + Gets a StorageFolder that represents the folder at the specified file-system path. + When this method completes successfully, it returns a StorageFolder that represents the folder. + The file-system path of the folder to retrieve. + + + Gets a list of the top-level sub-folders of the current folder. + When this method completes successfully, it returns a list of the files (type IVectorView). Each folder in the list is represented by a StorageFolder. + + + Gets a list of StorageFolder objects that represent groups of files in the current folder. Files are filtered and grouped based on the specified CommonFolderQuery. + When this method completes successfully, it returns a list of the files (type IVectorView). Each folder in the list is represented by a StorageFolder. + The common folder query. + + + Gets an index-based range of StorageFolder objects that represent groups of files in the current folder. Files are filtered and grouped based on the specified CommonFolderQuery and are included in the range based on the resulting indexes. + When this method completes successfully, it returns a list of the files (type IVectorView). Each folder in the list is represented by a StorageFolder. + The enum value that identifies the file groups that are represented by StorageFolder objects in the range to retrieve. + The zero-based index of the first StorageFolder in the range to retrieve. + The maximum number of child folders to retrieve. + + + Gets the indexed state of the current folder. + When this method completes successfully, it returns an IndexedState enum value that describes the state of the folder. + + + Gets a single file or sub-folder from the current folder using the name of the item. + When this method completes successfully, it returns the file or folder (type IStorageItem). + The name (or path relative to the current folder) of the file or sub-folder to retrieve. + + + Gets a list of top-level files and sub-folders inside the current folder. + When this method completes successfully, it returns a list of the files and folders (type IVectorView) inside the current folder. The items in the list are represented by objects of type IStorageItem. + + + Gets an index-based range from a list of all the files and sub-folders inside the current folder. Items in the range based on the resulting indexes. + When this method completes successfully, it returns a list of the files and folders (type IVectorView). The files and folders in the list are represented by objects of type IStorageItem. + The zero-based index of the first item in the range to retrieve. + The maximum number of items to retrieve. + + + Gets the parent folder of the current folder. + When this method completes, it returns the parent folder as a StorageFolder. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail, the requested size, and the specified options + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Gets an adjusted thumbnail image for the current folder, determined by the specified purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the folder or file group. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Gets an adjusted thumbnail image for the current folder, determined by the specified purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the folder or file group. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Gets an adjusted thumbnail image for the current folder, determined by the specified purpose of the thumbnail, the requested size, and the specified options. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the folder or file group. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Indicates whether the current folder supports the specified CommonFileQuery. + True if the folder supports the specified CommonFileQuery; otherwise false. + The enum value to test against. + + + Indicates whether the current folder supports the specified CommonFolderQuery. + True if the folder supports the specified CommonFolderQuery; otherwise false. + The enum value to test against. + + + Indicates whether the current folder is equal to the specified folder. + Returns true if the current folder is equal to the specified folder; otherwise false. + The IStorageItem object that represents the folder to compare against. + + + Indicates whether the current StorageFolder matches the specified StorageItemTypes value. + True if the StorageFolder matches the specified StorageItemTypes value; otherwise false. + The enum value that determines the object type to match against. + + + Gets the name of the current folder. + The name of the current folder. + + + Gets the full file-system path of the current folder, if the folder has a path. + The full path of the folder, if the folder has a path in the user's file-system. + + + Gets an object that provides access to the content-related properties of the current folder. + The object that provides access to the content-related properties of the folder. + + + Gets the StorageProvider object that contains info about the service that stores the current folder. + The StorageProvider object that contains info about the service that stores the current folder. The folder may be stored by the local file system or by a remote service like Microsoft SkyDrive. + + + Renames the current folder. + No object or value is returned by this method when it completes. + The desired, new name for the current folder. + + + Renames the current folder and specifies what to do if a folder with the same name already exists. + No object or value is returned by this method when it completes. + The desired, new name for the current folder. If there is an existing item in the current folder's location that already has the specified desiredName, the specified NameCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing item in the current folder's location. + + + Try to get a single file or sub-folder from the current folder by using the name of the item. + When this method completes successfully, it returns the file or folder (type IStorageItem). + The name (or path relative to the current folder) of the file or sub-folder to try to retrieve. + + + Lets you add and remove folders from a library like Music or Videos and lets you get a list of folders included in the library. + + + Occurs when the list of folders in the current library changes. + + + Gets the folders in the current library. + The folders in the current storage library. + + + Gets the specified library. + When this method completes successfully, it returns the library (type StorageLibrary). + A KnownLibraryId value that identifies the library to retrieve, like Music or Videos. + + + Prompts the user to select a folder from the current library, and then adds the folder. + When this method completes, it returns the folder that the user picked and added as a StorageFolder. If the user cancels the operation and doesn't pick a folder, the method returns null. + + + Prompts the user to confirm removal of the specified folder from the current library, and then removes the folder. + Returns true if the folder was removed; otherwise false. + The folder to remove. + + + Get the default save folder for the current library. + The default save folder for the current library. + + + Contains info about the service that stores files and folders. Files and folders may be stored either by the local file system or by a remote service like Microsoft SkyDrive. + + + Gets a user-friendly name for the current provider of files and folders. + The user-friendly name for the provider. This name is localized to the current system locale. + + + Gets an identifier for the current provider of files and folders. + The identifier for the provider. + + + Represents a write transaction for a random-access stream. + + + Releases system resources that are exposed by the stream, indicating that the data request is complete. + + + Save the stream to the underlying file. + No object or value is returned by this method. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets the random-access stream used in the transaction. + The random-access stream. + + + Represents a sequential-access output stream that indicates a request for the data stream of a StorageFile that was created by calling CreateStreamedFileAsync or ReplaceWithStreamedFileAsync. + + + Releases system resources that are exposed by the current stream indicating that the data request is complete. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Indicates that the data can't be streamed and releases system resources that are exposed by the current stream indicating that the data request is complete. + The enum value that indicates why the data stream can't be accessed. + + + Flushes the data in the current stream. + When this method completes, it returns true if the data was flushed successfully or false if the flush operation failed. + + + Writes data from a buffer to the current stream. + When this method completes, it returns the number of bytes (type UInt32) that were written to the stream. If the app specifies a function to monitor progress, that function receives the number of bytes (type UInt32) written so far. + The buffer that contains the data to write. + + + Provides access to System.Audio.EncodingBitrate. + + + Gets the value of the System.Audio.EncodingBitrate file property. + The name of the System.Audio.EncodingBitrate property. + + + Provides access to common GPS file properties like System.GPS.Latitude. + + + Gets the value of the System.GPS.Latitude file property. + The name of the System.Latitude file property. + + + Gets the value of the System.GPS.Longitude file property. + The name of the System.Longitude file property. + + + Provides access to common image file properties like System.Image.HorizontalSize. + + + Gets the value of the System.Image.HorizontalSize file property. + The name of the System.Image.HorizontalSize file property. + + + Gets the value of the System.Image.VerticalSize file property. + The name of the System.Image.VerticalSize file property. + + + Provides access to common media file properties like System.Media.Duration. + + + Gets the value of the System.Media.Duration file property. + The name of the System.Media.Duration file property. + + + Gets the value of the System.Media.Producer file property. + The name of the System.Media.Producer file property. + + + Gets the value of the System.Media.Publisher file property. + The name of the System.Media.Publisher file property. + + + Gets the value of the System.Media.SubTitle file property. + The name of the System.Media.SubTitle file property. + + + Gets the value of the System.Media.Writer file property. + The name of the System.Media.Writer file property. + + + Gets the value of the System.Media.Year file property. + The name of the System.Media.Year file property. + + + Provides access to common music file properties like System.Music.AlbumArtist. + + + Gets the value of the System.Music.AlbumArtist file property. + The name of the System.Music.AlbumArtist file property. + + + Gets the value of the System.Music.AlbumTitle file property. + The name of the System.Music.AlbumTitle file property. + + + Gets the value of the System.Music.Artist file property. + The name of the System.Music.Artist file property. + + + Gets the value of the System.Music.Composer file property. + The name of the System.Music.Composer file property. + + + Gets the value of the System.Music.Conductor file property. + The name of the System.Music.Conductor file property. + + + Gets the value of the System.Music.DisplayArtist file property. + The name of the System.Music.DisplayArtist file property. + + + Gets the value of the System.Music.Genre file property. + The name of the System.Music.Genre file property. + + + Gets the value of the System.Music.TrackNumber file property. + The name of the System.Music.TrackNumber file property. + + + Provides access to common photo file properties like System.Photo.CameraManufacturer. + + + Gets the value of the System.Photo.CameraManufacturer file property. + The name of the System.Photo.CameraManufacturer file property. + + + Gets the value of the System.Photo.CameraModel file property. + The name of the System.EncodingBitrateSystem.Photo.CameraModel file property. + + + Gets the value of the System.Photo.DateTaken file property. + The name of the System.Photo.DateTaken file property. + + + Gets the value of the System.Photo.Orientation file property. + The name of the System.Photo.Orientation file property. + + + Gets the value of the System.Photo.PeopleNames file property. + The name of the System.Photo.PeopleNames file property. + + + Provides objects that let you access common Windows file properties like System.Title. + + + Gets an object that provides access to the System.Audio.EncodingBitrate file property. + The object that provides access to the System.Audio.EncodingBitrate file property. + + + Gets the value of the System.Author file property. + The name of the System.Author file property. + + + Gets the value of the System.Comment file property. + The name of the System.Comment file property. + + + Gets an object that provides access to common GPS file properties like System.GPS.Latitude. + The object that provides access to common GPS file properties like System.GPS.Latitude. + + + Gets an object that provides access to the System.Image.HorizontalSize and System.Image.VerticalSize file properties. + The object that provides access to the System.Image.HorizontalSize and System.Image.VerticalSize file properties. + + + Gets the value of the System.ItemNameDisplay file property. + The name of the System.ItemNameDisplay file property. + + + Gets the value of the System.Keywords file property. + The name of the System.Keywords file property. + + + Gets an object that provides access to common media file properties like System.Duration. + The object that provides access to common media file properties like System.Duration. + + + Gets an object that provides access to common music file properties like System.Music.AlbumArtist. + The object that provides access to common music file properties like System.Music.AlbumArtist. + + + Gets an object that provides access to common photo file properties like System.Photo.CameraManufacturer. + The object that provides access to common photo file properties like System.Photo.CameraManufacturer. + + + Gets the value of the System.Rating file property. + The name of the System.Rating file property. + + + Gets the value of the System.Title file property. + The name of the System.Title file property. + + + Gets an object that provides access to common video file properties like System.Video.Director. + The object that provides access to common video file properties like System.Video.Director. + + + Provides access to common video file properties like System.Video.Director. + + + Gets the value of the System.Video.Director file property. + The name of the System.Video.Director file property. + + + Gets the value of the System.Video.FrameHeight file property. + The name of the System.Video.FrameHeight file property. + + + Gets the value of the System.Video.FrameWidth file property. + The name of the System.Video.FrameWidth file property. + + + Gets the value of the System.Video.Orientation file property. + The name of the System.Video.Orientation file property. + + + Gets the value of the System.Video.TotalBitrate file property. + The name of the System.Video.TotalBitrate file property. + + + Represents a method that handles the request to set the version of the application data in the application data store. + The set version request. + + + Represents a function that the app defines to produce the data stream of a StorageFile when that StorageFile is first accessed. + The request for the streamed data in the StorageFile that was created by CreateStreamedFileAsync or ReplaceWithStreamedFileAsync. + + + Specifies creation options for application data containers. + + + Always activate the container. If the resource represented by the object does not exist, create it. + + + Activate the container only if the resource it represents already exists. + + + Specifies the type of an application data store. + + + The data resides in the local application data store. + + + The data resides in the roaming application data store. + + + The data resides in the temporary application data store. + + + The data resides in the local cache for the application data store. + + + Specifies what to do if a file with the desired name already exists in the current folder. + + + Create the new file or folder with the desired name, or automatically appends a number if a file or folder already exists with that name. + + + Create the new file or folder with the desired name, and replaces any file or folder that already exists with that name. + + + Create the new file or folder with the desired name, or returns an error if a file or folder already exists with that name. + + + Create the new file or folder with the desired name, or returns an existing item if a file or folder already exists with that name. + + + Specifies the mode used to access a file. + + + The file stream is accessed in read-only mode. If the file is changed, subsequent read operations will fail. Multiple, independent read-only streams may be used to read a file. We recommend you keep read-only file streams open only while your app is actively reading from the file. You can close a stream by calling Close. + + + The file stream is accessed in read/write mode. The file supports a single write stream and writing is non-transacted and in-place. You should use this mode only when you are ready to write immediately in order to avoid interrupting other operations. + + + Describes the attributes of system file or folder. + + + The item is normal. + + + The item is read only. + + + The item is a directory. + + + The item is archived. + + + The item is a temporary file. + + + The item is locally incomplete. + + + Values that identify storage libraries. + + + Documents library. + + + Music library. + + + Pictures library. + + + Videos library. + + + Specifies what to do if a file or folder renamed, moved, or copied and there is an existing file or folder with the same name in the desired location. + + + Automatically generate a unique name by appending a number to the name of the file or folder. + + + Replace the existing file or folder. Your app must have permission to access the location that contains the existing file or folder. Access to a location can be granted in several ways, for example, by a capability declared in your application's manifest, or by the user through the file picker. You can use Windows.Storage.AccessCache to manage the list of locations that are accessible to your app via the file picker. + + + Return an error if another file or folder exists with the same name and abort the operation. + + + Specifies whether an item that is deleted is sent to the Recycle Bin or permanently deleted. + + + If the item is in an application storage location (a location that can be accessed through the ApplicationData class), it will be permanently deleted and won't appear in the Recycle Bin. Otherwise, the item is deleted according to the default Windows Explorer behavior for the location (which may move the item to the Recycle Bin). + + + Permanently deletes the item without moving it to the recycle bin. + + + Describes the kind of item that is represented by an instance of a class that implements IStorageItem (like a StorageFile or StorageFolder object). + + + A generic storage item that represents either a file or a folder. + + + A file that is represented as a StorageFile instance. + + + A folder that is represented as a StorageFolder instance. + + + Indicates the reason that data could not be streamed. + + + The data can't be streamed. + + + The data currently can't be accessed. + + + The data weren't complete. + + + Represents a file. Provides information about the file and its contents, and ways to manipulate them. + Required to read from and write to the user's Pictures library. + Required to read from and write to the user's Videos library. + Required to read from and write to the user's Music library. + Required to read from and write to the user's Documents library. + + + Gets the MIME type of the contents of the file. + The MIME type of the file contents. For example, a music file might have the audio/mpeg MIME type. + + + Replaces the specified file with a copy of the current file. + No object or value is returned when this method completes. + The file to replace. + + + Creates a copy of the file in the specified folder. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + + + Creates a copy of the file in the specified folder, using the desired name. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + The desired name of the copy. If there is an existing file in the destination folder that already has the specified desiredNewName, Windows generates a unique name for the copy. + + + Creates a copy of the file in the specified folder, using the desired name. This method also specifies what to do if an existing file in the specified folder has the same name. + When this method completes, it returns a StorageFile that represents the copy. + The destination folder where the copy is created. + The desired name of the copy. If there is an existing file in the destination folder that already has the specified desiredNewName, the specified NameCollisionOption determines how Windows responds to the conflict. + An enum value that determines how Windows responds if the desiredNewName is the same as the name of an existing file in the destination folder. + + + Gets the type (file name extension) of the file. + The file name extension of the file. + + + Moves the current file to the location of the specified file and replaces the specified file in that location. + No object or value is returned by this method. + The file to replace. + + + Moves the current file to the specified folder. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + + + Moves the current file to the specified folder and renames the file according to the desired name. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + The desired name of the file after it is moved. If there is an existing file in the destination folder that already has the specified desiredNewName, Windows generates a unique name for the file. + + + Moves the current file to the specified folder and renames the file according to the desired name. This method also specifies what to do if a file with the same name already exists in the specified folder. + No object or value is returned by this method. + The destination folder where the file is moved. This destination folder must be a physical location. Otherwise, if the destination folder exists only in memory, like a file group, this method fails and throws an exception. + The desired name of the file after it is moved. If there is an existing file in the destination folder that already has the specified desiredNewName, the specified NameCollisionOption determines how Windows responds to the conflict. + An enum value that determines how Windows responds if the desiredNewName is the same as the name of an existing file in the destination folder. + + + Opens a random-access stream over the file. + When this method completes, it returns the random-access stream (type IRandomAccessStream). + The type of access to allow. + + + Opens a transacted, random-access stream to the file. + When this method completes, it returns a StorageStreamTransaction that contains the random-access stream and methods that can be used to complete transactions. + + + Manipulates folders and their contents, and provides information about them. + Required to read from and write to the user's Pictures library. + Required to read from and write to the user's Videos library. + Required to read from and write to the user's Music library. + Required to read from and write to the user's Documents library. + + + Creates a new file in the current folder. + When this method completes, it returns the new file as a StorageFile. + The desired name of the file to create. + + + Creates a new file in the current folder, and specifies what to do if a file with the same name already exists in the current folder. + When this method completes, it returns the new file as a StorageFile. + The desired name of the file to create. If there is an existing file in the current folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing file in the current folder. + + + Creates a new folder in the current folder. + When this method completes, it returns the new folder as a StorageFolder. + The desired name of the folder to create. + + + Creates a new folder in the current folder, and specifies what to do if a folder with the same name already exists in the current folder. + When this method completes, it returns the new folder as a StorageFolder. + The desired name of the folder to create. If there is an existing folder in the current folder that already has the specified desiredName, the specified CreationCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing folder in the current folder. + + + Gets the specified file from the current folder. + When this method completes successfully, it returns a StorageFile that represents the file. + The name (or path relative to the current folder) of the file to retrieve. + + + Gets the files from the current folder. + When this method completes successfully, it returns a list of the files (type IVectorView) in the folder. Each file in the list is represented by a StorageFile object. + + + Gets the specified folder from the current folder. + When this method completes successfully, it returns a StorageFolder that represents the child folder. + The name of the child folder to retrieve. + + + Gets the folders in the current folder. + When this method completes successfully, it returns a list of the files (type IVectorView). Each folder in the list is represented by a StorageFolder. + + + Gets the specified item from the IStorageFolder. + When this method completes successfully, it returns the file or folder (type IStorageItem). + The name of the item to retrieve. + + + Gets the items from the current folder. + When this method completes successfully, it returns a list of the files and folders (type IVectorView). The files and folders in the list are represented by objects of type IStorageItem. + + + Manipulates folders and their contents, and provides information about them. + + + Try to get a single file or sub-folder from the current folder by using the name of the item. + When this method completes successfully, it returns the file or folder (type IStorageItem). + The name (or path relative to the current folder) of the file or sub-folder to try to retrieve. + + + Manipulates storage items (files and folders) and their contents, and provides information about them. + + + Gets the attributes of a storage item. + The file or folder attributes. + + + Gets the date and time when the current item was created. + The date and time when the current item was created. For example, in string format the DateTime that an item was created might be Fri Sep 16 13:47:08 PDT 2011. + + + Deletes the current item. + No object or value is returned by this method when it completes. + + + Deletes the current item, optionally deleting it permanently. + No object or value is returned by this method when it completes. + A value that indicates whether to delete the item permanently. + + + Gets the basic properties of the current item (like a file or folder). + When this method completes successfully, it returns the basic properties of the current item as a BasicProperties object. + + + Determines whether the current IStorageItem matches the specified StorageItemTypes value. + True if the IStorageItem matches the specified value; otherwise false. + The value to match against. + + + Gets the name of the item including the file name extension if there is one. + The name of the item including the file name extension if there is one. + + + Gets the full file-system path of the item, if the item has a path. + The full path of the item, if the item has a path in the user's file-system. + + + Renames the current item. + No object or value is returned by this method when it completes. + The desired, new name of the item. + + + Renames the current item. This method also specifies what to do if an existing item in the current item's location has the same name. + No object or value is returned by this method when it completes. + The desired, new name of the current item. If there is an existing item in the current item's location that already has the specified desiredName, the specified NameCollisionOption determines how Windows responds to the conflict. + The enum value that determines how Windows responds if the desiredName is the same as the name of an existing item in the current item's location. + + + Manipulates storage items (files and folders) and their contents, and provides information about them. + + + Gets the parent folder of the current storage item. + When this method completes, it returns the parent folder as a StorageFolder. + + + Indicates whether the current item is the same as the specified item. + Returns true if the current storage item is the same as the specified storage item; otherwise false. + The IStorageItem object that represents a storage item to compare against. + + + Provides access to common and content properties on items (like files and folders). + + + Gets the user-friendly name of the item. + Gets the user-friendly name of the item. + + + Gets the user-friendly type of the item. + The user-friendly type of the item. + + + Gets an identifier for the current item. This ID is unique for the query result or StorageFolder that contains the item and can be used to distinguish between items that have the same name. + The identifier for the item within the query result or StorageFolder. + + + Retrieves an adjusted thumbnail image for the item, determined by the purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Retrieves an adjusted thumbnail image for the item, determined by the purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Retrieves an adjusted thumbnail image for the item, determined by the purpose of the thumbnail, the requested size, and the specified options. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Gets an object that provides access to the content-related properties of the item. + The object that provides access to the content-related properties of the item. + + + Provides access to methods that get a scaled image as a thumbnail. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail and the requested size. + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + + + Gets a scaled image as a thumbnail, determined by the purpose of the thumbnail, the requested size, and the specified options + When this method completes successfully, it returns a StorageItemThumbnail that represents the thumbnail image or null if there is no thumbnail image associated with the item. + The enum value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to scale the thumbnail image without reducing the quality of the image. If Windows can't find a thumbnail image that it can scale to meet the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Provides access to common and content properties on storage items from a particular provider. + + + Gets the StorageProvider object that contains info about the service that stores the current storage item. + The StorageProvider object that contains info about the service that stores the current storage item. The item may be stored by the local file system or by a remote service like Microsoft SkyDrive. + + + Provides access to the IsAvailable property. + + + Indicates if the file is local, is cached locally, or can be downloaded. + True if the file is local, is cached locally, or can be downloaded. Otherwise, false. + + + Represents a sequential-access output stream that indicates a request for the data stream of a StorageFile that was created by calling CreateStreamedFileAsync or ReplaceWithStreamedFileAsync. + + + Indicates that the data can't be streamed and releases system resources that are exposed by the current stream indicating that the data request is complete. + The enum value that indicates why the data stream can't be accessed. + + + Enables and manages access to the most recently used (MRU) list of storage items, and to the list of storage items that the application has saved for efficient future access. + + + A list of the entries that are in an app's StorageItemMostRecentlyUsedList or StorageItemAccessList. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves the first storage item from the access list or most recently used (MRU) list. + The first item. + + + Retrieves the storage item at the specified index in the access list or most recently used (MRU) list. + The storage item. + The zero-based index of the storage item to retrieve. + + + Retrieves the storage items that start at the specified index in the access list or most recently used (MRU) list. + The number of items retrieved. + The zero-based index of the start of the items in the collection to retrieve. + The items in the collection that start at startIndex. + + + Retrieves the index of the specified storage item in the access list or most recently used (MRU) list. + True if the specified storage item exists in the list; otherwise false. + The storage item. + The zero-based index of the storage item. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the number of storage items in the access list or most recently used (MRU) list. + The number of entries. + + + Provides data about an ItemRemoved event. + + + Gets information about the StorageFile or StorageFolder that was removed from the StorageItemMostRecentlyUsedList. + A structure that contains information about the StorageFile or StorageFolder that was removed. + + + Provides access to lists that an app can use to track recently accessed files and/or locations or to store files and/or locations to access in the future. + + + Gets an object that represents a list that an app maintains so that the app can store files and/or locations (like folders) and easily access these items in the future. + The future-access list object. + + + Gets an object that represents a list that an app can use to track the files and/or locations (like folders) that the app has accessed most recently. + The most recently used (MRU) list object. + + + Represents a list that an app maintains so that the app can store files and/or locations (like folders) and easily access these items in the future. + + + Adds a new storage item to the access list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + + + Adds a new storage item and accompanying metadata to the access list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + Optional metadata to associate with the storage item. + + + Adds a new storage item to the access list, or replaces the specified item if it already exists in the list. + The token associated with the new storage item. If the access list already contains a storage item that has this token, the new item replaces the existing one. + The storage item to add or replace. + + + Adds a new storage item and accompanying metadata to the access list, or replaces the specified item if it already exists in the list. + A token that the app can use later to retrieve this storage item. + The storage item to add or replace. + Optional metadata to associate with the storage item. + + + Determines whether the app has access to the specified storage item in the access list. + True if the app can access the storage item; otherwise false. + The storage item to check for access. + + + Removes all storage items from the access list. + + + Determines whether the access list contains the specified storage item. + True if the access list contains the specified storage item; false otherwise. + The token of the storage item to look for. + + + Gets an object for retrieving storage items from the access list. + The object for retrieving storage items. + + + Retrieves the specified StorageFile from the list. + When this method completes successfully, it returns the StorageFile that is associated with the specified token. + The token of the StorageFile to retrieve. + + + Retrieves the StorageFile from the list using the specified options. + When this method completes successfully, it returns the StorageFile that is associated with the specified token. + The token of the StorageFile to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified StorageFolder from the list. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + + + Retrieves the specified StorageFolder from the list using the specified options. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified item (like a file or folder) from the most recently used (MRU) list. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + + + Retrieves the specified item (like a file or folder) from the list using the specified options. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Gets the maximum number of storage items that the access list can contain. + The maximum number of storage items. + + + Removes the specified storage item from the access list. + The token of the storage item to remove. + + + Represents a list that an app can use to track the files and/or locations (like folders) that the app has accessed most recently. + + + Adds a new storage item to the most recently used (MRU) list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + + + Adds a new storage item and accompanying metadata to the most recently used (MRU) list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + Optional metadata to associate with the storage item. + + + Adds a new storage item to the most recently used (MRU) list, or replaces the specified item if it already exists in the list. + The token associated with the new storage item. If the access list already contains a storage item that has this token, the new item replaces the existing one. + The storage item to add or replace. + + + Adds a new storage item and accompanying metadata to the most recently used (MRU) list, or replaces the specified item if it already exists in the list. + The token associated with the new storage item. If the access list already contains a storage item that has this token, the new item replaces the existing one. + The storage item to add or replace. + Optional metadata to associate with the storage item. + + + Determines whether the app has access to the specified storage item in the most recently used (MRU) list. + True if the app can access the storage item; otherwise false. + The storage item to check for access. + + + Removes all storage items from the most recently used (MRU) list. + + + Determines whether the most recently used (MRU) list contains the specified storage item. + True if the most recently used (MRU) list contains the specified storage item; false otherwise. + The token of the storage item to look for. + + + Gets an object for retrieving storage items from the most recently used (MRU) list. + The object for retrieving storage items. + + + Retrieves the specified storageFile from the most recently used (MRU) list. + When this method completes successfully, it returns the storageFile that is associated with the specified token. + The token of the storageFile to retrieve. + + + Retrieves the specified storageFile from the most recently used (MRU) list using the specified options. + When this method completes successfully, it returns the storageFile that is associated with the specified token. + The token of the storageFile to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified StorageFolder from the most recently used (MRU) list. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + + + Retrieves the specified StorageFolder from the most recently used (MRU) list using the specified options. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified item (like a file or folder) from the most recently used (MRU) list. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + + + Retrieves the specified item (like a file or folder) from the most recently used (MRU) list using the specified options. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Fires when a storage item is removed from the most recently used (MRU) list. + + + Gets the maximum number of storage items that the most recently used (MRU) list can contain. + The maximum number of storage items. + + + Removes the specified storage item from the most recently used (MRU) list. + The token of the storage item to remove. + + + Describes the behavior to use when the app accesses an item in a list. + + + Default.When the app accesses the item, the app retrieves the most current version of the item from any available location and, if necessary, the user can enter additional information. + + + When the app accesses the item, the user is prevented from entering information.For example, if the app accesses a file that is stored using this option and the file normally triggers a request for the user to enter credentials, the request is suppressed. + + + When the app accesses the item, it is retrieved from a fast location like the local file system.For example, if the app accesses a file that is stored using this option and a version of the file is only available remotely, the file will not be accessed. + + + When the app accesses the item, the app retrieves a cached, read-only version of the file. This version of the file might not be the most recent. + + + When the app accesses the item in the StorageItemMostRecentlyUsedList, Windows preserves the item's current position in the most recently used (MRU) and does not update the access time of the item. + + + Represents a list entry that contains the identifier and metadata for a StorageFile or StorageFolder object in a list. + + + The identifier of the StorageFile or StorageFolder in the list. + + + Optional app-specified metadata associated with the StorageFile or StorageFolder in the list. + + + Represents a list of storage items that the app has stored for efficient future access. + + + Adds a new storage item to the access list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + + + Adds a new storage item and accompanying metadata to the access list. + A token that the app can use later to retrieve the storage item. + The storage item to add. + Optional metadata to associate with the storage item. + + + Adds a new storage item to the access list, or replaces the specified item if it already exists in the list. + The token associated with the new storage item. If the access list already contains a storage item that has this token, the new item replaces the existing one. + The storage item to add or replace. + + + Adds a new storage item and accompanying metadata to the access list, or replaces the specified item if it already exists in the list. + The token associated with the new storage item. If the access list already contains a storage item that has this token, the new item replaces the existing one. + The storage item to add or replace. + Optional metadata to associate with the storage item. + + + Determines whether the app has access to the specified storage item in the access list. + True if the app can access the storage item; otherwise false. + The storage item to check for access. + + + Removes all storage items from the access list. + + + Determines whether the access list contains the specified storage item. + True if the access list contains the specified storage item; false otherwise. + The token of the storage item to look for. + + + Gets an object for retrieving storage items from the access list. + The object for retrieving storage items. + + + Retrieves the specified StorageFile from the list. + When this method completes successfully, it returns the StorageFile that is associated with the specified token. + The token of the StorageFile to retrieve. + + + Retrieves the specified StorageFile from the list using the specified options. + When this method completes successfully, it returns the StorageFile that is associated with the specified token. + The token of the StorageFile to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified StorageFolder from the list. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + + + Retrieves the specified StorageFolder from the list using the specified options. + When this method completes successfully, it returns the StorageFolder that is associated with the specified token. + The token of the StorageFolder to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Retrieves the specified item (like a file or folder) from the list. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + + + Retrieves the specified item (like a file or folder) from the list using the specified options. + When this method completes successfully, it returns the item (type IStorageItem) that is associated with the specified token. + The token of the item to retrieve. + The enum value that describes the behavior to use when the app accesses the item. + + + Gets the maximum number of storage items that the access list can contain. + The maximum number of storage items. + + + Removes the specified storage item from the access list. + The token of the storage item to remove. + + + Provides classes for searching, accessing, managing, and retrieving information about files and folders in the storage system. + + + Provides synchronous access to the properties exposed off StorageFile and lets an app perform asynchronous file operations such as copy, delete, move, and rename. + + + Gets the attributes of a file. + The file attributes. + + + Gets an object that contains the basic properties information of the file. + The basic properties object. + + + Gets a string that describes the contents of the file. + The content type string. + + + Replaces the specified StorageFile with a copy of the current file. + No object or value is returned when this method completes. + The StorageFile to be replaced. + + + Creates a copy of the StorageFile and stores it in the specified StorageFolder. + When this method completes successfully, it returns the copy as a StorageFile object. + The folder in which to store the copied file. + + + Creates a copy of the StorageFile, gives it the specified file name, and stores it in the specified StorageFolder. + When this method completes successfully, it returns the copy as a StorageFile object. + The folder in which to store the copied file. + The name of the new copy. + + + Creates a copy of the StorageFile, gives it the specified file name, and stores it in the specified StorageFolder. The method also specifies what to do if a file with the same name already exists in the specified folder. + When this method completes successfully, it returns the copy as a StorageFile object. + The folder in which to store the copied file. + The name of the new copy. + A value that indicates what to do if the file name already exists in the destination folder. + + + Gets the date that the file was created. + The file creation date. + + + Deletes a file. + No object or value is returned when this method completes. + + + Deletes a file, optionally moving the deleted file to the recycle bin. + No object or value is returned when this method completes. + A value that specifies whether the deleted file is moved to the recycle bin. + + + Gets the user-friendly name of the StorageFile. + The user-friendly name of the StorageFile. + + + Gets the display type of the StorageFile. + The display type. + + + Gets an object that provides access to the document properties of the StorageFile, such as the title, author name, and so on. + The document properties. + + + Gets the file type. + The file type. + + + Gets the identifier that uniquely identifies the StorageFile relative to other items in the same folder. + The folder-relative identifier. + + + Retrieves the basic properties of the StorageFile. + When this method completes successfully, it returns a BasicProperties object. + + + Gets the parent folder of the current file. + When this method completes, it returns the parent folder as a StorageFolder. + + + Retrieves the thumbnail that is associated with the StorageFile. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + + + Retrieves the thumbnail that is associated with the StorageFile, scaling it to the specified size. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + The requested size in pixels of thumbnail to retrieve. + + + Retrieves the thumbnail that is associated with the StorageFile, based on the specified options. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + The requested size in pixels of thumbnail to retrieve. + The thumbnail retrieval options. + + + Gets the image properties of the StorageFile, such as the title, rating, date that the image was taken, and so on. + The image properties. + + + Indicates if the current file has been downloaded or can be downloaded. + True if the file has been downloaded or can be downloaded. Otherwise, false. + + + Indicates whether the current file is the same as the specified storage item. + Returns true if the current storage item is the same as the specified storage item; otherwise false. + The IStorageItem object that represents a storage item to compare against. + + + Determines whether the loaded StorageFile is the specified type. + True if the loaded StorageFile is the specified type; otherwise false. + The type of item to check against. + + + Moves the current StorageFile from its location and uses it to replace the specified StorageFile. + An object for managing the asynchronous move and replace operation. + The StorageFile to be replaced. + + + Moves the StorageFile to the specified StorageFolder. + No object or value is returned when this method completes. + The destination folder. + + + Moves the StorageFile to the specified folder, and gives the file the specified file name. + No object or value is returned when this method completes. + The destination folder. + The new file name. + + + Moves the StorageFile to the specified folder and gives it the specified file name. The method also specifies what to do if a file with the same name already exists in the specified folder. + No object or value is returned when this method completes. + The destination folder. + The new file name. + A value that indicates what to do if the file name already exists in the destination folder. + + + Gets the music properties associated with the StorageFile, such as the album name, artist name, bit rate, and so on. + The music properties. + + + Gets the name of the StorageFile. + The name. + + + Opens a random-access stream over the StorageFile. + When this method completes successfully, it returns a random-access stream (type IRandomAccessStream). + The type of access to allow. + + + Opens a read-only, random-access stream over the StorageFile. + When this method completes successfully, it returns a read-only, random-access stream (type IRandomAccessStreamWithContentType). + + + Opens a read-only, sequential-access stream over the StorageFile. + When this method completes successfully, it returns a read-only, sequential-access stream (type IInputStream). + + + Opens a random-access stream to the file that can be used for transacted-write operations. + When this method completes, it returns a StorageStreamTransaction that contains the random-access stream and methods that can be used to complete transactions. + + + Gets the path of the StorageFile. + The path. + + + Gets an object for retrieving the properties of the StorageFile. + An object for retrieving StorageFile properties. + + + Occurs when one or more of the StorageFile's properties is updated. + + + Gets the StorageProvider object that contains info about the service that stores the current file. + The StorageProvider object that contains info about the service that stores the current file. The file may be stored by the local file system or by a remote service like Microsoft SkyDrive. + + + Renames the StorageFile. + No object or value is returned when this method completes. + The new name. + + + Renames the StorageFile, and specifies what to do if a file with the same name already exists in the current folder. + No object or value is returned when this method completes. + The new name. + A value that indicates what to do if the file name already exists in the current folder. + + + Gets the thumbnail associated with the StorageFile. + The thumbnail. + + + Fires when the StorageFile's thumbnail is updated or a better quality thumbnail is available. + + + Gets an object that provides access to the video properties of the StorageFile, such as the duration, rating, date released, and so on. + The video properties. + + + Used to load information about files and folders from the results of a query and to bind these file system items to JavaScript ListView or XAML ListView and GridView controls. After information is loaded, an app can then access that information quickly using synchronous operations. + + + Creates a new FileInformationFactory object that retrieves information about the StorageFile and StorageFolder objects in the specified query result. + The result of a query of files and folders on the system.To learn about query result objects, see StorageFileQueryResult, StorageFolderQueryResult, and StorageItemQueryResult. + A value that indicates the type of thumbnail view to retrieve for the StorageFile and StorageFolder. + + + Creates a new FileInformationFactory object that retrieves information about the StorageFile and StorageFolder objects in the specified query result and that specifies the requested size for thumbnails that are retrieved for the objects. + The result of a query of files and folders on the system.To learn about query result objects, see StorageFileQueryResult, StorageFolderQueryResult, and StorageItemQueryResult. + A value that indicates the type of thumbnail view to retrieve for the StorageFile and StorageFolder. + The requested minimum size, in pixels, of the StorageFile and StorageFolder thumbnails.If thumbnails are not required for IStorageItemInformation objects, set the requestedSize to 0. + + + Creates a new FileInformationFactory object that retrieves information about the StorageFile and StorageFolder objects in the specified query result, and that specifies the requested size and options for thumbnails that are retrieved for the objects. + The result of a query of files and folders on the system.To learn about query result objects, see StorageFileQueryResult, StorageFolderQueryResult, and StorageItemQueryResult. + A value that indicates the type of thumbnail view to retrieve for the StorageFile and StorageFolder. + The requested minimum size, in pixels, of the StorageFile and StorageFolder thumbnails.If thumbnails are not required for IStorageItemInformation objects, set the requestedSize to 0. + The thumbnail retrieval options.If you're using FileInformationFactory with the JavaScript ListView or XAML ListView and GridView controls, don't specify ThumbnailOptions.ReturnOnlyIfCached because this mode may prevent the control from being correctly populated with thumbnails. + + + Creates a new FileInformationFactory object that retrieves information about the StorageFile and StorageFolder objects in the specified query result, specifies the requested size and options for thumbnails that are retrieved for the objects, and indicates whether to delay loading information. + The result of a query of files and folders on the system.To learn about query result objects, see StorageFileQueryResult, StorageFolderQueryResult, and StorageItemQueryResult. + A value that indicates the type of thumbnail view to retrieve for the StorageFile and StorageFolder. + The requested minimum size, in pixels, of the StorageFile and StorageFolder thumbnails.If thumbnails are not required for IStorageItemInformation objects, set the requestedSize to 0. + The thumbnail retrieval options.If you're using FileInformationFactory with the JavaScript ListView or XAML ListView and GridView controls, don't specify ThumbnailOptions.ReturnOnlyIfCached because this mode may prevent the control from being correctly populated with thumbnails. + True to delay loading information; otherwise false. By default, this option is false and delay loading is not used.If delayLoad is true, it authorizes the FileInformationFactory to return IStorageItemInformation objects before thumbnails are available. Subsequently, the system fires a ThumbnailUpdated event when thumbnails become available. Using delay loading is recommended because it makes apps seem more responsive.If delayLoad is false (as it is by default), the system will require more time to retrieve IStorageItemInformation objects, but after the objects are retrieved all cached thumbnails will be accessible synchronously. Thumbnails that are not cached must still be accessed asynchronously in response to the ThumbnailUpdated event. + + + Retrieves a collection of FileInformation objects that contain information about all StorageFile objects in a collection. + When this method completes successfully, it returns the list (type IVectorView) of FileInformation objects. + + + Retrieves a collection of FileInformation objects that contain information about a range of StorageFile objects in a collection. + When this method completes successfully, it returns the list (type IVectorView) of FileInformation objects. + The zero-based index of the first StorageFile in the range. + The maximum number of StorageFile objects to retrieve information for. + + + Retrieves a collection of FolderInformation objects that contain information about all StorageFolder objects in a collection. + When this method completes successfully, it returns the list (type IVectorView) of FolderInformation objects. + + + Retrieves a collection of FolderInformation objects that contain information about a range of StorageFolder objects in a collection. + When this method completes successfully, it returns the list (type IVectorView) of FolderInformation objects. + The zero-based index of the first StorageFolder in the range. + The maximum number of StorageFolder objects to retrieve information for. + + + Retrieves a collection of IStorageItemInformation objects that contain information about all the items in the collection. + When this method completes successfully, it returns the list (type IVectorView) of FileInformation and FolderInformation objects. + + + Retrieves a collection of IStorageItemInformation objects that contain information about a range of items in a collection. + When this method completes successfully, it returns the list (type IVectorView) of FileInformation and FolderInformation objects. + The zero-based index of the first item in the range. + The maximum number of items to retrieve information for. + + + Gets a virtualized vector of IStorageItemInformation objects that can be bound to ListView or GridView controls in C#, C++, and VB. + The virtualized vector of IStorageItemInformation objects. + + + Gets a virtualized vector of IStorageItemInformation objects that can be bound to ListView or GridView controls in C#, C++, and VB. + The virtualized vector of IStorageItemInformation objects. + + + Gets a virtualized vector of IStorageItemInformation objects that can be bound to ListView or GridView controls in C#, C++, and VB. + The virtualized vector of IStorageItemInformation objects. + + + Provides synchronous access to the properties exposed off StorageFolder and lets an app perform asynchronous management operations such as copy, delete, move, and rename. + + + Retrieves a value that indicates whether the folder supports the specified search query options. + True if the folder supports the specified search query options; otherwise false. + The search query options to test. + + + Gets the attributes of a loaded folder. + The folder attributes. + + + Gets an object that contains the basic properties information of the folder. + The basic properties object. + + + Creates a new file in the current folder. + When this method completes successfully, it returns a StorageFile that represents the new file. + The name of the new file. + + + Creates a new file in the current folder, and specifies what to do if a file with the same name already exists in the current folder. + When this method completes successfully, it returns a StorageFile that represents the new file. + The name of the new file. + A value that indicates what to do if the file name already exists in the current folder. + + + Creates an object for performing filtered search queries for StorageFile in the current folder. + An object for managing the search queries and accessing the results. + + + Creates an object for performing filtered search queries for StorageFile objects in the current folder. Search results are grouped based on the specified file attribute. + An object for managing the search queries and accessing the results. + A value that specifies the folder attribute to use to group the search results. + + + Creates an object used to perform filtered search queries for StorageFile objects in the folder. The object is initialized with the specified query options. + An object for managing the search queries and accessing the results. + The initial query options. + + + Creates a new child folder of the current folder. + When this method completes successfully, it returns a StorageFolder that represents the new file. + The name of the new folder. + + + Creates a new child folder of the current folder, and specifies what to do if a folder with the same name already exists in the current folder. + When this method completes successfully, it returns a StorageFolder that represents the new file. + The name of the new folder. + A value that indicates what to do if the child folder already exists in the current folder. + + + Creates an object for performing filtered search queries for child StorageFolder objects of the current folder. + An object for managing the search queries and accessing the results. + + + Creates an object for performing filtered search queries for child StorageFolder objects of the current folder. Search results are grouped based on the specified folder attribute. + An object for managing the search queries and accessing the results. + A value that specifies the folder attribute to use to group the search results. + + + Creates an object used to perform filtered search queries for child StorageFolder objects of the current folder. The object is initialized with the specified query options. + An object for managing the search queries and accessing the results. + The initial query options. + + + Creates an object used to perform filtered search queries for items in the folder. + An object for managing the search queries and accessing the results. + + + Creates an object used to perform filtered search queries for items in the folder. The object is initialized with the specified query options. + An object for managing the search queries and accessing the results. + The initial query options. + + + Gets the date that the folder was created. + The folder creation date. + + + Deletes the current folder. + No object or value is returned when this method completes. + + + Deletes the current folder, optionally moving the deleted folder to the recycle bin. + No object or value is returned when this method completes. + A value that specifies whether to move the deleted folder to the recycle bin. + + + Gets the user-friendly name of the StorageFolder. + The user-friendly name of the StorageFolder. + + + Gets the display type of the StorageFolder. + The display type. + + + Gets the document properties of the StorageFolder. + The document properties. + + + Gets the identifier that uniquely identifies the StorageFolder relative to other items in the same folder. + The folder-relative identifier. + + + Retrieves the basic properties of the StorageFolder object. + When this method completes successfully, it returns a BasicProperties object. + + + Retrieves a file from the current folder. + When this method completes successfully, it returns a StorageFile. + The name of the file to retrieve. + + + Retrieves all files from the current folder. + When this method completes successfully, it returns the list (type IVectorView) of StorageFile objects in the folder. + + + Retrieves files from the current folder based on a common folder query. + When this method completes successfully, it returns the list (type IVectorView) of StorageFile objects in the folder. + The common file query. + + + Retrieves a range of files from the current folder based on a common file query. + When this method completes successfully, it returns the list (type IVectorView) of StorageFile objects in the folder. + The common file query. + The zero-based index of the first file in the range. + The maximum number of files to retrieve. + + + Retrieves the specified child folder from the current folder. + When this method completes successfully, it returns a StorageFolder that represents the specified child folder. + The name of the child folder to retrieve. + + + Retrieves all child folders from the current folder. + When this method completes successfully, it returns the list (type IVectorView) of child folders. Each child folder in this list is represented by a StorageFolder object. + + + Retrieves child folders from the current folder based on a common folder query. + When this method completes successfully, it returns the list (type IVectorView) of child folders. Each child folder in this list is represented by a StorageFolder object. + The common folder query. + + + Retrieves a range of child folders from the current folder based on a common folder query. + When this method completes successfully, it returns the list (type IVectorView) of child folders. Each child folder in this list is represented by a StorageFolder object. + The common folder query. + The zero-based index of the first child folder in the range. + The maximum number of child folders to retrieve. + + + Retrieves the indexed state of the folder. + When this method completes successfully, it returns an IndexedState enumeration value. + + + Retrieves an item from the folder. + When this method completes successfully, it returns the item (type IStorageItem). + The name of the item to retrieve. + + + Retrieves all items from the current folder. + When this method completes successfully, it returns the list (type IVectorView) of items. + + + Retrieves a range of items from the current folder. + When this method completes successfully, it returns the list (type IVectorView) of items. + The zero-based index of the first item in the range. + The maximum number of items to retrieve. + + + Gets the parent folder of the current folder. + When this method completes, it returns the parent folder as a StorageFolder. + + + Retrieves the thumbnail that is associated with the StorageFolder. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + + + Retrieves the thumbnail that is associated with the StorageFolder, scaling it to the specified size. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + The requested size in pixels of thumbnail to retrieve. + + + Retrieves the thumbnail that is associated with the StorageFolder, based on the specified options. + When this method completes successfully, it returns the thumbnail image as a StorageItemThumbnail object. + The thumbnail mode to retrieve. + The requested size in pixels of thumbnail to retrieve. + The thumbnail retrieval options. + + + Gets the image properties of the StorageFolder. + The image properties. + + + Retrieves a value that indicates whether the current folder supports the specified common file query. + True if the folder supports the specified common file query; otherwise false. + The common file query to test. + + + Retrieves a value that indicates whether the current folder supports the specified common folder query. + True if the folder supports the specified common folder query; otherwise false. + The common folder query to test. + + + Indicates whether the current folder is equal to the specified folder. + Returns true if the current folder is equal to the specified folder; otherwise false. + The IStorageItem object that represents the folder to compare against. + + + Determines whether the loaded StorageFolder is the specified type. + True if the loaded StorageFolder is the specified type; otherwise false. + The type of item to check against. + + + Gets the music properties associated with the StorageFolder. + The music properties. + + + Gets the name of the StorageFolder. + The StorageFolder name. + + + Gets the path of the StorageFolder. + The path. + + + Gets an object for retrieving the properties of the StorageFolder. + The object for retrieving StorageFolder properties. + + + Occurs when one or more of the StorageFolder's properties is updated. + + + Gets the StorageProvider object that contains info about the service that stores the current folder. + The StorageProvider object that contains info about the service that stores the current folder. The file may be stored by the local file system or by a remote service like Microsoft SkyDrive. + + + Renames the StorageFolder. + No object or value is returned when this method completes. + The new name. + + + Renames the StorageFolder, and specifies what to do if a folder with the same name already exists. + No object or value is returned when this method completes. + The new name. + A value that indicates what to do if a folder with desiredName already exists. + + + Gets the thumbnail for the StorageFile. + The thumbnail. + + + Fires when the StorageFolder's thumbnail is updated or a better quality thumbnail is available. + + + Try to get a specific file or sub-folder from the current folder using the name of the file or folder to get. + When this method completes successfully, it returns the file or folder (type IStorageItem). + The name (or path relative to the current folder) of the file or sub-folder to try to retrieve. + + + Gets the video properties that are associated with the StorageFolder. + The video properties. + + + Provides synchronous access to the properties of a file or folder in the file system. + + + Gets an object that contains the basic properties information of the item. + The basic properties object. + + + Gets an object that provides access to the document properties of the item, such as the title, author name, and so on. + The document properties. + + + Gets an object that provides access to the image properties of the item, such as the title, rating, date that the image was taken, and so on. + The image properties. + + + Gets an object that provides access to the music properties of the item, such as the album name, artist name, bit rate, and so on. + The music properties. + + + Occurs when one or more of the item's properties is updated. + + + Gets the thumbnail associated with the item. + The thumbnail. + + + Fires when the item's thumbnail is updated or a better quality thumbnail is available. + + + Gets an object that provides access to the video properties of the item, such as the duration, rating, date released, and so on. + The video properties. + + + Provides a unified interface to the compression features included in Windows that frees developers from responsibility for managing block sizes, compression parameters, and other details that the native compression API requires. + + + Identifies a compression algorithm to use when creating an instance of a compressor. + + + This value represents an invalid compression algorithm. It is useful primarily for error checking. + + + This value represents an algorithm that passes data through with no compression. It is useful primarily for testing. + + + The compressor will use the MSZIP compression algorithm. + + + The compressor will use the XPRESS compression algorithm. + + + The compressor will use the XPRESS compression algorithm with Huffman encoding. + + + The compressor will use the LZMS compression algorithm. + + + A compressor takes information written to a stream and compresses it using a compression algorithm. + + + Finishes writing the compression stream. + The asynchronous operation. + + + Detaches the underlying stream from the Compressor object so that the object can be closed using the Compressor.Close method without also closing the underlying stream. + The stream of information. + + + Writes information to the compression stream asynchronously. + The asynchronous operation. + The buffer that contains the information to be written to the stream. + + + Flushes the compression stream asynchronously. + The asynchronous operation. + + + Closes a Compressor object and synchronously discards any information in buffers. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Creates an instance of a compressor. + The stream of compressed information to be written by the compressor. + + + Creates an instance of a compressor. + The stream of compressed information to be written by the compressor. + The compression algorithm used by the compressor to write underlyingStream. + Size in bytes of the intermediate buffer used by the compression algorithm. A value of 0 specifies that the compression algorithm will use its default block size. Valid non-zero values for this parameter are 32Kb to 64Mb. + + + A decompressor takes a stream compressed by a compressor and decompresses it. + + + Detaches the underlying stream from the Decompressor object so that the object can be closed using the Decompressor.Close method without also closing the underlying stream. + The stream of information. + + + Reads from the compression stream asynchronously. + The asynchronous operation. + The buffer that contains the information to be read from the stream. + The number of bytes to read. + Read options + + + Closes a Decompressor object and synchronously discards any information in buffers. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + This method creates an instance of a decompressor. + The stream of compressed information to be read and decompressed by the decompressor. + + + Provides access to the properties of a file. + + + Provides access to the basic properties, like the size of the item or the date the item was last modified, of the item (like a file or folder). + + + Gets the timestamp of the last time the file was modified. + The timestamp. + + + Gets the most relevant date for the item. + The item's date. The system determines the most relevant date based on the type of the item. For example, if the item is a photo the date in System.Photo.DateTaken is returned. Or if the item is a song the date in System.Media.DateReleased is returned. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Gets the size of the file. + The size of the file. + + + Provides access to the document-related properties of an item (like a file or folder). + + + Gets the name of the document author. + The name of the document author. + + + Gets or sets the comments associated with the document. + The comments. + + + Gets the collection of keywords associated with the document. + The collection of keywords. + + + Retrieves the specified properties associated with the item. + An object for managing the asynchronous property retrieval operation. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Gets or sets the title of the document. + The document title. + + + Provides access to the image-related properties of an item (like a file or folder). + + + Gets or sets the manufacturer of the camera that took the photo. + The manufacturer of the camera that took the photo. + + + Gets or sets the model of the camera that took the photo. + The model of the camera that took the photo. + + + Gets or sets the date when the image was taken. + The date when the image was taken. + + + Gets the height of the image. + The height of the image, in pixels. + + + Gets the collection of keywords associated with the image. + The collection of keywords. + + + Gets the latitude coordinate where the photo was taken. + The latitude coordinate where the photo was taken. The system computes this coordinate using the following file properties: System.GPS.Latitude System.GPS.LatitudeDenominator System.GPS.LatitudeNumerator System.GPS.LatitudeRef + + + Gets the longitude coordinate where the photo was taken. + The longitude coordinate where the photo was taken. The system computes this coordinate using the following file properties: System.GPS.Longitude System.GPS.LongitudeDenominator System.GPS.LongitudeNumerator System.GPS.LongitudeRef + + + Gets the Exchangeable Image File (EXIF) orientation flag of the photo. + The photo's Exchangeable Image File (EXIF) orientation flag. + + + Gets the names of people who are tagged in the photo. + A list of the names of people who are tagged in the photo. + + + Gets the rating associated with the image. + The rating. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Gets or sets the title of the image. + The image title. + + + Gets the width of the image. + The width of the image, in pixels. + + + Provides access to the music-related properties of an item (like a file or folder). + + + Gets or sets the name of the album that contains the song. + The album name. + + + Gets or sets the name of the album artist of the song. + The name of the song's album artist. + + + Gets the artists that contributed to the song or sets the album artist. + The names of the song's artists. + + + Gets the bit rate of the song file. + The bit rate, in bits per second. + + + Gets the composers of the song. + A list of the names of the song's composers. + + + Gets the conductors of the song. + A list of the names of the song's conductors. + + + Gets the duration of the song in milliseconds. + The duration in milliseconds. + + + Gets the names of music genres that the song belongs to. + The collection of music genre names. + + + Gets the producers of the song. + A list of the names of the song's producers. + + + Gets or sets the publisher of the song. + The name of the song's publisher. + + + Gets the rating associated with the song. + The rating. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Gets or sets the subtitle of the song. + The song's subtitle. + + + Gets or sets the title of the song + The song title. + + + Gets or sets the track number of the song on the song's album. + The track number. + + + Gets the songwriters. + A list of the names of the songwriters. + + + Gets or sets the year that the song was released. + The song's release year. + + + Provides access to the content-related properties of an item (like a file or folder). + + + Retrieves the document properties of the item (like a file of folder). + When this method completes successfully, it returns a documentProperties object. + + + Retrieves the image properties of the item (like a file of folder). + When this method completes successfully, it returns an imageProperties object. + + + Retrieves the music properties of the item (like a file of folder). + When this method completes successfully, it returns a musicProperties object. + + + Retrieves the video properties of the item (like a file of folder). + When this method completes successfully, it returns a videoProperties object. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Represents the thumbnail image associated with a system resource (like a file or folder). + + + Gets a value that indicates whether the thumbnail stream can be read from. + True if the thumbnail stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the thumbnail stream can be written to. + True if the thumbnail stream can be written to. Otherwise, false. + + + Creates a new stream over the thumbnail that is represented by the current storageItemThumbnail object. + The new thumbnail stream. The initial, internal position of the stream is 0. The internal position and lifetime of this new thumbnail stream are independent from the position and lifetime of the cloned stream. + + + Releases system resources that are exposed by a Windows Runtime object. + + + Gets the MIME content type of the thumbnail image. + The MIME content type. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Retrieves the thumbnail image data as an undecoded stream. + An object for reading the thumbnail image data. + The position in the storage item to start reading thumbnail image data. + + + Retrieves an output stream object for writing thumbnail image data to a storage item. + The output stream. + The position in the storage item to start writing thumbnail image data. + + + Gets the original (not scaled) height of the thumbnail image. + The original height, in pixels. + + + Gets the original (not scaled) width of the thumbnail image. + The original width, in pixels. + + + Gets the byte offset of the thumbnail stream. + The number of bytes from the start of the thumbnail stream. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Gets a value that indicates whether the thumbnail image returned was a cached version with a smaller size. + The value that indicates whether the thumbnail image returned was a cached version with a smaller size. + + + Sets the offset of the thumbnail stream to the specified value. + The number of bytes from the start of the thumbnail stream where the position of the thumbnail stream is set. + + + Gets or sets the size of the thumbnail image. + The size, in bytes, of the thumbnail image. + + + Gets a value that indicates if the thumbnail is an icon or an image. + The value that indicates if the thumbnail is an icon or an image. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Provides access to the video-related properties of an item (like a file or folder). + + + Gets the sum audio and video bitrate of the video. + The video's sum audio and video bitrate. + + + Gets the directors of the video. + A list of the names of the video's directors. + + + Gets the duration of the video. + The duration. + + + Gets the height of the video. + The height of the video, in pixels. + + + Gets the collection of keywords associated with the video. + The collection of keywords. + + + Gets the latitude coordinate where the video was shot. + The latitude coordinate where the video was shot. The system computes this coordinate using the following file properties: System.GPS.Latitude System.GPS.LatitudeDenominator System.GPS.LatitudeNumerator System.GPS.LatitudeRef + + + Gets the longitude coordinate where the video was shot. + The longitude coordinate where the photo was taken. The system computes this coordinate using the following file properties: System.GPS.Longitude System.GPS.LongitudeDenominator System.GPS.LongitudeNumerator System.GPS.LongitudeRef + + + Gets a VideoOrientation value that indicates how the video should be rotated to display it correctly. + The value that indicates how the video should be rotated to display it correctly. + + + Gets the producers of the video. + A list of the names of the video's producers. + + + Gets or sets the publisher of the video. + The name of the video's publisher. + + + Gets the rating associated with the video. + The rating. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + No object or value is returned when this method completes. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Gets or sets the subtitle of the video. + The video's subtitle. + + + Gets or sets the title of the video. + The video's title. + + + Gets the width of the video. + The width of the video, in pixels. + + + Gets the script writers for the video. + A list of the names of the video's script writers. + + + Gets or sets the year that the video was shot or released. + The video's release year. + + + Indicates the Exchangeable Image File (EXIF) orientation flag of the photo. This flag describes how to rotate the photo to display it correctly. + + + An orientation flag is not set. + + + No rotation needed. The photo can be displayed using its current orientation. + + + Flip the photo horizontally. + + + Rotate the photo counter-clockwise 180 degrees. + + + Flip the photo vertically. + + + Rotate the photo counter-clockwise 90 degrees and then flip it horizontally. + + + Rotate the photo counter-clockwise 270 degrees. + + + Rotate the photo counter-clockwise 270 degrees and then flip it horizontally. + + + Rotate the photo 90 degrees. + + + Indicates a system-defined group of file properties. + + + No specific, system-defined property group. + + + A group of music-related properties that can be access through a MusicProperties object. + + + A group of video-related properties that can be access through a VideoProperties object. + + + A group of image-related properties that can be access through a ImageProperties object. + + + A group of document-related properties that can be access through a DocumentProperties object. + + + A group of basic properties that can be access through a BasicProperties object. + + + Describes the purpose of the thumbnail to determine how to adjust the thumbnail image to retrieve. + + + To display previews of picture files. Default, preferred size: Medium, preferably at least 190 pixels (if the image size is 190 x 130) Aspect ratio: Uniform, wide aspect ratio of about .7 (190 x 130 if the preferred size is 190) + + + To display previews of video files. Default, preferred size: Medium, preferably at least 190 pixels (if the video size is 190 x 130) Aspect ratio: Uniform, wide aspect ratio of about .7 (190 x 130 if the requested size is 190) + + + To display previews of music files. Default, preferred size: Small, preferably at least 40 x 40 pixels Aspect ratio: Uniform, square aspect ratio + + + To display previews of document files. Default, preferred size: Small, preferably at least 40 x 40 pixels Aspect ratio: Uniform, square aspect ratio + + + To display previews of files (or other items) in a list. Default, preferred size: Small, preferably at least 40 x 40 pixels Aspect ratio: Uniform, square aspect ratio + + + To display a preview of any single item (like a file, folder, or file group). Default, preferred size: Large, at least 256 pixels on the longest side Aspect ratio: Variable, uses the original aspect ratio of the file + + + Describes the behavior used to retrieve and adjust thumbnails, including the size and quality of the image and how quickly the thumbnail image is retrieved. + + + No options. + + + Retrieve a thumbnail only if it is cached or embedded in the file. + + + Scale the thumbnail to the requested size. + + + Default. Increase requested size based on the Pixels Per Inch (PPI) of the display. + + + Indicates whether the thumbnail is an icon or an image. + + + The thumbnail is an image. + + + The thumbnail is an icon. + + + Indicates how to rotate the video to display it correctly. + + + No rotation needed. The video can be displayed using its current orientation. + + + Rotate the video 90 degrees. + + + Rotate the video counter-clockwise 180 degrees. + + + Rotate the video counter-clockwise 270 degrees. + + + Saves and retrieves the properties of a storage item. + + + Retrieves the specified properties associated with the item. + When this method completes successfully, it returns a collection (type IMap) that contains the specified properties and values as key-value pairs. + A collection that contains the names of the properties to retrieve. + + + Saves all properties associated with the item. + An object for managing the asynchronous save operation. + + + Saves the specified properties and values associated with the item. + No object or value is returned when this method completes. + A collection that contains the names and values of the properties to save as key-value pairs (type IKeyValuePair). + + + Provides classes for creating and managing user interface (UI) elements that let the user browse files, choose files to open, and to choose the name, extension, and location when storing files. + + + Represents a random-access collection of file name extensions. + + + Adds a new item to the collection. + The new item to add. + + + Appends a file name extension to the end of the collection. + The file name extension to append. + + + Removes all file name extensions from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator that iterates through the file name extensions in the collection. + The iterator. + + + Retrieves the file name extension at the specified index in the collection. + The file name extension at the specified index. + The zero-based index of the file name extension to retrieve. + + + Retrieves the file name extensions that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the file name extensions in the collection to retrieve. + The file name extensions in the collection that start at startIndex. + + + Retrieves an immutable view of the collection of file name extensions. + The view of the collection. + + + Retrieves the index of a specified file name extension in the collection. + True if the file name extension is found; otherwise FALSE. + The file name extension to find in the collection. + The zero-based index of the file name extension if found. This parameter is set to zero if the file name extension is not found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts a file name extension into a collection at a specified index. + Zero-based index of the location at which to insert the file name extension. + The file name extension to insert. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + True if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the file name extension at the specified index in the collection. + The zero-based index of the file name extension to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last file name extension from the collection. + + + Replaces all file name extensions in the collection with the specified file name extensions. + The collection of file name extensions to put in the vector. + + + Sets the file name extension at the specified index of the collection. + The zero-based index of the location at which to set the file name extension. + The file name extension. + + + Gets the number of file name extensions in the collection. + The number of file name extensions. + + + Represents a UI element that lets the user choose and open files. + + + Gets or sets the label text of the file open picker's commit button. + The label text. + + + Creates a new instance of a FileOpenPicker. + + + Gets the collection of file types that the file open picker displays. + A fileExtensionVector object that contains a collection of file types (file name extensions) , such as .doc and .png. File name extensions are stored in this array as string objects. + + + Shows the file picker so that the user can pick multiple files. + When the call to this method completes successfully, it returns a filePickerSelectedFilesArray object that contains all the files that were picked by the user. Picked files in this array are represented by storageFile objects. + + + Shows the file picker so that the user can pick one file. + When the call to this method completes successfully, it returns a StorageFile object that represents the file that the user picked. + + + Windows Phone only. Shows the file picker so that the user can pick one file. + When the call to this method completes successfully, it returns a StorageFile object that represents the file that the user picked. + + + Gets or sets the settings identifier associated with the state of the file open picker. + The settings identifier. + + + Gets or sets the initial location where the file open picker looks for files to present to the user. + The identifier of the starting location. + + + Gets or sets the view mode that the file open picker uses to display items. + The view mode. + + + Represents a collection of display names mapped to the associated file types (extensions). + + + Adds an item to the FilePickerFileTypesOrderedMap. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the FilePickerFileTypesOrderedMap. + The key-value pair to add. + + + Removes all display names and associated file name extensions from the collection. + + + Returns a value that indicates whether a specified key-value pair exists in the FilePickerFileTypesOrderedMap. + true if an item with that key exists in the FilePickerFileTypesOrderedMap; otherwise, false. + The key-value pair to check for in the FilePickerFileTypesOrderedMap. + + + Returns a value that indicates whether a specified key exists in the FilePickerFileTypesOrderedMap. + true if an item with that key exists in the FilePickerFileTypesOrderedMap; otherwise, false. + The key to check for in the FilePickerFileTypesOrderedMap. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator that iterates through the display names and associated file types in the collection. + The iterator. + + + Returns an immutable view of the collection of display names and associated file types. + The view of the collection. + + + Determines whether the mapped collection of display names and associated file types contains the specified key. + True if the key is found; otherwise, false. + The key. + + + Inserts or replaces an item in the mapped collection of display names and associated file types. + True if an item with the specified key is an existing item and was replaced; otherwise false. + The key associated with the item to insert. + The item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the FilePickerFileTypesOrderedMap. + The ICollection of all keys in this FilePickerFileTypesOrderedMap. + + + Returns the item at the specified key in the mapped collection of display names and associated file types. + The item associated with the specified key. + The key to use to locate the item. + + + Removes an item from the mapped collection of display names and associated file types. + The key associated with the item to remove. + + + Removes a specific item from the FilePickerFileTypesOrderedMap. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the FilePickerFileTypesOrderedMap. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of items in the mapped collection of display names and associated file types. + The number of items in the mapped collection. + + + Returns a value that indicates whether a specified key exists in the FilePickerFileTypesOrderedMap. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the FilePickerFileTypesOrderedMap; otherwise, false. + The key to check for in the FilePickerFileTypesOrderedMap. + The item, if it exists. Contains null if the item does not exist in the FilePickerFileTypesOrderedMap. + + + Gets an ICollection object containing the values of the FilePickerFileTypesOrderedMap . + The ICollection of all values in this FilePickerFileTypesOrderedMap. + + + Represents a collection of storage files that the user has selected by using a file picker. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator that iterates through the collection of StorageFile objects that represent selected files. + The iterator. + + + Returns the StorageFile object at the specified index in the collection. + The object at the specified index. + The zero-based index of the object to retrieve. + + + Retrieves the StorageFile objects that start at the specified index in the collection. + The number of items returned. + The zero-based index of the start of the objects in the collection to return. + The items in the collection that start at startIndex. + + + Retrieves the index of a specified StorageFile object in the collection. + True if the object is found; otherwise false. + The object to find in the collection. + The zero-based index of the object if found. Zero is returned if the object is not found. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the number of StorageFile objects in the collection. + The number of StorageFile objects in the collection. + + + Represents a file picker that lets the user choose the file name, extension, and storage location for a file. + + + Gets or sets the label text of the commit button in the file picker UI. + The label text. + + + Gets or sets the default file name extension that the fileSavePicker gives to files to be saved. + The default file name extension. + + + Creates a new instance of a FileSavePicker. + + + Gets the collection of valid file types that the user can choose to assign to a file. + A filePickerFileTypesOrderedMap object that contains a collection of valid file types (extensions) that the user can use to save a file. Each element in this collection maps a display name to a corresponding collection of file name extensions. + + + Shows the file picker so that the user can save a file and set the file name, extension, and location of the file to be saved. + When the call to this method completes successfully, it returns a storageFile object that was created to represent the saved file. The file name, extension, and location of this storageFile match those specified by the user, but the file has no content.To save the content of the file, your app must write the content to this storageFile. + + + Gets or sets the settings identifier associated with the current FileSavePicker instance. + The settings identifier. + + + Gets or sets the file name that the file save picker suggests to the user. + The initial suggested file name. + + + Gets or sets the storageFile that the file picker suggests to the user for saving a file. + The suggested storage file object to save. + + + Gets or sets the location that the file save picker suggests to the user as the location to save a file. + The initial suggested location for saving a file. + + + Represents a UI element that lets the user choose folders. + + + Gets or sets the label text of the folder picker's commit button. + The label text. + + + Gets the collection of file types that the folder picker displays. + A FileExtensionVector object that contains a collection of file types (file name extensions) , such as .doc and .png. File name extensions are stored in this array as string objects. + + + Creates a new instance of a FolderPicker. + + + Shows the folderPicker object so that the user can pick a folder. + When the call to this method completes successfully, it returns a storageFolder object that represents the folder that the user picked. + + + Gets or sets the settings identifier associated with the with the current FolderPicker instance. + The settings identifier. + + + Gets or sets the initial location where the folder picker looks for folders to present to the user. + The identifier of the starting location. + + + Gets or sets the view mode that the folder picker uses to display items. + The view mode. + + + Identifies the storage location that the file picker presents to the user. + + + The Documents library. + + + The Computer folder. + + + The Windows desktop. + + + The Downloads folder. + + + The HomeGroup. + + + The Music library. + + + The Pictures library. + + + The Videos library. + + + Indicates the view mode that the file picker is using to present items. + + + A list of items. + + + A set of thumbnail images. + + + Provides support for apps that offer files through the file picker by participating in the File Open Picker contract, and for apps that act as a save location for files through file picker by participating in the File Save Picker contract or the Cached File Updater contract. + + + Used to interact with the file picker if your app provides files with the File Open Picker contract. + + + Adds the specified file to the list of files that the user has chosen. + The enumeration value that indicates the result of this addFile method. + A unique identifier of the file to add. + The file to add to the list of files that the user has chosen. + + + Gets a list of file types (extensions) that the user can choose. + The list of allowed file types. + + + Indicates whether the specified file can be added to the list of files the user has chosen. + True if the file can be added to the file picker UI; otherwise false. + The file to test. + + + Determines whether the specified file is in the list of files that the user has chosen. + True if the file is in the basket; otherwise false. + The identifier of the file. + + + Fires when the user closes the file picker + + + Fires when the user removes a file from the list of files that the user has chosen if that file was added by the app that is providing files. + + + Removes the specified file from the list of files the user has chosen. + The identifier of the file to remove. + + + Gets an enumeration value that indicates whether the file picker currently limits selection to single files, or if multiple files can be selected. + The enumeration value that indicates the current selection mode. + + + Gets an identifier for the current context of the file picker. + The identifier for the current context of the file picker. + + + Gets or sets a title to display in the file picker UI that identifies the location that the file picker is displaying to the user. + The title to display in the file picker UI. This title should identify the location and type of files that the user can see on the app page (which is hosted by the file picker) of the app that is providing files. + + + Provides information about a fileremoved event. + + + Gets the identifier of the file that the user removed from the list of chosen files in the file picker. This identifier was set by the providing app when it added the files to the list of chosen files. + The identifier of the file. + + + Used to interact with the file picker when your app provides a save location with the File Save Picker contract. + + + Gets a list of file types (extensions) that can be saved to the app that is providing the save location. + The list of file types that can be saved. + + + Gets the full file name of the file to save, including the file type extension. The file name and extension are specified by the user. + The full file name, including the file type extension. + + + Fired when the user changes the file name in the file name text box or changes the extension in the file type drop-down menu. + + + Gets an identifier for the current context of the file picker. + The identifier for the current context of the file picker. + + + Fires when the user commits a file to be saved in the file picker. + + + Gets or sets a title to display in the file picker UI that identifies the location that the file picker is displaying to the user. + The title to display in the file picker UI. This title should identify the location and type of files that the user can see on the app page (which is hosted by the file picker) of the app that is providing files. + + + Tries to set the file name and extension in the file picker UI. + The enumeration value that indicates whether the file name and extension were updated in the file picker UI . + The file name and extension that are used to update the file name text box and file type drop-down menu in the file picker UI. + + + Use by an app that provides files to indicate asynchronously that the app is finished responding to a closing event. + + + Signals that the app providing files has finished responding to a closing event. + + + Provides information about a closing event. + + + Gets a pickerClosingOperation object that is used to respond to a closing event. + The pickerClosingOperation object that is used to respond to a closing event. + + + Gets a value that indicates whether the file picker is closing because the user cancelled it. + True if the file picker was cancelled by the user. Otherwise, false. + + + Lets an app that provides files get the deadline for responding to a closing event and get a deferral so the app can respond to the event asynchronously. + + + Gets a dateTime object that indicates when the system will shut down the app that is providing files through the file picker without further notice. + The dateTime object that indicates when the system will shut down the app. + + + Gets a pickerClosingDeferral that the app providing files through the file picker can use to respond asynchronously to a closing event. + The pickerClosingDeferral that the app providing files through the file picker can use to respond asynchronously to a closing event. + + + Lets an app that provides a save location specify the storageFile that represents the file to save and get a deferral so the app can respond asynchronously to a targetFileRequested event. + + + Gets a targetFileRequestDeferral that the app providing the save location can use to respond asynchronously to a targetfilerequested event. + The targetFileRequestDeferral that the providing app can use asynchronously to indicate that it is finished responding to a targetfilerequested event. + + + Gets or sets the IStorageFile object that is provided to represent the file to save by the app that is providing the save location . + The object that represents the file to save. The app that called the file picker in order to save will write content to this file. + + + Used by an app that provides a save location to indicate asynchronously that the app is finished responding to a targetfilerequested event. + + + Signals that the app providing the save location finished responding to a targetfilerequested event. + + + Provides information about a targetfilerequested event. + + + Gets a targetFileRequest object that is used to respond to a targetfilerequested event. + The targetFileRequest object that is used to respond to a targetfilerequested event. + + + Indicates the result of a call to the fileOpenPickerUI.addFile method. + + + The file was successfully added to the file picker UI. + + + The file was already in the file picker UI. + + + The file wasn't added because it is not one of the allowed file types. + + + The file wasn't added because the file picker UI is unavailable. The file picker UI is only available while the user is interacting with your app. + + + Indicates whether the file picker currently limits selection to single files, or if multiple files can be selected. + + + Only a single file can be selected. + + + Multiple files can be selected. + + + Indicates the result of a call to the fileSavePickerUI.trySetFileName method. + + + The file name and extension were updated successfully. + + + The file name and extension were not updated because the extension wasn't one of the allowedFileTypes. + + + The file name and extension were not updated because the file picker UI wasn't available. The file picker UI is only available while the user is interacting with your app. + + + Lets apps to provide real-time updates to files through the Cached File Updater contract. + + + Manages files so that they can be updated in real-time by an app that participates in the Cached File Updater contract. + + + Configures update policies for a local file. + The local file. + A unique identifier for the local file. You can use this identifier to associate a file in your app's repository with the local file. When updates are requested by Windows, you can use this contentId to identify the correct file in your app's repository. + A value that specifies whether Windows will request updates before the local file is read by other apps. + A value that specifies whether other apps can write to the local file and, if so, whether Windows will request updates after the local file is written. + A value that specifies additional circumstances and behaviors for when Windows requests updates. For example, you could require Windows to request an update every time the local file is accessed by using CachedFileOptions.RequireUpdateOnAccess. For more information about possible options, see CachedFileOptions. + + + Used to interact with the file picker if your app provides file updates through the Cached File Updater contract. + + + Gets or sets the title to display in the top-left the file picker UI. The title identifies the location or context of the app's page (which is hosted in the file picker UI) for the user. + The title to display in the top-left of the file picker UI. + + + Gets a value that indicates which version of the file needs to be updated: the local version or the version in the app's repository. + An enum value that indicates which version of the file needs to be updated: the local version or the version in the app's repository. + + + Fires when the Windows requests a file update. + + + Fires when the calling app needs to display the file picker letterbox UI that is represented by the CachedFileUpdaterUI object. + + + Gets an enum value that indicates the status of the file picker UI. + The UIStatus value that indicates the status of the file picker UI. + + + Provides information about a requested file update so that the app can complete the request. + + + Gets the unique identifier used to associate the local version of a file with the corresponding remote version. + The identifier that was specified by the app and is associated with the local file. + + + Gets a StorageFile object that represents the locally cached copy of the file to update. + The StorageFile object that represents the locally cached copy of the file to update. + + + Gets or sets the status of the update. This property is set in response to a FileUpdateRequested event. + An enum value that indicates the status of the update. + + + Gets an object used to complete an update asynchronously. + The object that the app uses to indicate, asynchronously, that it has finished responding to a FileUpdateRequested event and that the Request is complete. + + + Provide a new version of the local file to represent the remote file. + The new version of the local file that will represent remote file. This file can be different from the original local file that was associated with the FileUpdateRequest.ContentId. + + + Use to complete an update asynchronously. + + + Signals that the response to a FileUpdateRequested event is finished. + + + Provides information about a FileUpdateRequested event. + + + Gets the details of the requested file update. + The details of the requested file update. + + + Describes when Windows will request an update to a file. + + + Another app may be able to access the locally cached copy of the file without triggering an update. + + + An update always triggers when another app accesses the locally cached copy of the file. + + + An update triggers when another app accesses the locally cached copy of the file if a network connection is available. Otherwise, other apps can access the local file without triggering an update. + + + An update triggers when another app accesses the locally cached copy of the file if a network connection is available. Otherwise, other apps are denied access to the local file. + + + Indicates whether updates should be applied to the locally cached copy or the remote version of the file. + + + Update the locally cached copy of the file. + + + Update the remote version of the file. + + + Describes the status of a file update request. + + + The file update was not fully completed and should be retried. + + + The file update was completed successfully. + + + User input (like credentials) is needed to update the file. + + + The remote version of the file was not updated because the storage location wasn't available. The file remains valid and subsequent updates to the file may succeed. + + + The file is now invalid and can't be updated now or in the future. For example, this could occur if the remote version of the file was deleted. + + + The file update was completed successfully and the file has been renamed. For example, this could occur if the user chose to save their changes under a different file name because of conflicting changes made to the remote version of the file. + + + Indicates when Windows will request a file update if another app reads the locally cached version of the file. + + + Windows will not trigger a file update request when another app accesses the local file. + + + Windows will trigger a file update request before allowing another app to access the local file. + + + Indicates the status of the file picker UI. + + + The file picker is not showing UI and UI can't be requested. If the app that provides updates requests UI by completing its response to a FileUpdateRequested event and setting the FileUpdateRequest.Status to FileUpdateStatus.UserInputNeeded, the app will be closed immediately and the failure may be reported to the app that triggered the updates. + + + The file picker is not showing UI, but UI can be requested. If the app that provides updates requests UI by completing its response to a FileUpdateRequested event and setting the FileUpdateRequest.Status to FileUpdateStatus.UserInputNeeded, a UIRequested event will fire to indicate that UI will display immediately, and a new FileUpdateRequested event will fire (for the same file) so that the app can get the user's input and complete the request successfully. + + + The file picker is currently showing UI because UI was requested by the app. + + + The file picker is currently showing UI and all This indicates that UI is presently being shown, and that the app has finished responding to all FileUpdateRequested events. + + + Indicates whether other apps can write to the locally cached version of the file and when Windows will request an update if another app writes to that local file. + + + Other apps can't write to the local file. + + + Windows will trigger a file update request when another app writes to the local file. + + + Windows will trigger a file update request after another app writes to the local file. + + + Provides classes for enumerating content in storage and performing Advanced Query Syntax (AQS) searches on the content. + + + Specifies whether the query is shallow or deep and the sorting criteria to use to group files into folders in the query results. + + + A shallow view of the folders in the queried folder, similar to the view that Windows Explorer provides. This option is valid with any location. + + + Group files into virtual folders by year based on the System.ItemDate property of each file. Each folder will contain all (and only) files that have values for System.ItemDate within the same year. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders by month based on the System.ItemDate property of each file. Each resulting folder will contain all (and only) files that have values for System.ItemDate within the same month. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Music.Artistproperty of each file. Each resulting folder will contain all (and only) files with identical values for System.Music.Artist. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders by year based on the System.Music.AlbumTitle property of each file. Each resulting folder will contain all (and only) files with identical values for System.Music.AlbumTitle. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Music.AlbumArtist property of each file. Each resulting folder will contain all (and only) files with identical values for System.Music.AlbumArtist. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Music.Composer property of each file. Each resulting folder will represent one composer, and contain all files whose System.Music.Composer vector contains that composer. If a file lists multiple composers, it may appear in more than one of the resulting folders. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Music.Genre property of each file. Each resulting folder will contain all (and only) files with identical values for System.Music.Genre. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders by year based on the System.Media.Year property of each file. Each resulting folder will contain all (and only) files that have values for System.Media.Year within the same year. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders by rating (1 star, 2 stars, and so on) based on the System.Rating property of each file. Each resulting folder will contain all (and only) files with identical values for System.Rating. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Keywords property of each file. Each resulting folder will represent one tag, and contain all files whose System.Keywords vector contains that tag. If a file lists multiple tags in its System.Keywords vector, it may appear in more than one of the resulting folders. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders based on the System.Author property of each file. Each resulting folder will represent one author, and contain all files whose System.Author vector contains that author. If a file lists multiple authors, it may appear in more than one of the resulting folders. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Group files into virtual folders by type (Microsoft Word documents, text files, and so on) based on the System.ItemTypeText property of each file. This option only works if the folder being queried is in a library or the HomeGroup folder. + + + Enables Windows Store app to place content properties in the system index. + + + Adds app-defined items with properties and content to the system index. + The content properties to index. + + + Builds a query with the specified search filter, sort order, filter language, and identifies which properties to retrieve. + The query. + The Advanced Query Syntax (AQS) filter to apply. + The properties to retrieve, specified by their Windows canonical property names. + The sort order for the filtered results. + The language that's used to parse Advanced Query Syntax (AQS), specified as a BCP-47 language tag. + + + Builds a query with the specified search filter, sort order, and identifies which properties to retrieve. + The query. + The Advanced Query Syntax (AQS) filter. + The properties to retrieve, specified by their Windows canonical property names. + The sort order for the filtered results. + + + Builds a query with the specified search filter and identifies which properties to retrieve. + The query. + The Advanced Query Syntax (AQS) filter to apply. + The properties to retrieve, specified by their Windows canonical property names. + + + Removes all app-defined items from the ContentIndexer. + + + Removes the specified app-defined item from the ContentIndexer. + The identifier of the item to remove. + + + Removes the specified app-defined items from the ContentIndexer. + The identifier of the item to remove. + + + Gets the per-app index with the specified name or creates a new one, if necessary. + The index. + The index name. + + + Gets an existing per-app index or creates a new one, if necessary. + The index. + + + Gets content properties based on the given content identifier. + When this method completes, it returns the retrieved properties as a map of key-value pairs. + The identifier for the content properties. + The retrieved properties, based on contentId. + + + Gets the version of the ContentIndexer. + The revision number. + + + Updates app content and properties in the ContentIndexer. + The content properties to update. + + + Represents a query for content properties in the ContentIndexer. + + + Runs the query on the app's indexed content properties. + When this method completes, it returns the query results, represented as a collection of IIndexableContent instances. + + + Runs the query on the app's indexed content properties and returns the specified number of items from the specified start index in the results collection. + When this method completes, it returns the query results, represented as a collection of IndexableContent instances. + The index of the first item to get from the results collection. + The maximum number of items to get. + + + Gets the number of items in the search results. + When this method completes, it returns the number of items in the search results. + + + Retrieves a collection of property sets for an app, where the property sets are key-value pairs. + When this method completes, it returns the query results as a collection of PropertyValue instances. + + + Runs the query on the app's indexed content properties and returns the specified number of properties from the specified start index in the results collection. + When this method completes, it returns the query results as a collection of PropertyValue instances. + The index of the first item to get from the results collection. + The maximum number of items to get. + + + Gets the StorageFolder representation of the app-provided items in the ContentIndexer query. + The folder that contains app-provided content. + + + Indicates the unit of time used to group files into folders if a CommonFolderQuery based on date is used to create a QueryOptions object. + + + The query options are not based on the date. + + + The content is grouped by year. + + + The content is grouped by month. + + + Indicates whether all files and subfolders of the folder being queried will be enumerated or if only the top-level files and subfolders will be enumerated. + + + Perform a shallow enumeration of the folder being queried. Only the top-level, child files and folders of the folder being queried will be returned. This is similar to the view that Windows Explorer would provide for the folder being queried. + + + Perform a deep enumeration of the folder contents. Windows traverses through subfolders to discover content and presents the results in a single list that combines all discovered content. + + + Searches a string or content property for the specified text. + + + Searches the specified string for occurrences of the current search text. + A collection of occurrences of the current text in contentToSearch. + The string to search. + + + Searches the specified content property for occurrences of the current search text. + A collection of occurrences of the current text in contentToSearch. + The string to search. + The name of the property to search, like System.Author. + + + Initializes a new instance of the HitFinder class. + The text to search for. + + + Specifies whether the query is shallow or deep and the sorting criteria to use for files in the query results. Query results for deep queries include all files in all of the subfolders of the folder being queried and sorts them based on the specified metadata. + + + A shallow view of files in a folder, similar to the view that Windows Explorer provides. You can use this option with any storage location. + + + A deep, flat list sorted by System.ItemNameDisplay. You can use this option for any storage location. + + + A deep, flat list sorted by System.Title. You can use this option only for folders in a library or the HomeGroup folder. + + + A deep, flat list sorted by music properties. You can use this option only for folders in a library or the HomeGroup folder. + + + A deep, flat list sorted by System.Search.Rank followed by System.DateModified. You can use this option for any storage location. + + + A deep, flat list sorted by System.ItemDate. You can use this option only for folders in a library or the HomeGroup folder. System.ItemDate is a computed property that changes based on the content type; for example, it maps to System.Photo.DateTaken for photos. + + + Initializes a new instance of the HitFinder class. + The text to search for. + The user language for the hit search. + + + Represents app content and properties that can be added to the ContentIndexer. + + + Gets or sets the identifier for the content properties in the IIndexableContent object. Changes to the actual representation of the item in the index can be made using the ContentIndexer class. + The identifier of the content item. + + + Gets the content properties. + The collection of properties, represented as a Map of key-value pairs. + + + Gets or sets a stream that provides full-text content. Changes to the actual representation of the item in the index can be made using the ContentIndexer class. + The stream used to provide the full-text content for the item. + + + Specifies the type of content in the Stream. + The content type, like StorageFile.ContentType. + + + Specifies whether the query should use the system index of the file system when enumerating content in the folder being queried. + + + Use the system index for content that has been indexed and use the file system directly for content that has not been indexed. + + + Use only indexed content and ignore content that has not been indexed. + + + Access the file system directly; don't use the system index. + + + Indicates whether a StorageFolder is included in the system index. + + + The indexed state is not known. + + + The folder is not indexed. + + + Some folders in the library are indexed, but not all of them. This value is relevant only for libraries. + + + The folder contains indexed content. The folder might contain subfolders that are not indexed. + + + Represents app content and properties that can be added to the ContentIndexer. + + + Gets or sets the identifier for the content properties in the IndexableContent object. Changes to the actual representation of the item in the index can be made using the ContentIndexer class. + The identifier of the content item. + + + Initializes a new instance of the IndexableContent class. + + + Gets the content properties. + The collection of properties, represented as a Map of key-value pairs. + + + Gets or sets a Stream that provides full-text content. Changes to the actual representation of the item in the index can be made using the ContentIndexer class. + The stream used to provide the full-text content for the item. + + + Specifies the type of content in the Stream. + The content type, like StorageFile.ContentType. + + + Provides methods to access to and manage query results. + + + Gets the folder originally used to create a StorageFileQueryResult, StorageFolderQueryResult, or StorageItemQueryResult object. + The original folder. + + + Retrieves the number of items that match the query that created a StorageFileQueryResult, StorageFolderQueryResult, or StorageItemQueryResult object. + When this method completes successfully, it returns the number of items that match the query. + + + Retrieves the index of the file from the query results that most closely matches the specified property value. The property that is matched is determined by the first SortEntry of the QueryOptions.SortOrder list. + When this method completes successfully it returns the index of the matched item in the query results. + The property value to match when searching the query results. + + + Retrieves the query options used to create a StorageFileQueryResult, StorageFolderQueryResult, or StorageItemQueryResult object. + The query options. + + + Applies new query options to the results retrieved by the StorageFileQueryResult, StorageFolderQueryResult, or StorageItemQueryResult object. + The new query options. + + + Fires when an item is added, deleted or modified in the folder being queried. + + + Fires when the query options are changed for a StorageFileQueryResult, StorageFolderQueryResult, or StorageItemQueryResult object. + + + Provides methods to create search queries and retrieve files from a folder. This interface is implemented by StorageFolder objects, which can represent file system folders, libraries, or virtual folders that are automatically generated when queries are created using group-based CommonFolderQuery values like GroupByAlbum. + + + Retrieves a value that indicates the indexed state of the StorageFolder location associated with the query. + When this method completes successfully, it returns a value of the IndexedState enumeration. + + + Retrieves an object for enumerating the files in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating files and subscribing to events. + + + Retrieves an object with the specified options for enumerating the storage location in a folder and subscribing to events that fire when the contents of the storage location change. + An object for enumerating files and subscribing to events. + The type of folder query to perform. This parameter defaults to CommonFileQuery.DefaultQuery. + + + Retrieves an object with the specified options for enumerating the files in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating files and subscribing to events. + The options for filtering the query results. + + + Retrieves an object for enumerating folders in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating folders and subscribing to events. + + + Retrieves an object with the specified options for enumerating folders in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating folders and subscribing to events. + The type of folder query to perform. This parameter defaults to CommonFolderQuery.DefaultQuery. + + + Retrieves an object with the specified options for enumerating folders in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating folders and subscribing to events. + The options for filtering the query results. + + + Retrieves an object for performing shallow enumerations of the files and folders in a storage location. An app can use the object to enumerate the items in a storage location and subscribe to events that fire when the contents of the storage location change. + An object for enumerating storage items and subscribing to events. + + + Retrieves an object with the specified options for enumerating the files and folders in a storage location and subscribing to events that fire when the contents of the storage location change. + An object for enumerating storage items and subscribing to events. + The options for filtering the query results. + + + Retrieves a list of files in a specified range that are based on the specified file query. This returns a snapshot of the files at a point in time and does not allow you to keep track of changes through events. + When this method completes successfully, it returns a list (type IVectorView) of files that are represented by StorageFile objects. + The type of file query to perform. + The zero-based index of the first file in the range. This parameter defaults to 0. + The maximum number of files to retrieve. Use -1 to retrieve all files. + + + Retrieves a list of files based on the specified query (shallow enumeration). This returns a snapshot of the files at a point in time and does not allow you to keep track of changes through events. + When this method completes successfully, it returns a list (type IVectorView) of files that are represented by StorageFile objects. + The type of file query to perform. + + + Asynchronously retrieves a range of folders in this folder based on a folder query. This returns a snapshot of the folders or file groups at a point in time and does not allow you to keep track of changes through events. + When this method completes successfully, it returns a list (type IVectorView) of folders of file groups that are represented by StorageFolder objects. + The type of folder query to perform. + The zero-based index of the first folder or file group in the range. This parameter defaults to 0. + The maximum number of folders or file groups to retrieve. Use -1 to retrieve all folders or file groups. + + + Retrieves a list of folders and file groups based on a specified folder query. This returns a snapshot of the folders or file groups at a point in time and does not allow you to keep track of changes through events. + When this method completes successfully, it returns a list (type IVectorView) of folders of file groups that are represented by StorageFolder objects. + The type of folder query to perform. + + + Retrieves a list items like files, folders, or file groups, in a specified range (shallow enumeration). + When this method completes successfully, it returns a list (type IVectorView) of items. Each item is the IStorageItem type and represents a file, folder, or file group. In this list, files are represented by StorageFile objects, and folders or file groups are represented by StorageFolder objects. + The zero-based index of the first item in the range. This parameter defaults to 0. + The maximum number of items to retrieve. Use -1 to retrieve all items. + + + Verifies whether the folder supports the specified search query options (returns true or false). + True if the folder supports the specified search query options; otherwise false. + The search query options to test. + + + Verifies whether this folder supports the specified folder query (returns true or false). + True if the folder supports the specified folder query; otherwise false. + The folder query to test. + + + Verifies whether this folder supports the specified file query (returns true or false). + True if the folder supports the specified file query; otherwise false. + The file query to test. + + + Specifies the parameters of a search query for enumerating the contents of storage folders. + + + Gets or sets a user-defined Advanced Query Syntax (AQS) string for filtering files by keywords or properties. This property is combined with the ApplicationSearchFilter to create the query's search filter. + A simple keyword or a string that conforms to Advanced Query Syntax (AQS). For more information, see Using Advanced Query Syntax Programmatically. + + + Gets or sets the Internet Engineering Task Force (IETF) language tag (BCP47 standard) that identifies the language associated with the query. This determines the language-specific algorithm used by the system to break the query into individual search tokens. + The Internet Engineering Task Force (IETF) BCP47-standard language tag. + + + Gets or sets a value that specifies whether the system index or the file system is used to retrieve query results. + The indexer option. + + + Indicates whether the search query should produce a shallow view of the folder contents or a deep recursive view of all files and subfolder. + A value that indicates how deeply to query the folder. The default value is FolderDepth.Shallow. Predefined queries typically override this property and change it to FolderDepth.Deep. + + + Gets or sets an application-defined Advanced Query Syntax (AQS) string for filtering files by keywords or properties. This property is combined with the UserSearchFilter to create the query's search filter. + A simple keyword, or a string that conforms to Advanced Query Syntax (AQS). For more information, see Using Advanced Query Syntax Programmatically. + + + Gets the unit of time used to group files into folders if the QueryOptions object was created with a CommonFolderQuery based on date. + The unit of time user to group folder content by date. + + + Gets a list of file name extensions used to filter the search results. If the list is empty, the results include all file types. + The list of file types of files include in query results. The default value is an empty list (which is equivalent to a list containing only *) that includes all file types. + + + Gets the name of the property used to group query results if the QueryOptions object was created using a CommonFolderQuery. + The property that is being used to group files and that is specified by the CommonFolderQuery enumeration. + + + Gets the list of SortEntry structures that specify how to sort content (like files and subfolders) in query results. + A SortEntryVector that contains SortEntry structures. These structures specify how to sort query results. + + + Gets the filter for storage provider identifiers. + The filter string. + + + Converts the values of a QueryOptions object to a string that can be used to initialize the values of a QueryOptions object by calling LoadFromString. + A string representing the serialized settings of a QueryOptions instance. + + + Initializes the current instance of the QueryOptions class with search parameters specified by a string that was created by the SaveToString method. + A string retrieved by a previous call to SaveToString. + + + Specifies the type and size of thumbnails that the system should start loading immediately when items are accessed (instead of retrieving them on a case-by-case basis). + The enumeration value that describes the purpose of the thumbnail and determines how the thumbnail image is adjusted. For guidance about choosing the best thumbnail mode, see Guidelines and checklist for thumbnails. + The requested size, in pixels, of the longest edge of the thumbnail. Windows uses the requestedSize as a guide and tries to return a thumbnail image that can be scaled to the requested size without reducing the quality of the image. If Windows can't find a thumbnail image that exactly meets the requested size, a larger thumbnail might be returned. If no larger thumbnail is available, a thumbnail image that is smaller than the requested size might be returned. + The enum value that describes the desired behavior to use to retrieve the thumbnail image. The specified behavior might affect the size and/or quality of the image and how quickly the thumbnail image is retrieved. + + + Specifies properties that the system should load in advance for all items in the query result set while the query is being executed (instead of retrieving them on a case-by-case basis). + A value that specifies the set of properties to retrieve in advance. The possible property sets match the sets of properties available on from the StorageFile class. For example, PropertyPrefetchOptions.BasicProperties will retrieve all of the properties available through StorageFile.GetBasicPropertiesAsync in advance. + A custom list of properties to retrieve in advance as an array of property names. Use the system property names to specify properties, for example System.Copyright and System.Image.ColorSpace. A list of additional properties to retrieve. + + + Creates an instance of the QueryOptions class for enumerating files and initializes it with values provided by the specified CommonFileQuery and an optional file type filter that determines which files to include in query results. + An enumeration value that specifies the search parameters to use to query files. The CommonFileQuery enumeration provides search parameters for several common types of file queries. For example, deep queries that retrieve all the files in the folder where the query is created or shallow queries that retrieve only the files in the top-level of the folder. The enumeration also determines how query results are sorted. + An array of file types to be included in the query results. To include all file types, supply null or an array containing a single entry of *. + + + Creates an instance of the QueryOptions class for enumerating subfolders and initializes it with values based on the specified CommonFolderQuery. + An enumeration value that specifies how to group the contents of the folder where the query is created into subfolders to enumerate. The subfolders that are retrieved using a CommonFolderQuery can be actual file system folders or virtual folders that represent groups of files (which are determined by the CommonFolderQuery value). For example, the CommonFolderQuery.GroupByArtist uses the Artist of the files in the folder (and its subfolders) to group files, creating one virtual folder (or file group) for each artist. + + + Creates an instance of the QueryOptions class for enumerating storage items, and initializes it with the following default settings: QueryOptions.FolderDepth gets FolderDepth.Shallow and QueryOptions.IndexerOption gets IndexerOption.DoNotUseIndexer. + + + Provides access to the results of a query of the files in the location that is represented by a storageFolder object. + + + Gets the folder that was queried to create the StorageFileQueryResult object. This folder represents the scope of the query. + The original folder. + + + Retrieves a list of files in a specified range. + When this method completes successfully, it returns a list (type IVectorView) of files that are represented by storageFile objects. + The zero-based index of the first file to retrieve. This parameter is 0 by default. + The maximum number of files to retrieve. Use -1 to retrieve all files. If the range contains fewer files than the max number, all files in the range are returned. + + + Retrieves a list of all the files in the query result set. + When this method completes successfully, it returns a list (type IVectorView) of files that are represented by storageFile objects. + + + Retrieves the number of files in the set of query results. + When this method completes successfully, it returns the number of files in the location that match the query. + + + Retrieves the index of the file from the query results that most closely matches the specified property value (or file, if used with FileActivatedEventArgs.NeighboringFilesQuery). The property that is matched is determined by the first SortEntry of the QueryOptions.SortOrder list. + When this method completes successfully, it returns the index of the matched file in the query results or the index of the file in the FileActivatedEventArgs.NeighboringFilesQuery. In the latter case, the file is expected to be sourced from FileActivatedEventArgs.Files. + The property value to match when searching the query results. The property to that is used to match this value is the property in the first SortEntry of the QueryOptions.SortOrder list. Or, the file to match when searching with FileActivatedEventArgs.NeighboringFilesQuery. + + + Retrieves the query options used to determine query results. + The query options. + + + Gets matching file properties with corresponding text ranges. + The matched properties and corresponding text ranges. + The file to query for properties. + + + Modifies query results based on new QueryOptions. + The new query options. + + + Fires when a file is added to, deleted from, or modified in the folder being queried. + + + Fires when the query options change. + + + Provides access to the results of a query that lists the folder (or file groups) in the folder being queried (which is represented by a storageFolder). + + + Gets the folder originally used to create the StorageFolderQueryResult object. + The original folder. + + + Retrieves folders (or file groups) in a specified range. + When this method completes successfully, it returns a list (type IVectorView) of folders or file groups that are represented by storageFolder objects. + The zero-based index of the first folder to retrieve. This parameter defaults to 0. + The maximum number of folders or file groups to retrieve. Use -1 to retrieve all folders. If the range contains fewer folders than the max number, all folders in the range are returned. + + + Retrieves a list of all the folders (or file groups) in the result set. + When this method completes successfully, it returns a list (type IVectorView) of folders or file groups that are represented by storageFolder objects. Each of these folder or file group can also be enumerated to retrieve its contents. + + + Retrieves the number of folders (or file groups) in the set of query results. + When this method completes successfully, it returns the number of folders or file groups in the location that match the query. + + + Retrieves the index of the folder from the query results that most closely matches the specified property value. The property that is matched is determined by the first SortEntry of the QueryOptions.SortOrder list. + When this method completes successfully it returns the index of the matched folder in the query results. + The property value to match when searching the query results. The property to that is used to match this value is the property in the first SortEntry of the QueryOptions.SortOrder list. + + + Retrieves the query options used to determine query results. + The query options. + + + Modifies query results based on new QueryOptions. + The new query options. + + + Fires when a file is added to, deleted from, or modified in the folder being queried. + + + Fires when the query options change. + + + Provides access to the results of a query that lists all items including files and folders (or file groups) in the folder being queried (which is represented by a storageFolder). + + + Gets the folder originally used to create the StorageItemQueryResult object. + The original folder. + + + Retrieves a list of items (files and folders) in a specified range. + When this method completes successfully, it returns a list (type IVectorView) of items. Each item is the IStorageItem type and represents a file, folder, or file group. In this list, files are represented by storageFile objects, and folders or file groups are represented by storageFolder objects. + The zero-based index of the first item to retrieve. This parameter defaults to 0. + The maximum number of items to retrieve. Use -1 to retrieve all items. If the range contains fewer items than the max number, all items in the range are returned. + + + Retrieves a list of all the items (files and folders) in the query results set. + When this method completes successfully, it returns a list (type IVectorView) of items. Each item is the IStorageItem type and represents a file, folder, or file group. In this list, files are represented by storageFile objects, and folders or file groups are represented by storageFolder objects. + + + Retrieves the number of items in the set of query results. + When this method completes successfully, it returns the number of items in the location that match the query. + + + Retrieves the index of the item from the query results that most closely matches the specified property value. The property that is matched is determined by the first SortEntry of the QueryOptions.SortOrder list. + When this method completes successfully it returns the index of the matched item in the query results. + The property value to match when searching the query results. The property to that is used to match this value is the property in the first SortEntry of the QueryOptions.SortOrder list. + + + Retrieves the query options used to determine query results. + The query options. + + + Modifies query results based on new QueryOptions. + The new query options. + + + Fires when an item is added to, deleted from, or modified in the folder being queried. + + + Fires when the query options change. + + + An entry in the SortOrder list the specifies a property and ordering that is used to sort query results. + + + The name of the property to use for sorting, like System.Author. The property must be registered on the system. For more information, see the Windows Property System. + + + True to sort content in the query results in ascending order based on the property name, or false to sort content in descending order. + + + Provides access to the sorting criteria of the query results as a collection of SortEntry objects. + + + Gets the number of sort entries in the collection. + The number of sort entries. + + + Retrieves the sort entry at the specified index in the collection. + The sort entry at the specified index. + The zero-based index of the sort entry to retrieve. + + + Retrieves an immutable view of the collection of sort entries. + The view of the collection. + + + Retrieves the index of a specified sort entry in the collection. + True if the sort entry is found; otherwise false. + The sort entry to find in the collection. + The zero-based index of the sort entry, if found. This parameter is set to zero if the sort entry is not found. + + + Sets the sort entry at the specified index of the collection. + The zero-based index of the location at which to set the sort entry. + The sort entry. + + + Inserts a sort entry into the collection at a specified index. + The zero-based index of the location to insert the sort entry. + The sort entry to insert. + + + Removes the sort entry at the specified index in the collection. + The zero-based index of the sort entry to remove. + + + Appends a sort entry to the end of the collection. + The sort entry to append to the collection. + + + Removes the last sort entry from the collection. + + + Removes all sort entries from the collection. + + + Retrieves the sort entries that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the sort entries in the collection to retrieve. + The sort entries in the collection that start at startIndex. + + + Replaces all sort entries in the collection with the specified sort entries. + The collection of sort entries to put in the vector. + + + Retrieves an iterator that iterates through the sort entries in the collection. + The iterator. + + + Specifies the language of a property, as a BCP-47 language code. + + + Gets or sets the property value for the current ValueAndLanguage. + The property value. + + + Gets or sets the language of the property value, specified as a BCP-47 language code. + The language of the property value, as a BCP-47 language code. + + + Initializes a new instance of the ValueAndLanguage class. + + + Provides support for reading to and writing from sequential and random access streams. + + + Provides a default implementation of the IBuffer interface and its related interfaces. + + + Initializes a new instance of the Buffer class with the specified capacity. + The maximum number of bytes that the buffer can hold. + + + Gets the maximum number of bytes that the buffer can hold. + The maximum number of bytes that the buffer can hold. + + + Gets the number of bytes currently in use in the buffer. + The number of bytes currently in use in the buffer, which is less than or equal to the capacity of the buffer. + + + Specifies the byte order of a stream. + + + The least significant byte (lowest address) is stored first. + + + The most significant byte (highest address) is stored first. + + + Reads data from an input stream. + + + Gets or sets the byte order of the data in the input stream. + One of the enumeration values. + + + Closes the current stream and releases system resources. + + + Creates and initializes a new instance of the data reader. + The input stream. + + + Detaches the buffer that is associated with the data reader. + The detached buffer. + + + Detaches the stream that is associated with the data reader. + The detached stream. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Creates a new instance of the data reader with data from the specified buffer. + The data reader. + The buffer. + + + Gets or sets the read options for the input stream. + One of the enumeration values. + + + Loads data from the input stream. + The asynchronous load data request. + The count of bytes to load into the intermediate buffer. + + + Reads a Boolean value from the input stream. + The value. + + + Reads a buffer from the input stream. + The buffer. + The length of the buffer, in bytes. + + + Reads a byte value from the input stream. + The value. + + + Reads an array of byte values from the input stream. + The array that receives the byte values. + + + Reads a date and time value from the input stream. + The value. + + + Reads a floating-point value from the input stream. + The value. + + + Reads a GUID value from the input stream. + The value. + + + Reads a 16-bit integer value from the input stream. + The value. + + + Reads a 32-bit integer value from the input stream. + The value. + + + Reads a 64-bit integer value from the input stream. + The value. + + + Reads a floating-point value from the input stream. + The value. + + + Reads a string value from the input stream. + The value. + The length of the string. + + + Reads a time-interval value from the input stream. + The value. + + + Reads a 16-bit unsigned integer from the input stream. + The value. + + + Reads a 32-bit unsigned integer from the input stream. + The value. + + + Reads a 64-bit unsigned integer from the input stream. + The value. + + + Gets the size of the buffer that has not been read. + The size of the buffer that has not been read, in bytes. + + + Gets or sets the Unicode character encoding for the input stream. + One of the enumeration values. + + + Loads data from an input stream. + + + Requests the cancellation of the data load operation. + + + Requests that work associated with the data load operation should stop. + + + Gets or sets the handler to call when the data load operation is complete. + The handler to call when the operation is complete. + + + Gets the error code for the data load operation if it fails. + The status of the operation. + + + Returns the result of the data load operation. + The result of the operation. + + + Gets a unique identifier that represents the data load operation. + The identifier. + + + Gets the current status of the data load operation. + One of the enumeration values. + + + Writes data to an output stream. + + + Gets or sets the byte order of the data in the output stream. + One of the enumeration values. + + + Closes the current stream and releases system resources. + + + Creates and initializes a new instance of the data writer. + + + Creates and initializes a new instance of the data writer to an output stream. + The new output stream instance. + + + Detaches the buffer that is associated with the data writer. + The detached buffer. + + + Detaches the stream that is associated with the data writer. + The detached stream. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously. + The stream flush operation. + + + Gets the size of a string. + The size of the string, in bytes. + The string. + + + Commits data in the buffer to a backing store. + The asynchronous store data operation. + + + Gets or sets the Unicode character encoding for the output stream. + One of the enumeration values. + + + Gets the size of the buffer that has not been used. + The size of the buffer that has not been used, in bytes. + + + Writes a Boolean value to the output stream. + The value. + + + Writes the contents of the specified buffer to the output stream. + The buffer. + + + Writes the specified bytes from a buffer to the output stream. + The buffer. + The starting byte. + The number of bytes to write. + + + Writes a byte value to the output stream. + The value. + + + Writes an array of byte values to the output stream. + The array of values. + + + Writes a date and time value to the output stream. + The value. + + + Writes a floating-point value to the output stream. + The value. + + + Writes a GUID value to the output stream. + The value. + + + Writes a 16-bit integer value to the output stream. + The value. + + + Writes a 32-bit integer value to the output stream. + The value. + + + Writes a 64-bit integer value to the output stream. + The value. + + + Writes a floating-point value to the output stream. + The value. + + + Writes a string value to the output stream. + The length of the string, in bytes. + The value. + + + Writes a time-interval value to the output stream. + The value. + + + Writes a 16-bit unsigned integer value to the output stream. + The value. + + + Writes a 32-bit unsigned integer value to the output stream. + The value. + + + Writes a 64-bit unsigned integer value to the output stream. + The value. + + + Commits data in a buffer to a backing store. + + + Requests the cancellation of the data store operation. + + + Requests that work associated with the data store operation should stop. + + + Gets or sets the handler to call when the data store operation is complete. + The handler to call when the operation is complete. + + + Gets the error code for the data store operation if it fails. + The status of the operation. + + + Returns the result of the data store operation. + The result of the operation. + + + Gets a unique identifier that represents the data store operation. + The identifier. + + + Gets the current status of the data store operation. + One of the enumeration values. + + + Reads data from a file. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Writes data to a file. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Writes data asynchronously to a file. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Supports reading and writing to a file at a specified position. + + + Gets a value that indicates whether the stream can be read from. + True if the stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the file can be written to. + True if the stream can be written to. Otherwise, false. + + + Creates a new instance of a IRandomAccessStream over the same resource as the current stream. + The new stream. The initial, internal position of the stream is 0. The internal position and lifetime of this new stream are independent from the position and lifetime of the cloned stream. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Returns an input stream at a specified location in a stream. + The input stream. + The location in the stream at which to begin. + + + Returns an output stream at a specified location in a stream. + The output stream. + The location in the output stream at which to begin. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Gets or sets the size of the random access stream. + The size of the stream. + + + Writes data asynchronously to a file. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Represents a referenced array of bytes used by byte stream read and write interfaces. Buffer is the class implementation of this interface. + + + Gets the maximum number of bytes that the buffer can hold. + The maximum number of bytes that the buffer can hold. + + + Gets the number of bytes currently in use in the buffer. + The number of bytes currently in use in the buffer which is less than or equal to the capacity of the buffer. + + + Characterizes the format of the data. + + + Gets the format of the data. + The identifier for the format of the data. + + + Provides read access to an input stream. + + + Gets or sets the byte order of the data in the input stream. + One of the enumeration values. + + + Detaches a buffer that was previously attached to the reader. + The detached buffer. + + + Detaches a stream that was previously attached to the reader. + The detached stream. + + + Gets or sets the read options for the input stream. + One of the enumeration values. + + + Loads data from the input stream. + The asynchronous operation. + The count of bytes to load into the intermediate buffer. + + + Reads a Boolean value from the input stream. + The value. + + + Reads a buffer from the input stream. + The buffer. + The length of the buffer, in bytes. + + + Reads a byte value from the input stream. + The value. + + + Reads an array of byte values from the input stream. + The array of values. + + + Reads a date and time value from the input stream. + The value. + + + Reads a floating-point value from the input stream. + The value. + + + Reads a GUID value from the input stream. + The value. + + + Reads a 16-bit integer value from the input stream. + The value. + + + Reads a 32-bit integer value from the input stream. + The value. + + + Reads a 64-bit integer value from the input stream. + The value. + + + Reads a floating-point value from the input stream. + The value. + + + Reads a string value from the input stream. + The value. + The length of the string. + + + Reads a time interval from the input stream. + The value. + + + Reads a 16-bit unsigned integer from the input stream. + The value. + + + Reads a 32-bit unsigned integer from the input stream. + The value. + + + Reads a 64-bit unsigned integer from the input stream. + The value. + + + Gets the size of the buffer that has not been read. + The size of the buffer that has not been read, in bytes. + + + Gets or sets the Unicode character encoding for the input stream. + One of the enumeration values. + + + Provides write access to an output stream. + + + Gets or sets the byte order of the data in the output stream. + One of the enumeration values. + + + Detaches a buffer that was previously attached to the writer. + The detached buffer. + + + Detaches a stream that was previously attached to the writer. + The detached stream. + + + Flushes data asynchronously. + The stream flush operation. + + + Gets the size of a string. + The size of the string, in bytes. + The string. + + + Commits data in the buffer to a backing store. + The asynchronous store data operation. + + + Gets or sets the Unicode character encoding for the output stream. + One of the enumeration values. + + + Gets the size of the buffer that has not been used. + The available buffer length, in bytes. + + + Writes a Boolean value to the output stream. + The value. + + + Writes a number of bytes from a buffer to the output stream. + The buffer. + + + Writes a range of bytes from a buffer to the output stream. + The buffer. + The starting byte tobe written. + The number of bytes to write. + + + Writes a byte value to the output stream. + The value. + + + Writes an array of byte values to the output stream. + The array of values. + + + Writes a date and time value to the output stream. + The value to write. + + + Writes a floating-point value to the output stream. + The value to write. + + + Writes a GUID value to the output stream. + The value to write. + + + Writes a 16-bit integer value to the output stream. + The value. + + + Writes a 32-bit integer value to the output stream. + The value. + + + Writes a 64-bit integer value to the output stream. + The value. + + + Write a floating-point value to the output stream. + The value to write. + + + Writes a string value to the output stream. + The length of the string. + The value to write. + + + Writes a time interval value to the output stream. + The value to write. + + + Writes a 16-bit unsigned integer value to the output stream. + The value. + + + Writes a 32-bit unsigned integer value to the output stream. + The value. + + + Writes a 64-bit unsigned integer value to the output stream. + The value. + + + Represents a sequential stream of bytes to be read. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Enables a Windows Runtime component to provide sequential read access to an encapsulated stream. + + + Opens a stream for sequential read access. + The asynchronous operation. + + + Provides random access of data in input and output streams that are stored in memory instead of on disk. + + + Gets a value that indicates whether the stream can be read from. + True if the stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the stream can be written to. + True if the stream can be written to. Otherwise, false. + + + Creates a new instance of a IRandomAccessStream over the same resource as the current stream. + The new stream. The initial, internal position of the stream is 0.The internal position and lifetime of this new stream are independent from the position and lifetime of the cloned stream. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Returns an input stream at a specified location in a stream. + The input stream. + The location in the stream at which to begin. + + + Returns an output stream at a specified location in a stream. + The output stream. + The location in the output stream at which to begin. + + + Creates a new instance of the InMemoryRandomAccessStream class. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Gets or sets the size of the random access stream. + The size of the stream. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Specifies the read options for an input stream. + + + No options are specified. + + + The asynchronous read operation completes when one or more bytes is available. + + + The asynchronous read operation may optionally read ahead and prefetch additional bytes. + + + Provides a Windows Runtime input stream for an IStream base implementation. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Represents a sequential stream of bytes to be written. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Supports random access of data in input and output streams. + + + Gets a value that indicates whether the stream can be read from. + True if the stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the stream can be written to. + True if the stream can be written to. Otherwise, false. + + + Creates a new instance of a IRandomAccessStream over the same resource as the current stream. + The new stream. The initial, internal position of the stream is 0. The internal position and lifetime of this new stream are independent from the position and lifetime of the cloned stream. + + + Returns an input stream at a specified location in a stream. + The input stream. + The location in the stream at which to begin. + + + Returns an output stream at a specified location in a stream. + The output stream. + The location in the output stream at which to begin. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Gets or sets the size of the random access stream. + The size of the stream. + + + Enables a Windows Runtime component to provide access to an encapsulated stream. + + + Opens a stream for random access. + The asynchronous operation. + + + Supports random access of data in input and output streams for a specified data format. + + + Provides a Windows Runtime output stream for an IStream base implementation. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Provides random access of data in input and output streams. + + + Copies a source stream to a destination stream and waits for the copy operation to complete. + The asynchronous operation. + The stream to copy data from. + The stream to copy data to. + + + Copies a source stream to a destination stream. + The asynchronous operation. + The stream to copy data from. + The stream to copy data to. + + + Copies the specified number of bytes from a source stream to a destination stream. + The asynchronous operation. + The stream to copy data from. + The stream to copy data to. + The number of bytes to copy. + + + Provides a Windows Runtime random access stream for an IStream base implementation. + + + Gets a value that indicates whether the stream can be read from. + True if the stream can be read from. Otherwise, false. + + + Gets a value that indicates whether the stream can be written to. + True if the stream can be written to. Otherwise, false. + + + Creates a new instance of a IRandomAccessStream over the same resource as the current stream. + The new stream. The initial, internal position of the stream is 0.The internal position and lifetime of this new stream are independent from the position and lifetime of the cloned stream. + + + Closes the current stream and releases system resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Flushes data asynchronously in a sequential stream. + The stream flush operation. + + + Returns an input stream at a specified location in a stream. + The input stream. + The location in the stream at which to begin. + + + Returns an output stream at a specified location in a stream. + The output stream. + The location in the output stream at which to begin. + + + Gets the byte offset of the stream. + The number of bytes from the start of the stream. + + + Returns an asynchronous byte reader object. + The asynchronous operation. + The buffer into which the asynchronous read operation places the bytes that are read. + The number of bytes to read that is less than or equal to the Capacity value. + Specifies the type of the asynchronous read operation. + + + Sets the position of the stream to the specified value. + The new position of the stream. + + + Gets or sets the size of the random access stream. + The size of the stream. + + + Writes data asynchronously in a sequential stream. + The byte writer operation. + The buffer into which the asynchronous writer operation writes. + + + Provides random access of data in input and output streams for a file. + + + Creates a random access stream around a file. + The stream that encapsulates file. + The file to create a stream around. + + + Creates a random access stream around the specified stream. + The random access stream that encapsulates stream. + The source stream. + + + Creates a random access stream around the specified URI. + The random access stream that encapsulates uri. + The URI to create the stream around. + + + Opens a stream for random access. + The asynchronous operation. + + + Specifies the type of character encoding for a stream. + + + The encoding is UTF-8. + + + The encoding is UTF-16, with the least significant byte first in the two eight-bit bytes. + + + The encoding is UTF-16, with the most significant byte first in the two eight-bit bytes. + + + Enables system functionality such as launching apps. + + + Starts the default app associated with the specified file or URI. + + + Starts the default app associated with the specified file. + The launch operation. + The file. + + + Starts the default app associated with the specified file, using the specified options. + The launch operation. + The file. + The launch options for the app. + + + Starts the default app associated with the URI scheme name for the specified URI. + The launch operation. + The URI. + + + Starts the default app associated with the URI scheme name for the specified URI, using the specified options. + The launch operation. + The URI. + The launch options for the app. + + + Specifies the options used to launch the default app for a file or URI. + + + Gets or sets the content type that is associated with a URI that represents a file on the network. + The content type of the URI. + + + Launch a target app and have the currently running source app remain on the screen by sharing the space equally with the target app or by taking up more or less space than the target app. + A ViewSizePreference-typed value that specifies options for launching. + + + Gets or sets a value that indicates whether to display the Open With dialog whenever the association launching API is called. + True if the Open With dialog should always be displayed; otherwise false. + + + Gets or sets a value that represents a URI that the user should be taken to in the browser if no app exists to handle the file type or URI. + URI that the user should be taken to in the browser. + + + Creates and initializes a new instance of the launcher options object. + + + Gets or sets a value that represents the display name of the app in the store that the user should install if no app exists to handle the file type or URI. + The display name of the app. + + + Gets or sets a value that represents the package family name of the app in the Store that the user should install if no app exists to handle the file type or URI. + The package family name of the app. + + + Gets or sets a value that indicates whether the system should display a warning that the file or URI is potentially unsafe when starting the app associated with a file or URI. + True if the warning should be displayed; otherwise false. + + + Gets the user interface (UI) options when starting a default app. + The UI options. + + + Specifies options for user interface elements such as the application picker that can be invoked by this API. + + + Gets or sets the point on the screen where the user opened a file or URI. + The invocation point. + + + Gets or sets the preferred placement of the Open With and Warning dialog boxes when starting a default app. + The preferred placement. + + + Gets or sets the selection rectangle on the screen where the user opened a file or URI. + The selection rectangle. + + + Specifies the processor architecture supported by an app. + + + The x86 processor architecture. + + + The ARM processor architecture. + + + The x64 processor architecture. + + + A neutral processor architecture. + + + An unknown processor architecture. + + + Specifies the values for each virtual key. + + + No virtual key value. + + + The left mouse button. + + + The right mouse button. + + + The cancel key or button. + + + The middle mouse button. + + + An additional "extended" device key or button (for example, an additional mouse button). + + + An additional "extended" device key or button (for example, an additional mouse button). + + + The virtual back key or button. + + + The Tab key. + + + The Clear key or button. + + + The Enter key. + + + The Shift key. This is the general Shift case, applicable to key layouts with only one Shift key or that do not need to differentiate between left Shift and right Shift keystrokes. + + + The Ctrl key. This is the general Ctrl case, applicable to key layouts with only one Ctrl key or that do not need to differentiate between left Ctrl and right Ctrl keystrokes. + + + The menu key or button. + + + The Pause key or button. + + + The Caps Lock key or button. + + + The Kana symbol key-shift button. + + + The Hangul symbol key-shift button. + + + The Junja symbol key-shift button. + + + The Final symbol key-shift button. + + + The Hanja symbol key shift button. + + + The Kanji symbol key-shift button. + + + The Esc key. + + + The convert button or key. + + + The nonconvert button or key. + + + The accept button or key. + + + The mode change key. + + + The Spacebar key or button. + + + The Page Up key. + + + The Page Down key. + + + The End key. + + + The Home key. + + + The Left Arrow key. + + + The Up Arrow key. + + + The Right Arrow key. + + + The Down Arrow key. + + + The Select key or button. + + + The Print key or button. + + + The execute key or button. + + + The snapshot key or button. + + + The Insert key. + + + The Delete key. + + + The Help key or button. + + + The number "0" key. + + + The number "1" key. + + + The number "2" key. + + + The number "3" key. + + + The number "4" key. + + + The number "5" key. + + + The number "6" key. + + + The number "7" key. + + + The number "8" key. + + + The number "9" key. + + + The letter "A" key. + + + The letter "B" key. + + + The letter "C" key. + + + The letter "D" key. + + + The letter "E" key. + + + The letter "F" key. + + + The letter "G" key. + + + The letter "H" key. + + + The letter "I" key. + + + The letter "J" key. + + + The letter "K" key. + + + The letter "L" key. + + + The letter "M" key. + + + The letter "N" key. + + + The letter "O" key. + + + The letter "P" key. + + + The letter "Q" key. + + + The letter "R" key. + + + The letter "S" key. + + + The letter "T" key. + + + The letter "U" key. + + + The letter "V" key. + + + The letter "W" key. + + + The letter "X" key. + + + The letter "Y" key. + + + The letter "Z" key. + + + The left Windows key. + + + The right Windows key. + + + The application key or button. + + + The sleep key or button. + + + The number "0" key as located on a numeric pad. + + + The number "1" key as located on a numeric pad. + + + The number "2" key as located on a numeric pad. + + + The number "3" key as located on a numeric pad. + + + The number "4" key as located on a numeric pad. + + + The number "5" key as located on a numeric pad. + + + The number "6" key as located on a numeric pad. + + + The number "7" key as located on a numeric pad. + + + The number "8" key as located on a numeric pad. + + + The number "9" key as located on a numeric pad. + + + The multiply (*) operation key as located on a numeric pad. + + + The add (+) operation key as located on a numeric pad. + + + The separator key as located on a numeric pad. + + + The subtract (-) operation key as located on a numeric pad. + + + The decimal (.) key as located on a numeric pad. + + + The divide (/) operation key as located on a numeric pad. + + + The F1 function key. + + + The F2 function key. + + + The F3 function key. + + + The F4 function key. + + + The F5 function key. + + + The F6 function key. + + + The F7 function key. + + + The F8 function key. + + + The F9 function key. + + + The F10 function key. + + + The F11 function key. + + + The F12 function key. + + + The F13 function key. + + + The F14 function key. + + + The F15 function key. + + + The F16 function key. + + + The F17 function key. + + + The F18 function key. + + + The F19 function key. + + + The F20 function key. + + + The F21 function key. + + + The F22 function key. + + + The F23 function key. + + + The F24 function key. + + + The Num Lock key. + + + The Scroll Lock (ScrLk) key. + + + The left Shift key. + + + The right Shift key. + + + The left Ctrl key. + + + The right Ctrl key. + + + The left menu key. + + + The right menu key. + + + The go back key. + + + The go forward key. + + + The refresh key. + + + The stop key. + + + The search key. + + + The favorites key. + + + The go home key. + + + Specifies the virtual key used to modify another keypress. + + + No virtual key modifier. + + + The Ctrl (control) virtual key. + + + The Menu virtual key. + + + The Shift virtual key. + + + The Windows virtual key. + + + Enables an application to request that a device's display remain on even if there is no user activity for an extended period of time. + + + Represents a display request. + + + Creates an instance of the DisplayRequest class. + + + Activates a display request. + + + Deactivates a display request. + + + Enables apps to get information about the system. + + + Represents a token that contains a hardware based identification that is sufficiently unique. + + + Gets the certificate that is used to sign the Id and is used to help verify the authenticity of the Id. + The certificate used to sign the Id. + + + Gets the hardware identifier that identifies the device. + The id that identifies the device. This byte buffer contains a set of identifiers that represent the various hardware components found in the device. + + + Gets the digital signature of hardware Id that helps verify the authenticity of returned Id. + The digital signature of Id. + + + Provides the ability to obtain a hardware identifier that represents the current hardware. + + + Gets a hardware identifier (ASHWID) that represents the current hardware. + The hardware Id information. + The cryptographic nonce is optional. The nonce is recommended when ASHWID needs to be verified on the cloud against replay attacks. In the scenarios where nonce is desired, the remote server should generate a random nonce and pass it to the client app, and then verify that the signature has the expected nonce once the ASHWID is received from the client system. + + + Provides info for hardware developers and OEM. + + + Enables access to properties from the SMBIOS for the system. + + + Gets the serial number from the SMBIOS for the system. + The serial number. + + + Enables an application to obtain information about Remote Desktop sessions. + + + Provides Remote Desktop information about the current session. + + + Indicates whether the calling process is running in a Remote Desktop session. + Contains True if the current process is running in a remote session or False otherwise. + + + Enables an application to use the thread pool to run work items. + + + Allows access to the thread pool. + + + Creates a work item. + An IAsyncAction interface that provides access to the work item. + The method to call when a thread becomes available to run the work item. + + + Creates a work item and specifies its priority relative to other work items in the thread pool. + An IAsyncAction interface that provides access to the work item. + The method to call when a thread becomes available to run the work item. + The priority of the work item relative to other work items in the thread pool. The value of this parameter can be Low, Normal, or High. + + + Creates a work item, specifies its priority relative to other work items in the thread pool, and specifies how long-running work items should be run. + An IAsyncAction interface that provides access to the work item. + The method to call when a thread becomes available to run the work item. + The priority of the work item relative to other work items in the thread pool. + If this parameter is TimeSliced, the work item runs simultaneously with other time-sliced work items with each work item receiving a share of processor time. If this parameter is None, the work item runs when a worker thread becomes available. + + + Represents a timer created with CreateTimer or CreatePeriodicTimer. + + + Gets the timeout value of a single-use timer created with CreateTimer. + The timeout value. When the timeout value elapses, the timer expires and its TimerElapsedHandler delegate is called.C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + + + Gets the timeout value of a periodic timer created with CreatePeriodicTimer. + The timeout value. When the timeout value elapses, the timer expires, its TimerElapsedHandler delegate is called, and the timer reactivates. This behavior continues until the timer is canceled. C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + + + Cancels a timer. + + + Creates a periodic timer. + An instance of a periodic timer. + The method to call when the timer expires. + The amount of time until the timer expires. The timer reactivates each time the period elapses, until the timer is canceled.C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + + + Creates a periodic timer and specifies a method to call after the periodic timer is complete. The periodic timer is complete when the timer has expired without being reactivated, and the final call to handler has finished. + An instance of a periodic timer. + The method to call when the timer expires. + The amount of time until the timer expires. The timer reactivates each time the period elapses, until the timer is canceled.C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + The method to call after the periodic timer is complete. + + + Creates a single-use timer. + An instance of a single-use timer. + The method to call when the timer expires. + The amount of time until the timer expires.C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + + + Creates a single-use timer and specifies a method to call after the timer is complete. The timer is complete when the timer has expired and the final call to handler has finished. + An instance of a single-use timer. + The method to call when the timer expires. + The amount of time until the timer expires.C++This amount of time is specified in ticks (100-nanosecond units) using the Windows::Foundation::TimeSpan structure.JavaScript and C#This amount of time is specified using the System.TimeSpan structure. It can be specified in ticks, or it can be specified in milliseconds, seconds, and so on. + The method to call after the timer is complete. + + + Specifies the priority of a work item relative to other work items in the thread pool. + + + The work item should run at low priority. + + + The work item should run at normal priority. This is the default value. + + + The work item should run at high priority. + + + Specifies how work items should be run. + + + The work item should be run when the thread pool has an available worker thread. + + + The work items should be run simultaneously with other work items sharing a processor. + + + Represents a method that is called when a timer created with CreateTimer or CreatePeriodicTimer expires. + The timer to associate with this method. When this timer expires, the method is called. + + + Represents a method that is called when a timer created with CreateTimer or CreatePeriodicTimer is complete. + The timer to associate with this method. + + + Represents a method that is called when a work item runs. + The work item to associate with the callback method. + + + Creates work items that run in response to named events and semaphores. Also preallocates resources for work items that must be guaranteed the ability to run, even in circumstances of heavy (or full) resource allocation. + + + Runs a method when an event or semaphore is signaled. A timeout value can also be specified, causing the delegate to run after the time span has elapsed if the named event does not occur (or if the semaphore does not reach a signaled state). + + + Submits the SignalNotifier to the thread pool. + + + Terminates the SignalNotifier if it has not already started running. + + + Attaches a SignalHandler delegate to an event. The delegated method will run the next time the event occurs. + The resulting SignalNotifier object. + Indicates the event that causes the method to run. + Indicates the method that will run in response to the event. + + + Attaches a SignalHandler delegate to an event. The delegated method will run if the event occurs or the time span elapses, whichever comes first. + The resulting SignalNotifier object. + Indicates the event that causes the method to run. + Indicates the method that will run in response to the event, or when the time span elapses, whichever comes first. + Indicates the amount of time to continue waiting for the event before running the handler method. + + + Attaches a SignalHandler delegate to a named semaphore. The delegated method will run when the named semaphore is signaled. + The resulting SignalNotifier object. + Names the semaphore that signals the method to run. + Indicates the delegate that will run in response to the named semaphore entering the signaled state. + + + Attaches a SignalHandler delegate to a named semaphore and specifies a timeout value. The delegated method will run when the named semaphore is signaled, or if the time span elapses before the semaphore reaches a signaled state. + The resulting SignalNotifier object. + Names the semaphore that signals the method to run. + Indicates the delegate that will run in response to the named semaphore entering the signaled state. + Indicates the amount of time to continue waiting for the named semaphore before running the delegate. + + + A preallocated work item is constructed in advance of its submission to the thread pool, ensuring that the work item is constructed so that it can be submitted to the thread pool when necessary. For example, a PreallocatedWorkItem can be created in case it is needed for a resource deallocation routine, since the resource deallocation routine may be called in circumstances when not enough resources would be available to create the work item. + + + Submits the preallocated work item to the thread pool, without requiring any additional resources to be allocated. + Provides access to the running IAsyncAction that was previously constructed and given the necessary resource allocation. + + + Initializes a new work item with a WorkItemHandler delegate, allocating resources for the work item in advance. + Indicates the method that the preallocated work item will run. + + + Initializes a new work item with a WorkItemHandler delegate, allocating resources for the work item in advance, and specifies the priority of the work item relative to other work items in the thread pool. + Indicates the method that the preallocated work item will run. + The priority of the work item relative to other work items in the thread pool. The value of this parameter can be Low, Normal, or High. + + + Initializes a new work item with a WorkItemHandler delegate, allocating resources for the work item in advance, and specifies the priority of the work item relative to other work items in the thread pool. Also specifies how the thread pool will allocate processor time for the work item. + Indicates the method that the preallocated work item will run. + The priority of the work item relative to other work items in the thread pool. The value of this parameter can be Low, Normal, or High. + If this parameter is set to TimeSliced, the work item runs simultaneously with other time-sliced work items, with each work item receiving a share of processor time. If this parameter is set to None, the work item runs when a worker thread becomes available. + + + Represents a method that is called when a signal notifier's attached event or semaphore is signaled, or when the optional timeout value has elapsed (whichever comes first). + Represents the signal notifier that called the delegate. + Indicates whether timeout value elapsed before calling the delegate. + + + Creates ISignalNotifier objects that invoke methods in response to an event or semaphore specified by handle. + + + Invokes a delegate based on an event or semaphore specified by handle. + This method returns S_OK if successful, otherwise it returns a Windows error code. + A handle to the event or semaphore that triggers the handler. + Pointer to an ISignalHandler class instance invoked when the waitable handle triggers. + Set this parameter to NULL. + The UUID of ISignalNotifier. This UUID is provided in the ABI::Windows::System::Threading::Core namespace. Use the following code to retrieve the UUID:__uuidof(ABI::Windows::System::Threading::Core::ISignalNotifier) + Returns the address of a pointer to the ISignalNotifier object created by this method. + + + Invokes a delegate based on an event or semaphore specified using a handle, or invokes the delegate when the timeout elapses (whichever comes first). + This method returns S_OK if successful, otherwise it returns a Windows error code. + A handle to the event or semaphore that triggers the handler. + Pointer to an ISignalHandler class instance to invoke when the waitable handle triggers (or when the timeout occurs, whichever happens first). + The time to wait before invoking the ISignalHandler if it hasn't already been triggered. Multiply the number of milliseconds you need to wait by 10000 to get the timeout value. For example, waiting 30 milliseconds would mean specifying a timeout value of 30 * 10000, or 300000. + Set this parameter to NULL. + The UUID of ISignalNotifier. This UUID is provided in the ABI::Windows::System::Threading::Core namespace. Use the following code to retrieve the UUID:__uuidof(ABI::Windows::System::Threading::Core::ISignalNotifier) + Returns the address of a pointer to the ISignalNotifier object created by this method. + + + Represents a method that is called when a signal notifier's attached event or semaphore is signaled, or when the optional timeout value has elapsed (whichever comes first). + + + Called when an ISignalNotifier's attached event or semaphore is signaled, or when the optional timeout value has elapsed (whichever comes first). + This method returns S_OK if successful, otherwise it returns a Windows error code. + Represents the signal notifier that called the delegate. + Indicates whether the timeout value elapsed before calling the delegate. + + + Invokes a method when an event or semaphore is signaled, or when timeout occurs. Used when the event or semaphore can only be specified by handle. + + + Submits the ISignalNotifier to the thread pool. + This method returns S_OK if successful, otherwise it returns a Windows error code. + + + Stops the ISignalNotifier if it has not already started running. + This method returns S_OK if successful, otherwise it returns a Windows error code. + + + Enables apps get information about users, set globalization preferences, and control the lock screen image. + + + Allows you to request a specific image type when using GetAccountPicture. + + + Indicates you want the small image for the user's account. + + + Indicates you want the large image for the user's account. + + + Indicates you want the video for the user's account. + + + Provides a property that lets the caller retrieve the advertising ID, which is an ID used by Windows Store app to do cross-promotion with other apps or in other similar advertising scenarios. + + + Retrieves a unique ID used with Windows Store app to cross-promote unpurchased apps or in other similar advertising scenarios. This ID is per-user, per-device; all of the apps for a single user on a device have the same advertising ID. If the advertising ID feature is turned off, no ID is retrieved. + The advertising ID represented as an alphanumeric string. When the advertising ID feature is disabled, this is an empty string. + + + A static class for holding various user globalization preferences. + + + Gets the set of calendars that are preferred by the user, in order of preference. + One or more calendar identifiers for the user's preferred calendars. + + + Gets the set of clocks that are preferred by the user, in order of preference. + One or more clock identifiers for the user's preferred clocks. + + + Gets the set of currencies that are preferred by the user, in order of preference. + One or more currency identifiers for the user's preferred currencies. + + + Gets the user's home geographic region. + The GeographicRegion identifier that represents the user's home location. + + + Gets the set of languages that are preferred by the user, in order of preference. + One or more language identifiers for the user's preferred languages. + + + Gets the day of the week that is considered to be the first day of the week. + The day of the week that the week starts on. + + + Gets and sets the full-screen image used as the lock screen background. + + + Gets the current lock screen image as a data stream. + The stream that contains the lock screen image data. + + + Gets the current lock screen image. + The Uniform Resource Identifier (URI) of the lock screen image. + + + Registers an RSS image feed to be used as a lock screen slideshow. + One of the SetImageFeedResult values. + The Uniform Resource Identifier (URI) of the RSS image feed. + + + Sets the lock screen image from a StorageFile object. + The object used to set the image for the lock screen. + The StorageFile object that contains the new image for the lock screen. + + + Sets the lock screen image from a data stream. + The object used to set the lock screen image. + The stream that contains the image data. + + + Unregisters the image feed being used in the lock screen slideshow, stopping the slideshow. + True if the image feed was disabled; otherwise, false. + + + A result that is returned when you try to set the image for a user account. + + + Indicates the picture was successfully set. + + + Indicates that the picture was not set because the AccountPictureChangeEnabled property is disabled, or the user cancelled the consent prompt. + + + Indicates that the picture was not set because the picture was too large. + + + Indicates that the video was not set because of its frame size was too large. + + + Indicates the picture was not set because the file size was too large. + + + Indicates the picture or video was not set. + + + Specifies the result of a call to LockScreen.RequestSetImageFeedAsync + + + The image feed was set successfully. + + + The feed was not set because the lock screen image slide show is disabled by group policy. + + + The operation was canceled by the user. + + + Gets or sets information about the user, such as name and account picture. + + + Occurs when the user's image or name changes. + + + Determines if the user's account picture can be changed. + True if the user's account picture can be changed; false otherwise. + + + Gets the account picture for the user. + An object that contains the image. + An enumeration that you can use to determine what type of image you want (small, large, and so on). + + + Gets the display name for the user account. + The display name for the user account. + + + Gets the domain name for the user. + A string that represents the domain name for the user. + + + Gets the user's first name. + The user's first name. + + + Gets the user's last name. + The user's last name. + + + Gets the principal name for the user. This name is the User Principal Name (typically the user's address, although this is not always true.) + The user's principal name. + + + Gets the Uniform Resource Identifier (URI) of the session initiation protocol for the user. + The Uniform Resource Identifier (URI) of the session initiation protocol. + + + Allows you to see if your app is allowed to access the user's information. + True if your app is allowed access to the AccountPictureChanged event, and is allowed to retrieve user information by using the GetAccountPicture, GetDisplayNameAsync, GetDomainNameAsync, GetFirstNameAsync, GetLastNameAsync, and GetSessionInitiationProtocolUriAsync methods. Otherwise, this property is false. + + + Sets the picture for the user's account using an IStorageFile object. + A value that indicates the success or failure of the operation. + A file that contains the image. + + + Sets the picture for the user's account using an IRandomAccessStream object. + A value that indicates the success or failure of the operation. + The image. + + + Sets the pictures for the user's account using an IStorageFile object. Supports adding a small image, large image, and video. + A value that indicates the success or failure of the operation. + A small version of the image. + A large version of the image. + A video. + + + Sets the pictures for the user's account using an IRandomAccessStream object. Supports adding a small image, large image, and video. + A value that indicates the success or failure of the operation. + A small version of the image. + A large version of the image. + A video. + + + Provides an app with access to core system functionality and run-time information about its UI. + + + Describes a color in terms of alpha, red, green, and blue channels. + + + Gets or sets the sRGB alpha channel value of the color. + + + Gets or sets the sRGB red channel value of the color. + + + Gets or sets the sRGB green channel value of the color. + + + Gets or sets the sRGB blue channel value of the color. + + + Gets or sets the sRGB alpha channel value of the color. + The sRGB alpha channel value of the color, as a value between 0 and 255. + + + Gets or sets the sRGB blue channel value of the color. + The sRGB blue channel value, as a value between 0 and 255. + + + Compares two Color structures for equality. + True if all values of color1 and color2 are equal; otherwise, false. + The first Color structure to compare. + The second Color structure to compare. + + + Determines whether the specified object is equal to a Color. + True if o is equal to this Color; otherwise, false. + Object to check for equality. + + + Compares two Color structures for equality. + True if both Color structures contain the same values; otherwise, false. + The Color structure to compare to this Color. + + + Creates a new Color structure by using the specified sRGB alpha channel and color channel values. + A Color structure with the specified values. + The alpha channel, A, of the new color. The value must be between 0 and 255. + The red channel, R, of the new color. The value must be between 0 and 255. + The green channel, G, of the new color. The value must be between 0 and 255. + The blue channel, B, of the new color. The value must be between 0 and 255. + + + Gets or sets the sRGB green channel value of the color. + The sRGB green channel value, as a value between 0 and 255. + + + Gets a hash code for this object. + The hash code identifier. + + + Compares two Color structures for inequality. + True if color1 and color2 have different values; false if color1 and color2 have the same values. + The first Color structure to compare. + The second Color structure to compare. + + + Gets or sets the sRGB red channel value of the color. + The sRGB red channel value, as a value between 0 and 255. + + + Converts a Color to a String representation. + A String representation of this Color. + + + Creates a String representation of this Color. + A string representation of the current Color that is determined by the specified format provider. + Culture-specific formatting information. + + + Provides static helper methods for processing Color values. C# and Microsoft Visual Basic code should use methods of Color instead. + + + Generates a Color structure, based on discrete Byte values for ARGB components. C# and Microsoft Visual Basic code should use Color.FromArgb instead. + The generated Color value. + The A (transparency) component of the desired color. Range is 0-255. + The R component of the desired color. Range is 0-255. + The G component of the desired color. Range is 0-255. + The B component of the desired color. Range is 0-255. + + + Implements a set of predefined colors. See Color for usage information. + + + Gets the color value that represents the AliceBlue named color. + The color value that represents the AliceBlue named color. + + + Gets the color value that represents the AntiqueWhite named color. + The color value that represents the AntiqueWhite named color. + + + Gets the color value that represents the Aqua named color. + The color value that represents the Aqua named color. + + + Gets the color value that represents the Aquamarine named color. + The color value that represents the Aquamarine named color. + + + Gets the color value that represents the Azure named color. + The color value that represents the Azure named color. + + + Gets the color value that represents the Beige named color. + The color value that represents the Beige named color. + + + Gets the color value that represents the Bisque named color. + The color value that represents the Bisque named color. + + + Gets the system-defined color that has the ARGB value of #FF000000. + The system-defined color that has the ARGB value of #FF000000. + + + Gets the color value that represents the BlanchedAlmond named color. + The color value that represents the BlanchedAlmond named color. + + + Gets the system-defined color that has the ARGB value of #FF0000FF. + The system-defined color that has the ARGB value of #FF0000FF. + + + Gets the color value that represents the BlueViolet named color. + The color value that represents the BlueViolet named color. + + + Gets the system-defined color that has the ARGB value of #FFA52A2A. + The system-defined color that has the ARGB value of #FFA52A2A. + + + Gets the color value that represents the BurlyWood named color. + The color value that represents the BurlyWood named color. + + + Gets the color value that represents the CadetBlue named color. + The color value that represents the CadetBlue named color. + + + Gets the color value that represents the Chartreuse named color. + The color value that represents the Chartreuse named color. + + + Gets the color value that represents the Chocolate named color. + The color value that represents the Chocolate named color. + + + Gets the color value that represents the Coral named color. + The color value that represents the Coral named color. + + + Gets the color value that represents the CornflowerBlue named color. + The color value that represents the CornflowerBlue named color. + + + Gets the color value that represents the Cornsilk named color. + The color value that represents the Cornsilk named color. + + + Gets the color value that represents the Crimson named color. + The color value that represents the Crimson named color. + + + Gets the system-defined color that has the ARGB value of #FF00FFFF. + The system-defined color that has the ARGB value of ##FF00FFFF. + + + Gets the color value that represents the DarkBlue named color. + The color value that represents the DarkBlue named color. + + + Gets the color value that represents the DarkCyan named color. + The color value that represents the DarkCyan named color. + + + Gets the color value that represents the DarkGoldenrod named color. + The color value that represents the DarkGoldenrod named color. + + + Gets the system-defined color that has the ARGB value of #FFA9A9A9. + The system-defined color that has the ARGB value of #FFA9A9A9. + + + Gets the color value that represents the DarkGreen named color. + The color value that represents the DarkGreen named color. + + + Gets the color value that represents the DarkKhaki named color. + The color value that represents the DarkKhaki named color. + + + Gets the color value that represents the DarkMagenta named color. + The color value that represents the DarkMagenta named color. + + + Gets the color value that represents the DarkOliveGreen named color. + The color value that represents the DarkOliveGreen named color. + + + Gets the color value that represents the DarkOrange named color. + The color value that represents the DarkOrange named color. + + + Gets the color value that represents the DarkOrchid named color. + The color value that represents the DarkOrchid named color. + + + Gets the color value that represents the DarkRed named color. + The color value that represents the DarkRed named color. + + + Gets the color value that represents the DarkSalmon named color. + The color value that represents the DarkSalmon named color. + + + Gets the color value that represents the DarkSeaGreen named color. + The color value that represents the DarkSeaGreen named color. + + + Gets the color value that represents the DarkSlateBlue named color. + The color value that represents the DarkSlateBlue named color. + + + Gets the color value that represents the DarkSlateGray named color. + The color value that represents the DarkSlateGray named color. + + + Gets the color value that represents the DarkTurquoise named color. + The color value that represents the DarkTurquoise named color. + + + Gets the color value that represents the DarkViolet named color. + The color value that represents the DarkViolet named color. + + + Gets the color value that represents the DeepPink named color. + The color value that represents the DeepPink named color. + + + Gets the color value that represents the DeepSkyBlue named color. + The color value that represents the DeepSkyBlue named color. + + + Gets the color value that represents the DimGray named color. + The color value that represents the DimGray named color. + + + Gets the color value that represents the DodgerBlue named color. + The color value that represents the DodgerBlue named color. + + + Gets the color value that represents the Firebrick named color. + The color value that represents the Firebrick named color. + + + Gets the color value that represents the FloralWhite named color. + The color value that represents the FloralWhite named color. + + + Gets the color value that represents the ForestGreen named color. + The color value that represents the ForestGreen named color. + + + Gets the color value that represents the Fuchsia named color. + The color value that represents the Fuchsia named color. + + + Gets the color value that represents the Gainsboro named color. + The color value that represents the Gainsboro named color. + + + Gets the color value that represents the GhostWhite named color. + The color value that represents the GhostWhite named color. + + + Gets the color value that represents the Gold named color. + The color value that represents the Gold named color. + + + Gets the color value that represents the Goldenrod named color. + The color value that represents the Goldenrod named color. + + + Gets the system-defined color that has the ARGB value of #FF808080. + The system-defined color that has the ARGB value of #FF808080. + + + Gets the system-defined color that has the ARGB value of #FF008000. + The system-defined color that has the ARGB value of #FF008000. + + + Gets the color value that represents the GreenYellow named color. + The color value that represents the GreenYellow named color. + + + Gets the color value that represents the Honeydew named color. + The color value that represents the Honeydew named color. + + + Gets the color value that represents the HotPink named color. + The color value that represents the HotPink named color. + + + Gets the color value that represents the IndianRed named color. + The color value that represents the IndianRed named color. + + + Gets the color value that represents the Indigo named color. + The color value that represents the Indigo named color. + + + Gets the color value that represents the Ivory named color. + The color value that represents the Ivory named color. + + + Gets the color value that represents the Khaki named color. + The color value that represents the Khaki named color. + + + Gets the color value that represents the Lavender named color. + The color value that represents the Lavender named color. + + + Gets the color value that represents the LavenderBlush named color. + The color value that represents the LavenderBlush named color. + + + Gets the color value that represents the LawnGreen named color. + The color value that represents the LawnGreen named color. + + + Gets the color value that represents the LemonChiffon named color. + The color value that represents the LemonChiffon named color. + + + Gets the color value that represents the LightBlue named color. + The color value that represents the LightBlue named color. + + + Gets the color value that represents the LightCoral named color. + The color value that represents the LightCoral named color. + + + Gets the color value that represents the LightCyan named color. + The color value that represents the LightCyan named color. + + + Gets the color value that represents the LightGoldenrodYellow named color. + The color value that represents the LightGoldenrodYellow named color. + + + Gets the system-defined color that has the ARGB value of #FFD3D3D3. + Gets the system-defined color that has the ARGB value of #FFD3D3D3. + + + Gets the color value that represents the LightGreen named color. + The color value that represents the LightGreen named color. + + + Gets the color value that represents the LightPink named color. + The color value that represents the LightPink named color. + + + Gets the color value that represents the LightSalmon named color. + The color value that represents the LightSalmon named color. + + + Gets the color value that represents the LightSeaGreen named color. + The color value that represents the LightSeaGreen named color. + + + Gets the color value that represents the LightSkyBlue named color. + The color value that represents the LightSkyBlue named color. + + + Gets the color value that represents the LightSlateGray named color. + The color value that represents the LightSlateGray named color. + + + Gets the color value that represents the LightSteelBlue named color. + The color value that represents the LightSteelBlue named color. + + + Gets the color value that represents the LightYellow named color. + The color value that represents the LightYellow named color. + + + Gets the color value that represents the Lime named color. + The color value that represents the Lime named color. + + + Gets the color value that represents the LimeGreen named color. + The color value that represents the LimeGreen named color. + + + Gets the color value that represents the Linen named color. + The color value that represents the Linen named color. + + + Gets the system-defined color that has the ARGB value of #FFFF00FF.. + The system-defined color that has the ARGB value of #FFFF00FF.. + + + Gets the color value that represents the Maroon named color. + The color value that represents the Maroon named color. + + + Gets the color value that represents the MediumAquamarine named color. + The color value that represents the MediumAquamarine named color. + + + Gets the color value that represents the MediumBlue named color. + The color value that represents the MediumBlue named color. + + + Gets the color value that represents the MediumOrchid named color. + The color value that represents the MediumOrchid named color. + + + Gets the color value that represents the MediumPurple named color. + The color value that represents the MediumPurple named color. + + + Gets the color value that represents the MediumSeaGreen named color. + The color value that represents the MediumSeaGreen named color. + + + Gets the color value that represents the MediumSlateBlue named color. + The color value that represents the MediumSlateBlue named color. + + + Gets the color value that represents the MediumSpringGreen named color. + The color value that represents the MediumSpringGreen named color. + + + Gets the color value that represents the MediumTurquoise named color. + The color value that represents the MediumTurquoise named color. + + + Gets the color value that represents the MediumVioletRed named color. + The color value that represents the MediumVioletRed named color. + + + Gets the color value that represents the MidnightBlue named color. + The color value that represents the MidnightBlue named color. + + + Gets the color value that represents the MintCream named color. + The color value that represents the MintCream named color. + + + Gets the color value that represents the MistyRose named color. + The color value that represents the MistyRose named color. + + + Gets the color value that represents the Moccasin named color. + The color value that represents the Moccasin named color. + + + Gets the color value that represents the NavajoWhite named color. + The color value that represents the NavajoWhite named color. + + + Gets the color value that represents the Navy named color. + The color value that represents the Navy named color. + + + Gets the color value that represents the OldLace named color. + The color value that represents the OldLace named color. + + + Gets the color value that represents the Olive named color. + The color value that represents the Olive named color. + + + Gets the color value that represents the OliveDrab named color. + The color value that represents the OliveDrab named color. + + + Gets the system-defined color that has the ARGB value of #FFFFA500.. + The system-defined color that has the ARGB value of #FFFFA500.. + + + Gets the color value that represents the OrangeRed named color. + The color value that represents the OrangeRed named color. + + + Gets the color value that represents the Orchid named color. + The color value that represents the Orchid named color. + + + Gets the color value that represents the PaleGoldenrod named color. + The color value that represents the PaleGoldenrod named color. + + + Gets the color value that represents the PaleGreen named color. + The color value that represents the PaleGreen named color. + + + Gets the color value that represents the PaleTurquoise named color. + The color value that represents the PaleTurquoise named color. + + + Gets the color value that represents the PaleVioletRed named color. + The color value that represents the PaleVioletRed named color. + + + Gets the color value that represents the PapayaWhip named color. + The color value that represents the PapayaWhip named color. + + + Gets the color value that represents the PeachPuff named color. + The color value that represents the PeachPuff named color. + + + Gets the color value that represents the Peru named color. + The color value that represents the Peru named color. + + + Gets the color value that represents the Pink named color. + The color value that represents the Pink named color. + + + Gets the color value that represents the Plum named color. + The color value that represents the Plum named color. + + + Gets the color value that represents the PowderBlue named color. + The color value that represents the PowderBlue named color. + + + Gets the system-defined color that has the ARGB value of #FF800080.. + The system-defined color that has the ARGB value of #FF800080.. + + + Gets the system-defined color that has the ARGB value of #FFFF0000. + The system-defined color that has the ARGB value of #FFFF0000. + + + Gets the color value that represents the RosyBrown named color. + The color value that represents the RosyBrown named color. + + + Gets the color value that represents the RoyalBlue named color. + The color value that represents the RoyalBlue named color. + + + Gets the color value that represents the SaddleBrown named color. + The color value that represents the SaddleBrown named color. + + + Gets the color value that represents the Salmon named color. + The color value that represents the Salmon named color. + + + Gets the color value that represents the SandyBrown named color. + The color value that represents the SandyBrown named color. + + + Gets the color value that represents the SeaGreen named color. + The color value that represents the SeaGreen named color. + + + Gets the color value that represents the SeaShell named color. + The color value that represents the SeaShell named color. + + + Gets the color value that represents the Sienna named color. + The color value that represents the Sienna named color. + + + Gets the color value that represents the Silver named color. + The color value that represents the Silver named color. + + + Gets the color value that represents the SkyBlue named color. + The color value that represents the SkyBlue named color. + + + Gets the color value that represents the SlateBlue named color. + The color value that represents the SlateBlue named color. + + + Gets the color value that represents the SlateGray named color. + The color value that represents the SlateGray named color. + + + Gets the color value that represents the Snow named color. + The color value that represents the Snow named color. + + + Gets the color value that represents the SpringGreen named color. + The color value that represents the SpringGreen named color. + + + Gets the color value that represents the SteelBlue named color. + The color value that represents the SteelBlue named color. + + + Gets the color value that represents the Tan named color. + The color value that represents the Tan named color. + + + Gets the color value that represents the Teal named color. + The color value that represents the Teal named color. + + + Gets the color value that represents the Thistle named color. + The color value that represents the Thistle named color. + + + Gets the color value that represents the Tomato named color. + The color value that represents the Tomato named color. + + + Gets the system-defined color that has the ARGB value of #00FFFFFF. + The system-defined color that has the ARGB value of #00FFFFFF. + + + Gets the color value that represents the Turquoise named color. + The color value that represents the Turquoise named color. + + + Gets the color value that represents the Violet named color. + The color value that represents the Violet named color. + + + Gets the color value that represents the Wheat named color. + The color value that represents the Wheat named color. + + + Gets the system-defined color that has the ARGB value of #FFFFFFFF. + The system-defined color that has the ARGB value of #FFFFFFFF. + + + Gets the color value that represents the WhiteSmoke named color. + The color value that represents the WhiteSmoke named color. + + + Gets the system-defined color that has the ARGB value of #FFFFFF00. + The system-defined color that has the ARGB value of #FFFFFF00. + + + Gets the color value that represents the YellowGreen named color. + The color value that represents the YellowGreen named color. + + + Provides classes that allow developers to define the app settings that appear in the settings pane of the Windows shell. The settings pane provides a consistent place for users to access app settings. + + + Provides methods to show the accounts pane and also to enable the app to register callbacks when the accounts flyout is about to be displayed. + + + Occurs when the user opens the accounts pane. Handling this event lets the app initialize the accounts commands and pause its UI until the user closes the pane. + + + Gets an AccountsSettingsPane object that is associated with the current app view (that is, with CoreWindow). + The account settings pane. + + + Displays the account settings pane. + + + Provides data for the AccountCommandsRequested event. + + + Gets the SettingsCommand collection for the account settings pane. + The settings commands. + + + Gets the CredentialCommand collection for the account settings pane. + The credential commands. + + + Gets the deferral object for the AccountCommandsRequested event. + The deferral object. + + + Gets or sets the header text for the account settings pane. + The header text. + + + Gets the WebAccountCommand collection for the account settings pane. + The web account collection. + + + Gets the WebAccountProviderCommand collection for the account settings pane. + The web account provider command collection. + + + Enables the app to signal when it has finished populating command collections while handling the AccountCommandsRequested event. + + + Signals that the app has finished populating command collections while handling the AccountCommandsRequested event. + + + Represents a command for changing web account credentials in the account settings pane. + + + Initializes a new instance of the CredentialCommand class with a PasswordCredential object. + The password credential. + + + Initializes a new instance of the CredentialCommand class with a PasswordCredential object and a CredentialCommandCredentialDeletedHandler delegate. + The password credential. + The delegate that handles credential deletion. + + + Gets the delegate that's invoked by the account settings pane when the user deletes a credential. + The delegate that handles credential deletion. + + + Gets the password credential that the current command applies to. + The password credential. + + + Represents the method that's invoked by the account settings pane when the user deletes a credential. + The credential command that corresponds with the delegate. + + + Creates a settings command object that represents a settings entry. This settings command can be appended to the ApplicationCommands vector. + + + Gets the command for a web account in the account settings pane. + The command. + + + Creates a new settings command. + The ID of the command. + The label for the command, which is displayed in the settings pane. + The event handler that is called when the user selects this command in the settings pane. + + + Gets or sets the command ID. + The command ID. + + + Gets or sets the handler for the event that is raised when the user selects the command. + The event handler associated with the command. + + + Gets or sets the label for the command. + The label for the command. + + + Specifies the edge of the screen where the Settings charms appear. + + + The Settings charm appears on the right edge of the screen. + + + The Settings charm appears on the left edge of the screen. + + + A static class that enables the app to control the Settings Charm pane. The app can add or remove commands, receive a notification when the user opens the pane, or open the pane programmatically. + + + Occurs when the user opens the settings pane. Listening for this event lets the app initialize the setting commands and pause its UI until the user closes the pane. + + + Gets a value indicating whether the Settings charm appears on the left or right edge of the screen. + The location of the Settings charm. + + + Gets a SettingsPane object that is associated with the current app view (that is, with CoreWindow). + The settings pane. + + + Displays the Settings Charm pane to the user. + + + Contains properties that are only available during the CommandsRequested event. + + + A vector that is available during the CommandsRequested event. Append SettingsCommand objects to it to make them available to the SettingsPane UI. + The vector of SettingsCommand objects. + + + Contains arguments that are available from the event object during the CommandsRequested event. + + + An instance of SettingsPaneCommandsRequest that is made available during the CommandsRequested event. + The commands request object. + + + Specifies actions that your app enables on an web account instance in the account settings pane. + + + No action. + + + The app attempts to connect to the web account. + + + The app removes the web account from the account settings pane. + + + The app displays details about the web account. + + + The app displays UI for managing the web account. + + + The app does a custom action with the web account. + + + Specifies actions that your app does on an web account. + + + The app attempts to connect to the web account. + + + The app removes the web account from the account settings pane. + + + The app displays details about the web account. + + + The app displays UI for managing the web account. + + + The app does a custom action with the web account. + + + Associates a command with a WebAccount in the account settings pane. + + + Initializes a new instance of the WebAccountCommand class. + The web account to associate with the current command. + The delegate that handles the command. + A bitmask of web account actions. + + + Gets the actions that the command performs on the web account in the accounts pane. + The actions for the web account. + + + Gets the delegate that's invoked when the user selects an account and a specific action in the account settings pane. + The handler. + + + Gets the web account that's associated with the current command. + The web account. + + + Represents the method that's invoked when the user selects an account and a specific action in the account settings pane. + The command that's done against the web account in the accounts pane. + The data for the command. + + + Provides data for the WebAccountCommandInvokedHandler delegate. + + + Gets the action for the web account in the accounts pane. + The action. + + + Associates a provider command with a WebAccountProvider in the account settings pane. + + + Initializes a new instance of the WebAccountProviderCommand class. + The web account provider. + The delegate that handles the provider command. + + + Gets the delegate that's invoked when the user selects an account and a specific action in the accounts pane. + The handler. + + + Gets the web account provider that's associated with the current command. + The web account provider. + + + Represents the method that's invoked when the user selects an account and a specific action in the account settings pane. + The provider command that's done against the web account in the accounts pane. + + + Provides the basic user interface window components, including core input events and event dispatch. + + + Specifies the set of reasons that a CoreWindow's Activated event was raised. + + + The window was activated by a call to Activate. + + + The window was deactivated. + + + The window was activated by pointer interaction. + + + Specifies the set of cursor types. + + + The left-upward (northwest) arrow Windows cursor. + + + The "cross" Windows cursor. + + + A custom cursor. + + + The "hand" Windows cursor. + + + The " + + + The "I"-shaped Windows cursor used for text selection. + + + The "cross arrow" Windows cursor used for user interface (UI) element sizing. + + + The "right-upward, left-downward" dual arrow Windows cursor often used for element sizing. + + + The up-down dual arrow Windows cursor often used for vertical (height) sizing. + + + The "left-upward, right-downward" dual arrow Windows cursor often used for element sizing. + + + The left-right dual arrow Windows cursor often used for horizontal (width) sizing. + + + The red "circle slash" Windows cursor often used to indicate that a UI behavor cannot be performed. + + + The up arrow Windows cursor. + + + The cycling Windows "wait" cursor often used to indicate that an element or behavior is in a wait state and cannot respond at the time. + + + Defines the priority for window event dispatches. + + + Lowest priority. Use this priority for background tasks. Delegates are processed when the window's main thread is idle and there is no input pending in the queue. + + + Low priority. Delegates are processed if there are no higher priority events pending in the queue. + + + Normal priority. Delegates are processed in the order they are scheduled. + + + High priority. Delegates are invoked immediately for all synchronous requests. Asynchronous requests are queued and processed before any other request type.Do not use this priority level in your app. It is reserved for system events. Using this priority can lead to the starvation of other messages, including system events. + + + Specifies the set of exclusive event-processing options passed to ProcessEvents. + + + Dispatch all currently available events in the queue. If no events are pending, wait for the next new event. + + + Dispatch one event if it is currently pending in the queue. If no events are pending, do not wait for a new event to be raised but instead return immediately. + + + Wait for new events and dispatch all available events. Continue this behavior until the window is closed or the application calls the Close method on the CoreWindow instance. + + + Dispatch all events currently pending in the queue. If no events are pending, do not wait for a new event to be raised but instead return immediately. This option is provided specifically for view provider implementations with IFrameworkView, and to be used in Windows Store app using DirectX with C++. + + + Specifies the flow order for text in a window. + + + Text is flowed from left to right. + + + Text is flowed from right to left. (For example, this can be used with Arabic script or other RTL languages.) + + + Specifies the set of possible states for a virtual key. + + + The key is up or in no specific state. + + + The key is pressed down for the input event. + + + The key is in a toggled or modified state (for example, Caps Lock) for the input event. + + + Specifies the set of possible accelerator key events that can invoke a callback. + + + A character key is pressed. + + + A dead character key is pressed. (A dead character key is a key that modifies the next keypress, like an accent character.) + + + A key is pressed down. + + + A key is raised. + + + A system character key is pressed. + + + A system dead character key is pressed. + + + A system key is pressed down. + + + A system key is raised. + + + A Unicode character key is pressed. + + + Specifies the rank of an object as the probable target, relative to other objects that intersect the touch contact area. + + + The object is the most probable target. + + + The object is the least probable target. + + + Specifies user input modalities. These values can be combined. + + + No input. + + + Expose touch input events. + + + Expose pen input events. + + + Expose mouse input events. + + + Specifies the set of physical key status items that can be obtained. + + + The number of times a key was pressed. + + + The scan code for a key that was pressed. + + + Whether the key that was pressed maps to an extended ASCII character. + + + Whether the menu key is currently pressed down. + + + Whether a key is currently pressed down. + + + Whether a key has moved from a pressed to a released status. + + + Contains the rank of an object as the probable target of the touch contact area. + + + Rank of an object as the probable target compared to the other objects that intersect the touch contact area. The value is a CoreProximityEvaluationScore. + + + Adjusted touch point that hits the closest object identified by the value of Score. + + + Defines the set of arguments returned to an app after a window input or behavior event. + + + Specifies the property that gets or sets whether the event was handled. + True if the event has been handled by the appropriate delegate; false if it has not. + + + Specifies an interface for a window object and its input events as well as basic user interface behaviors. + + + Specifies the property that gets the automation provider assigned to this window. + The automation provider for this window. + + + Specifies the property that gets the bounding rectangle of the window. + The bounding rectangle of the window, in device-independent pixel (DIP). + + + Specifies a property that gets the set of custom properties for the window. + The set of custom properties for the window, represented as tuples. + + + Specifies a property that gets the event dispatcher for the window. + The event dispatcher for the window. + + + Specifies the property that gets or sets the horizontal origin of the window's reading order alignment. + The flow direction of the window's reading layout. + + + Specifies a property that gets or sets whether input is enabled for the window. + True if input is enabled for the window; false if it is disabled. + + + Specifies a property that gets or sets the cursor used by the window. + The window's cursor. + + + Specifies a property that gets the position of the pointer. + The current position of the cursor in device-independent pixels (DIPs). + + + Specifies the property that gets whether the window is visible or not. + True if the window is visible on the screen; false if it is not. + + + Specifies a method that activates the window. + + + Specifies the method that closes the window and exits the message loop. + + + Specifies a method that returns the state of a virtual key asynchronously. + The state of the supplied virtual key when the input event was raised. + The virtual key for which state will be returned. + + + Specifies a method that gets the state of a key. + The state of the supplied virtual key when the input event was raised. + The virtual key for which state will be returned. + + + Specifies a method that disables pointer capture for the window. + + + Specifies a method that enables pointer capture for the window. + + + Specifies the event that is fired when the window completes activation or deactivation. + + + Specifies the event that is fired when a request for an automation handler is generated. + + + Specifies the event that is fired when a new character is received by the input queue. + + + Specifies the event that is fired when a window is closed (or the app terminates altogether). + + + Specifies an event that occurs when input is enabled or disabled for the window. + + + Specifies the event that is fired when a non-system key is pressed down. + + + Specifies the event that is fired when a non-system key is released after a press. + + + Specifies the event that occurs when a pointer moves to another window. + + + Specifies the event that occurs when a pointer moves into the bounding box of the window. + + + Specifies the event that occurs when the pointer moves outside the bounding box of the window. + + + Specifies the event that occurs when a pointer moves within the bounding box of the window. + + + Specifies the event that occurs when a mouse button is clicked or the digitizer surface has been touched by a finger or pen. + + + Specifies the event that occurs when a mouse button is released or the finger or pen is lifted from the digitizer surface. + + + Specifies the event that occurs when the mouse wheel is rotated. + + + Specifies the event that raises when the window size is changed. + + + Specifies the event that occurs when a touch contact area falls within a window that is registered for touch hit testing. + + + Specifies the event that occurs when the window visibility is changed. + + + Provides the Windows Runtime core event message dispatcher. Instances of this type are responsible for processing the window messages and dispatching the events to the client. + + + Gets and sets the priority of the current task. + A CoreDispatcherPriority enumeration value that specifies the priority of the current task. + + + Gets a value that specifies whether the event dispatcher provided by this instance of CoreWindow has access to the current thread or not. + True if the event dispatcher has thread access; false it does not. + + + Starts the dispatcher processing the input event queue for this instance of CoreWindow. + The options for processing window events. + + + Schedules the provided callback on the UI thread from a worker thread, and returns the results asynchronously. + The object that provides handlers for the completed async event dispatch. + Specifies the priority for event dispatch. Set this to CoreDispatcherPriority::Normal. + The callback on which the dispatcher returns when the event is dispatched. + + + Schedules a callback on the UI thread from a worker thread at idle priority, and returns the results asynchronously. + Object that contains the results of the asynchronous action. + The callback on which the idle priority dispatcher returns when the event is dispatched. + + + Queries whether the caller should yield if there are items in the task queue of higher priority than the current task. + true if the current work item should yield to higher priority work; false if it should not. + + + Queries whether the caller should yield if there are items in the task queue of the specified priority or higher. + true if the current work item should yield to higher priority work; false if it should not. + The minimum priority level for which the current work item should yield. + + + Stops the dispatcher from processing any queued events. + + + Fired when an accelerator key is activated (pressed or held down). + + + Defines a cursor (visual pointer) object. + + + Gets the resource ID of the cursor. + The ID of the cursor. + + + Gets the type of the cursor. + The type of the cursor. + + + Creates a new CoreCursor instance of the provided cursor type. + The type of the new cursor. + The unique resource ID of the new cursor. + + + Represents the Windows Store app with input events and basic user interface behaviors. + + + Gets or sets the cursor used by the Windows Store app. + The app's cursor. + + + Gets or sets a value that indicates whether input is enabled for the Windows Store app. + True if input is enabled for the app; false if it is disabled. + + + Gets or sets the horizontal origin of the window's reading order alignment. + The flow direction of the window's reading layout. + + + Gets the automation provider assigned to this window. + The automation provider for this window. + + + Gets the bounding rectangle of the window. + The bounding rectangle of the window, in device-independent pixels (DIPs). + + + Gets the set of custom properties for the window. + The set of custom properties for the window, represented as tuples. + + + Gets the event dispatcher for the window. + The event dispatcher for the window. + + + Gets the client coordinates of the pointer. + The position of the pointer in device-independent pixel (DIP). + + + Gets a value that indicates whether the window is visible. + True if the window is visible on the screen; false if it is not. + + + Activates the window. + + + Closes a secondary window and exits the message loop. + + + Returns the state of a virtual key asynchronously. + The state of the supplied virtual key when the input event fired. + The virtual key for which state is returned. + + + Gets the state of a key. + The state of the supplied virtual key when the input event fired. + The virtual key for which state is returned. + + + Disables pointer capture for the Windows Store app. + + + Enables pointer capture for the Windows Store app. + + + Gets the CoreWindow instance for the currently active thread. + The CoreWindow for the currently active thread. + + + Is fired when the window completes activation or deactivation. + + + Is fired when a request for an automation handler is generated. + + + Is fired when a new character is received by the input queue. + + + Is fired when the app terminates. + + + Occurs when input is enabled or disabled for the Windows Store app. + + + Is fired when a non-system key is pressed. + + + Is fired when a non-system key is released after a press. + + + Occurs when a pointer moves to another Windows Store app. + + + Occurs when a pointer moves into the bounding box of the Windows Store app. + + + Occurs when the pointer moves outside the bounding box of the Windows Store app. + + + Occurs when a pointer moves within the bounding box of the Windows Store app. + + + Occurs when a mouse button is clicked, or a touch or pen contact is detected, within the bounding rectangle of the Windows Store app. + + + Occurs when a mouse button is released, or a touch or pen contact is lifted, within the bounding rectangle of the Windows Store app. + + + Occurs when the wheel button is rotated. + + + Is fired when the window size is changed. + + + Occurs when a touch contact area intersects the bounding rectangle (or polygon) of a window that is registered for touch hit testing. + + + Is fired when the window visibility is changed. + + + Contains the windows activation state information returned by the CoreWindow.Activated event. + + + Gets the activation state of the window at the time the Activated event was raised. + The activation state. + + + Specifies the property that gets or sets whether the window activation event was handled. + True if the window activation event has been handled by the appropriate delegate; false if it has not. + + + Provides the arguments returned by an automation provider request event callback. + + + Gets or sets the automation provider object returned by the request event callback. + The automation provider object returned by the callback. + + + Gets or sets whether the automation provider request event has been handled. + True if the automation provider request event has been handled; false if it has not. + + + Provides the arguments returned by the event raised when a character is received by the input queue. + + + Gets the key code of the character whose input raised the event. + The key code of the character received by the input queue. + + + Gets the status of the physical key press that raised the character-received event. + The status of the key that was pressed. + + + Gets or sets whether the character-received event was handled or not. + True if the character received event has been handled; false if it has not. + + + Contains the set of arguments returned to an app after a window input or behavior event. + + + Specifies the property that gets or sets whether the event was handled. + True if the event has been handled by the appropriate delegate; false if it has not. + + + Contains the window input state returned by the CoreWindow.InputEnabled event. + + + Gets whether the window is enabled for input. + True if the window is enabled for input; false if it is not. + + + Gets or sets whether the input enable event was handled. + True if the input enable event was handled by the appropriate delegate; false if it was not. + + + Contains the arguments returned by a virtual key event. + + + Gets the status of a key at the time the event is fired. + The status of the key. + + + Gets the virtual key that maps to the key that was pressed. + The virtual key value. + + + Gets or sets whether the key press event was handled. + True if the key press event has been handled by the appropriate delegate; false if it has not. + + + Contains the arguments returned by the last pointer event. + + + Gets the pointer data of the last pointer event. + Information about the state and screen position of the pointer. + + + Gets the keyboard key or keys used to modify the pointer input, such as the "Ctrl" key when pressed in conjunction with another key, as in Ctrl+C. + The active key modifiers. + + + Gets or sets whether the pointer event was handled. + True if the pointer event has been handled by the appropriate delegate; false if it has not. + + + Retrieves the pointer data for up to the last 64 pointer locations since the last pointer event. + The data for each pointer. + + + Contains the arguments returned by the TouchHitTesting event. + + + Gets or sets the proximity evaluation score for an object relative to the touch contact area. + Proximity evaluation of an object. + + + Gets the bounding rectangle of the touch contact area. + Bounding rectangle of the touch contact area. + + + Gets the screen coordinates of the touch point reported by the touch digitizer. + Screen position of the input pointer, in device-independent pixel (DIP). + + + Gets or sets a value indicating whether the TouchHitTesting event was handled. + True if the event is handled; otherwise, false. + + + Returns a ranking for the rectangle as the probable touch target and an adjusted touch point within the rectangle. The rank is determined through a comparison of targeting heuristics for all rectangles that intersect the touch contact area. + The CoreProximityEvaluation structure that holds the rank and adjusted touch point data. + The Rect that defines the bounding box of the UI element. + + + Returns the rank of a polygon as the probable touch target, compared to all other polygons that intersect the touch contact area, and an adjusted touch point within the polygon. + The CoreProximityEvaluation structure that holds the rank and adjusted touch point data. + The array of x-y screen coordinates that define the shape of the UI element (the number of vertices in the polygon). This value must be greater than or equal to 3. + + + Contains the argument returned by a window size change event. + + + Gets the new size of the window. + The new size of the window. + + + Gets or sets whether the window size event was handled. + True if the window size event has been handled by the appropriate delegate; false if it has not. + + + Contains the arguments returned by the event fired when a CoreWindow instance's visibility changes. + + + Gets whether the window is visible or not. + True if the event is handled; otherwise, false. + + + Gets or sets a value indicating whether the VisibilityChanged event was handled. + True if the event is handled; otherwise, false. + + + Represents the method that handles CoreWindow dispatch events. + + + Represents the method that handles CoreWindow idle priority dispatch events. + The set of arguments returned by the callback. + + + Defines the arguments returned by a IdleDispatchedHandler callback. + + + Gets a value that indicates whether the event dispatcher's message queue is empty or not. + true if the event dispatcher's message queue is empty; false if it is not. + + + Provides an interface that defines the basic behavior for an accelerator key. + + + Defines the event that is fired when an accelerator key is pressed or activated. + + + Provides the arguments returned by an accelerator key event callback. + + + Gets the type of the accelerator key event that invoked the callback. + The type of the accelerator key event that invoked the callback. + + + Gets the status of the accelerator key for which the event was raised. + The status of the accelerator key. + + + Gets the virtual key code for the keypress in the accelerator key event. + The virtual key code of the key that was pressed. + + + Gets or sets whether the accelerator key event was handled or not. + True if the accelerator key event has been handled; false if it has not. + + + Provides the basic behavior for an accelerator key. + + + Fired when an accelerator key is pressed or activated. + + + Defines the initialization behavior for apps that use CoreWindow. + + + Specifies the method that provides the initial CoreWindow instance for an app. + The new app window. + + + Defines a type used to manage CoreWindow.SizeChanged events. + + + Gets or sets whether the caller should wait for the new layout to complete. + true if the caller should wait for the new layout to complete; false if it should not. + + + Notifies the parent CoreWindow object that the new layout has completed. + + + Gets an instance of CoreWindowResizeManager for the running app's current CoreWindow. + An instance of CoreWindowResizeManager for the running app's current CoreWindow. + + + Defines the base interface for an input source used by a CoreWindow. + + + Gets the event dispatcher for the window. + The event dispatcher for the window. + + + Gets or sets a value that indicates whether input is enabled for the Windows Store app. + True if input is enabled for the app; false if it is disabled. + + + Occurs when input is enabled or disabled for the Windows Store app. + + + Defines the behavior of pointer input (for processing on a worker thread). + + + Occurs if the pointer input source has capture functionality. + True if the pointer input source has capture functionality; false if it does not. + + + Gets or sets the current pointer cursor type. + The current pointer cursor. + + + Gets the current position of the pointer in screen coordinates. + The current position of the pointer, in screen coordinates. + + + Stops the capture of pointer input data. + + + Starts the capture of pointer input data, if the pointer input device supports it. + + + Occurs when the pointer input capture stream fails or is lost. + + + Occurs when the pointer enters a UI element. + + + Occurs when the pointer exits a UI element. + + + Occurs when the pointer is moved. + + + Occurs when a press action (such as a screen press or mouse click) is received for the pointer. + + + Occurs when a release action (such as a screen press-release or mouse click-release) is received for the pointer. + + + Occurs when the pointer wheel (mouse or virtual) has changed position. + + + Surfaces core input API for interoperation scenarios. + + + Gets or sets a value that indicates whether input is enabled for the Windows Store app. + true if input is enabled for the app; false if it is disabled. + + + Gets the event dispatcher for the window. + The event dispatcher for the window. + + + Gets or sets the cursor used by the Windows Store app. + The app's cursor. + + + Gets a value that reports whether the window has pointer capture. + true if the window has pointer capture; otherwise, false. + + + Gets the client coordinates of the pointer. + The position of the pointer in device-independent pixel (DIP). + + + Disables pointer capture for the Windows Store app. + + + Enables pointer capture for the Windows Store app. + + + Occurs when input is enabled or disabled for the Windows Store app. + + + Occurs when a pointer moves to another Windows Store app. + + + Occurs when a pointer moves into the bounding box of the Windows Store app. + + + Occurs when the pointer moves outside the bounding box of the Windows Store app. + + + Occurs when a pointer moves within the bounding box of the Windows Store app. + + + Occurs when a mouse button is clicked, or a touch or pen contact is detected, within the bounding rectangle of the Windows Store app. + + + Occurs when a mouse button is released, or a touch or pen contact is lifted, within the bounding rectangle of the Windows Store app. + + + Occurs when the wheel button is rotated. + + + Provides a mechanism to receive input for a XAML framework element hosted in another framework, such as a DirectX interop framework. + + + Gets or sets whether input is enabled for the hosted XAML framework element. + true if input is enabled; false if it is not. + + + Gets the input event dispatcher for the hosted XAML framework element. + The dispatcher object for the hosted XAML framework element. + + + Gets the pointer cursor behavior for interactions with the hosted XAML framework element. + The pointer cursor object. + + + Indicates whether the input device supports input capture. + true if the input device supports capture (recording of input data); false if it does not. + + + Gets the current pointer position in the hosted XAML framework. + The current pointer position. + + + Gets whether the current hosted XAML control element has focus. + true if the element has focus; false if it does not. + + + Stops the capture of pointer input data (if the pointing device supports input capture). + + + Starts the capture of pointer input data (if the pointing device supports input capture). + + + Gets the current status of a virtual keypress. + Enumeration value that indicates the current state of the supplied virtual key. + Enumeration value that indicates the key from which to retrieve status. + + + Raised when the hosted XAML control is enabled for input. + + + Raised when the pointer input capture stream is lost. + + + Raised when the pointer enters the hosted XAML element. + + + Raised when the pointer exits the hosted XAML element. + + + Raised when the pointer is moved for the active hosted XAML element. + + + Raised when the pointer is "pressed" (such as a mouse button click or full screen press)for the active hosted XAML element. + + + Raised when the pointer is released (such as when a mouse button click or screen press is released) for the active hosted XAML element. + + + Raised when the mouse wheel is rotated for the active hosted XAML element. + + + Raised when a character is received (such as from a completed key press sequence) by the hosted XAML element. + + + Raised when a key is pressed in for the current active hosted XAML element. + + + Raised when a key press is released for the current active hosted XAML element. + + + Raised when a hosted XAML element gets focus. + + + Raised when a hosted XAML element loses focus. + + + Raised for a touch hit test on a hosted XAML element. + + + Defines a method for setting the desired size of a popup window. + + + Sets the desired size of the popup. + The desired size of the popup. + + + Defines a child dialog of an app window. + + + Gets or sets the title of the dialog. + The title of the dialog. + + + Gets or sets a value that indicates whether any UI interaction event message is slightly delayed or not. This delay prevents a user from accidentally invoking an action on the dialog window. + true if a fractional delay is introduced to any interactions with the dialog; false if it is not. + + + Gets or sets the index of the dialog window's default command. + The index value of the dialog window's default command (such as OK). + + + Gets and sets the command index value for the dialog cancel operation. + The command index value for the dialog cancel operation. + + + Gets or sets the delegate called when the back button on the dialog is selected. + The delegate called when the back button on the dialog is selected. + + + Gets the set of user interface commands (UI) available on the dialog. + The set of UI commands available on the dialog. + + + Gets the maximum size of the dialog. + The maximum size of the dialog, in pixels. + + + Gets the minimum size of the dialog. + The minimum size of the dialog, in pixels. + + + Displays the dialog and asynchronously waits for the user to take an action. + The action performed by the user on the dialog, as well as information about the action. + + + Creates an instance of the CoreWindowDialog class with the supplied title. + The title of the dialog. + + + Creates a default instance of the CoreWindowDialog class. + + + Is fired when the dialog is displayed. + + + Defines a child flyout of an app window. + + + Gets or sets the title of the flyout. + The title of the flyout. + + + Gets or sets a value that indicates whether any UI interaction event message is slightly delayed or not. This delay prevents a user from accidentally invoking an action on the flyout window. + true if a fractional delay is introduced to any interactions with the flyout; false if it is not. + + + Gets or sets the index of the flyout window's default command. + The index value of the flyout window's default command (such as OK). + + + Gets or sets the delegate called when the back button on the flyout is selected. + The delegate called when the back button on the flyout is selected. + + + Gets the set of user interface commands available on the flyout. + The set of user interface commands available on the flyout. + + + Gets the maximum size of the flyout. + The maximum size of the flyout, in pixels. + + + Gets the minimum size of the flyout. + The minimum size of the flyout, in pixels. + + + Displays the flyout and asynchronously waits for the user to take an action. + The action performed by the user on the flyout, as well as information about the action. + + + Creates an instance of the CoreWindowFlyout class at the supplied position. + The pixel position on the screen where the flyout is to originate. The position provides the upper-leftmost corner of the flyout. + + + Creates an instance of the CoreWindowFlyout class at the specified position with the supplied title. + The pixel position on the screen where the flyout is to originate. The position provides the upper-leftmost corner of the flyout. + The title of the flyout. + + + Is fired when the flyout is displayed. + + + The classes and their properties that are exposed through this namespace retrieve the raw scaling, translation, and opacity parameters used in Windows animations. + + + Exposes a collection of individual animation effects that are performed on a specific target to make up a complete Windows opacity, scaling, or translation animation. + + + Creates an AnimationDescription object with a specific animation and target. + The animation effect to apply to the target. + The target of the animation effect. + + + Gets the collection of animations that are associated with the AnimationDescription object. + A collection of IPropertyAnimation instances, each of which represents an animation effect specified for this AnimationDescription object. + + + Gets the maximum cumulative delay time for the animation to be applied to the collection of objects in a target. + The delay limit time, expressed in 100-nanosecond units. + + + Gets the amount of time between the application of the animation effect to each object in a target that contains multiple objects. The StaggerDelay, together with the StaggerDelayFactor and DelayLimit, is one of the three elements used to control the relative timing of the animation effects. + The stagger delay time, expressed in 100-nanosecond units. + + + Gets a multiplier that is applied to each occurrence of the stagger delay, increasing or decreasing the previous delay instance by that amount. + The factor to apply to the stagger delay. + + + Gets the z-order position of an AnimationDescription object relative to other AnimationDescription objects in the same animation effect. + The z-order value. + + + Specifies an animation. + + + An object increases in size to reveal additional content. + + + An object decreases in size to hide content. + + + An object changes position. No more specific animation applies. + + + A contextual control fades in. + + + A contextual control fades out. + + + An object is added to a list. + + + An object is removed from a list. + + + An object is added to a collection that is arranged in a grid. + + + An object is removed from a collection that is arranged in a grid. + + + An object is added to search results that are arranged in a grid. + + + An object is removed from search results that are arranged in a grid. + + + An object is added to a vertically arranged list of search results. + + + An object is removed from a vertically arranged list of search results. + + + UI is brought in from the edge of the screen. + + + A section of content appears on the screen. + + + UI displayed at the edge of the screen is removed. + + + A section of content is removed from the screen. + + + A pop-up control appears on the screen. + + + A pop-up control is removed from the screen. + + + The pointing device (such as a mouse or touch) has engaged on an item. + + + The pointing device (such as a mouse or touch) has disengaged from an item. + + + The user has begun dragging an item. + + + The user has stopped dragging an item. + + + Large-scale content replacement is occuring. + + + UI expands around a tapped or clicked target. + + + UI collapses around a tapped or clicked target. + + + A drag source has moved between two items. + + + A drag source is no longer between two items. + + + An object has been selected through the swipe interaction. + + + An object has been deselected through the swipe interaction. + + + Triggered by a press and hold on an item that can be cross-slide selected. + + + A page of content is brought in to the display. + + + One page is replaced by another page. + + + One item is faded out as another fades in in its place. + + + Contents of a tile move up or down to show a part of the tile that is normally hidden. + + + Update a tile's badge overlay. + + + Specifies a participant in an animation. + + + The only participant in an single-target animation. + + + Objects that are being added. + + + Objects affected by the animation, such as objects that move out of the way when another object is dropped between them. + + + The background object of the item. + + + The content of the item. + + + Objects that are being deleted. + + + Objects that have been deselected through a cross-slide deselect interaction. + + + Objects that are being dragged. + + + Objects that are currently hidden. + + + New content to replace old content. + + + Old content that is being replaced by new content. + + + An outline border around an area. + + + Objects that are left behind after other items have been removed. + + + Objects that become visible in an expansion. + + + A row that is being added to a grid. + + + A row that is about to be removed from a grid. + + + Objects that are selected through a cross-slide select interaction. + + + Objects, such as checkmarks, that indicate that an item is selected. + + + Objects previously invisible that are becoming visible. + + + Objects that have been tapped or clicked on. + + + Describes properties of animations that are common to all animation effects. + + + Gets the location of the first control point for the cubic Bzier curve that describes how this property of this object should animate over time. + The location of the control point. + + + Gets the location of the second control point for the cubic Bzier curve that describes how this property of this object should animate over time. + The location of the control point. + + + Gets the amount of time between when the animation is instructed to begin and when that animation actually begins to draw. + The amount of time to delay before starting an animation. + + + Gets the amount of time over which the animation should be performed. This does not include the delay. + The duration of the animation. + + + Gets the type of animation represented by this object. + One of the animation type values. + + + Provides methods that enable you to retrieve the parameters of an opacity (fade in or fade out) animation. + + + Gets the location of the first control point for the cubic Bzier curve that describes how the opacity should animate over time. + The location of the control point. + + + Gets the location of the second control point for the cubic Bzier curve that describes how the opacity should animate over time. + The location of the control point. + + + Gets the amount of time between when the opacity animation is instructed to begin and when that animation actually begins to draw. + The amount of time to delay before starting the opacity animation. + + + Gets the amount of time over which the opacity animation should be performed. This does not include the delay. + The duration of the animation. + + + Gets the object's final opacity. + The final opacity. A value of 0.0 represents full transparency and a value of 1.0 represents full opacity. + + + Gets the object's initial opacity. + The initial opacity, if any. A value of 0.0 represents full transparency and a value of 1.0 represents full opacity. + + + Gets the type of animation represented by this object. + One of the animation type values. + + + Provides methods that enable you to retrieve animation property values that are common to all property animation types. + + + Gets the location of the first control point for the cubic Bzier curve that describes how this property of this object should animate over time. + The location of the control point. + + + Gets the location of the second control point for the cubic Bzier curve that describes how this property of this object should animate over time. + The location of the control point. + + + Gets the amount of time between when the animation is instructed to begin and when that animation actually begins to draw. + The amount of time to delay before starting an animation. + + + Gets the amount of time over which the animation should be performed. This does not include the delay. + The duration of the animation. + + + Gets the type of animation represented by this object. + One of the animation type values. + + + Specifies the animation type represented by a PropertyAnimation object. + + + Animate the size of the object, magnifying or shrinking. The corresponding object is the ScaleAnimation. + + + Move the object. The corresponding object is the TranslationAnimation. + + + Animate the object's transparency. The corresponding object is the OpacityAnimation. + + + Provides methods that enable you to retrieve the parameters for a scaling (growing or shrinking) animation. + + + Gets the location of the first control point for the cubic Bzier curve that describes how the scale should animate over time. + The location of the control point. + + + Gets the location of the second control point for the cubic Bzier curve that describes how the scale should animate over time. + The location of the control point. + + + Gets the amount of time between when the scale animation is instructed to begin and when that animation actually begins to draw. + The amount of time to delay before starting the scaling animation. + + + Gets the amount of time over which the scale animation should be performed. This does not include the delay. + The duration of the animation. + + + Gets the final horizontal scale factor for the object. + The final horizontal scale factor by which to multiply the value. + + + Gets the final vertical scale factor for the object. + The final vertical scale factor by which to multiply the value. + + + Gets the initial horizontal scale factor for the object. + The initial horizontal scale factor, if any, by which to multiply the value. + + + Gets the initial vertical scale factor for the object. + The initial vertical scale factor, if any, by which to multiply the value. + + + Gets the center point for the scaling animation, expressed as a point relative to the object's normal size. + The normalized center point. + + + Gets the type of animation represented by this object. + One of the animation type values. + + + Provides methods that enable you to retrieve the parameters for a translation (move to a new location) animation. + + + Gets the location of the first control point for the cubic Bzier curve that describes how the translation should animate over time. + The location of the control point. + + + Gets the location of the second control point for the cubic Bzier curve that describes how the translation should animate over time. + The location of the control point. + + + Gets the amount of time between when the translation animation is instructed to begin and when that animation actually begins to draw. + The amount of time to delay before starting the translation animation. + + + Gets the amount of time over which the translation animation should be performed. This does not include the delay. + The duration of the animation. + + + Gets the type of animation represented by this object. + One of the animation type values. + + + Provides support for the Windows input system. + + + Contains event data for the CrossSliding event. + + + Gets the state of the CrossSliding event. + State of the CrossSliding event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the touch contact. + The screen coordinates, in device-independent pixel (DIP). + + + Contains event data for the Dragging event. + + + Gets the state of the Dragging event. + State of the Dragging event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the mouse or pen/stylus contact. + The screen coordinates, in device-independent pixel (DIP). + + + Provides access to the events that notify an app of triggers to its edge-based UI. + + + Fires when a user cancels a show or hide action for an edge-based UI. + + + Fires to indicate that the user has successfully summoned or dismissed the edge-based UI. This occurs either when the user lifts his or her finger from a touch-enabled screen or when the user presses Win+Z on the keyboard. + + + Gets an instance of the EdgeGesture class that is used to add and remove event delegate handlers for the current view. + The currently relevant instance of the EdgeGesture object. + + + Fires when a user begins an action to summon or dismiss edge-based UI. + + + Provides access to the type of user input that triggered the edge gesture event. + + + Gets the type of user input that triggered the edge gesture event. + The user input type. + + + Provides gesture and manipulation recognition, event listeners, and settings. + + + Gets or sets a value that indicates whether manipulations during inertia are generated automatically. + True if manipulations are generated automatically; otherwise false. The default value is true. + + + Identifies whether a tap can still be interpreted as the second tap of a double tap gesture. + True if a UI element supports the double tap gesture and the time threshold to complete the gesture has not been crossed; otherwise false. + The last input pointer. + + + Causes the gesture recognizer to finalize an interaction. + + + Gets or sets a value that indicates whether the exact distance from initial contact to end of the cross-slide interaction is reported.By default, a small distance threshold is subtracted from the first position reported by the system for cross-slide interactions. If this flag is set, the distance threshold is not subtracted from the initial position. + True if the distance threshold is not subtracted; otherwise false. The default value is false. + + + Gets or sets a value that indicates whether the cross-slide axis is horizontal. + True if the cross-slide axis is horizontal; otherwise false. The default value is false. + + + Gets or sets values that indicate the distance thresholds for a CrossSliding interaction. + By default, every value in CrossSlideThresholds is set to 0.0 (CrossSliding functionality is disabled). + + + Occurs when a user performs a slide or swipe gesture (through a single touch contact) within a content area that supports panning along a single axis only. The gesture must occur in a direction that is perpendicular to this panning axis. + + + Occurs when a user performs a slide or swipe gesture with a mouse or pen/stylus (single contact). + + + Initializes a new instance of a GestureRecognizer object. + + + Gets or sets a value that indicates the gesture and manipulation settings supported by an application. + The gesture settings supported by an application. The value of this property is a bitwise OR of members of GestureSettings enumeration. + + + Occurs when a user performs a press and hold gesture (with a single touch, mouse, or pen/stylus contact). + + + Gets or sets a value that indicates the relative change in size of an object from the start of inertia to the end of inertia (when resizing, or scaling, is complete). + The relative change in size, in device-independent pixel (DIP). + + + Gets or sets a value that indicates the rate of deceleration from the start of inertia to the end of inertia (when the resizing, or expansion, manipulation is complete). + The rate of deceleration, in device-independent pixel (DIP)/ms2. + + + Gets or sets a value that indicates the final angle of rotation of an object at the end of inertia (when the rotation manipulation is complete). + The relative change in angle of rotation, in degrees. + + + Gets or sets a value that indicates the rate of deceleration from the start of inertia to the end of inertia (when the rotation manipulation is complete). + The rate of deceleration, in degrees/ms2. + + + Gets or sets a value that indicates the rate of deceleration from the start of inertia to the end of inertia (when the translation manipulation is complete). + The rate of deceleration, in device-independent pixel (DIP)/ms2. + + + Gets or sets a value that indicates the relative change in the screen location of an object from the start of inertia to the end of inertia (when the translation manipulation is complete). + The relative change in screen location, in device-independent pixel (DIP). + + + Gets a value that indicates whether an interaction is being processed. + True if the interaction (including inertia) is still being processed; otherwise false. The default value is false. + + + Gets a value that indicates whether a manipulation is still being processed during inertia (no input points are active). + True if the manipulation is still being processed during inertia; otherwise false. The default value is false. + + + Occurs when the input points are lifted and all subsequent motion (translation, expansion, or rotation) through inertia has ended. + + + Gets or sets a value that indicates whether the exact distance from initial contact to end of the interaction is reported.By default, a small distance threshold is subtracted from the first delta reported by the system. This distance threshold is intended to account for slight movements of the contact when processing a tap gesture. If this flag is set, the distance threshold is not subtracted from the first delta. + True if the distance threshold is subtracted; otherwise false. The default value is false. + + + Occurs when all contact points are lifted during a manipulation and the velocity of the manipulation is significant enough to initiate inertia behavior (translation, expansion, or rotation continue after the input pointers are lifted). + + + Occurs when one or more input points have been initiated and subsequent motion (translation, expansion, or rotation) has begun. + + + Occurs after one or more input points have been initiated and subsequent motion (translation, expansion, or rotation) is under way. + + + Gets a set of properties that are associated with the wheel button of a mouse device. + The collection of wheel button properties. The system defaults should be checked to ensure the best user experience for your app. + + + Gets or sets the center point for a rotation interaction when single pointer input is detected. + The screen location for the center of rotation, in device-independent pixel (DIP). + + + Gets or sets the radius, from the PivotCenter to the pointer input, for a rotation interaction when single pointer input is detected. + The offset between the PivotCenter point and the single pointer input, in device-independent pixel (DIP). + + + Processes pointer input and raises the GestureRecognizer events appropriate to a pointer down action for the gestures and manipulations specified by the GestureSettings property. + The input point. + + + Performs inertia calculations and raises the various inertia events. + + + Processes pointer input and raises the GestureRecognizer events appropriate to a mouse wheel action for the gestures and manipulations specified by the GestureSettings property. + The input point. + True if the Shift key is pressed; otherwise false. + True if the Ctrl key is pressed. + + + Processes pointer input and raises the GestureRecognizer events appropriate to a pointer move action for the gestures and manipulations specified by the GestureSettings property. + The pointer location history based on the PointerId . If no history is available then the value is the current location of the input pointer. + + + Processes pointer input and raises the GestureRecognizer events appropriate to a pointer up action for the gestures and manipulations specified by the GestureSettings property. + The input point. + + + Occurs when the pointer input is interpreted as a right-tap gesture. + + + Gets or sets a value that indicates whether visual feedback is displayed during an interaction. + True if feedback is displayed; otherwise false. The default is true. + + + Occurs when the pointer input is interpreted as a tap gesture. + + + Contains event data for the Holding event. + + + Gets the state of the Holding event. + State of the Holding event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the touch, mouse, or pen/stylus contact. + The screen coordinates, in device-independent pixel (DIP). + + + Contains event data for the ManipulationCompleted event. + + + Gets values that indicate the accumulated transformation deltas (translation, rotation, scale) of a completed manipulation (from the start of the manipulation to the end of inertia). + The accumulated transformation values since a ManipulationStarted event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the pointer associated with the manipulation for the last manipulation event. + The screen coordinates, in device-independent pixel (DIP). + + + Gets values that indicate the velocities of the transformation deltas (translation, rotation, scale) for a manipulation at the ManipulationCompleted event. + The velocities of the accumulated transformations since a ManipulationStarted event. + + + Contains event data for the GestureRecognizer.ManipulationInertiaStartingEvent. + + + Gets values that indicate the accumulated transformation deltas (translation, rotation, scale) for a manipulation before inertia begins. + The accumulated transformation values up to the ManipulationInertiaStarting event. + + + Gets values that indicate the changes in the transformation deltas (translation, rotation, scale) of a manipulation since the last manipulation event. + The changes in transformation values since the last event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the pointer associated with the manipulation for the last manipulation event. + The screen coordinates, in device-independent pixel (DIP). + + + Gets values that indicate the velocities of the transformation deltas (translation, rotation, scale) for a manipulation at the ManipulationInertiaStarting event. + The velocities of the transformations before inertia begins. + + + Contains event data for the ManipulationStarted event. + + + Gets values that indicate the accumulated transformation deltas (translation, rotation, scale) for a manipulation before the ManipulationStarted event. + The accumulated transformation values up to the ManipulationStarted event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the pointer associated with the manipulation for the last manipulation event. + The screen coordinates, in device-independent pixel (DIP). + + + Contains event data for the ManipulationUpdated event. + + + Gets values that indicate the accumulated transformation deltas (translation, rotation, scale) for a manipulation from the beginning of the interaction to the ManipulationUpdated event. + The accumulated transformation values up to the ManipulationUpdated event. + + + Gets values that indicate the changes in the transformation deltas (translation, rotation, scale) of a manipulation since the last manipulation event. + The changes in transformation values since the last event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the pointer associated with the manipulation for the last manipulation event. + The screen coordinates, in device-independent pixel (DIP). + + + Gets values that indicate the velocities of the transformation deltas (translation, rotation, scale) for a manipulation at the ManipulationUpdated event. + The velocities of the accumulated transformations since a ManipulationStarted event. + + + Provides properties associated with the button wheel of a mouse device. + + + Gets or sets the device-independent pixel (DIP) conversion factors for both character width and line height units (as set in the Wheel settings of the Mouse control panel). + The conversion factors for the character width (x) and line height (y). + + + Gets or sets a value that indicates the change in the angle of rotation associated with input from the wheel button of a mouse. + A value between 0.0 and 359.0 in degrees of rotation. The default value is 0.0. + + + Gets or sets a value that indicates the change in scale associated with input from the wheel button of a mouse. + The relative change in scale, in degrees. + + + Gets or sets the device-independent pixel (DIP) conversion factors for both page width and height units (as set in the Wheel settings of the Mouse control panel). + The conversion factors for the page width (x) and height (y). + + + Provides basic properties for the input pointer associated with a single mouse, pen/stylus, or touch contact. + + + Gets the ID of an input frame. + The frame ID. + + + Retrieves position and state information for the specified pointer. + The pointer property values. + The ID of the pointer. + + + Retrieves the transformed information for the specified pointer. + The pointer property values. + The ID of the pointer. + The transform to apply to the pointer. + + + Retrieves position and state information for the specified pointer, from the last pointer event up to and including the current pointer event. + The transformed pointer properties (current and historic). + The ID of the pointer. + + + Retrieves the transformed position and state information for the specified pointer, from the last pointer event up to and including the current pointer event. + The transformed pointer properties (current and historic). + The ID of the pointer. + The transform to apply to the pointer. + + + Gets a value that indicates whether the physical entity (touch, pen/stylus, or mouse button) is pressed down. + True if pressed down; false otherwise. + + + Gets information about the device associated with the input pointer. + The input device. + + + Gets a unique identifier for the input pointer. + A unique value that identifies the input pointer. + + + Gets the location of the pointer input in client coordinates. + The client coordinates, in device-independent pixel (DIP). + + + Gets extended information about the input pointer. + The extended properties exposed by the input device. + + + Gets the raw location of the pointer input in client coordinates. + The client coordinates, in device-independent pixel (DIP). + + + Gets the time when the input occurred. + The time, relative to the system boot time, in microseconds. + + + Provides extended properties for a PointerPoint object. + + + Gets the bounding rectangle of the contact area (typically from touch input). + The bounding rectangle of the contact area, using client window coordinates in device-independent pixel (DIP). + + + Gets the bounding rectangle of the raw input (typically from touch input). + The bounding rectangle of the raw input, in device-independent pixel (DIP) + + + Gets the Human Interface Device (HID) usage value of the raw input. + The extended usage of the raw input pointer. + The Human Interface Device (HID) usage page of the pointer device. Usage pages specify the class of device. For example, touch digitizers (0x0D) and generic input (0x01). + Indicates a usage in a usage page.Usage ID specify a device or property in the usagePage. For example, for touch digitizers this includes tip switch (0x42) to indicate finger contact or tip pressure (0x30). + + + Gets a value that indicates whether the input data from the pointer device contains the specified Human Interface Device (HID) usage information. + True if the input data includes usage information; otherwise false. + The Human Interface Device (HID) usage page of the pointer device. Usage pages specify the class of device. For example, touch digitizers (0x0D) and generic input (0x01). + Indicates a usage in a usage page.Usage ID specify a device or property in the usagePage. For example, for touch digitizers this includes tip switch (0x42) to indicate finger contact or tip pressure (0x30). + + + Gets a value that indicates whether the barrel button of the pen/stylus device is pressed. + True if the barrel button is pressed; otherwise false. + + + Gets a value that indicates whether the input was canceled by the pointer device. + True if the input was canceled; otherwise false. + + + Gets a value that indicates whether the input is from a digitizer eraser. + True if the input is from a digitizer eraser; otherwise false. + + + Gets a value that indicates whether the input is from a mouse tilt wheel. + True if the input is from a mouse tilt wheel; otherwise false. + + + Gets a value that indicates whether the pointer device is within detection range of a sensor or digitizer. + True if touch or pen is within detection range or mouse is over; otherwise false. + + + Gets a value that indicates whether the digitizer pen is inverted. + True if inverted; otherwise false. + + + Gets a value that indicates whether the input is from the left button of a mouse or other input method. + True if the left button is pressed; otherwise false. + + + Gets a value that indicates whether the input is from the middle button of a mouse or other input method. + True if the middle button is pressed; otherwise false. + + + Gets a value that indicates whether the input is from the primary pointer when multiple pointers are registered. + True if the input is from the pointer designated as primary; otherwise false. + + + Gets a value that indicates whether the input is from the right button of a mouse or other input method. + True if the right button is pressed; otherwise false. + + + Gets the pressed state of the first extended mouse button. + True if the button is pressed; otherwise false. + + + Gets the pressed state of the second extended mouse button. + True if the button is pressed; otherwise false. + + + Gets a value (the raw value reported by the device) that indicates the change in wheel button input from the last pointer event. + The number of notches or distance thresholds crossed since the last pointer event. The default value is 0. + + + Gets the counter-clockwise angle of rotation around the major axis of the pointer device (the z-axis, perpendicular to the surface of the digitizer). + A value between 0.0 and 359.0 in degrees of rotation. The default value is 0.0. + + + Gets the kind of pointer state change. + One of the values from PointerUpdateKind. + + + Gets a value that indicates the force that the pointer device (typically a pen/stylus) exerts on the surface of the digitizer. + A value from 0 to 1.0. The default value is 0.5. + + + Gets a value that indicates whether the pointer device rejected the touch contact. + True if the touch contact was accepted; otherwise false. + + + Gets the clockwise rotation in degrees of a pen device around its own major axis (such as when the user spins the pen in their fingers). + A value between 0.0 and 359.0 in degrees of rotation. The default value is 0.0. + + + Gets the plane angle between the Y-Z plane and the plane that contains the Y axis and the axis of the input device (typically a pen/stylus). + The value is 0.0 when the finger or pen is perpendicular to the digitizer surface, between 0.0 and 179.0 when tilted to the right of perpendicular, and between 0.0 and -179.0 when tilted to the left of perpendicular. The default value is 0.0. + + + Gets the plane angle between the X-Z plane and the plane that contains the X axis and the axis of the input device (typically a pen/stylus). + The value is 0.0 when the finger or pen is perpendicular to the digitizer surface, between 0.0 and -179.0 when tilted towards the user, and between 0.0 and 179.0 when tilted away from the user. The default value is 0.0. + + + Provides access to the visual feedback settings for pointer input. + + + Gets a PointerVisualizationSettings object associated with the current app. + The PointerVisualizationSettings object associated with the current app. + + + Gets or sets a value that indicates whether visual feedback is enabled for pen/stylus input when the barrel button is pressed. + True if feedback is enabled; otherwise false. The default value is true. + + + Gets or sets a value that indicates whether visual feedback is enabled when a pointer contact is detected. + True if feedback is enabled; otherwise false. The default value is true. + + + Contains event data for the RightTapped event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the touch, mouse, or pen/stylus contact. + The screen coordinates, in device-independent pixel (DIP). + + + Contains event data for the Tapped event. + + + Gets the device type of the input source. + The device type. + + + Gets the location of the touch, mouse, or pen/stylus contact. + The screen coordinates, in device-independent pixel (DIP). + + + Gets the number of times the tap interaction was detected. + The total number of taps. + + + Contains the distance thresholds for a CrossSliding interaction. + + + The distance, in device-independent pixel (DIP), from the initial point of contact until the selection action is initiated. + + + The distance, in device-independent pixel (DIP), from the initial point of contact until the rearrange action is initiated. + + + The distance, in device-independent pixel (DIP), from the initial point of contact until the end of the speed bump. + + + The distance, in device-independent pixel (DIP), from the initial point of contact until the speed bump is initiated. + + + Contains the accumulated transformations for the current manipulation. + + + The change in x-y screen coordinates, in device-independent pixel (DIP). + + + The change in distance between touch contacts, as a percentage. For example, if the distance between two contacts changes from 100 device-independent pixel (DIP) to 200 device-independent pixel (DIP) during a manipulation, the value of Scale would be 1.0. + + + The change in distance between touch contacts, as device-independent pixel (DIP). For example, if the distance between two contacts changes from 100 device-independent pixel (DIP) to 200 device-independent pixel (DIP) during a manipulation, the value of Expansion would be 100.0. + + + The change in angle of rotation, in degrees. + + + Contains the velocities of the accumulated transformations for the current interaction. + + + The straight line velocity in device-independent pixel (DIP) per millisecond. + + + The rotational velocity in degrees per millisecond. + + + The expansion, or scaling, velocity in device-independent pixel (DIP) per millisecond. + + + Specifies the possible states of the CrossSliding event. + + + A CrossSliding interaction has been detected. + + + A CrossSliding interaction has started but the swipe or slide gesture has not crossed the minimum distance threshold for a selection action. (See the Remarks section for a diagram showing the CrossSliding distance thresholds.)There is no correlation between Dragging in CrossSlidingState (touch) and DraggingState (mouse or pen/stylus). + + + The swipe or slide gesture has crossed the minimum distance threshold for a selection action but has not crossed the minimum distance threshold of the rearrange action. This state is valid only when SpeedBumpStart is disabled in a GestureRecognizer. + + + The swipe or slide gesture has crossed the minimum distance threshold for a selection action (and the selection speed bump) but has not crossed the maximum distance threshold of the selection speed bump. This state is valid only when both SpeedBumpStart and SelectionStart are enabled in a GestureRecognizer. + + + The swipe or slide gesture has crossed the minimum distance threshold for a selection action (and the selection speed bump) but has not crossed the maximum distance threshold of the selection speed bump. This state is valid only when SpeedBumpStart is enabled and SelectionStart is disabled in a GestureRecognizer. + + + The swipe or slide gesture has crossed the minimum distance threshold of the rearrange action. This state is valid only when RearrangeStart is enabled in a GestureRecognizer. + + + The swipe or slide gesture has stopped, the CrossSliding interaction has been completed, and the touch contact lifted. + + + Specifies the possible states of the Dragging event. + + + A dragging interaction has been detected. + + + The dragging interaction is in progress. + + + The mouse or pen/stylus contact is lifted and inertia has concluded. + + + Specifies the type of user input that triggered the edge gesture event. + + + The user made a swipe gesture on a touch-enabled screen. + + + The user entered the Win+Z key sequence on the keyboard. + + + The user performed a right mouse click. + + + Specifies the interactions that are supported by an application. + + + Disable support for gestures and manipulations. + + + Enable support for the tap gesture.Touch: tapMouse: left button clickPen/stylus: tap + + + Enable support for the double-tap gesture.Touch: double tapMouse: left button double clickPen/stylus: double tapThis gesture can be used to select a word or open a file or folder. + + + Enable support for the press and hold gesture (from a single touch or pen/stylus contact). The Holding event is raised if a time threshold is crossed before the contact is lifted, an additional contact is detected, or a gesture is started.Touch: press and holdPen/stylus: press and holdThis gesture can be used to display a context menu. + + + Enable support for the press and hold gesture through the left button on a mouse. The Holding event is raised if a time threshold is crossed before the left button is released or a gesture is started.This gesture can be used to display a context menu. + + + Enable support for a right-tap interaction. The RightTapped event is raised when the contact is lifted or the mouse button released.Touch: press and hold Mouse: press and hold, right button clickPen/stylus: press and hold, tap with barrel button pressedThis gesture can be used to display a context menu. + + + Enable support for the slide or swipe gesture with a mouse or pen/stylus (single contact). The Dragging event is raised when either gesture is detected.This gesture can be used for text selection, selecting or rearranging objects, or scrolling and panning.Mouse and pen/stylus input does not raise manipulation events (ManipulationStarted, ManipulationUpdated, and ManipulationCompleted) during the course of this interaction.Specifying support for Drag and one or more of the manipulation settings enables a single device to perform multiple actions. For example, the slide or swipe gesture can be performed with the left mouse button to select text while the wheel button can be rolled to scroll content. + + + Enable support for the slide gesture through pointer input, on the horizontal axis. The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction.This gesture can be used for rearranging objects. + + + Enable support for the slide gesture through pointer input, on the vertical axis. The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction.This gesture can be used for rearranging objects. + + + Enable support for the slide gesture through pointer input, on the horizontal axis using rails (guides). The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction.This gesture can be used for rearranging objects. + + + Enable support for the slide gesture through pointer input, on the vertical axis using rails (guides). The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction.This gesture can be used for rearranging objects. + + + Enable support for the rotation gesture through pointer input. The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction. + + + Enable support for the pinch or stretch gesture through pointer input. These gestures can be used for optical or semantic zoom and resizing an object. The ManipulationStarted, ManipulationUpdated, and ManipulationCompleted events are all raised during the course of this interaction. + + + Enable support for translation inertia after the slide gesture (through pointer input) is complete. The ManipulationInertiaStarting event is raised if inertia is enabled. + + + Enable support for rotation inertia after the rotate gesture (through pointer input) is complete. The ManipulationInertiaStarting event is raised if inertia is enabled. + + + Enable support for scaling inertia after the pinch or stretch gesture (through pointer input) is complete. The ManipulationInertiaStarting event is raised if inertia is enabled. + + + Enable support for the CrossSliding interaction when using the slide or swipe gesture through a single touch contact.This gesture can be used for selecting or rearranging objects. + + + Enable panning and disable zoom when two or more touch contacts are detected.Prevents unintentional zoom interactions when panning with multiple fingers. + + + Specifies the state of the Holding event. + + + A single contact has been detected and a time threshold is crossed without the contact being lifted, another contact detected, or another gesture started.The press and hold time threshold can be set in the Hardware and Sound control panel. + + + The single contact is lifted. + + + An additional contact is detected, a subsequent gesture (such as a slide) is detected, or the CompleteGesture method is called. + + + Specifies the types of pointer updates that are supported by an application. + + + Pointer updates not identified by other PointerUpdateKind values. + + + Left button pressed. + + + Left button released. + + + Right button pressed. + + + Right button released. + + + Middle button pressed. + + + Middle button released. + + + XBUTTON1 pressed. + + + XBUTTON1 released. + + + XBUTTON2 pressed. + + + XBUTTON2 released. + + + Provides generalized transformation functions. + + + Gets the inverse of the specified transformation. + The inverse of the pointer transformation. + + + Transforms the specified bounding rectangle. + The smallest, axis-aligned bounding box that encloses rect after the transformation. (An axis-aligned bounding box is one which has all sides parallel to the coordinate axes.) + The bounding rectangle to transform. + + + Attempts to perform the transformation on the specified input point. + True if inPoint was transformed successfully; otherwise, false. + The original input point. + The transformed input point. + + + Provides support for the Windows 8 ink system. + + + Provides properties associated with the drawing of an InkStroke. + + + Gets or sets a value that indicates the color of an InkStroke. + The ink color. Default value is black. + + + Gets or sets a value that indicates whether Bezier curves or straight line segments are used to draw an InkStroke. + True if Bezier curves are used; otherwise, false. The default value is true. + + + Creates a new InkDrawingAttributes object that is used to specify InkStroke attributes. + + + Gets or sets a value that indicates whether the pressure of the pen tip on the digitizer surface is ignored when you draw an InkStroke. + True if pressure is ignored; otherwise, false. The default value is false. + + + Gets or sets a value that indicates the shape of the pen tip when you draw an InkStroke. + The shape of the pen/stylus tip. + + + Gets or sets a value that indicates the dimensions of the pen tip when you draw an InkStroke. + The width and height of the pen tip. The default value for each is 2.0. The value of width is applied to all strokes. PenTip is specified as a rectangle or a circle. The value of height is applied to all strokes, where PenTip is specified as a rectangle. + + + Provides properties and methods to manage the input, manipulation, and processing (including handwriting recognition) of one or more InkStroke objects. + + + Adds one or more InkStroke objects to the collection managed by the InkManager. + The ink stroke to be added.stroke must be created by using the Clone method, or through a call to EndStroke or ProcessPointerUp. Empty or existing strokes are not valid. + + + Gets the bounding rectangle of the InkStroke collection that is managed by the InkManager. + The bounding rectangle of the InkStroke collection. + + + Identifies whether content on the clipboard can be added to the InkStroke collection that is managed by the InkManager. + True if content can be pasted from the clipboard; otherwise, false. + + + Copies the selected InkStroke objects (from the InkStroke collection managed by the InkManager) to the clipboard in Ink Serialized Format (ISF) format. + + + Deletes the selected InkStroke objects from the InkStroke collection managed by the InkManager. + The bounding rectangle of the selected ink strokes, or the invalidated rectangle (0, 0, 0, 0) if no strokes were removed (no selected strokes). + + + Gets a collection of potential matches for each word detected by an InkRecognizer during handwriting recognition. + The recognition results. + + + Gets the collection of handwriting recognizers. + The handwriting recognizers. + + + Retrieves all InkStroke objects in the collection managed by the InkManager. + The ink strokes. + + + Creates a new InkManager object that is used to manage InkStroke objects. + + + Asynchronously loads all InkStroke objects from the specified stream to the InkStroke collection that is managed by the InkManager. + The status of the asynchronous operation as the number of bytes fetched. For more information, see ReadAsync method. + The stream that contains the stroke collection. An IRandomAccessStream (requires IOutputStream) object can be specified instead. + + + Gets or sets the ink input mode. + The mode. + + + Moves the selected strokes. All affected strokes are re-rendered. + The bounding rectangle of the selected ink strokes. + The destination screen coordinates for the upper-left corner of the bounding rectangle of the selected strokes. + + + Adds the InkStroke content from the clipboard to the InkStroke collection that is managed by the InkManager and renders the new strokes.. + The invalidated bounding rectangle of the InkStroke collection. + The screen coordinates for the upper-left corner of the bounding rectangle of the clipboard content. + + + Processes information about the position and features of the contact point, like pressure and tilt, on initial down contact. + Information about the position and features of the contact point. + + + Processes information about the position and features of the contact point, like pressure and tilt, on up contact. + For Inking and Selecting modes, this is the bounding box for the stroke (invalidated rectangle). For Erasing mode, the invalidated rectangle is (0,0,0,0). + Information about the position and features of the contact point. + + + Processes position and state properties, such as pressure and tilt, for the specified pointer, from the last pointer event up to and including the current pointer event. + When the current InkManipulationMode is Inking or Selecting, this method returns the Point (screen position in ink space) associated with the last ProcessPointerUpdate of pointerPoint. + The input pointer for which updates are to be processed. + + + Performs handwriting recognition on one or more InkStroke objects. + The results of the recognition as a collection of InkRecognitionResult objects. Each item in the results returned by recognition represents one written word. Each word is associated with a ranked list of text strings (retrieved through a call to GetTextCandidates) as potential matches for the word. + One of the values from the InkRecognitionTarget enumeration. + + + Performs handwriting recognition on one or more InkStroke objects. + The results of the recognition as a collection of InkRecognitionResult objects.Each item in the results returned by recognition represents one written word. Each word is associated with a ranked list of text strings (retrieved through a call to GetTextCandidates) as potential matches for the word. + The set of strokes on which recognition is performed. + One of the values from the InkRecognitionTarget enumeration. + + + Asynchronously saves all InkStroke objects in the InkStroke collection that is managed by the InkManager to the specified stream. + The size of the saved stream and the status of the asynchronous operation as the number of bytes sent. For more information, see WriteAsync method. + The target stream. An IRandomAccessStream (requires IOutputStream) object can be specified instead. + + + Selects all strokes intersected by the new stroke. + The bounding rectangle of the selected ink strokes. + The start of the stroke. + The end of the stroke. + + + Selects all strokes contained entirely within the polyline. + The bounding rectangle of the selected ink strokes. + The points of the polyline. + + + Sets the default InkDrawingAttributes for all new InkStroke objects added to the InkStroke collection that is managed by the InkManager. + The default attributes that are applied to all new ink strokes. + + + Sets the default InkRecognizer used for handwriting recognition. + The InkRecognizer. + + + Updates the collection of potential text matches from handwriting recognition. + The results returned by recognition, where each InkRecognitionResult object represents one written word. Each word is associated with a ranked list of text strings (retrieved through a call to GetTextCandidates) as potential matches for the word. + + + Provides properties and methods to manage InkStroke handwriting recognition data. + + + Gets the bounding rectangle of the InkStroke data used for handwriting recognition. + The bounding rectangle of the ink strokes. + + + Retrieves the InkStroke collection used for handwriting recognition. + The collection of ink strokes. + + + Retrieves the collection of strings identified as potential matches for each word returned by handwriting recognition. + The collection of matching strings. The most likely candidate is topmost in the collection. + + + Manages all aspects of handwriting recognition. + + + Gets the name of the InkRecognizer. + The name. + + + Provides properties and methods to manage one or more InkRecognizer objects. + + + Gets a collection of InkRecognizer objects. + The collection of handwriting recognizers. + + + Creates a new InkRecognizerContainer object that is used to manage InkRecognizer objects. + + + Performs handwriting recognition on one or more InkStroke objects. + The results of the recognition as a collection of InkRecognitionResult objects.Each item in the collection represents a written word. For example, the string "this is a test" contains four words that are stored as a collection of four items. + The set of strokes on which recognition is performed. + One of the values from the InkRecognitionTarget enumeration. + + + Sets the default InkRecognizer used for handwriting recognition. + The InkRecognizer. + + + A single ink stroke, including the Bézier curve parameters used for final rendering of the stroke. + + + Gets the bounding box for the InkStroke. + The bounding box. + + + Creates a duplicate of the InkStroke. + The Clone method is not supported in Windows 8 but is reserved for future use. + The new stroke. + + + Gets or sets the properties associated with an InkStroke. + The drawing attributes. + + + Gets the rendering segments of the stroke. + The stroke rendering segments. + + + Gets whether the stroke is recognized. + True if the stroke is recognized; otherwise, false. + + + Gets whether the stroke is selected. + True if the stroke is selected; otherwise, false. + + + Builds strokes from raw pointer input. + + + Adds a new segment to the stroke. + The previous end point. This end point can be used when rendering the stroke. + The end point of the new segment. + + + Begins the stroke. + The first point for the stroke. + + + Creates a stroke from an array of points. + The new stroke. + An array of point coordinates. + + + Ends the stroke. + The stroke built from the points. + The last point for the stroke. + + + Creates a new InkStrokeBuilder object that is used to construct InkStroke objects. + + + Sets the default InkDrawingAttributes for all new InkStroke objects, after EndStroke is called for the current stroke. + The default attributes. + + + Provides properties and methods to manage the input, processing, and manipulation of one or more InkStroke objects. + + + Adds one or more InkStroke objects to the collection managed by the InkManager. + The ink stroke to be added.stroke must be created by using the Clone method, or through a call to EndStroke or ProcessPointerUp. Empty or existing strokes are not valid. + + + Gets the bounding rectangle of the InkStroke collection that is managed by the InkManager. + The bounding rectangle of the InkStroke collection. + + + Identifies whether content on the clipboard can be added to the InkStroke collection that is managed by the InkManager. + True if content can be pasted from the clipboard; otherwise, false. + + + Copies the selected InkStroke objects (from the InkStroke collection managed by the InkManager) to the clipboard in Ink Serialized Format (ISF) format. + + + Deletes the selected InkStroke objects from the InkStroke collection managed by the InkManager. + The bounding rectangle of the selected ink strokes, or the invalidated rectangle (0, 0, 0, 0) if no strokes were removed (no selected strokes). + + + Gets a collection of potential matches for each word detected by an InkRecognizer during handwriting recognition. + The recognition results. + + + Retrieves all InkStroke objects in the collection managed by the InkManager. + The ink strokes. + + + Creates a new InkStrokeContainer object that is used to manage InkStroke objects. + + + Asynchronously loads all InkStroke objects from the specified stream to the InkStroke collection that is managed by the InkStrokeContainer. + The status of the asynchronous operation as the number of bytes fetched. For more information, see ReadAsync method. + The target stream. + + + Moves the selected strokes. All affected strokes are re-rendered. + The bounding rectangle of the selected ink strokes. + The destination screen coordinates for the upper-left corner of the bounding rectangle of the selected strokes. + + + Adds the InkStroke content from the clipboard to the InkStroke collection that is managed by the InkStrokeContainer and renders the new strokes.. + The invalidated bounding rectangle of the InkStroke collection. + The screen coordinates for the upper-left corner of the bounding rectangle of the clipboard content. + + + Asynchronously saves all InkStroke objects in the InkStroke collection that is managed by the InkStrokeContainer to the specified stream. + The status of the asynchronous operation as the number of bytes sent. For more information, see WriteAsync method. + The target stream. An IRandomAccessStream (requires IOutputStream) object can be specified instead. + + + Selects all strokes intersected by the new stroke. + The bounding rectangle of the selected ink strokes. + The start of the line. + The of the line. + + + Selects all strokes contained entirely within the polyline. + The bounding rectangle of the selected ink strokes. + The points of the polyline. + + + Updates the collection of potential text matches from handwriting recognition. + The recognition results. + + + A single segment of a complete ink stroke. + + + Gets the first control point for the Bézier curve. + The control point. + + + Gets the second control point for the Bézier curve. + The control point. + + + Gets the end point of the segment. + The end point. + + + Gets the pressure of the contact on the digitizer surface. + The pressure of the contact. + + + Gets the tilt of the contact along the x axis. + The tilt along the x axis. + + + Gets the tilt of the contact along the y axis. + The tilt along the y axis. + + + Gets the twist of the contact along the rotational axis. + The twist of the contact along the rotational axis. + + + Identifies the ink input mode. + + + All points are passed to the InkStrokeBuilder and an InkStroke is created. The stroke is appended to the stroke collection of the InkManager or InkStrokeContainer. + + + All strokes are hit tested against all strokes in the stroke collection. If there is an intersection, InkManager deletes the stroke automatically and returns an invalidated rectangle for processPointerUpdate calls. + + + All points are used to create a polyline. When you call processPointerUp, the polyline is hit tested against entire stroke collection and all strokes within the polyline are marked as selected. + + + Indicates which strokes you want to include in handwriting recognition. + + + All strokes in the stroke collection are passed to the recognizer. + + + Selected (Selected) strokes are passed to the recognizer. + + + All strokes added after the last recognition pass (Recognized is false) are passed to the recognizer.This is useful in incremental recognition scenarios, such as direct tracking of ink input (no indirect controls are used to start recognition). + + + Identifies the shape of the pen tip. + + + Circular pen tip. Only the width determines the size. + + + Rectangular pen tip. Both the width and height determine the size. + + + Represents one or more InkRecognizer objects. + + + Gets the collection of handwriting recognizers. + The handwriting recognizers. + + + Performs handwriting recognition on one or more InkStroke objects. + The results of the recognition as a collection of InkRecognitionResult objects.Each item in the collection represents a written word. For example, the string "this is a test" contains four words that are stored as a collection of four items. + The set of strokes on which recognition is performed. + One of the values from the InkRecognitionTarget enumeration. + + + Sets the default InkRecognizer used for handwriting recognition. + The InkRecognizer. + + + Represents a manager for the input, processing, and manipulation of one or more InkStroke objects. + + + Adds one or more InkStroke objects to the collection managed by the InkManager. + The ink stroke to be added.stroke must be created by using the Clone method, or through a call to EndStroke or ProcessPointerUp. Empty or existing strokes are not valid. + + + Gets the bounding rectangle of the InkStroke collection that is managed by the InkManager. + The bounding rectangle of the InkStroke collection. + + + Identifies whether content on the clipboard can be added to the InkStroke collection that is managed by the InkManager. + True if content can be pasted from the clipboard; otherwise, false. + + + Copies the selected InkStroke objects (from the InkStroke collection managed by the InkManager) to the clipboard in Ink Serialized Format (ISF) format. + + + Deletes the selected InkStroke objects from the InkStroke collection managed by the InkManager. + The bounding rectangle of the selected ink strokes, or the invalidated rectangle (0, 0, 0, 0) if no strokes were removed (no selected strokes). + + + Gets a collection of potential matches for each word detected by an InkRecognizer during handwriting recognition. + The results of the recognition as a collection of InkRecognitionResult objects. + + + Retrieves all InkStroke objects in the collection managed by the InkManager. + The collection of ink strokes. + + + Asynchronously loads all InkStroke objects from the specified stream to the InkStroke collection that is managed by the InkManager. + The status of the asynchronous operation as the number of bytes fetched. For more information, see ReadAsync method. + The stream that contains the stroke collection. An IRandomAccessStream (requires IOutputStream) object can be specified instead. + + + Moves the selected strokes. All affected strokes are re-rendered. + The bounding rectangle of the selected ink strokes. + The destination screen coordinates for the upper-left corner of the bounding rectangle of the selected strokes. + + + Adds the InkStroke content from the clipboard to the InkStroke collection that is managed by the InkStrokeContainer and renders the new strokes. + The invalidated bounding rectangle of the InkStroke collection. + The screen coordinates for the upper-left corner of the bounding rectangle of the clipboard content. + + + Asynchronously saves all InkStroke objects in the InkStroke collection that is managed by the InkStrokeContainer to the specified stream. + The size of the saved stream and the status of the asynchronous operation as the number of bytes sent. For more information, see WriteAsync method. + The target stream. An IRandomAccessStream (requires IOutputStream) object can be specified instead. + + + Selects all strokes intersected by the new stroke. + The bounding rectangle of the selected ink strokes. + The start of the line. + The end of the line. + + + Selects all strokes contained entirely within the polyline. + The bounding rectangle of the selected ink strokes. + The points of the polyline. + + + Updates the collection of potential text matches from handwriting recognition. + The updated collection of InkRecognitionResult objects. + + + Contains classes that encapsulate tile, toast, and badge notifications. + + + Defines the content, associated metadata, and expiration time of an update to a tile's badge overlay. A badge can display a number from 1 to 99 or a status glyph. + + + Creates and initializes a new instance of the BadgeNotification. + The XML content that defines the badge update. + + + Gets the XML that defines the value or glyph used as the tile's badge. + The object that contains the XML. + + + Gets or sets the time that Windows will remove the badge from the tile. + The date and time that the notification should be removed. + + + Specifies the template to use for a tile's badge overlay. Used by BadgeUpdateManager.getTemplateContent. + + + A system-provided glyph image. For more information, see Badge overview. + + + A numerical value from 1 to 99. Values greater than 99 are accepted, but in those cases "99+" is displayed instead of the actual number. In scenarios where your numbers are expected to be greater than 99, you should consider using a glyph instead. + + + Creates BadgeUpdater objects that you use to manipulate a tile's badge overlay. This class also provides access to the XML content of the system-provided badge templates so that you can customize that content for use in updating your badges. + + + Creates and initializes a new instance of the BadgeUpdater, which lets you change the appearance or content of the badge on the calling app's tile. + The object you will use to send changes to the app tile's badge. + + + Creates and initializes a new instance of the BadgeUpdater for a specified app tile's badge, usually the tile of another app in the package. The BadgeUpdater lets you change the appearance or content of that badge. + The object you will use to send changes to the application tile's badge. + The unique ID of the tile whose badge you want to update. + + + Creates and initializes a new instance of the BadgeUpdater, which enables you to change the appearance or content of a badge on a secondary tile. The tile can belong to the calling app or any other app in the same package. + The object you will use to send badge updates to the tile identified by tileID. + The unique ID of the tile. + + + Gets the XML content of one of the predefined badge templates so that you can customize it for a badge update. + The object that contains the template XML. + The type of badge template, either a glyph or a number. + + + Updates a badge overlay on the specific tile that the updater is bound to. + + + Removes the badge from the tile that the updater is bound to. + + + Begins a series of timed updates for the badge from a web resource that the updater is bound to. Updates begin at a specified time. + The Uniform Resource Identifier (URI) from which the XML content of the badge update will be retrieved. + The time at which the Uniform Resource Identifier (URI) should first be polled for new badge content. + The frequency with which the Uniform Resource Identifier (URI) is polled for new badge content, following the initial update at startTime. + + + Begins a series of timed updates for the badge from a web resource that the updater is bound to, beginning immediately. + The Uniform Resource Identifier (URI) from which the XML content of the badge update will be retrieved. + The frequency with which the Uniform Resource Identifier (URI) is polled for new badge content. + + + Cancels the current series of timed updates for the badge that the updater is bound to. + + + Applies a change to the badge's glyph or number. + The object that supplies the new XML definition for the badge. + + + Specifies the limitations on tile or toast notification display. + + + All notifications raised by this app can be displayed. + + + The user has disabled notifications for this app. + + + The user or administrator has disabled all notifications for this user on this computer. + + + An administrator has disabled all notifications on this computer through group policy. The group policy setting overrides the user's setting. + + + This app has not declared itself toast capable in its package.appxmanifest file. This setting is found on the manifest's Application UI page, under the Notification section. For an app to send toast, the Toast Capable option must be set to "Yes". + + + Specifies the time period for subsequent polls of the tile or badge data source for new content. + + + Poll every half an hour. + + + Poll every hour. + + + Poll every 6 hours. + + + Poll every 12 hours. + + + Poll once a day. + + + Defines the visual content and timing for a single, non-recurring scheduled update to a tile. + + + Gets the XML description of the content of the scheduled tile update. + The object that contains the notification content. + + + Gets the time at which the tile is scheduled to be updated. + The date and time that the notification will be updated. + + + Gets or sets the time after which the tile notification should no longer be shown. + The time after which the tile update should no longer be shown. + + + Gets or sets the unique ID that is used to identify the scheduled tile in the schedule. + The notification's identifier. This string is limited to 16 characters. + + + Gets or sets a string that Windows can use to prevent duplicate notification content from appearing in the queue. + A string of 16 characters or less (plus a terminating null character) that identifies the notification in the stack. While there is no set form for the string content, we recommend that it should relate to the content of the notification. + + + Creates and initializes a new instance of the ScheduledTileNotification object for use with a TileUpdater. + The object that provides the content for the tile notification. + The time at which the tile should be updated with the notification information. + + + Contains the XML that defines the toast notification that will display at the scheduled time. + + + Gets the XML that defines this scheduled toast notification. + The object that contains the XML. + + + Gets the time that this toast notification is scheduled to be displayed. + The time that this toast notification is scheduled to be displayed. + + + Gets a developer-specified value used to identify a specific scheduled toast. + The identifier. This string is limited to 16 characters. + + + Gets the maximum number of times to display this notification. + The maximum number of times to display this notification. This will be a value between 1 and 5, inclusive. + + + Creates and initializes a new instance of a ScheduledToastNotification that will be displayed only once. + The XML that defines the toast notification content. + The date and time that Windows should display the toast notification. You must call AddToSchedule before this time. + + + Creates and initializes a new instance of a recurring ScheduledToastNotification. + The XML that defines the toast notification content. + The date and time that Windows should first display the toast notification. You must call AddToSchedule before this time. + The amount of time between occurrences of the notification. To be valid, this value must be no less than 60 seconds and no more than 60 minutes. + The maximum number of times to display this notification. Valid values range from 1 to 5. + + + Gets the amount of time between occurrences of the notification. + The time between occurrences of the notification. This value will be between 60 seconds and 60 minutes, inclusive. + + + Defines an update to a tile, including its visuals, identification tag, and expiration time. + + + Gets the XML description of the notification content, which you can then manipulate to alter the notification. + The object that contains the notification content. + + + Gets or sets the time that Windows will remove the notification from the tile. + The date and time that the notification should be removed. + + + Gets or sets a string that Windows can use to prevent duplicate notification content from appearing in the queue. + A string of 16 characters or less (plus a terminating null character) that identifies the notification in the stack. While there is no set form to the string content, we recommend that it should relate to the content of the notification. + + + Creates and initializes a new instance of the TileNotification object for use with a TileUpdater. + The object that provides the content for the tile notification. + + + Specifies the template to use in a tile or tile update. + + + One image that fills the entire tile; no text. + TileSquareImagemay be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Image. + + + One string of large block text over a single, short line of bold, regular text. + TileSquareBlock may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Block + + + One header string in larger text on the first line; three strings of regular text on each of the next three lines. Text does not wrap. + TileSquareText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Text01 + + + One header string in larger text on the first line, over one string of regular text wrapped over a maximum of three lines. + TileSquareText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Text02 + + + Four strings of regular text on four lines. Text does not wrap. + TileSquareText03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Text03 + + + One string of regular text wrapped over a maximum of four lines. + TileSquareText04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150Text04 + + + Top: One square image, no text. Bottom: One header string in larger text on the first line, three strings of regular text on each of the next three lines. Text does not wrap. + TileSquarePeekImageAndText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150PeekImageAndText01 + + + Top: Square image, no text. Bottom: One header string in larger text on the first line, over one string of regular text wrapped over a maximum of three lines. + TileSquarePeekImageAndText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150PeekImageAndText02 + + + Top: Square image, no text. Bottom: Four strings of regular text on four lines. Text does not wrap. + TileSquarePeekImageAndText03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150PeekImageAndText03 + + + Top: Square image, no text. Bottom: One string of regular text wrapped over a maximum of four lines. + TileSquarePeekImageAndText04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileSquare150x150PeekImageAndText04 + + + One wide image that fills the entire tile, no text. + TileWideImage may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Image + + + One large square image with four smaller square images to its right, no text. + TileWideImageCollection may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150ImageCollection + + + One wide image over one string of regular text wrapped over a maximum of two lines. The width of the text area depends on whether a logo/short name or a badge is displayed. + TileWideImageAndText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150ImageAndText01 + + + One wide image over two strings of regular text on two lines. Text does not wrap. The width of the text area depends on whether a logo/short name or a badge is displayed. + TileWideImageAndText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150ImageAndText02 + + + Four strings of regular, unwrapped text on the left; large block text over a single, short string of bold, regular text on the right. + TileWideBlockAndText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150BlockAndText01 + + + One string of regular text wrapped over a maximum of four lines on the left; large block text over a single, short string of bold, regular text on the right. + TileWideBlockAndText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150BlockAndText02 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: One header string in larger text over one string of regular text wrapped over a maximum of four lines. + TileWidePeekImageCollection01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection01 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + TileWidePeekImageCollection02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection02 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: One string of large text wrapped over a maximum of three lines. + TileWidePeekImageCollection03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection03 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: One string of regular text wrapped over a maximum of five lines. + TileWidePeekImageCollection04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection04 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + TileWidePeekImageCollection05 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection05 + + + Top: One large square image with four smaller square images to its right, no text. Bottom: On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + TileWidePeekImageCollection06 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageCollection06 + + + Top: One wide image. Bottom: One string of regular text wrapped over a maximum of five lines. + TileWidePeekImageAndText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageAndText01 + + + Top: One wide image. Bottom: Five strings of regular text on five lines. Text does not wrap. + TileWidePeekImageAndText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImageAndText02 + + + Top: One wide image. Bottom: One header string in larger text over one string of regular text that wraps over a maximum of four lines. + TileWidePeekImage01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage01 + + + Top: One wide image. Bottom: One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + TileWidePeekImage02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage02 + + + Top: One wide image. Bottom: One string of large text wrapped over a maximum of three lines. + TileWidePeekImage03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage03 + + + Top: One wide image. Bottom: One string of regular text wrapped over a maximum of five lines. + TileWidePeekImage04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage04 + + + Top: One wide image. Bottom: On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + TileWidePeekImage05 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage05 + + + Top: One wide image. Bottom: On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + TileWidePeekImage06 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150PeekImage06 + + + On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + TileWideSmallImageAndText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150SmallImageAndText01 + + + On the left, one small image; on the right, one header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + TileWideSmallImageAndText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150SmallImageAndText02 + + + On the left, one small image; on the right, one string of regular text wrapped over a maximum of five lines. + TileWideSmallImageAndText03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150SmallImageAndText03 + + + On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + TileWideSmallImageAndText04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150SmallImageAndText04 + + + On the left, one header string in larger text over one string of regular text wrapped over a maximum of four lines; on the right, one small image with 3:4 dimensions. + TileWideSmallImageAndText05 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150SmallImageAndText05 + + + One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + TileWideText01 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text01 + + + One header string in larger text over eight short strings arranged in two columns of four lines each. Columns are of equal width. + TileWideText02 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text02 + + + One string of large text wrapped over a maximum of three lines. + TileWideText03 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text03 + + + One string of regular text wrapped over a maximum of five lines. + TileWideText04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text04 + + + Five strings of regular text on five lines. Text does not wrap. + TileWideText05 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text05 + + + Ten short strings of regular text, arranged in two columns of five lines each. Columns are of equal width. + TileWideText06 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text06 + + + One header string in larger text over eight short strings of regular text arranged in two columns of four lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText10, but the first column is wider. + TileWideText07 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text07 + + + Ten short strings of regular text arranged in two columns of five lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText11, but the first column is wider. + TileWideText08 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text08 + + + One header string in larger text over one string of regular text wrapped over a maximum of four lines. + TileWideText09 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text09 + + + One header string in larger text over eight short strings of regular text arranged in two columns of four lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText07, but the first column is narrower. + TileWideText10 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text10 + + + Ten short strings of regular text arranged in two columns of five lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText08, but the first column is narrower. + TileWideText11 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text11 + + + Windows 8 name: TileSquareImage One square image that fills the entire tile, no text. + + + Windows 8 name: TileSquareBlock One string of large block text over a single, short line of bold, regular text. + + + Windows 8 name: TileSquareText01 One header string in larger text on the first line; three strings of regular text on each of the next three lines. Text does not wrap. + + + Windows 8 name: TileSquareText02 One header string in larger text on the first line, over one string of regular text wrapped over a maximum of three lines. + + + Windows 8 name: TileSquareText03 Four strings of regular text on four lines. Text does not wrap. + + + Windows 8 name: TileSquareText04 One string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileSquarePeekImageAndText01 Top: One square image, no text. Bottom: One header string in larger text on the first line, three strings of regular text on each of the next three lines. Text does not wrap. + + + Windows 8 name: TileSquarePeekImageAndText02 Top: Square image, no text. Bottom: One header string in larger text on the first line, over one string of regular text wrapped over a maximum of three lines. + + + Windows 8 name: TileSquarePeekImageAndText03 Top: Square image, no text. Bottom: Four strings of regular text on four lines. Text does not wrap. + + + Windows 8 name: TileSquarePeekImageAndText04 Top: Square image, no text. Bottom: One string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWideImage One wide image that fills the entire tile, no text. + + + Windows 8 name: TileWideImageCollection One large square image with four smaller square images to its right, no text. + + + Windows 8 name: TileWideImageAndText01 One wide image over one string of regular text wrapped over a maximum of two lines. The width of the text area depends on whether a logo/short name or a badge is displayed. This template allows branding only as "logo" or "none", but not "name". If you set the branding attribute to "name", it will automatically revert to "logo". + + + Windows 8 name: TileWideImageAndText02 One wide image over two strings of regular text on two lines. Text does not wrap. The width of the text area depends on whether a logo/short name or a badge is displayed. This template allows branding only as "logo" or "none", but not "name". If you set the branding attribute to "name", it will automatically revert to "logo". + + + Windows 8 name: TileWideBlockAndText01 Four strings of regular, unwrapped text on the left; large block text over a single, short string of bold, regular text on the right. + + + Windows 8 name: TileWideBlockAndText02 One string of regular text wrapped over a maximum of four lines on the left; large block text over a single, short string of bold, regular text on the right. + + + Windows 8 name: TileWidePeekImageCollection01 Top: One large square image with four smaller square images to its right, no text. Bottom: One header string in larger text over one string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWidePeekImageCollection02 Top: One large square image with four smaller square images to its right, no text. Bottom: One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + + + Windows 8 name: TileWidePeekImageCollection03 Top: One large square image with four smaller square images to its right, no text. Bottom: One string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWidePeekImageCollection04 Top: One large square image with four smaller square images to its right, no text. Bottom: One string of regular text wrapped over a maximum of five lines. + + + Windows 8 name: TileWidePeekImageCollection05 Top: One large square image with four smaller square images to its right, no text. Bottom: On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWidePeekImageCollection06 Top: One large square image with four smaller square images to its right, no text. Bottom: On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWidePeekImageAndText01 Top: One wide image. Bottom: One string of regular text wrapped over a maximum of five lines. + + + Windows 8 name: TileWidePeekImageAndText02 Top: One wide image. Bottom: Five strings of regular text on five lines. Text does not wrap. + + + Windows 8 name: TileWidePeekImage01 Top: One wide image. Bottom: One header string in larger text over one string of regular text that wraps over a maximum of four lines. + + + Windows 8 name: TileWidePeekImage02 Top: One wide image. Bottom: One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + + + Windows 8 name: TileWidePeekImage03 Top: One wide image. Bottom: One string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWidePeekImage04 Top: One wide image. Bottom: One string of regular text wrapped over a maximum of five lines. + + + Windows 8 name: TileWidePeekImage05 Top: One wide image. Bottom: On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWidePeekImage06 Top: One wide image. Bottom: On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWideSmallImageAndText01 On the left, one small image; on the right, one string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWideSmallImageAndText02 On the left, one small image; on the right, one header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + + + Windows 8 name: TileWideSmallImageAndText03 On the left, one small image; on the right, one string of regular text wrapped over a maximum of five lines. + + + Windows 8 name: TileWideSmallImageAndText04 On the left, one small image; on the right, one header string of larger text on the first line over one string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWideSmallImageAndText05 On the left, one header string in larger text over one string of regular text wrapped over a maximum of four lines; on the right, one small image with 3:4 dimensions. + + + Windows 8 name: TileWideText01 One header string in larger text on the first line, four strings of regular text on the next four lines. Text does not wrap. + + + Windows 8 name: TileWideText02 One header string in larger text over eight short strings arranged in two columns of four lines each. Columns are of equal width. + + + Windows 8 name: TileWideText03 One string of large text wrapped over a maximum of three lines. + + + Windows 8 name: TileWideText04 One string of regular text wrapped over a maximum of five lines. + + + Windows 8 name: TileWideText05 Five strings of regular text on five lines. Text does not wrap. + + + Windows 8 name: TileWideText06 Ten short strings of regular text, arranged in two columns of five lines each. Columns are of equal width. + + + Windows 8 name: TileWideText07 One header string in larger text over eight short strings of regular text arranged in two columns of four lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText10, but the first column is wider. + + + Windows 8 name: TileWideText08 Ten short strings of regular text arranged in two columns of five lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText11, but the first column is wider. + + + Windows 8 name: TileWideText09 One header string in larger text over one string of regular text wrapped over a maximum of four lines. + + + Windows 8 name: TileWideText10 One header string in larger text over eight short strings of regular text arranged in two columns of four lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText07, but the first column is narrower. + + + Windows 8 name: TileWideText11 Ten short strings of regular text arranged in two columns of five lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileWideText08, but the first column is narrower. + + + Two main text groups separated by a blank area: One string of large text, which can wrap over up to two lines, sitting over two strings of unwrapped regular text on two lines. Four strings on four lines, separated slightly into two sets. To the side is one string of large block text over a single, short line of bold, regular text. + + + One string of large block text; two lines of large header text (no wrap); two sets of two strings in two lines (no wrap). Image in the background. If the image color is light in comparison to the text, it is darkened a bit to make the text more readable. + + + One image that fills the entire tile; no text. + + + One image above one string of regular text wrapped over a maximum of two lines. + + + One image above two strings of regular text on two lines. Text does not wrap. + + + Background: a single image that fills the entire tile. Foreground: One string of text wrapped over a maximum of three lines. + + + Background: a single image that fills the entire tile. Foreground: At the top, one string of large text wrapped over a maximum of two lines; at the bottom, one string of regular text wrapped over a maximum of three lines. + + + Background: a single image that fills the entire tile. Foreground: At the top, one string of large text wrapped over a maximum of two lines; at the bottom, three strings of regular text on three lines that do not wrap. + + + TileSquare310x310ImageCollection with the addition of a text ribbon across the bottom of the tile. The text area contains one string of regular text wrapped over a maximum of two lines. Note that the text area cuts off the bottom of the large image. + + + TileSquare310x310ImageCollection with the addition of a text ribbon across the bottom of the tile. The text area contains two strings of regular text on two lines. Text does not wrap. Note that the text area cuts off the bottom of the large image. + + + Four small square images overlaid across the top one large, full-tile, square image. Note that the small images cut off the top of the large image. + + + Three sets of information, each of which consists of one small square image to the left of one header string in larger text over two strings of regular text on the next two lines. Text does not wrap. + + + Up to three sets of information, each of which consists of one small square image to the left of one string of regular text wrapped over a maximum of three lines. + + + Up to three sets of information, each of which consists of one small square image to the left of one string of large text over one string of regular text wrapped over a maximum of two lines. + + + Up to three sets of information, each of which consists of one small rectangular image to the right of one string of large text over one string of regular text wrapped over a maximum of two lines. Images wider than the image area will be cropped. + + + One header string in larger text on the first line, nine strings of regular text on the next nine lines. Text does not wrap. + + + One header string in larger text over eighteen short strings arranged in two columns of nine lines each. Columns are of equal width. + + + Eleven strings of regular text on eleven lines. Text does not wrap. + + + Twenty-two short strings of regular text, arranged in two columns of eleven lines each. Columns are of equal width. + + + One header string in larger text over eighteen short strings of regular text arranged in two columns of nine lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileSquare310x310Text07, but the first column is wider. + + + Twenty-two short strings of regular text arranged in two columns of eleven lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileSquare310x310Text08, but the first column is wider. + + + One header string in larger text over eighteen short strings of regular text arranged in two columns of nine lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileSquare310x310Text05, but the first column is narrower. + + + Twenty-two short strings of regular text arranged in two columns of eleven lines each. The column widths are such that the first column acts as a label and the second column as the content. This template is similar to TileSquare310x310Text06, but the first column is narrower. + + + Three stacked notifications, each containing one header string in larger text on the first line, two strings of regular text on the next two lines. Text does not wrap. + + + Three stacked notifications, each containing one string of regular text wrapped over a maximum of three lines. + + + Three stacked notifications, each containing one header string in larger text over one string of regular text wrapped over a maximum of two lines. + + + One medium-sized image in the upper right corner (upper left on right-to-left systems) over a single, unwrapped header string. Beneath this are two sets of regular text: the first wrapped over a maximum of two lines, the second a single line only. + + + One line of header text across the top, over three sets of information, each of which consists of one small square image to the left of one header string in larger text over two strings of regular text on the next two lines. Text does not wrap. + + + One line of header text wrapped over a maximum of two lines. Beneath are two more, slightly separated lines of header text, each one line only. At the bottom are two lines of regular text, each of one line only. + + + Creates TileUpdater objects used to change and update Start menu tiles. This class also provides access to the XML content of the system-provided tile templates so that you can customize that content for use in updating your tiles. + + + Creates and initializes a new instance of the TileUpdater, which lets you change the appearance of the calling app's tile. + The object you will use to send changes to the app's tile. + + + Creates and initializes a new instance of the TileUpdater for a tile that belongs to another app in the same package as the calling app. The TileUpdater lets a developer change the appearance of that tile. + The object you will use to send changes to the tile identified by applicationId. + The Package Relative Application ID (PRAID) of the tile. + + + Creates and initializes a new instance of the TileUpdater, which enables you to change the appearance of a secondary tile. The tile can belong to the calling app or any other app in the same package. + The object you will use to send updates to the tile identified by tileID. + A unique ID for the tile. + + + Gets the XML content of one of the predefined tile templates so that you can customize it for a tile update. + The object that contains the XML. + The name of the template. + + + Changes the content of the specific tile that the updater is bound to. + + + Adds a ScheduledTileNotification to the schedule. + The scheduled tile update object. + + + Removes all updates and causes the tile to display its default content as declared in the app's manifest. + + + Enables the tile to queue up to five notifications. This enables the notification queue on all tile sizes. + True to enable queuing; otherwise false. + + + Enables the tile to queue up to five notifications on the medium tile. + True to enable queuing on this tile size; otherwise false. + + + Enables the tile to queue up to five notifications on the large tile. + True to enable queuing on this tile size; otherwise false. + + + Enables the tile to queue up to five notifications on the wide tile. + True to enable queuing on this tile size; otherwise false. + + + Retrieves a list of scheduled updates to the tile. + The collection of scheduled updates for this tile. + + + Removes an upcoming tile update from the schedule. + The notification to remove from the schedule. + + + Begins a series of timed updates for the tile that the updater is bound to. Update content is retrieved from a specified Uniform Resource Identifier (URI). Updates begin at a specified time. + The Uniform Resource Identifier (URI) from which the XML content of the tile update will be retrieved. + The time at which the Uniform Resource Identifier (URI) should first be polled for new tile content. + The frequency with which the Uniform Resource Identifier (URI) is polled for new tile content, following the initial update at startTime. + + + Begins a series of timed content changes for the tile that the updater is bound to, beginning immediately. + The Uniform Resource Identifier (URI) from which the XML content of the tile update will be retrieved. + The frequency with which the Uniform Resource Identifier (URI) is polled for new tile content, following the initial update at startTime. + + + Begins a series of timed updates that cycle on the tile that the updater is bound to. Update content is retrieved from an array of specified Uniform Resource Identifier (URI), the first update happening immediately and subsequent updates occurring at the periodic interval thereafter. + An array of up to five Uniform Resource Identifier (URI) from which the XML content of the cycling tile updates will be retrieved. If the array contains more than five Uniform Resource Identifier (URI), the method will fail. + The frequency with which the Uniform Resource Identifier (URI) is polled for new tile content, following the initial update at startTime. + + + Begins a series of timed updates that cycle on the tile that the updater is bound to. Update content is retrieved from an array of specified Uniform Resource Identifier (URI) with updates beginning at a specified time and subsequent updates occurring at the periodic interval thereafter. + An array of up to five Uniform Resource Identifier (URI) from which the XML content of the cycling tile updates will be retrieved. If the array contains more than five Uniform Resource Identifier (URI), the method will fail. + The time at which the initial Uniform Resource Identifier (URI) should first be polled for new content. + The frequency with which the Uniform Resource Identifier (URI) is polled for new tile content, following the initial update at startTime. + + + Gets a value that specifies whether a tile can be updated through notifications. + A value that indicates either that the tile can be updated through notifications, or who disabled them: developer, user, or administrator. + + + Cancels the current series of timed updates for the tile that the updater is bound to. + + + Applies a change in content or appearance to the tile. + The object that supplies the new XML definition for the tile's content. + + + Exposes a method that retrieves the arguments associated with a toast action initiated by the user. This lets the app tell which action was taken when multiple actions were exposed. + + + Gets the arguments associated with a toast action initiated by the user. This arguments string was included in the toast's XML payload. + The arguments string associated with the particular action. + + + Specifies the reason that a toast notification is no longer being shown. + + + The user dismissed the toast notification. + + + The app explicitly hid the toast notification by calling the ToastNotifier.hide method. + + + The toast notification had been shown for the maximum allowed time and was faded out. The maximum time to show a toast notification is 7 seconds except in the case of long-duration toasts, in which case it is 25 seconds. + + + Provides the reason that a toast notification is no longer displayed on-screen. + + + Gets the reason that a toast notification is no longer displayed on-screen. + One of the enumeration values that specify why a toast is no longer being shown. + + + Provides the error code that was generated in the process of raising a toast notification. + + + Gets the error code that was generated in the process of raising a toast notification. + One of the standard system error codes. + + + Defines the content, associated metadata and events, and expiration time of a toast notification. + + + Occurs when user activates a toast notification through a click or touch. Apps that are running subscribe to this event. + + + Gets the XML that defines the current toast notification. + The object that contains the XML. + + + Occurs when a toast notification leaves the screen, either by expiring or being explicitly dismissed by the user. Apps that are running subscribe to this event. + + + Gets or sets the time after which a toast notification should not be displayed. + The date and time after which the toast is no longer considered current or valid and should not be displayed. + + + Occurs when an error is caused when Windows attempts to raise a toast notification. Apps that are running subscribe to this event. + + + Creates and initializes a new instance of the ToastNotification. + The XML content that defines the toast notification. + + + Creates ToastNotifier objects that you use to raise toast notifications. This class also provides access to the XML content of the system-provided toast templates so that you can customize that content for use in your notifications. + + + Creates and initializes a new instance of the ToastNotification, bound to the calling application, that lets you raise a toast notification to that app. + The object you will use to send the toast notification to the app. + + + Creates and initializes a new instance of the ToastNotification, bound to a specified app, usually another app in the same package. + The object you will use to send the toast notification to the tile. + The unique ID of the app. You can't send a toast notification to a secondary tile, so this must be the ID of an app tile. + + + Gets the XML content of one of the predefined toast templates so that you can customize it for use in your notification. + The object that contains the template XML. + One of the system-provided toast templates. + + + Raises a toast notification to the specific app that the notifier is bound to. This class also lets you schedule and remove toast notifications. + + + Adds a ScheduledToastNotification for later display by Windows. + The scheduled toast notification, which includes its content and timing instructions. + + + Gets the collection of ScheduledToastNotification objects that this app has scheduled for display. + The collection of scheduled toast notifications that the app bound to this notifier has scheduled for timed display. + + + Removes the specified toast notification from the screen. + The object that specifies the toast to hide. + + + Cancels the scheduled display of a specified ScheduledToastNotification. + The notification to remove from the schedule. + + + Gets a value that tells you whether there is an app, user, or system block that prevents the display of a toast notification. + Enabled if the toast can be shown; otherwise, one or more reasons that the toast will be blocked. + + + Displays the specified toast notification. + The object that contains the content of the toast notification to display. + + + Specifies the template to use in a toast notification. + + + A large image and a single string wrapped across three lines of text. + + + A large image, one string of bold text on the first line, one string of regular text wrapped across the second and third lines. + + + A large image, one string of bold text wrapped across the first two lines, one string of regular text on the third line. + + + A large image, one string of bold text on the first line, one string of regular text on the second line, one string of regular text on the third line. + + + A single string wrapped across three lines of text. + + + One string of bold text on the first line, one string of regular text wrapped across the second and third lines. + + + One string of bold text wrapped across the first and second lines, one string of regular text on the third line. + + + One string of bold text on the first line, one string of regular text on the second line, one string of regular text on the third line. + + + Provides support for context menu and message dialogs. + + + Represents a dialog. + + + Initializes a new instance of the MessageDialog class to display an untitled message dialog that can be used to ask your user simple questions. + The message displayed to the user. + + + Initializes a new instance of the MessageDialog class to display a titled message dialog that can be used to ask your user simple questions. + The message displayed to the user. + The title you want displayed on the dialog. + + + Begins an asynchronous operation showing a dialog. + An object that represents the asynchronous operation. For more on the async pattern, see Asynchronous programming in the Windows Runtime. + + + Gets or sets the index of the command you want to use as the cancel command. This is the command that fires when users press the ESC key. + The index of the cancel command. + + + Gets an array of commands that appear in the command bar of the message dialog. These commands makes the dialog actionable. + The commands. + + + Gets or sets the message to be displayed to the user. + The message to be displayed to the user. + + + Gets or sets the index of the command you want to use as the default. This is the command that fires by default when users press the ENTER key. + The index of the default command. + + + Gets or sets the options for a MessageDialog. + The options for the dialog. + + + Gets or sets the title to display on the dialog, if any. + The title you want to display on the dialog. If the title is not set, this will return an empty string. + + + Represents a context menu. + + + Gets the commands for the context menu. + The commands for the context menu. + + + Creates a new instance of the PopupMenu class. + + + Shows the context menu at the specified client coordinates. + A IUICommand object that represents the context menu command that was invoked by the user, after the ShowAsync call completes.If no command is invoked, ShowAsync returns null. + The coordinates (in DIPs), relative to the window, of the user's finger or mouse pointer when the oncontextmenu event fired. The menu is placed above and centered on this point. For VB, C#, and C++, this window is the CoreWindow associated with the thread that is calling the context menu. + + + Shows the context menu above the specified selection. + A IUICommand object that represents the context menu command invoked by the user, after the ShowForSelectionAsync call completes.If no command is invoked, ShowForSelectionAsync returns null. + The coordinates (in DIPs) of the selected rectangle, relative to the window. The context menu is placed directly above and centered on this rectangle such that selection is not covered.For VB, C#, and C++, this window is the CoreWindow associated with the thread that is calling the context menu. + + + Shows the context menu in the preferred placement relative to the specified selection. + A IUICommand object that represents the context menu command invoked by the user, after the ShowForSelectionAsync call completes.If no command is invoked, ShowForSelectionAsync returns null. + The coordinates (in DIPs) of the selected rectangle, relative to the window. For VB, C#, and C++, this window is the CoreWindow associated with the thread that is calling the context menu. + The preferred placement of the context menu relative to the selection rectangle.The context menu is positioned in the preferredPlacement if the menu fits in the window and does not cover the selection. If the context menu does not fit in the preferred placement, another placement that does not cover the selection is used. If the context menu does not fit anywhere else, a placement that partially or wholly covers the selection is used. + + + Represents a command in a context menu. + + + Gets or sets the identifier of the command. + Represents the identifier of the command. + + + Gets or sets the handler for the event that is fired when the user selects the UICommand. + The event handler associated with the UICommand. + + + Gets or sets the label for the command. + The label for the command. + + + Creates a new instance of the UICommand class. + + + Creates a new instance of the UICommand class using the specified label. + The label for the UICommand. + + + Creates a new instance of the UICommand class using the specified label and event handler. + The label for the new command. + The event handler for the new command. + + + Creates a new instance of the UICommand class using the specified label, event handler, and command identifier. + The label for the new command. + The event handler for the new command. + The command identifier for the new command. + + + Represents a command separator in a context menu. + + + Gets or sets the identifier of the command separator. + The identifier of the command separator. + + + Gets or sets the handler for the event that is fired for the command separator. + The event handler for the command separator. + + + Gets or sets the label for the command separator. + The label for the command separator. + + + Creates a new instance of the UICommandSeparator class. + + + Represents a callback function that handles the event that is fired when the user invokes a context menu command. + Represents the invoked command. + + + Specifies less frequently used options for a MessageDialog. + + + No options are specified and default behavior is used. + + + Ignore user input for a short period. This enables browsers to defend against clickjacking. + + + Specifies where the context menu should be positioned relative to the selection rectangle. + + + Place the context menu above the selection rectangle. + + + Place the context menu above the selection rectangle. + + + Place the context menu below the selection rectangle. + + + Place the context menu to the left of the selection rectangle. + + + Place the context menu to the right of the selection rectangle. + + + Represents a command in a context menu or message dialog box. + + + Gets or sets the identifier of the command. + Represents the identifier of the command. + + + Gets or sets the handler for the event that is fired when the user invokes the command. + The event handler for the command. + + + Gets or sets the label for the command. + The label for the command. + + + Controls the creation and lifetime of secondary tilestiles created by the user to directly access sections or experiences within an app. + + + Specifies the color of the tile's foreground text. + + + A Windows-specified default dark text color. + + + A Windows-specified default light text color. + + + Creates, enumerates, and provides information about a secondary tile. + + + Gets or sets an app-defined set of information that is passed from the secondary tile to the app on activation. This property is required when you create a tile. + The argument string. This contents of this string are understood by the app. Any string longer than 2048 characters will be truncated. + + + Gets or sets the tile's background color. + BackgroundColor may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTileVisualElements.BackgroundColor. + The background color. + + + Gets or sets a long name that is associated and displayed with the tile. This name is displayed on the tile in Start, in the tile's tooltip, next to the small tile representation in the Apps list, and in some Control Panel applications. This property is required when you create a tile. + The display name. This string is limited to 256 characters. + + + Checks whether a specific secondary tile exists for the calling app. + True if the tile exists in the calling application; otherwise, false. + The unique ID string that was assigned to the tile when it was created. + + + Retrieves a list of secondary tiles created for the calling app. + An enumeration object that allows you to examine the set of tiles. + + + Retrieves a list of secondary tiles created for another app in the same package as the calling app. + An enumeration object that allows you to examine the set of tiles. + The Package Relative Application ID (PRAID) of the app. + + + Retrieves a list of secondary tiles created for all of the apps in the package of the calling app. + An enumeration object that allows you to examine the set of tiles. + + + Gets or sets whether the tile should use dark or light text. + ForegroundText may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTileVisualElements.ForegroundText. + One of the two values that specifies either the default dark or default light text. + + + Gets or sets the location of a badge logo image to represent the secondary tile on the lock screen. By supplying this image, you declare that the secondary tile is eligible to display a badge on the lock screen. + A Uniform Resource Identifier (URI) that specifies the logo image file location. + + + Gets or sets whether the secondary tile is eligible to display both a badge and a detailed tile on the lock screen. + True if the secondary tile can have a lock screen presence; otherwise, False. + + + Gets or sets the logo image used in a medium tile. This property is required when you create either a square or a wide tile. + Logo may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTileVisualElements.Square150x150Logo. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Gets or sets a phonetic version of the secondary tile name. Used with character-based languages for UI sorting purposes. + The phonetic name. + + + Displays the Pin to Start flyout, through which the user can confirm that they want to create the secondary tile. Overloads of this method let you specify the on-screen location of the flyout. + An object used to launch the asynchronous create operation as well as to retrieve information about it. + + + Displays the Pin to Start flyout above a specified location, through which the user can confirm that they want to create the secondary tile. + An object that provides information concerning the asynchronous create operation. + The point used as the lower-right corner of the Pin to Start flyout. + + + Displays the Pin to Start flyout above a specified area. This flyout is used by the user to confirm that they want to create the secondary tile. + An object that provides information concerning the asynchronous create operation. + The area that the flyout is displayed directly above. + + + Displays the Pin to Start flyout at the specified side of a specified area. This flyout is used by the user to confirm that they want to create the secondary tile. + An object that provides information concerning the asynchronous create operation. + The area to one side of which the flyout will be displayed. + The side of the rectangle where the flyout should appear. + + + Displays the Unpin from Start flyout. This flyout lets the user confirm removal of the secondary tile. + An object that provides information concerning the asynchronous delete operation. + + + Displays the Unpin from Start flyout at a specified point. This flyout lets the user confirm removal of the secondary tile. + An object that provides information concerning the asynchronous delete operation. + The point used as the lower-right corner of the Pin to Start flyout. + + + Displays the Unpin from Start flyout above a specified area. This flyout lets the user confirm removal of the secondary tile. + An object that provides information concerning the asynchronous delete operation. + The area that the secondary tile is displayed directly above. + + + Displays the Unpin from Start flyout at the specified side of a specified area. This flyout lets the user confirm removal of the secondary tile. + An object that provides information concerning the asynchronous delete operation. + The area to the side of which the flyout will be displayed. + One of the enumeration values that specifies the side of the rectangle where the flyout should be shown. + + + Gets or sets a value that determines whether the secondary tile will be reacquired through the cloud when the parent app is installed by the user, using their Microsoft account, on another computer. + True if roaming is enabled; otherwise, false. + + + Creates a SecondaryTile object. The caller must then set any mandatory properties through the object before attempting to pin, update, or delete the tile. + + + Creates a SecondaryTile object with a specific ID. This form of the constructor should be used to create a secondary tile object to perform a tile update or deletion. + A string that will uniquely identify the tile within your app. Choose a unique ID that is descriptive and meaningful to your app. If you provide the same ID as that of an existing secondary tile, the existing secondary tile will be overwritten. + + + Creates a SecondaryTile object as a medium tile. + This constructor may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTile.SecondaryTile(String, String, String, Uri, TileSize). + A string that will uniquely identify the tile within your app's package. Choose a unique ID that is descriptive and meaningful to your app. It is limited to 64 characters and must begin with a number or letter and be composed of the characters a-z, A-Z, 0-9, period (.), or underscore (_). If you provide the same ID as that of an existing secondary tile, the existing secondary tile will be overwritten. Can be set or retrieved through the TileId property. + A short name to display directly on the tile if the app chooses to do so. Anything over 40 characters will be truncated. The user has the option to change this value as part of the pinning process. Can be set or retrieved through the ShortName property. + A name, generally longer than the short name, that is displayed in the tile's tooltip and when showing small tiles, such as on the Apps or search results screens. This string is restricted to 256 characters. Can be set or retrieved through the DisplayName property. + An app-defined string meaningful to the calling application. This argument string is passed back to the app when the app is activated from the secondary tile. It will be truncated after 2048 characters. Can be set or retrieved through the Arguments property. + A value that specifies various options such as whether the name will be displayed on the secondary tile. Can be set or retrieved through the TileOptions property. + A reference to a square logo image stored at a Uniform Resource Identifier (URI). Can be set or retrieved through the Logo property. This value can be expressed using one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Creates a SecondaryTile object as a wide tile. + This constructor may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTile.SecondaryTile(String, String, String, Uri, TileSize). + A string that will uniquely identify the tile within your app's package. Choose a unique ID that is descriptive and meaningful to your app. It is limited to 64 characters and must begin with a number or letter and be composed of the characters a-z, A-Z, 0-9, period (.), or underscore (_). If you provide the same ID as that of an existing secondary tile, the existing secondary tile will be overwritten. Can be set or retrieved through the TileId property. + A short name to display directly on the tile if the app chooses to do so. Anything over 40 characters will be truncated. The user has the option to change this value as part of the pinning process. Can be set or retrieved through the ShortName property. + A name, generally longer than the short name, that is displayed in the tile's tooltip and when showing small tiles, such as on the Apps or search results screens. This string is restricted to 256 characters. Can be set or retrieved through the DisplayName property. + An app-defined string meaningful to the calling application. This argument string is passed back to the app when the app is activated from the secondary tile. It will be truncated after 2048 characters. Can be set or retrieved through the Arguments property. + A value that specifies various options such as whether the name will be displayed on the secondary tile. Can be set or retrieved through the TileOptions property. + A reference to a medium logo image stored at a Uniform Resource Identifier (URI). Can be set or retrieved through the Square150x150Logo property. This value can be expressed using one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + A reference to a wide logo image stored at a Uniform Resource Identifier (URI). Can be set or retrieved through the WideLogo property. This value can be expressed using one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Creates a SecondaryTile object that includes all of the mandatory properties required to create a medium tile. + A string that will uniquely identify the tile within your app's package. Choose a unique ID that is descriptive and meaningful to your app. It is limited to 64 characters and must begin with a number or letter and be composed of the characters a-z, A-Z, 0-9, period (.), or underscore (_). If you provide the same ID as that of an existing secondary tile, the existing secondary tile will be overwritten. Can be set or retrieved through the TileId property. + A name, generally longer than the short name, that is displayed in the tile's tooltip and when showing small tiles, such as on the Apps or search results screens. This string is restricted to 256 characters. Can be set or retrieved through the DisplayName property. + An app-defined string meaningful to the calling application. This argument string is passed back to the app when the app is activated from the secondary tile. It will be truncated after 2048 characters. Can be set or retrieved through the Arguments property. + A reference to a medium logo image stored at a Uniform Resource Identifier (URI). Can be set or retrieved through the SecondaryTileVisualElements.Square150x150Logo property. This value can be expressed using one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + The size of tile to pin. This value must be Default (which provides Windows 8 behavior), Square150x150, or Wide310x150. Any other TileSize value causes an exception to be thrown during runtime. + + + Gets or sets a short name to display directly on the tile. As of Windows 8.1 Preview, the short name is not used. + ShortName may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTile.DisplayName. + The short name. Anything over 40 characters will be truncated. The user has the option to change this value as part of the pinning process. + + + Gets or sets the small logo image, used in search results, the All Programs list, and other locations in the UI. + SmallLogo may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTileVisualElements.Square30x30Logo. + The location of the image. This must be expressed using this scheme: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. + + + Gets or sets a unique string to identify the tile within the package. This property is required when you create or delete a tile. + A unique identifier, meaningful to your app. It is limited to 64 characters and must begin with a number or letter and be composed of the characters a-z, A-Z, 0-9, period (.), or underscore (_). It cannot contain spaces, commas, or any of these characters: | > < " / ? * \ ; : ! ' + + + Gets or sets options available to a secondary tile. + TileOptions may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTile.VisualElements. + One or more enumeration values. See TileOptions for the full list of valid values. + + + Updates a secondary tile after that tile is pinned to the Start screen. + An object used to launch the asynchronous create operation as well as to retrieve information about it. + + + Gets an object through which you can get or set a secondary tile's background color, foreground text, tile images, and app name display options. + An object that represents the secondary tile. + + + Fired when a call is made to RequestCreateAsync. + + + Gets or sets the logo image used in a wide tile. This property is required when you create a wide tile. + WideLogo may be altered or unavailable for releases after Windows 8.1. Instead, use SecondaryTileVisualElements.Wide310x150Logo. + The location of the image. This can be expressed using one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Contains properties through which you can get or set a secondary tile's background color, foreground text, tile images, and app name display options. + + + Gets or sets the tile's background color. + The background color. + + + Specifies whether the tile should use dark or light text. + One of the two values that specifies either the default dark or default light text. + + + Specifies whether the app name should be displayed on the medium secondary tile. + True to display the app name on the tile; otherwise, false. The default value is false. + + + Specifies whether the app name should be displayed on the large secondary tile. + True to display the app name on the tile; otherwise, false. The default value is false. + + + Specifies whether the app name should be displayed on the wide secondary tile. + True to display the app name on the tile; otherwise, false. The default value is false. + + + Gets or sets the medium secondary tile image. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Gets or sets the square 30 x 30 secondary tile image. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Gets or sets the large secondary tile image. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Gets or sets the small secondary tile image. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Gets or sets the wide secondary tile image. + The location of the image. This can be expressed as one of these schemes: ms-appx:/// A path within the deployed app package. This path is resolved for languages and DPI plateau supported by the app. ms-appdata:///local/ A file found in the per-user app storage. + + + Specifies options available to a secondary tile. + TileOptions may be altered or unavailable for releases after Windows 8.1. Instead, use the properties specified in each value. + + + Default. Do not show the name on a secondary tile of any size. + None may be altered or unavailable for releases after Windows 8.1. Instead, use these properties individually: SecondaryTileVisualElements.ShowNameOnSquare150x150Logo SecondaryTileVisualElements.ShowNameOnWide310x150Logo SecondaryTileVisualElements.ShowNameOnSquare310x310Logo + + + Display the name on the medium version of the tile. + ShowNameOnLogo may be altered or unavailable for releases after Windows 8.1. Instead, use the SecondaryTileVisualElements.ShowNameOnSquare150x150Logo property. + + + Display the name on the wide version of the tile. + ShowNameOnWideLogo may be altered or unavailable for releases after Windows 8.1. Instead, use the SecondaryTileVisualElements.ShowNameOnWide310x150Logo property. + + + The tile will be reacquired from the cloud when the parent app is installed by the user, using their Microsoft account, on another computer. As of Windows 8.1 Preview, secondary tile roaming is the default behavior. In Windows 8, you opted into roaming. As of Windows 8.1 Preview, you opt out. If Windows detects that the running version of the tile's app dates from before Windows 8.1 Preview, the absence of CopyOnDeployment is seen as equivalent to RoamingEnabled="false". + CopyOnDeployment may be altered or unavailable for releases after Windows 8.1. Instead, use the RoamingEnabled property. + + + Specifies the size of tile to pin. Used by some secondary tile constructors. + + + Use the default size of the app tile. + + + The image size used in search results, the All Apps view, in semantic zoom, on toast notifications, and in some other parts of the UI. + + + The small tile used on the Start screen. + + + The medium tile. + + + The wide tile. + + + The large tile. + + + Provides a method to delay the display of the Pin to Start flyout, as well as methods through which you can set the visual elements of the secondary tile to be presented in that flyout as well as alternate versions of the tile that can also be presented as options. + + + Gets a set of objects that provide alternate logo images, background and foreground colors, and app name display properties. These alternates are shown to the user in the Pin to Start flyout. + An array of SecondaryTileVisualElements objects, each of which provides the information for an alternate presentation of the secondary tile. + + + Gets the approximate time at which the deferral will time-out. + The time at which the deferral will time out. + + + Retrieves a deferral object, which allows the app time to provide information and assets used in the Pin to Start flyout. + The deferral object. + + + Gets a copy of the parent secondary tile's SecondaryTileVisualElements object. The visual elements properties can be set or read through this object. + The object through which you'll access the visual element properties. + + + A deferral object used during the creation of the Pin to Start flyout. By using this object, the app can delay the display of the flyout while it gathers the information and assets that will be shown in that flyout. + + + Tells Windows that the app is ready to display the Pin to Start flyout. The app calls this method when it has finished setting the properties that specify what to show in that flyout. + + + Passed to the SecondaryTile.VisualElementsRequested event handler to provide the visual elements details. + + + Gets the VisualElementsRequest object for the event. + The object associated with the event. + + + Provides support for working with textual content. + + + Specifies the caret type. + + + The insertion point for a sequenced language; that is, characters that are typed with one key stroke. + + + The insertion point is null. + + + Specifies the options to use when doing a text search. + + + Use the default text search options; namely, use case- independent, arbitrary character boundaries. + + + Match whole words. + + + Match case; that is, a case-sensitive search. + + + Describes the degree to which a font has been stretched, compared to the normal aspect ratio of that font. + + + No defined font stretch. + + + An ultra-condensed font stretch (50% of normal). + + + An extra-condensed font stretch (62.5% of normal). + + + A condensed font stretch (75% of normal). + + + A semi-condensed font stretch (87.5% of normal). + + + The normal font stretch that all other font stretch values relate to (100%). + + + A semi-expanded font stretch (112.5% of normal). + + + An expanded font stretch (125% of normal). + + + An extra-expanded font stretch (150% of normal). + + + An ultra-expanded font stretch (200% of normal). + + + Represents the style of a font face (for example, normal or italic). + + + Represents a normal font style. + + + Represents an oblique font style. + + + Represents an italic font style. + + + Refers to the density of a typeface, in terms of the lightness or heaviness of the strokes. + + + The font weight expressed as a numeric value. See Remarks. + + + Provides a set of predefined font weights as static property values. + + + Specifies a "Black" font weight. + A FontWeight value that represents a "Black" font weight. + + + Specifies a "Bold" font weight. + A FontWeight value that represents a "Bold" font weight. + + + Specifies an "ExtraBlack" font weight. + A FontWeight value that represents an "ExtraBlack" font weight. + + + Specifies an "ExtraBold" font weight. + A FontWeight value that represents an "ExtraBold" font weight. + + + Specifies an "ExtraLight" font weight. + A FontWeight value that represents an "ExtraLight" font weight. + + + Specifies a "Light" font weight. + A FontWeight value that represents a "Light" font weight. + + + Specifies a "Medium" font weight. + A FontWeight value that represents a "Medium" font weight. + + + Specifies a "Normal" font weight. + A FontWeight value that represents a "Normal" font weight. + + + Specifies a "SemiBold" font weight. + A FontWeight value that represents a "SemiBold" font weight. + + + Specifies a "SemiLight" font weight. + A FontWeight value that represents a "SemiLight" font weight. + + + Specifies a "Thin" font weight. + A FontWeight value that represents a "Thin" font weight. + + + Defines values that indicate the state of a character or paragraph formatting property. + + + Turns off the property. + + + Turns on the property. + + + Toggles the current setting. + + + No change. + + + Specifies the horizontal position of a character relative to a bounding rectangle. + + + The character is at the left edge of the bounding rectangle. + + + The character is at the right edge of the bounding rectangle. + + + The character is at the center of the bounding rectangle. + + + Defines the default character formatting attributes of a document, or the current character formatting attributes of a text range. + + + Gets or sets whether the characters are all uppercase. + The uppercase state. + + + Gets or sets the text background (highlight) color. + The text background color. + + + Gets or sets whether the characters are bold. + The bold state. + + + Gets or sets the degree to which the font is stretched, compared to the normal aspect ratio of the font. + The degree to which the font is stretched. + + + Gets or sets the style of the font face, such as normal or italic. + The font style. + + + Gets or sets the foreground, or text, color. + The foreground color. + + + Creates a new object that is identical to this character format object. + The duplicate character format object. + + + Gets or sets whether characters are hidden. + The hidden state. + + + Determines whether this character format object has the same properties as the specified character format object. + True if the objects have the same properties, or false if they don't. + The character format object to compare against. + + + Gets or sets whether characters are in italics. + The italicized state. + + + Gets or sets the minimum font size at which kerning occurs. + The kerning size, in floating-point points. + + + Gets or sets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the characters. + The language tag. + + + Gets the link type of the text. + The link type. + + + Gets or sets the font name. + The font name. + + + Gets or sets whether characters are displayed as outlined characters. + The outlined state. + + + Gets or sets the character offset relative to the baseline. + The character offset, in floating-point points. + + + Gets or sets whether the characters are protected against attempts to modify them. + The protected state. + + + Sets the character formatting by copying another text character formatting object. + The character formatting to apply. + + + Gets or sets the font size. + The font size, in floating-point points. + + + Gets or sets whether characters are in small capital letters. + The small capitals state. + + + Gets or sets the amount of horizontal spacing between characters. + The amount of horizontal spacing, in floating-point points. + + + Gets or sets whether characters are displayed with a horizontal line through the center. + The strikethrough state. + + + Gets or sets whether characters are displayed as subscript. + The subscript state. + + + Gets or sets whether characters are displayed as superscript. + The superscript state. + + + Gets or sets the character repertoire. + The character repertoire. + + + Gets or sets the type of underlining that the characters use. + The type of underlining. + + + Gets or sets the font weight of the characters. + The font weight expressed as a numeric value. See Remarks. + + + Provides access to the content of a document, providing a way to load and save the document to a stream, retrieve text ranges, get the active selection, set default formatting attributes, and so on. + + + Decrements an internal counter that controls whether text updates are displayed immediately or batched. + The value of the internal counter. + + + Increments an internal counter that controls whether text updates are displayed immediately or batched. + The value of the internal counter. + + + Turns on undo grouping. + + + Determines whether document content can be copied to the Clipboard. + True if copying to the Clipboard is allowed; otherwise false. + + + Determines whether the Clipboard has content that can be pasted into the document. + True if the Clipboard has content that can be pasted into the document; otherwise false. + + + Determines whether one or more redo operations exist. + True if one or more redo operations exist; otherwise false. + + + Determines whether one or more undo operations exist. + True if one or more undo operations exist; otherwise false. + + + Gets or sets the caret type. + The caret type. + + + Gets or sets the default tab spacing. + The new default tab spacing. The default value is 36.0 points, or 0.5 inches. + + + Turns off undo grouping. + + + Retrieves the default character formatting attributes of the document. + The default character formatting attributes. + + + Retrieves the default paragraph formatting attributes of the document. + The default paragraph formatting attributes. + + + Retrieves a new text range for the active story of the document. + The new text range. + The starting position of the new text range, relative to the beginning of the story. + The ending position of the new text range. + + + Retrieves the degenerate (empty) text range at, or nearest to, a particular point on the screen. + The text range object. + The location of the point on the screen, in screen coordinates. + The alignment type of the specified point. + + + Gets the text in the active story (document). + The text retrieval options. + The text in the active story. + + + Loads a document from a stream. + The text options to use for the loading the document. + The random access stream that contains the document. + + + Reverses the most recent undo operation. + + + Saves the document to a stream. + The text options for saving the document. + The random access stream for saving the document. + + + Gets the active text selection. + The active text selection. + + + Sets the default character formatting attributes of the document. + The new default character formatting attributes. + + + Sets the default paragraph formatting attributes of the document. + The default paragraph formatting attributes. + + + Sets the text of the document. + Options controlling how the text is inserted into the document. + The new text. + + + Undoes the most recent undo group. + + + Gets or sets the maximum number of actions that can be stored in the undo queue. + The maximum number of undo actions. + + + Defines the default paragraph formatting attributes of a document, or the current paragraph formatting attributes of a text range. + + + Adds a new tab at the specified position. + The position of the new tab, in floating-point points relative to the left side of the page for left-to-right paragraphs, or the right side of the page for right-to-left paragraphs. A maximum of 63 tabs are allowed. Tabs beyond the page are ignored. Negative tabs are not valid. + The alignment option for the tab position. + The character used to fill the space taken by a tab character. + + + Gets or sets the paragraph alignment. + The paragraph alignment value. + + + Clears all tabs, reverting to equally spaced tabs with the default tab spacing. + + + Deletes the tab at the specified position. + The position of the tab to delete, in floating-point points. + + + Gets the amount used to indent the first line of a paragraph relative to the left indent. + The first line indentation amount, in floating-point points. + + + Creates a new object that is identical to this paragraph format object. + The duplicate paragraph format object. + + + Retrieves information about the specified tab. + The zero-based index of the tab to retrieve. + The tab's position, in floating-point points. This parameter is zero if the tab does not exist. + The alignment option for the tab position. + The character used to fill the space taken by a tab character. + + + Determines whether this paragraph format object has the same properties as the specified paragraph format object. + True if the objects have the same properties, or false if they don't. + The paragraph format object to compare against. + + + Gets or sets whether page breaks are allowed in paragraphs. + A value that indicates whether page breaks are allowed. + + + Gets or sets whether page breaks are allowed between paragraphs in a range. + The value that indicates whether page breaks are allowed. + + + Gets the amount used to indent all lines except the first line of a paragraph. + The amount of left indentation, in floating-point points. Indentation is relative to the left margin. + + + Gets the paragraph line-spacing value. + The line spacing value. The meaning depends on the value of the LineSpacingRule property. The line spacing value is in floating-point points except when the line-spacing rule is Multiple or Percent. + + + Gets the paragraph line-spacing rule. + The paragraph line-spacing rule. + + + Gets or sets the alignment to use for bulleted and numbered lists. + The alignment for bulleted and numbered lists. + + + Gets or sets the list level index used with paragraphs. + The list level index. It can be a value of 0 or higher, as described in the following table. Value Meaning 0 No list. 1 First-level (outermost) list. 2 Second-level (nested) list. This is nested under a level 1 list item. 3 Third-level (nested) list. This is nested under a level 2 list item. And so on Nesting continues similarly. Up to three levels are common in HTML documents. + + + Gets or sets the starting value or code of a list numbering sequence. + The starting value or code of a list numbering sequence. + + + Gets or sets the style used to mark the item paragraphs in a list. + The style used to mark the item paragraphs. + + + Gets or sets the list tab setting, which is the distance between the first indent and the start of the text on the first line. + The list tab setting. + + + Gets or sets the kind of characters used to mark the item paragraphs in a list. + The kind of characters used to mark the item paragraphs. + + + Gets or sets whether paragraph numbering is suppressed. + A value that indicates whether line numbering is suppressed. + + + Gets or sets whether there is a page break before a paragraph. + A value that indicates whether there is page break. + + + Gets or sets the right margin of a paragraph. + The size of the right margin, in floating-point points. + + + Gets or sets whether the paragraph uses right-to-left formatting. + A value that indicates whether the paragraph uses right-to-left formatting. + + + Sets the paragraph formatting by copying another paragraph formatting object. + The paragraph formatting to apply. + + + Sets the first-line indent, the left indent, and the right indent for a paragraph. + The indent of the first line in a paragraph, relative to the left indent. The value is in floating-point points and can be positive or negative. + The left indent of all lines except the first line in a paragraph, relative to the left margin. The value is in floating-point points and can be positive or negative. + The right indent of all lines in a paragraph, relative to the right margin. The value is in floating-point points and can be positive or negative. This value is optional. + + + Sets the paragraph line-spacing rule and the amount of line spacing for a paragraph. + The new line-spacing rule. + The new line spacing amount. If the line-spacing rule interprets the spacing value as a linear dimension, spacing is given in floating-point points. + + + Gets or sets the amount of vertical space that follows a paragraph. + The amount of vertical space, in floating-point points. + + + Gets or sets the amount of vertical space above a paragraph. + The amount of vertical space, in floating-point points. + + + Gets or sets the paragraph style. + The paragraph style. + + + Retrieves the tab count. + The tab count. + + + Gets or sets whether widow and orphan suppression is on or off. + The state of window and orphan suppression. + + + Represents a span of continuous text in a document, and provides powerful editing and data-binding properties and methods that allow an app to select, examine, and change document text. + + + Determines whether the Clipboard contains content that can be pasted, using a specified format, into the current text range. + True if the Clipboard content can be pasted into the text range in the specified format, and otherwise false. + The clipboard format. Zero represents the best format, which usually is Rich Text Format (RTF), but CF_UNICODETEXT and other formats are also possible. The default value is zero. + + + Changes the case of letters in a text range. + The new case of letters in the text range. The default value is Lower. + + + Gets or sets the first character of the text range; that is, the character associated with the StartPosition property. + The value of the first character in the text range. + + + Gets or sets the character formatting attributes of the text range. + The character formatting attributes. + + + Collapses the text range into a degenerate point at either the beginning or end of the range. + True collapses at the start of the text range, and false collapses at the end of the range. The default value is true. + + + Copies the text of the text range to the Clipboard. + + + Moves the text of the text range to the Clipboard. + + + Deletes text from the text range. + The number of units deleted. Deleting the text in a nondegenerate text range counts as one unit. + The unit of text to delete. + The number of units to delete. See Remarks. + + + Moves or extends the text range to the end of the nearest specified text unit. The text range is moved or extended forward in the document. + The number of character positions that the range was moved or extended, plus 1 if the text range collapsed to the start of the range. If the text range includes the final carriage return (CR) at the end of the story, and extend is false, the return value is set to -1 to indicate that the collapse occurred before the end of the range. This is because an insertion point cannot exist beyond the final CR. + The unit by which to move the end position of the text range. + True extends the text range by moving just the end position of the range to the end of the specified unit. False moves both ends of the text range to the end of the specified unit. The default value is false. + + + Gets or sets the end character position of the text range. + The end character position. + + + Expands a text range to completely contain any partial text units. + The number of characters added to the text range, if the range was expanded to include a partially contained unit. + The text unit to use to expand the range. The default value is Word. + + + Searches for a particular text string in a range and, if found, selects the string. + The length of the matching text string, or zero if no matching string is found. + The text string to search for. + The maximum number of characters to search. It can be one of the following. + The options to use when doing the text search. + + + Gets or sets an ITextRange object with the formatted text of the specified range. + The formatted text. + + + Retrieves the Unicode Transformation Format (UTF)-32 character code of the character at the specified offset from the end of the text range. + The character value. + The offset from the end of the text range.If offset isThe method returns this character0The character at the end of the rangein the middle of a surrogate pairThe corresponding UTF-32 character + + + Creates a new object that is identical to this text range object. + The duplicate text range object. + + + Retrieves the story index of the text unit (word, line, sentence, paragraph, and so on) at the starting character position of the text range. + The index value. The value is zero if unit does not exist. + The text unit that is indexed. + + + Retrieves the screen coordinates of a particular location in the text range. + The horizontal position to retrieve, relative to the bounding rectangle of the text range. + The vertical position to retrieve, relative to the bounding rectangle of the text range. + The options for retrieving the coordinates of the specified location in the text range. + A structure that receives the coordinates of the specified location in the text range, represented as an ordered pair of floating-point x- and y-coordinates that define a point in a two-dimensional plane. + + + Retrieves the bounding rectangle that encompasses the text range on the screen. + A value that indicates the rectangle to retrieve. + A structure that contains four floating-point numbers that represent the location and size of the bounding rectangle. + The hit-test value for the text range. + + + Retrieves the text in a text range according to the specified conversion flags. + The conversion flags that control how the text is retrieved. + The text in the text range. + + + Retrieves the text in the text range according to the specified conversion flags, as a random access stream. + The conversion flags that control how the text is retrieved. A value of default retrieves the plain text in the text range. + The text stream. + + + Gets or sets the gravity of the text range. + The gravity of the text range. + + + Determines whether this range is in or at the same text as a specified range. + The comparison result. The result can be null. The method returns True if the range is in or at the same text as ITextRange; otherwise it returns False. + Text that is compared to the current range. + + + Inserts an image into this range. + The width of the image, in Device-independent pixels (DIPs). + The height of the image, in DIPs. + If verticalAlign is Baseline, this parameter is the distance, in DIPs, that the top of the image extends above the text baseline. If verticalAlign is Baseline and ascent is zero, the bottom of the image is placed at the text baseline. + The vertical alignment of the image. + The alternate text for the image. + The stream that contains the image data. + + + Determines whether this range's story is the same as a specified range's story. + The comparison result. The result can be null. The method returns True if this range's story is the same as that of the ITextRange; otherwise it returns False. + The ITextRange object whose story is compared to this range's story. + + + Determines whether this range has the same character positions and story as those of a specified range. + True if this text range has the same character positions and story as range, and otherwise false. + The text range to compare to this text range. + + + Gets the count of characters in the text range. + The count of characters. + + + Gets or sets the URL text associated with a text range. + The URL as text. + + + Sets the start and end positions of this range to match the active selection. + + + Moves the insertion point forward or backward by the specified number of units. If the text range is nondegenerate, it is collapsed to an insertion point at the start or end position of the text range, depending on count, and then is moved. + The actual number of units the insertion point moves. For more information, see the Remarks section. + The units to move the insertion point. The default value is Character. + The number of units to move the insertion point. The default value is 1. If count is greater than zero, the insertion point moves forward, toward the end of the story. If count is less than zero, the insertion point moves backward, toward the beginning of the story. If count is zero, the range is unchanged. + + + Moves the end position of the text range. + The actual number of units that the end position of the text range moved. + The unit by which to move the end position of the text range. The default value is Character. + The number of units to move the end position of the text range. The default value is 1. If count is greater than zero, the end position moves forward, toward the end of the story. If count is less than zero, the end position move backward, toward the beginning of the story. If count is zero, the end position does not move. + + + Moves the start position of a text range. + The actual number of units that the start position moved. The pointer can be NULL. + The unit by which to move the start position of the text range. The default value is Character. + The number of units to move the start position of the text range. The default value is 1. If count is greater than zero, the start position of the text range moves forward, toward the end of the story. If count is less than zero, the start position of the text range moves backward, toward the beginning of the story. If count is zero, the start position doesn't move. + + + Gets or sets the paragraph formatting attributes of the text range. + The paragraph formatting attributes. + + + Pastes text from the Clipboard into the text range. + The clipboard format to use in the paste operation. Zero represents the best format, which usually is Rich Text Format (RTF), but CF_UNICODETEXT and other formats are also possible. The default value is zero. + + + Scrolls this text range into view. + The end of the text range to scroll into view. This function uses only the Start, NoHorizontalScroll, and NoVerticalScroll values of the PointOptions enumeration. + + + Moves the text range to the specified unit of the story. + The unit used to move the text range. + The index of the specified unit. The text range is relocated to the unit that has this index. If unit is positive, the numbering of units begins at the start of the story and proceeds forward. If negative, the numbering begins at the end of the story and proceeds backward. The start of the story corresponds to index = 1 for all existing units, and the last unit in the story corresponds to index = 1. + Indicates how to change the text range. True extends the text range to include the unit by moving only the end position of the text range. False collapses the text range to an insertion point and then moves the insertion point. The default value is false. + + + Changes the text range based on the specified point. + An ordered pair of floating-point x- and y-coordinates that defines a point in a two-dimensional plane. + The alignment type of the specified point. + Indicates how to set the endpoints of the text range. If extend is 0, the text range is an insertion point located at the specified point, or at the nearest point with selectable text. If extend is 1, the endpoint specified by options is moved to the point and the other endpoint is left alone. The default value is 0. + + + Sets the endpoints of the text range to the specified values. + The character position for the start of the text range. This parameter must be less than endPosition. + The character position for the end of the text range. + + + Replaces the text in the text range. + The conversion flags that control how the text is inserted in the text range. + The new text. + + + Sets the text in the text range based on the contents of a random access stream. + The text options. + The random access stream. + + + Moves or extends the text range to the start of the nearest specified text unit. The text range is moved or extended backward in the document. + The number of characters the insertion point or start position is moved. Note that this value is always less than or equal to zero, since the motion is always toward the beginning of the story. + The unit by which to move the start position of the text range. The default value is Word. + True extends the text range by moving just the start position of the range to the start of the specified unit. False moves both ends of the text range to the start of the specified unit. The default value is false. + + + Gets or sets the start position of the text range. + The character position to set as the start position of the text range. + + + Gets the count of characters in the story of the text range. + The count of characters in the story. + + + Gets or sets the plain text of the text range. + The plain text. + + + Represents the currently selected text of a document. + + + Moves the insertion point or the active end of the text selection to the end of the specified unit, mimicking the functionality of the End key. + The number of units that the insertion point or the active end is moved. + The units by which to move the insertion point or active end. The following values are valid. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Moves the insertion point or the active end of the text selection to the home position, mimicking the functionality of the Home key. + The number of units that the insertion point or the active end is moved. + The units by which to move the insertion point or active end. The following values are valid. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Moves the insertion point or the active end of the text selection down, mimicking the functionality of the Down Arrow or Page Down key. + The number of units that the insertion point or active end moved down. Collapsing the selection counts as one unit. + The units by which to move the insertion point or active end. The following values are valid. Value Corresponding key combination Meaning Line Down Arrow Moves down one line. This is the default. Paragraph Ctrl+Down Arrow Moves down one paragraph. Screen Page Down Moves down one screen. Window Ctrl+Page Down Moves to the last character in the window. + The number of units to move. The default value is 1. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Moves the insertion point or the active end of the text selection to the left, mimicking the functionality of the Left Arrow key. + The number of units that the insertion point or active end moved. Collapsing the selection counts as one unit. + The units by which to move the insertion point or active end. The following values are valid. Value Corresponding key combination Meaning Character Left Arrow Move one character position to the left. This is the default. Word Ctrl+Left Arrow Move one word to the left. + The number of units to move. The default value is 1. If count is less than zero, movement is to the right. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Moves the insertion point or the active end of the text selection to the right, mimicking the functionality of the Right Arrow key. + The number of units that the insertion point or active end moved. Collapsing the selection counts as one unit. + The units by which to move the insertion point or active end. The following values are valid. Value Corresponding key combination Meaning Character Right Arrow Move one character position to the right. This is the default. Word Ctrl+Right Arrow Move one word to the right. + The number of units to move. The default value is 1. If count is less than zero, movement is to the left. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Moves the insertion point or the active end of the text selection up, mimicking the functionality of the Up Arrow or Page Up keys. + The number of units the insertion point or active end is moved down. Collapsing the selection counts as one unit. + The units by which to move the insertion point or active end. The following values are valid. Value Corresponding key combination Meaning Line Up Arrow Moves up one line. This is the default. Paragraph Ctrl+Up Arrow Moves up one paragraph. Screen Page Up Moves up one screen. Window Ctrl+Page Up Moves to the first character in the window. + The number of units to move. The default value is 1. + Indicates how to change the selection. True extends the selection by moving only the active end. False collapses the selection to an insertion point and then moves the insertion point. The default value is false. + + + Gets and sets text selection options. + The text selection options. Each option is binary, so if a particular option is not set, the text selection has the opposite option. For example, if the Overtype option is not set, the text selection is set to insert mode. + + + Retrieves the type of text selection. + The selection type. + + + Enters text into the selection as if someone typed it. + The text string to type into this selection. + + + Represents the character case formatting. + + + Lowercase characters. + + + Uppercase characters. + + + Specifies options for line-spacing rules. + + + The line spacing is undefined. + + + Single space. The line-spacing value is ignored. + + + One-and-a-half line spacing. The line-spacing value is ignored. + + + Double line spacing. The line-spacing value is ignored. + + + The line-spacing value specifies the spacing from one line to the next. However, if the value is less than single spacing, text is single spaced. + + + The line-spacing value specifies the exact spacing from one line to the next, even if the value is less than single spacing. + + + The line-spacing value specifies the line spacing, in lines. + + + The line-spacing value specifies the line spacing by percent of line height. + + + Indicates the link type of a range of text. + + + A mix of link and nonlink attributes. + + + Not a link. + + + A link specified by the client; that is, not an autolink or a friendly-name link. + + + The name part of a friendly-name link. The name is the part that is displayed. + + + The address Uniform Resource Identifier (URI) part of friendly-name link. The address it the part that is sent when the user clicks the name. + + + A Uniform Resource Identifier (URI) that is automatically recognized. + + + An email address that is automatically recognized. + + + A phone number that is automatically recognized. + + + A file name, including the full path, that is automatically recognized. + + + Defines bullet and numbering alignment. + + + The value is undefined. + + + Text is left aligned. + + + Text is centered in the line. + + + Text is right aligned. + + + Specifies the style used to mark the item paragraphs in a list. + + + The marker style is not defined. + + + The item marker is followed by a parenthesis, as in 1). + + + The item marker is enclosed in parentheses, as in (1). + + + The item marker is followed by a period. + + + The item marker appears by itself. + + + The item marker is followed by a hyphen (-). + + + The items have no markers. + + + Specifies the kind of characters used to mark the item paragraphs in a list. + + + The list type is not defined. + + + Not a list paragraph. + + + The list uses bullets (character code 0x2022). + + + The list is numbered with Arabic numerals (0, 1, 2, ...). + + + The list is ordered with lowercase letters (a, b, c, ...). + + + The list is ordered with uppercase letters (A, B, C, ...). + + + The list is ordered with lowercase Roman letters (i, ii, iii, ...). + + + The list is ordered with uppercase Roman letters (I, II, III, ...). + + + The value returned by ITextParagraphFormat.ListStart is treated as the first code in a Unicode sequence. + + + The list is ordered with Unicode circled numbers + + + The list is ordered with Wingdings black circled digits + + + The list is ordered with Wingdings white circled digits + + + Full-width ASCII (ï¼, 1, ï¼’, 3, ...). + + + Chinese with å only in items 10 through 99 (一, 二, 三, å››, ...). + + + Chinese with å only in items 10 through 19. + + + Chinese with a full-width period, no å. + + + Chinese with no å. + + + Arabic alphabetic ( Ø£ ,ب ,ت ,Ø« ,...). + + + Arabic abjadi ( Ø£ ,ب ,ج ,د ,...). + + + Hebrew alphabet (×, ב, ×’, ד, ...). + + + Thai alphabetic (à¸, ข,ค, ง, ...). + + + Thai numbers (๑, ๒,๓, ๔, ...). + + + DevanÄgarÄ« vowels (अ, आ, इ, ई, ...). + + + DevanÄgarÄ« consonants (क, ख, ग, घ, ...). + + + DevanÄgarÄ« numbers (१, २, ३, ४, ...). + + + Specifies values for aligning paragraphs. + + + No paragraph alignment is defined. + + + Text aligns with the left margin. + + + Text is centered between the margins. + + + Text aligns with the right margin. + + + Text is equally distributed between the margins so that each line of the paragraph, other than the last, is identical in length. + + + Specifies the paragraph style. + + + The paragraph style is undefined. + + + There is no paragraph style. + + + The paragraph style is normal. + + + The top level heading. + + + The second level heading. + + + Third level heading. + + + Fourth level heading. + + + Fifth level heading. + + + Sixth level heading. + + + Seventh level heading. + + + Eighth level heading. + + + Ninth level heading. + + + Defines options for specifying or retrieving a point. + + + No options. + + + Add left and top insets to the left and top coordinates of the rectangle, and subtract right and bottom insets from the right and bottom coordinates. + + + The start position of the text range. + + + Return client coordinates instead of screen coordinates. + + + Allow points outside of the client area. + + + Transform coordinates using a world transform supplied by the host app. + + + Horizontal scrolling is disabled. + + + Vertical scrolling is disabled. + + + Specifies the gravity for a text range. + + + Use selection user interface rules. + + + Use the formatting of the previous text run when on a boundary between runs. + + + Use the formatting of the following text run when on a boundary between runs. + + + The start of the text range has forward gravity, and the end has backward gravity. + + + The start of the text range has backward gravity, and the end has forward gravity. + + + Describes the options that apply to a selection. + + + The start position of the selection is the active end; that is, the end that is changed by pressing Shift+Right Arrow and Shift+Left Arrow. + + + For a degenerate selection (insertion point), the character position at the beginning of a line is the same as the character position at the end of the preceding line. As such, the character position is ambiguous. If this flag is 1, display the caret at the end of the preceding line; otherwise, display it at the beginning of the line. + + + Insert/overtype mode is set to overtype. + + + The selection is active; that is, the text control has the input focus. + + + Typing and pasting replaces the selection. + + + Specifies the type of a selection. + + + No selection and no insertion point. + + + An insertion point. + + + A single nondegenerate range. + + + An image (see ITextRange.InsertImage). + + + A shape. + + + Alignment options for tab positions. + + + Text is left justified from the tab position. This is the default. + + + Text is centered on the tab position. + + + Text is right justified from the tab position. + + + The decimal point is set at the tab position. This is useful for aligning a column of decimal numbers. + + + A vertical bar is positioned at the tab position. Text is not affected. Alignment bars on nearby lines at the same position form a continuous vertical line. + + + The character that is used to fill the space taken by a tab character. + + + Spaces are used. This is the default. + + + Dots are used. + + + A dashed line is used. + + + A solid line is used. + + + A thick line is used. + + + An equal sign is used. + + + Defines a set of constants that are used with various methods in the Windows.UI.Text namespace. + + + Gets the default color. + The default color. + + + Gets the maximum unit count. + The maximum unit count. + + + Gets the minimum unit count. + The minimum unit count. + + + Gets the undefined color value. + The undefined color. + + + Gets the undefined floating-point value. + The undefined floating-point value. + + + Gets the undefined font stretch value. + The undefined font stretch value. + + + Gets the undefined font style. + The undefined font style. + + + Gets the undefined 32-bit integer value. + The undefined 32-bit integer value. + + + Specifies options for retrieving the text in a document or text range. + + + None of the following options is used. + + + If the starting character position is in the middle of a construct such as a CRLF (U+000D U+000A), surrogate pair, variation-selector sequence, or table-row delimiter, move to the beginning of the construct. + + + Use carriage return/line feed (CR/LF) in place of a carriage return. + + + Retrieve text including the alternate text for the images in the range. + + + Allow retrieving the final end-of-paragraph (EOP) if it's included in the range. This EOP exists in all rich-text controls and cannot be deleted. It does not exist in plain-text controls. + + + Don't include hidden text. + + + Include list numbers. + + + Retrieve Rich Text Format (RTF) instead of plain text. Rich Text Format (RTF) is a BYTE (8-bit) format, but because ITextRange.GetText returns a string, the Rich Text Format (RTF) is returned as WCHARs (16-bit or UTF-16), not bytes, when you call ITextRange.GetText with the FormatRtf value. When you call ITextRange.SetText with FormatRtf, the method accepts an string containing either bytes or WCHARs, but other Rich Text Format (RTF) readers only understand bytes. + + + Specifies the units to use when navigating a text range. + + + A single character. + + + A span of alphanumeric characters, an end of paragraph, or punctuation that includes any blanks that follow. + + + A string of text that meets the following criteria:Ends with a period, question mark, or exclamation mark.Is followed by one or more ASCII white space characters (9 through 0xd and 0x20), or the Unicode paragraph separator (0x2029). The trailing white space is part of the sentence.The last sentence in a story does not need to have a period, question mark, or exclamation mark.Other sentences must follow a sentence end and cannot begin with a period, question mark, or exclamation mark. The start of a story qualifies as the start of a Sentence, even if the string there doesn't qualify as a sentence grammatically. + + + A string of text terminated by an end-of-paragraph mark, such as carriage return/line feed (CR/LF), carriage return (CR), vertical tab(VT), line feed (LF), form feed (FF), or the Unicode paragraph separator (0x2029). + + + A single line of text on a display, provided that the display is associated with the range. If no display is associated with a range, Line is treated as Paragraph. A selection automatically has a display. + + + A story, which is a contiguous range of text in a document. For example, a story can contain one of the various parts of a document, such as the main text of a document, headers and footers, footnotes, or annotations. In a rich edit control, there is only one story per document, although a client can use multiple documents to represent multiple stories. + + + The contents of a screen. Typically, a screen is the amount of content associated with the Page Up or Page Down key. + + + A section. + + + The characters between the upper-left and lower-right corners of the window. + + + A text run of characters that all have identical character formatting properties. + + + A text run of characters that all have identical paragraph formatting properties. + + + An embedded object. + + + A paragraph that is ended by a carriage return (CR) or carriage return/line feed (CR/LF). + + + A complex-script cluster (occurs, for example, in Indic scripts). + + + Bold text. + + + Italic text. + + + Underlined text. + + + Strikethrough text. + + + Protected text. + + + Hyperlink text. + + + Text in small caps. + + + Text in all uppercase. + + + Hidden text. + + + Outline text. + + + Shadow text. + + + Imprinted (engraved) text . + + + Disabled text. + + + Revised text. + + + Text in the subscript character format. + + + Text in the superscript character format. + + + Text is in a font-bound font. That is, characters that can't be displayed with the current font were assigned a different font that could display the characters. + + + Characters in one or more contiguous, friendly-name hyperlinks. To work with single links that might be adjacent, use the Link unit. + + + Specifies the character repertoire (typically the script) for a run of character formatting. + + + Undefined + + + Latin 1 (ANSI) + + + Latin 1 and Latin 2 + + + Cyrillic + + + Greek + + + Turkish (Latin 1 + dotless i, and so on) + + + Hebrew + + + Arabic + + + From Latin 1 and 2 + + + Latin 1 with some combining marks + + + Default character repertoire + + + Symbol character set (not Unicode) + + + Thai + + + Japanese + + + Simplified Chinese + + + Hangul + + + Traditional Chinese + + + PC437 character set (disk operating system (DOS)) + + + OEM character set (original PC) + + + Main Macintosh character repertoire + + + Armenian + + + Syriac + + + Thaana + + + Devanagari + + + Bangla + + + Gurmukhi + + + Gujarati + + + Odia + + + Tamil + + + Telugu + + + Kannada + + + Malayalam + + + Sinhala + + + Lao + + + Tibetan + + + Myanmar + + + Georgian + + + Jamo + + + Ethiopic + + + Cherokee + + + Aboriginal + + + Ogham + + + Runic + + + Khmer + + + Mongolian + + + Braille + + + Yi + + + Limbu + + + TaiLe + + + TaiLu + + + Syloti Nagri + + + Kharoshthi + + + Kayahli + + + Unicode symbol such as math operators + + + Emoji + + + Glagolitic + + + Lisu + + + Vai + + + NKo + + + Osmanya + + + PhagsPa + + + Gothic + + + Deseret + + + Tifinagh + + + Specifies options for setting the text in a text range. + + + No text setting option is specified. + + + Use the Unicode bidirectional algorithm. + + + Don't include text as part of a hyperlink. + + + Don't insert as hidden text. + + + Obey the current text limit instead of increasing the limit to fit. + + + Treat input text as Rich Text Format (RTF) (the Rich Text Format (RTF) text will be validated). + + + Apply the Rich Text Format (RTF) default settings for the document. Rich Text Format (RTF) often contains document default properties. These properties are typically ignored when inserting Rich Text Format (RTF) (as distinguished from opening an Rich Text Format (RTF) file). + + + Specifies the type of character underlining. + + + No underline type is defined. + + + Characters are not underlined. + + + A single solid line. + + + Underline words, but not the spaces between words. + + + Two solid double lines. + + + A dotted line. + + + A dashed line. + + + Alternating dashes and dots. + + + Single dashes, each followed by two dots. + + + A wavy line. + + + A thick solid line. + + + A thin solid line. + + + Two wavy lines. + + + A thick wavy line. + + + Long dashes. + + + Thick dashes. + + + Thick, alternating dashes and dots. + + + Thick single dashes, each followed by two thick dots. + + + A thick dotted line. + + + Thick long dashes. + + + Specifies the vertical position of a character relative to a bounding rectangle. + + + The character is positioned at the top edge of the bounding rectangle. + + + The character is positioned at the text baseline. + + + The character is positioned at the bottom edge of the bounding rectangle. + + + Provides classes and enumerations used for managing the settings for an app's view. + + + Specifies the set of app view state changes that can be handled. + ApplicationViewState may be altered or unavailable for releases after Windows 8.1. Instead, query for window layout sizes directly. + + + The current app's view is in full-screen (has no snapped app adjacent to it), and has changed to landscape orientation. + + + The current app's view has been reduced to a partial screen view as the result of another app snapping. + + + The current app's view has been snapped. + + + The current app's view is in full-screen (has no snapped app adjacent to it), and has changed to portrait orientation. + + + Defines the set of display orientation modes for a window (app view). + + + The window is in landscape orientation, with the display width greater than the height. + + + The window is in portrait orientation, with the display height greater than the width. + + + Defines a set of options for window (app view) switching behaviors. + + + Perform the standard animated transition between windows upon switching. + + + Immediately transition between windows without animation. + + + Close the initial window and remove it from the list of recently used apps, and display the window to which the app is switching. + + + Defines the set of possible general window (app view) size preferences. + + + The app does not have a window size preference specified. Windows, rather than the app, sets the size preference, which defaults to UseHalf. + + + The window uses less than 50% of the available horizontal screen pixels. + + + The window uses 50% (half) of the available horizontal screen pixels. + + + The window uses more than 50% of the available horizontal screen pixels. + + + The window uses the minimum horizontal pixel width (either 320 or 500 pixels) specifies in the app's manifest (such as package.appxmanifest). + + + The window has no visible component. + + + Defines an instance of a window (app view) and the information that describes it. + + + Gets or sets the displayed title of the window. + The displayed title of the app. + + + Gets or sets whether screen capture is enabled for the window (app view). + true if screen capture is enabled for the window; false if it is not. + + + Gets whether the current window (app view) is adjacent to the left edge of the screen. + true if the current window is adjacent to the left edge of the screen; false if it is not. + + + Gets whether the current window (app view) is adjacent to the right edge of the screen. + true if the current window is adjacent to the right edge of the screen; false if it is not. + + + Gets the current ID of the window (app view) . + The ID of the window. It should be unique for all windows managed by the app. + + + Gets whether the window (app view) is full screen or not. + true if the window is full screen; false if it is not. + + + Gets whether the window (app view) is on the Windows lock screen. + true if the calling window is on the lock screen; false if it is not. + + + Gets the current orientation of the window (app view) with respect to the display. + The current orientation of the calling window. + + + Gets the state of the current app view. + ApplicationView static methods may be altered or unavailable for releases after Windows 8.1. Instead, use ApplicationView.GetForCurrentView to get an instance of ApplicationView. + The current state of the running app's view. This state indicates the orientation (landscape or portrait) and whether or not the app is snapped. + + + Gets the window ID that corresponds to a specific CoreWindow managed by the app. + The ID of the window associated with the supplied CoreWindow. + Reference to the CoreWindow object that contains a window handle used by the app. + + + Gets the window (app view) for the current app. + An ApplicationView instance that can be used to get and set window display properties. + + + Attempts to unsnap a previously snapped app. + TryUnsnap may be altered or unavailable for releases after Windows 8.1. Apps can be continuously resized, but cannot be snapped, starting in Windows 8.1. ALso, ApplicationView static methods may be altered or unavailable for releases after Windows 8.1. Use ApplicationView.GetForCurrentView to get an instance of ApplicationView. + true if the app has been successfully unsnapped; false if the unsnap attempt failed. + + + Occurs when the window is removed from the list of recently used apps or if the user executes a close gesture on it. + + + Contains the results of a window (app view) consolidation operation. + + + Indicates whether the window consolidation was user- or system-initiated. + true if the window consolidation operation was user-initiated; false if it was system-initiated. + + + Represents the app view switching behaviors for an app. + + + Disables the primary window (app view) when the app is activated, showing the most recently displayed window instead. + + + Displays another window (app view) for the app on the screen, adjacent to the original window + Asynchronously returns true if the call succeeds; false if it does not. + The ID of the new window to display. + + + Displays another window (app view) for the app on the screen, adjacent to the original window + Asynchronously returns true if the call succeeds; false if it does not. + The ID of the new window to display. + The preferred general sizing of the new window. + + + Displays another window (app view) for the app on the screen, adjacent to the original window. + Asynchronously returns true if the call succeeds; false if it does not. + The ID of the new window to display. + The preferred general sizing of the new window. + The ID of the calling (anchor) window. + The preferred new general sizing of the calling window if this call succeeds. + + + Prepares a new window (app view) that can visually replace the calling one. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window under preparation for display. + + + Prepares a new window (app view) that can visually replace the calling one. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window under preparation for display. + The ID of the calling, currently displayed window. + + + Prepares a new window (app view) that can visually replace the calling one. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window under preparation for display. + The ID of the calling, currently displayed window. + Options for the display transition behaviors. + + + Prepares your app to visually transition between two windows with a custom animation. + Asynchronously returns true if the call succeeds; false if it does not. + The ID of the window from which your app is transitioning. + The ID of the window to which your app is transitioning. + Enumeration value that specifies thw view switching behaviors. + + + Defines a set of methods for managing the windows (app views) sent to secondary displays, such as projectors. + + + Gets whether or not a projection display is available to use. + true if a projection display is available on the current computer; false if it is not. + + + Asynchronously creates a new window (app view) that will be sent to the projector or other secondary display. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window to be displayed by the projector or other secondary display. + The ID of the original window creating the new projected window. + + + Asynchronously swaps the calling window (app view) with the window displayed on the projector or other secondary display. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window currently displayed by the projector. + The ID of the window to swap with the projected window. + + + Asynchronously closes a window (app view) displayed by a projector or other secondary display. + The asynchronous results of the operation. Use this to determine when the async call is complete. + The ID of the window currently displayed by the projector or other secondary display. + The ID of the original window that created the projected window. + + + Occurs when a projector or other secondary display becomes available or unavailable. + + + Provides data for the input pane Hiding and Showing events. + + + Identifies whether the application has taken steps to ensure that the input pane doesn't cover the UI element that has focus. + True if the application has ensured that the input pane isn't covering the UI element that has focus; otherwise false. + + + Gets the region of the application's window that the input pane is covering. + The window region that the input pane is covering, in client coordinates specified in device independent pixels (DIPs). + + + Enables an app to register to receive notifications when the input pane is about to be displayed or hidden, and to determine which portion of the application's window is being obscured by the input pane. + + + Gets the region of the application's window that the input pane is covering. + The window region that the input pane is covering, in client coordinates specified in device independent pixels (DIPs). + + + Gets the InputPane object associated with the application window that is currently visible. + The input pane. + + + Occurs when the input pane is about to be hidden by sliding out of view. + + + Occurs when the input pane is about to be displayed by sliding into view. + + + Defines the set of directional preferences for the user interface presented by the app view. + + + The preferred layout is for left-directional users. + + + The preferred layout is for right-directional users. + + + Defines the set of user interface element types. + + + An active caption element. + + + A background element. + + + A button face element. + + + The text displayed on a button. + + + The text displayed in a caption. + + + Greyed text. + + + A highlighted user interface (UI) element. + + + Highlighted text. + + + A hotlighted UI element. + + + An inactive caption element. + + + The text displayed in an inactive caption element. + + + A window. + + + The text displayed in a window's UI decoration. + + + Windows Phone only. The phone's accent color. + + + Windows Phone only. High contrast text. + + + Windows Phone only. Medium contrast text. + + + Windows Phone only. Low contrast text. + + + Windows Phone only. Text that contrasts with TextHigh. + + + Windows Phone only. High contrast non-text content. + + + Windows Phone only. Medium-high contrast non-text content. + + + Windows Phone only. Medium contrast non-text content. + + + Windows Phone only. Medium-low contrast non-text content. + + + Windows Phone only. Low contrast non-text content. + + + Windows Phone only. The background of a normal page. + + + Windows Phone only. The background of a pop-up dialog. + + + Windows Phone only. The partially-opaque color applied to the area of the screen outside of a pop-up dialog in order to dim the background and highlight the pop-up. + + + Provides access to the high contrast accessibility settings. + + + Gets a value that indicates whether the system high contrast feature is on or off. + True if the high contrast feature is on; otherwise false. + + + Gets the name of the default high contrast color scheme. + The name of the default high contrast color scheme. + + + Initializes a new AccessibilitySettings object. + + + Occurs when the system high contrast feature turns on or off. + + + Contains a set of common app user interface settings and operations. + + + Gets whether animations are enabled for the user interface. + true if animations are enabled; false if not. + + + Gets the blink rate of a new caret created by the app view. + The blink rate of the new caret, in milliseconds. + + + Gets whether the caret can be used for browse operations. + True if the caret can be used for browse operations; false if it cannot. + + + Gets the width of a new caret created by the app view. + The width of a new caret, in pixels. + + + Gets the size of a new cursor created by the app view. + The size of a new cursor. + + + Gets the maximum allowed time between clicks in a double-click operation. + The delta of a double-click operation, in milliseconds. + + + Gets the directional preference of the user interface created by the app view. + The directional preference of the user interface. + + + Gets the length of time a message is displayed for the app view. + The duration the message is displayed, in seconds. + + + Gets the amount of time the mouse pointer can rest in a hover rectangle before a hover event is raised. + The hover time before a hover event is raised, in milliseconds. + + + Gets the size of a scroll bar arrow for windows associated with the app view. + The size of a scroll bar arrow. + + + Gets the size of a scroll bar for windows associated with the app view. + The size of the scroll bar. + + + Gets the size of a thumb box for windows associated with the app view. + The size of the thumb box. + + + Gets the color used for a specific user interface element type, such as a button face or window text. + The color of the element type, expressed as a 32-bit color value. + The type of element for which the color will be obtained. + + + Creates a new default instance of the UISettings class. + + + Provides APIs that are specific to apps written in HTML, JavaScript, and CSS. + + + Manages delayed activation for an app. + + + Notifies the system that the app has set up its state and initial UI and is ready to be displayed. + + + Manages an app activation operation. + + + Requests that the completion of app activation be delayed. + The activation deferral object. + + + Manages the document source for app printing. + + + Gets and sets the bottom margin of the document source. + The bottom margin of the document source. + + + Performs app-defined tasks that are associated with freeing, releasing, or resetting resources that were allocated for the document source. + + + Gets and sets the content of the document source to print. + The content of the document source to print. + + + Gets and sets a value that controls whether header and footer are enabled in the document source. + A Boolean value that indicates whether header and footer are enabled in the document source. TRUE indicates enabled and FALSE indicates disabled. + + + Gets and sets the left margin of the document source. + The left margin of the document source. + + + Gets the range of pages that prints. + The range of pages that prints. + + + Gets and sets the size of the document source by percentage. + The size of the document source by percentage. + + + Gets and sets the right margin of the document source. + The right margin of the document source. + + + Gets and sets a value that controls whether content shrinks to fit the document source. + A Boolean value that indicates whether content shrinks to fit the document source. TRUE indicates content shrinks to fit and FALSE otherwise. This property is ignored if the PercentScale property is set. + + + Gets and sets the top margin of the document source. + The top margin of the document source. + + + Tries to set the page range of the document source. + A Boolean value that indicates whether trySetPageRange set the page range in strPageRange. TRUE indicates the page range was set and FALSE otherwise. + The page range to set. + + + Manages delayed suspension for an app. + + + Notifies the system that the app has saved its data and is ready to be suspended. + + + Provides data for an app suspension event. + + + Gets the app suspension operation. + The suspension operation. + + + Manages an app suspension operation. + + + Gets the time remaining before a delayed app suspension operation continues. + The time remaining. + + + Requests that the app suspension operation be delayed. + The suspension deferral. + + + Enables an app to receive notifications related to the lifetime of the app. + + + Occurs when the app is activated. + + + Occurs when the app is navigating. + + + Occurs when the app is resuming. + + + Occurs when the app is suspending. + + + Provides data when an app is activated to add an appointment to the user's calendar. + + + Gets the app activated operation. + The activation operation. + + + Gets the appointment that is provided to the app when the user tries to add it. + The appointment that is added. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to remove an appointment from the user's calendar. + + + Gets the app activated operation. + The activation operation. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the appointment that is provided to the app when the user tries to remove it. + The appointment that is removed. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to replace an appointment in the user's calendar. + + + Gets the app activated operation. + The activation operation. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the appointment that is provided to the app when the user tries to replace it. + The appointment that is replaced. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Provides data when an app is activated to show a specified time frame on the user's calendar. + + + Gets the app activated operation. + The activation operation. + + + Gets the duration of the time frame to be shown. + The duration of the time frame. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the starting date and time of the time frame to be shown. + The starting date and time of the time frame. + + + Gets the action to be performed by the appointments provider. + The action to be performed by the appointments provider. + + + Represents an instance of a background task that has been triggered to run. + + + Gets the current background task. + The current background task. This property can only be accessed in the context of a background task. This property is null in a foreground app. + + + Provides access to an instance of a background task. + + + Attaches a cancellation event handler to the background task instance. + + + Informs the system that the background task might continue to perform work after the IBackgroundTask.Run method returns. + A background task deferral. + + + Gets the instance ID of the background task instance. + A unique identifier for the background task instance. This identifier is generated by the system when the instance is created. + + + Gets or sets progress status for a background task instance. + A value defined by the application to indicate the task's progress. + + + Gets or sets the success value for the background task. + An app can set this property to false to indicate that the background task has failed. Otherwise this property is always true. Once the background task sets this property and has therefore completed its work, the task must explicitly call the Web Workers close method to terminate itself. + + + Gets the number of times resource management policy caused the background task to be suspended. + The number of times the background task has been suspended. + + + Gets access to the registered background task for this background task instance. + An interface that provides access to the registered background task. + + + Gets additional information associated with a background task instance. + Represents additional information for the background task. If the background task is triggered by a mobile network operator notification, this property is an instance of a NetworkOperatorNotificationEventDetails class. If the background task is triggered by a system event or time event, this property is not used. + + + Provides information about the activated event that fires when the user saves or opens a file that needs updates from the app. + + + Gets the app activated operation. + The activation operation. + + + Gets the letterbox UI of the file picker that is displayed when a file needs updates from the app. + The letterbox UI of the file picker that is displayed when a file needs updates from the app. + + + Gets the activation type. + The activationKind.cachedFileUpdater enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Enables a camera settings app to handle the activation parameters for the app. + + + Gets the app activated operation. + The activation operation. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the object that controls device settings on the camera. + The object that controls device settings on the camera. + + + Gets the object that implements additional extended settings for the camera. + An object implementing extended settings for the camera. + + + Provides data when an app is activated to call a contact. + + + Gets the app activated operation. + The activation operation. + + + Gets the contact for the call. + The contact for the call. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + An ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the call. + The identifier of the service used for the call. + + + Gets the user identifier of the service used for the call. + The user identifier of the service used for the call. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to map a contact. + + + Gets the app activated operation. + The activation operation. + + + Gets the address of a contact for the mapping operation. + The address of a contact for the mapping operation. + + + Gets the contact for the mapping operation. + The contact for the mapping operation. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + An ApplicationExecutionState-typed value. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to message a contact. + + + Gets the app activated operation. + The activation operation. + + + Gets the contact for the message. + The contact for the message. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + An ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the message. + The identifier of the service used for the message. + + + Gets the user identifier of the service used for the message. + The user identifier of the service used for the message. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated because it uses the Contact Picker. + + + Gets the app activated operation. + The activation operation. + + + Gets the letterbox UI of the contact picker that is displayed when the user wants to pick contacts that are provided by the app. + Gets the letterbox UI of the contact picker that is displayed when the user wants to pick contacts that are provided by the app. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides data when an app is activated to post a contact. + + + Gets the app activated operation. + The activation operation. + + + Gets the contact for the post. + The contact for the post. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + An ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the post. + The identifier of the service used for the post. + + + Gets the user identifier of the service used for the post. + The user identifier of the service used for the post. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides data when an app is activated to video call a contact. + + + Gets the app activated operation. + The activation operation. + + + Gets the contact for the video call. + The contact for the video call. + + + Gets the activation type. + The ActivationKind.Contact enumeration value. + + + Gets the execution state of the app before it was activated. + An ApplicationExecutionState-typed value. + + + Gets the identifier of the service used for the video call. + The identifier of the service used for the video call. + + + Gets the user identifier of the service used for the video call. + The user identifier of the service used for the video call. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action to be performed. + The action to be performed. + + + Provides information for a device that invokes AutoPlay. + + + Gets the app activated operation. + The activation operation. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the device identifier for the device that invoked AutoPlay. + The device identifier for the device that invoked AutoPlay. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action associated with the activated device. + The action associated with the activated device. + + + Provides data when an app is activated because it is the app associated with a file. + + + Gets the app activation operation. + The activation operation. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the files for which the app was activated. + The StorageFile objects representing the files being passed to the app. + + + Gets the activation type. + One of the enumeration values. + + + Gets the neighboring files of the files for which the app was activated. + The StorageFile objects that represent the neighboring files of the files being passed to the app. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the action associated with the activated file. + The action. + + + Provides information about an activated event that fires when the user tries to pick files or folders that are provided by the app. + + + Gets the app activated operation. + The activation operation. + + + Gets the letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + The letterbox UI of the file picker that is displayed when the user wants to pick files or folders that are provided by the app. + + + Gets the activation type. + The activationKind.fileOpenPicker enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information about an activated event that fires when the user saves a file through the file picker and selects the app as the location. + + + Gets the app activated operation. + The activation operation. + + + Gets the letterbox UI of the file picker that is displayed when the user saves a file and selects the app as the save location. + The letterbox UI of the file picker that is displayed when the user saves a file and uses the app as the location. + + + Gets the activation type. + The activationKind.fileSavePicker enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides event information when an app is launched. + + + Gets the app activated operation. + The activation operation. + + + Gets the arguments that are passed to the app during its launch activation. + The list of arguments. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + One of the enumeration values. + + + Gets an indication about whether a pre-launch has been activated. + Indicates whether a pre-launch has been activated. TRUE indicates activated; otherwise, FALSE. + + + Gets the execution state of the app before this activation. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the ID of the source that was invoked to launch the application. + The ID of the tile. + + + Provides event information when communication to and from the lock screen is required. + + + Gets the app activated operation. + The activation operation. + + + Gets the arguments that are passed to the app during its launch activation. + The list of arguments. + + + Gets the UI that handles communication to and from the lock screen. + The UI that handles communication to and from the lock screen. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + The ActivationKind.lockScreenCall enumeration value. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object, which provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the identifier of the source that launched the app. + The identifier of the tile. + + + Manages delayed navigation for an app. + + + Notifies the system that the app has set up its state and UI and is ready to be displayed after a top level navigation. + + + Provides data for an app navigation event. + + + Gets the app navigation operation. + The app navigation operation. + + + Manages an app navigation operation. + + + Requests that the completion of app navigation be delayed. + The navigated deferral object. + + + Provided in response to the event that is raised when print task settings are activated. + + + Gets the app activated operation. + The activation operation. + + + Gets the configuration information for the print task. + The print task configuration information. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before the settings were activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides data when an app is activated because it is the app associated with a URI scheme name. + + + Gets the app activation operation. + The activation operation. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Gets the Uniform Resource Identifier (URI) for which the app was activated. + The Uniform Resource Identifier (URI). + + + Provides event information when a restricted app is launched. + + + Gets the app activated operation. + The activation operation. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets information about a shared context for the restricted launch. + The object that provides shared context information. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information about the activated event that fires when the user searches the app from the Search charm and the app isn't the main app on screen. + + + Gets the app activated operation. + The activation operation. + + + Gets the identifier for the currently shown app view. + The identifier for the currently shown app view. + + + Gets the activation type. + The activationKind.search enumeration value. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The Internet Engineering Task Force (IETF) BCP 47 standard language tag. + + + Gets a SearchPaneQueryLinguisticDetails object that provides info about query text that the user enters through an Input Method Editor (IME). + The object that provides info about query text. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets the text that the user wants the app to search for. + The text to search for. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Provides information for an application that is a target for share operations. + + + Gets the app activated operation. + The activation operation. + + + Gets the activation type. + One of the enumeration values. + + + Gets the execution state of the app before it was activated. + One of the enumeration values. + + + Gets information about data included in a share operation. + An object that includes the data included in a send operation. + + + Gets the splash screen object that provides information about the transition from the splash screen to the activated app. + The object that provides splash screen information. + + + Manages delayed activation for an app. + + + Gets the app activation operation. + The activation operation. + + + Provides access to an instance of a background task. + + + Gets or sets the success value for the background task. + An app can set this property to false to indicate that the background task has failed. Otherwise this property is always true. + + + Provides data for an app navigation event. + + + Gets the app navigation operation. + The app navigation operation. + + + Represents a method that handles the app activation event. + The sender. + The event information. The data type depends on why the app was activated. For a list of possible data types, see the ActivationKind enumeration. + + + Represents a method that handles the app navigation event. + The sender. + The event information. + + + Represents a method that handles the app resumption event. + The sender. + + + Represents a method that handles the app suspension event. + The sender. + The event data. + + + Specifies the content that HtmlPrintDocumentSource.content prints. + + + Print all pages. + + + Print the current page. + + + Print a custom page range. + + + Print the current selection of pages. + + + Provides general framework APIs and application model APIs, and a variety of support classes that are commonly used by many different feature areas. + + + Represents an attribute that is applied to the class definition and determines the TargetTypes of the properties that are of type Style. + + + Initializes a new instance of the StyleTypedPropertyAttribute class. + + + Represents an attribute that is applied to the class definition to identify the types of the named parts that are used for templating. + + + Initializes a new instance of the TemplatePartAttribute class. + + + Specifies that a control can be in a certain state and that a VisualState is expected in the control's ControlTemplate. + + + Initializes a new instance of the TemplateVisualStateAttribute class. + + + Encapsulates the app and its available services. + + + Initializes a new instance of the Application class. + + + Gets the Application object for the current application. + The Application object for the current application. + + + Gets an object that declares how the app behaves when run in a debug environment. + An object that declares how the app behaves when run in a debug environment. + + + Gets or sets a value that determines the light-dark preference for the overall theme of an app. + A value of the enumeration. + + + Gets a collection of application-scoped resources, such as styles, templates, and brushes. + A ResourceDictionary object that contains zero or more application-scoped resources. + + + Shuts down the app. + + + Loads a XAML file that is located at the specified relative location, and converts it to an instance of the object that is specified by the root element of the XAML file. + An object of the same type as the root element of the XAML content to be loaded. + An object describing the Uniform Resource Identifier (URI) path to the resource to load. + + + Loads a XAML file that is located at the specified relative location, and converts it to an instance of the object that is specified by the root element of the XAML file. + An object of the same type as the root element of the XAML content to be loaded. + An object describing the Uniform Resource Identifier (URI) path to the resource to load. + A value of the enumeration. + + + Invoked when the application is activated by some means other than normal launching. + Event data for the event. + + + Invoked when the application is activated due to an activation contract with ActivationKind as CachedFileUpdater. + Event data for the event. + + + Invoked when the application is activated through file-open. + Event data for the event. + + + Invoked when the application is activated through file-open dialog association. + Event data for the event. + + + Invoked when the application is activated through file-save dialog association. + Event data for the event. + + + Invoked when the application is launched. Override this method to perform application initialization and to display initial content in the associated Window. + Event data for the event. + + + Invoked when the application is activated through a search association. + Event data for the event. + + + Invoked when the application is activated through sharing association. + Event data for the event. + + + Invoked when the application creates a window. + Event data for the event. + + + Provides the entry point and requests initialization of the application. Use the callback to instantiate the Application class. + The callback that should be invoked during the initialization sequence. + + + Occurs when the application transitions from Suspended state to Running state. + + + Occurs when the application transitions to Suspended state from some other state. + + + Occurs when an exception is raised by application code, forwarded from the native level. Applications can mark the occurrence as handled in event data. + + + A class that developers should derive from in order to pass information for a custom initialization sequence, in cases where both an Application subclass is present and the entry point Start call is adjusted to pass the information. + + + Provides event data for the DebugSettings.BindingFailed event. + + + Gets the explanation of the binding failure. + The reason the binding failed. + + + Provides basic utility methods for processing CornerRadius values. C# and Microsoft Visual Basic code should use methods of CornerRadius instead. + + + Generates a CornerRadius value from element values. C# and Microsoft Visual Basic code should use CornerRadius(Double,Double,Double,Double) instead. + The created CornerRadius. + The initial TopLeft value. + The initial TopRight value. + The initial BottomRight value. + The initial BottomLeft value. + + + Creates a new CornerRadius value that has a uniform radius value for each of its elements. C# and Microsoft Visual Basic code should use CornerRadius(Double) instead. + The created CornerRadius. + The uniform radius value to set. See CornerRadius. + + + Provides data for the DataContextChanged event. + + + Gets or sets a value that influences whether another DataContextChanged event should fire from child elements that inherit the DataContext value and detect that the value has changed. + true to prevent further DataContextChanged events from firing for each child FrameworkElement that inherits the DataContext value. You would do this to indicate to other handlers that the necessary logic for responding to the data context change has already been performed. false to permit the event to be fired by each immediate child FrameworkElement in the element tree that detects a change to the inherited DataContext value. The default is false. + + + Gets the new DataContext value for the element where the DataContextChanged event fired. + An object representing the new DataContext value for the element where the DataContextChanged event fired. + + + Describes the visual structure of a data object. + + + Initializes a new instance of the DataTemplate class. + + + Creates the UIElement objects in the DataTemplate. + The root UIElement of the DataTemplate. + + + Represents the resource key for the DataTemplate class. + + + Initializes a new instance of the DataTemplateKey class. + + + Initializes a new instance of the DataTemplateKey class with the specified type. + The type for which this template is designed. + + + Gets or sets the type for which the template is designed. + The type of object that the template is used to display, or a string that specifies the XML tag name for the XML data that the template is used to display. + + + Declares how certain aspects of the app behave when it is run in a debug environment + + + Gets or sets a value that indicates whether to display the current frame rate in the window chrome. + true to display frame rate; otherwise, false. + + + Gets or sets a value that indicates whether to highlight areas of the app UI surface that are being redrawn each frame. + true to highlight redraw regions. false to not highlight redraw regions. The default is false. + + + Gets or sets a value that indicates whether to engage the binding tracing feature of Microsoft Visual Studio when the app runs. + true to engage the binding tracing feature of Microsoft Visual Studio; otherwise, false. + + + Gets or sets a value that enables a debug setting that visualizes overdraw operations. This visualization is useful during application development for detecting layout, animation, and other operations that are graphics processing intensive. + true to enable the visualization, otherwise, false. + + + Occurs when a Binding cannot be resolved. + + + Represents an object that participates in the dependency property system. DependencyObject is the immediate base class of many important UI-related classes, such as UIElement, Geometry, FrameworkTemplate, Style, and ResourceDictionary. + + + Provides base class initialization behavior for DependencyObject derived classes. + + + Gets the CoreDispatcher that this object is associated with. + The CoreDispatcher that this object is associated with. + + + Clears the local value of a dependency property. + The DependencyProperty identifier of the property for which to clear the value. + + + Returns any base value established for a dependency property, which would apply in cases where an animation is not active. + The returned base value. + The identifier for the desired dependency property. + + + Returns the current effective value of a dependency property from a DependencyObject. + Returns the current effective value. + The DependencyProperty identifier of the property for which to retrieve the value. + + + Returns the local value of a dependency property, if a local value is set. + Returns the local value, or returns the sentinel value UnsetValue if no local value is set. + The DependencyProperty identifier of the property for which to retrieve the local value. + + + Sets the local value of a dependency property on a DependencyObject. + The identifier of the dependency property to set. + The new local value. + + + Implements a practical collection class that can contain DependencyObject items. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the DependencyObject located at the specified index. + The DependencyObject value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items returned. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the DependencyObject value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Occurs when the contents of the collection changes. + + + Initializes a new instance of the DependencyObjectCollection class. + + + Represents a dependency property that is registered with the dependency property system. Dependency properties provide support for value expressions, data binding, animation, and property change notification. + + + Specifies a static value that is used by the property system rather than null to indicate that the property exists, but does not have its value set by the property system or by any app code. + The sentinel value for an unset value. + + + Retrieves the property metadata value for the dependency property as registered to a type, with the type specified by a helper structure value that wraps the type name. + A property metadata object. + The name of the specific type from which to retrieve the dependency property metadata. + + + Registers a dependency property with the specified property name, property type, owner type, and property metadata for the property. + A dependency property identifier that should be used to set the value of a public static read-only field in your class. The identifier is then used both by your own code and any third-party user code to reference the dependency property later, for operations such as setting its value programmatically or attaching a Binding in code. + The name of the dependency property to register. + The type of the property. + The owner type that is registering the dependency property. + A property metadata instance. This can contain a PropertyChangedCallback implementation reference. + + + Registers an attached dependency property with the specified property name, property type, owner type, and property metadata for the property. + A dependency property identifier that should be used to set the value of a public static read-only field in your class. That identifier is then used to reference the attached property later, for operations such as setting its value programmatically or attaching a Binding. + The name of the dependency property to register. + The type of the property. + The owner type that is registering the dependency property. + A property metadata instance. This can contain a PropertyChangedCallback implementation reference. + + + Provides data for a PropertyChangedCallback implementation that is invoked when a dependency property changes its value. Also provides event data for the Control.IsEnabledChanged event and any other event that uses the DependencyPropertyChangedEventHandler delegate. + + + Gets the value of the dependency property after the reported change. + The dependency property value after the change. + + + Gets the value of the dependency property before the reported change. + The dependency property value before the change. + + + Gets the identifier for the dependency property where the value change occurred. + The identifier field of the dependency property where the value change occurred. + + + Provides a timer that is integrated into the Dispatcher queue, which is processed at a specified interval of time and at a specified priority. + + + Initializes a new instance of the DispatcherTimer class. + + + Gets or sets the amount of time between timer ticks. + The amount of time between ticks. The default is a TimeSpan with value evaluated as 00:00:00. + + + Gets a value that indicates whether the timer is running. + true if the timer is enabled and running; otherwise, false. + + + Starts the DispatcherTimer. + + + Stops the DispatcherTimer. + + + Occurs when the timer interval has elapsed. + + + Provides data for drag-and-drop events. + + + Gets or sets a data object (DataPackage) that contains the data associated with the corresponding drag event. This value is not useful in all event cases; specifically, the event must be handled by a valid drop target. + The data object that contains data payload that is associated with the corresponding drag event. + + + Gets or sets a value that indicates the present state of the event handling for a routed event as it travels the route. + true if the event is marked handled; otherwise, false. The default value is false. + + + Returns a drop point that is relative to a specified UIElement. + A point in the coordinate system that is relative to the element specified in relativeTo. + The UIElement for which to get a relative drop point. + + + Provides basic utility methods for processing Duration values. C# and Microsoft Visual Basic code should use methods of Duration instead. + + + Returns a generated Duration value that indicates an Automatic Duration. C# and Microsoft Visual Basic code should use Automatic instead. + A Duration value that indicates an Automatic Duration. + + + Returns a generated Duration value that indicates a Forever Duration. C# and Microsoft Visual Basic code should use Forever instead. + A Duration value that indicates a Forever Duration. + + + Adds the TimeSpan component of two Duration values. C# and Microsoft Visual Basic code should use the + operator or the Add method instead. + The resulting Duration after TimeSpan component addition. + The value to add to. + The value to add. + + + Compares value equality of two Duration structures. C# and Microsoft Visual Basic code should use Compare instead. + If duration1 is less than duration2, a negative value that represents the difference. If duration1 is equal to duration2, zero. If duration1 is greater than duration2, a positive value that represents the difference. + The first Duration to compare. + The second Duration to compare. + + + Determines whether two Duration values have equivalent values. C# and Microsoft Visual Basic code should use the = operator instead. + true if target and value hold equivalent values; otherwise, false. + The first Duration to compare. + The second Duration to compare. + + + Creates a new Duration based on a TimeSpan value. C# and Microsoft Visual Basic code should Duration(TimeSpan) instead. + The created Duration. + The initializing TimeSpan. + + + Returns whether the TimeSpan component of a given Duration holds a non-null value. C# and Microsoft Visual Basic code should use HasTimeSpan instead. + true if the TimeSpan component of the provided Duration is not null; otherwise, false. + The Duration value to evaluate. + + + Subtracts the TimeSpan component of one Duration value from another Duration value. C# and Microsoft Visual Basic code should use the - operator or the Subtract method instead. + The resulting Duration after TimeSpan component subtraction. + The value to subtract from. + The value to subtract. + + + Represents a trigger that applies a set of actions (animation storyboards) in response to an event. Not commonly used. + + + Initializes a new instance of the EventTrigger class. + + + Gets the collection of BeginStoryboard objects that this EventTrigger maintains. + The existing TriggerActionCollection. + + + Gets or sets the name of the event that initiates the trigger. + The name or identifier of the event. + + + Provides event data for exceptions that are raised as events by asynchronous operations, such as MediaFailed or ImageFailed. + + + Gets the message component of the exception, as a string. + The message component of the exception. + + + Provides a framework of common API for objects that participate in UI and programmatic layout. FrameworkElement also defines API related to data binding, object tree, and object lifetime feature areas. + + + Provides base class initialization behavior for FrameworkElement-derived classes. + + + Gets the rendered height of a FrameworkElement. + The height, in pixels, of the object. The default is 0. The default might be encountered if the object has not been loaded and undergone a layout pass. + + + Gets the rendered width of a FrameworkElement. + The width, in pixels, of the object. The default is 0. The default might be encountered if the object has not been loaded and undergone a layout pass. + + + Gets a Uniform Resource Identifier (URI) that represents the base Uniform Resource Identifier (URI) for an XAML-constructed object at XAML load time. This property is useful for Uniform Resource Identifier (URI) resolution at run time. + The base Uniform Resource Identifier (URI) for an object at XAML load time. + + + Gets or sets the data context for a FrameworkElement when it participates in data binding. + The object to use as data context. + + + Gets or sets the direction in which text and other UI elements flow within any parent element that controls their layout. This property can be set to either LeftToRight or RightToLeft. Setting FlowDirection to RightToLeft on any element sets the alignment to the right, the reading order to right-to-left and the layout of the control to flow from right to left. + The direction that text and other UI elements flow within their parent element, as a value of the enumeration. The default value is LeftToRight. + + + Gets or sets the suggested height of a FrameworkElement. + The height, in pixels, of the object. The default is NaN. Except for the special NaN value, this value must be equal to or greater than 0. + + + Gets or sets the horizontal alignment characteristics that are applied to a FrameworkElement when it is composed in a layout parent, such as a panel or items control. + A horizontal alignment setting, as a value of the enumeration. The default is Stretch. + + + Gets or sets localization/globalization language information that applies to a FrameworkElement, and also to all child elements of the current FrameworkElement in the object representation and in UI. + A string specifying language and culture that follows the Internet Engineering Task Force (IETF) BCP 47 standards. For example, U.S. English is "en-US". + + + Gets or sets the outer margin of a FrameworkElement. + Provides margin values for the object. The default value is a default Thickness with all properties (dimensions) equal to 0. + + + Gets or sets the maximum height constraint of a FrameworkElement. + The maximum height of the object, in pixels. The default value is PositiveInfinity. This value can be any value equal to or greater than 0. PositiveInfinity is also valid. + + + Gets or sets the maximum width constraint of a FrameworkElement. + The maximum width of the object, in pixels. The default is PositiveInfinity. This value can be any value equal to or greater than 0. PositiveInfinity is also valid. + + + Gets or sets the minimum height constraint of a FrameworkElement. + The minimum height of the object, in pixels. The default is 0. This value can be any value equal to or greater than 0. However, PositiveInfinity is not valid. + + + Gets or sets the minimum width constraint of a FrameworkElement. + The minimum width of the object, in pixels. The default is 0. This value can be any value equal to or greater than 0. However, PositiveInfinity is not valid. + + + Gets or sets the identifying name of the object. When a XAML processor creates the object tree from XAML markup, run-time code can refer to the XAML-declared object by this name. + The name of the object, which must be a string that is valid in the XamlName grammar (see table in x:Name reference). The default is an empty string. + + + Gets the parent object of this FrameworkElement in the object tree. + The parent object of this object in the object tree. + + + Gets the locally defined resource dictionary. In XAML, you can establish resource items as child object elements of a frameworkElement.Resources property element, through XAML implicit collection syntax. + The current locally defined dictionary of resources, where each resource can be accessed by its key. + + + Gets or sets the UI theme that is used by the UIElement (and its child elements) for resource determination. The UI theme you specify with RequestedTheme can override the app-level RequestedTheme. + A value of the enumeration, for example Light. + + + Gets or sets an instance Style that is applied for this object during layout and rendering. + The applied style for the object, if present; otherwise, null. The default for a default-constructed FrameworkElement is null. + + + Gets or sets an arbitrary object value that can be used to store custom information about this object. + The intended arbitrary object value. This property has no default value. + + + Gets the collection of triggers for animations that are defined for a FrameworkElement. Not commonly used. + The collection of triggers for animations that are defined for this object. + + + Gets or sets the vertical alignment characteristics that are applied to a FrameworkElement when it is composed in a parent object such as a panel or items control. + A vertical alignment setting as a value of the enumeration. The default is Stretch. + + + Gets or sets the width of a FrameworkElement. + The width of the object, in pixels. The default is NaN. Except for the special NaN value, this value must be equal to or greater than 0. + + + Provides the behavior for the Arrange pass of layout. Classes can override this method to define their own Arrange pass behavior. + The actual size that is used after the element is arranged in layout. + The final area within the parent that this object should use to arrange itself and its children. + + + Retrieves an object that has the specified identifier name. + The requested object. This can be null if no matching object was found in the current XAML namescope. + The name of the requested object. + + + Returns the BindingExpression that represents the binding on the specified property. + A BindingExpression if the target property has an active binding on this object; otherwise, returns null. + The identifier for the target dependency property to get the binding from. + + + When implemented in a derived class, enables per-state construction of a visual tree for a control template in code, rather than by loading XAML for all states at control startup. + true if the control successfully transitions to the new state, or was already using that state; otherwise, false. + The state to transition to. + true to use a VisualTransition to transition between states. false to skip using transitions and go directly to the requested state. The default is false. + + + Provides the behavior for the Measure pass of the layout cycle. Classes can override this method to define their own Measure pass behavior. + The size that this object determines it needs during layout, based on its calculations of the allocated sizes for child objects or based on other considerations such as a fixed container size. + The available size that this object can give to child objects. Infinity can be specified as a value to indicate that the object will size to whatever content is available. + + + Invoked whenever application code or internal processes (such as a rebuilding layout pass) call ApplyTemplate. In simplest terms, this means the method is called just before a UI element displays in your app. Override this method to influence the default post-template logic of a class. + + + Attaches a binding to a FrameworkElement, using the provided binding object. + The dependency property identifier of the property that is data bound. + The binding to use for the property. + + + Occurs when the value of the FrameworkElement.DataContext property changes. + + + Occurs when the layout of the visual tree changes. + + + Occurs when a FrameworkElement has been constructed and added to the object tree, and is ready for interaction. + + + Occurs when either the ActualHeight or the ActualWidth property changes value on a FrameworkElement. + + + Occurs when this object is no longer connected to the main object tree. + + + Identifies the ActualHeight dependency property. + The identifier for the ActualHeight dependency property. + + + Identifies the ActualWidth dependency property. + The identifier for the ActualWidth dependency property. + + + Identifies the DataContext dependency property. + The DataContext dependency property identifier. + + + Identifies the FlowDirection dependency property. + The FlowDirection dependency property identifier. + + + Identifies the Height dependency property. + The identifier for the Height dependency property. + + + Identifies the HorizontalAlignment dependency property. + The HorizontalAlignment dependency property identifier. + + + Identifies the Language dependency property. + The identifier for the Language dependency property. + + + Identifies the Margin dependency property. + The Margin dependency property identifier. + + + Identifies the MaxHeight dependency property. + The identifier for the MaxHeight dependency property. + + + Identifies the MaxWidth dependency property. + The identifier for the MaxWidth dependency property. + + + Identifies the MinHeight dependency property. + The identifier for the MinHeight dependency property. + + + Identifies the MinWidth dependency property. + The identifier for the MinWidth dependency property. + + + Identifies the Name dependency property. + The identifier for the Name dependency property. + + + Identifies the RequestedTheme dependency property. + The identifier for the RequestedTheme dependency property. + + + Identifies the Style dependency property. + The identifier for the Style dependency property. + + + Identifies the Tag dependency property. + The identifier for the Tag dependency property. + + + Identifies the VerticalAlignment dependency property. + The VerticalAlignment dependency property identifier. + + + Identifies the Width dependency property. + The identifier for the Width dependency property. + + + Creates an element tree of elements. + + + Provides base class initialization behavior for FrameworkTemplate-derived classes. + + + Represents the UI window of an application. + + + Initializes a new instance of the FrameworkView class. + + + Initializes the view. + The view object. + + + Loads the view. + An identifier, such as a class name from the application code, that provides additional information about the view. + + + Passes execution to the view provider. + + + Associates a Window with a view. + The Window to associate. + + + Returns the view to the uninitialized state. + + + Creates views, specifically FrameworkView instances. + + + Initializes a new instance of the FrameworkViewSource class. + + + Creates a FrameworkView. + The created FrameworkView. + + + Provides helper methods to evaluate or set GridLength values. C# and Microsoft Visual Basic code should use methods of GridLength instead. + + + Gets a static GridLength value that corresponds to the special Auto value. C# and Microsoft Visual Basic code should use Auto instead. + A GridLength value that corresponds to the special Auto value. + + + Provides comparison of the values of two GridLength values. C# and Microsoft Visual Basic code should use the = operator instead. + true if the two GridLength values hold equivalent values as their structure value information; otherwise, false. + The first GridLength to compare. + The second GridLength to compare. + + + Creates a new GridLength value based on a fixed number of pixels. C# and Microsoft Visual Basic code should use GridLength(Double) instead. + The created GridLength. + The pixel height or width to specify. + + + Creates a new GridLength value based on a possible number of pixels, and a GridUnitType. C# and Microsoft Visual Basic code should use GridLength(Double,GridUnitType) instead. + The created GridLength. + A numeric value. This might be a pixel height or width to specify, if type is specified as Pixel, or a factor, if type is specified as Star. This value is ignored if type is specified as Auto. + A value of the enumeration that specifies which unit type the GridLength represents. + + + Returns whether the evaluated GridLength is the special Absolute value. C# and Microsoft Visual Basic code should use IsAbsolute instead. + true if the evaluated GridLength is the special Absolute value; otherwise, false. + The GridLength to evaluate. + + + Returns whether the evaluated GridLength is the special Auto value. C# and Microsoft Visual Basic code should use IsAuto instead. + true if the evaluated GridLength is the special Auto value; otherwise, false. + The GridLength to evaluate. + + + Returns whether the evaluated GridLength is the special * (star sizing) value. C# and Microsoft Visual Basic code should use IsStar instead. + true if the evaluated GridLength is the special * (star sizing) value; otherwise, false. + The GridLength to evaluate. + + + An exception that is thrown by the layout cycle, typically because the number of cycles indicates a loop or recursive condition. + + + Initializes a new instance of the LayoutCycleException class. + + + Initializes a new instance of the LayoutCycleException class with a specified error message. + The message that describes the error. + + + Initializes a new instance of the LayoutCycleException class with a specified error message and a reference to the inner exception that is the cause of this exception. + The message that describes the error. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + Provides event data for media failed events. + + + Gets the trace information for a media failed event. + The error trace for the failed media event. + + + Provides helper methods to set Point values. C# and Microsoft Visual Basic code should use methods of Point instead. + + + Creates a new Point value using x- and y-coordinate values in pixels. C# and Microsoft Visual Basic code should use Point(Double,Double) instead. + The created Point. + The pixel value to set for X. + The pixel value to set for Y. + + + Defines behavior aspects of a dependency property, including conditions it was registered with. + + + Initializes a new instance of the PropertyMetadata class, using a property default value. + A default value for the property where this PropertyMetadata is applied. + + + Initializes a new instance of the PropertyMetadata class, using a property default value and callback reference. + A default value for the property where this PropertyMetadata is applied. + A reference to the callback to call for property changed behavior. + + + Gets a reference to the callback method that provides a default property value. + A reference to the callback method that provides a default property value. + + + Gets the default value for the dependency property. + The default value for the dependency property. + + + Creates a PropertyMetadata value, specifying a fixed default value for a dependency property. + The newly created dependency property metadata. + The dependency property default value to apply. + + + Creates a PropertyMetadata value, specifying a fixed default value for a dependency property, and a property-changed callback. + The newly created dependency property metadata. + The dependency property default value to apply. + A reference to the callback method that is invoked by the property system when a dependency property value changes. + + + Creates a PropertyMetadata value, specifying a callback that establishes a default value for a dependency property. + The newly created dependency property metadata. + A reference to the callback method that provides a default property value. + + + Creates a PropertyMetadata value, specifying a callback that establishes a default value for a dependency property, and a property-changed callback. + The newly created dependency property metadata. + A reference to the callback method that provides a default property value. + A reference to the callback method that is invoked by the property system when a dependency property value changes. + + + Implements a data structure for describing a property as a path below another property, or below an owning type. Property paths are used in data binding to objects. + + + Initializes a new instance of the PropertyPath class based on a path string. + The path string to construct with. + + + Gets the path value held by this PropertyPath. + The path value held by this PropertyPath. + + + Provides helper methods to evaluate or set Rect values. C# and Microsoft Visual Basic code should use members of Rect instead. + + + Gets a static Rect value where the Rect has no size or position (all values 0). C# and Microsoft Visual Basic code should use Empty instead. + A Rect with all values as 0. + + + Returns whether a given Point is within the bounds of a given Rect, for a shared coordinate reference. C# and Microsoft Visual Basic code should use Contains instead. C# and Microsoft Visual Basic code should use the = operator instead. + true if point is within the target bounds; otherwise, false. + The Rect to evaluate. + The Point to check for containment. + + + Provides comparison of the values of two Rect values. C# and Microsoft Visual Basic code should use the = operator instead. + true if target and value hold equivalent values; otherwise, false. + The first Rect to compare. + The second Rect to compare. + + + Creates a new Rect value based on the element values of a Rect structure. C# and Microsoft Visual Basic code should use Rect(Double,Double,Double,Double) instead. + The created Rect. + The pixel value to set for X. + The pixel value to set for Y. + The pixel value to set for Width. + The pixel value to set for Height. + + + Creates a new Rect value based on a Point that specifies the upper-left origin, and a Size that specifies the width and height. C# and Microsoft Visual Basic code should use Rect(Point,Size) instead. + The created Rect value. + The Point location of the origin (upper left). + The Size that specifies width and height. + + + Creates a new Rect value based on two points. C# and Microsoft Visual Basic code should use Rect(Point,Point) instead. + The created Rect. + The first point. + The second point. + + + Gets a Bottom value for the specified Rect. So long as Height is positive, Bottom is evaluated as Y + Height. C# and Microsoft Visual Basic code should use Bottom instead. + The evaluated Bottom value. + The Rect to evaluate. + + + Returns whether a specified Rect is equivalent to an Empty Rect. C# and Microsoft Visual Basic code should use IsEmpty instead. + true if the specified Rect is equivalent to an Empty Rect; otherwise, false. + The Rect to evaluate. + + + Gets a Left value for the specified Rect. So long as Width is positive, Left is evaluated as X. C# and Microsoft Visual Basic code should use Left instead. + The evaluated Left value. + The Rect to evaluate. + + + Gets a Right value for the specified Rect. So long as Width is positive, Right is evaluated as X + Width. C# and Microsoft Visual Basic code should use Right instead. + The evaluated Right value. + The Rect to evaluate. + + + Gets a Top value for the specified Rect. So long as Height is positive, Top is evaluated as Y. C# and Microsoft Visual Basic code should use Top instead. + The evaluated Top value. + The Rect to evaluate. + + + Returns the areas of two specified Rect values that intersect, as a new Rect. C# and Microsoft Visual Basic code should use Intersect instead. + A Rect that represents the areas of target and rect that intersect. Can be an Empty value if there is no intersect. + The first Rect to check for intersect. + The second Rect to check for intersect. + + + Creates a rectangle that is exactly large enough to contain the a specified rectangle and a specified point. C# and Microsoft Visual Basic code should use Union(Point) instead. + A rectangle that is exactly large enough to contain the specified rectangle and point. + The rectangle to include. + The point to include. + + + Creates a rectangle that is exactly large enough to contain the two specified rectangles. C# and Microsoft Visual Basic code should use Union(Rect) instead. + A rectangle that is exactly large enough to contain the two specified rectangles. + The first rectangle to include. + The second rectangle to include. + + + Defines a dictionary that contains resources used by components of the app. This dictionary is oriented toward defining the resources in XAML, and then retrieving them using the StaticResource or ThemeResource markup extensions in XAML. Alternatively, you can access resources in code, but that is less common. + + + Adds a new key-value pair to the ResourceDictionary. + The key-value pair to add. + + + Adds an item to the ResourceDictionary. + The string key of the item to add. + The item value to add. + + + Removes all items from this ResourceDictionary. + + + Returns a value that indicates whether a specified key-value pair exists in the ResourceDictionary. + true if an item with that key exists in the ResourceDictionary; otherwise, false. + The key-value pair to check for in the ResourceDictionary. + + + Returns a value that indicates whether a specified key exists in the ResourceDictionary. + true if an item with that key exists in the ResourceDictionary; otherwise, false. + The key to check for in the ResourceDictionary. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Retrieves a view against the ResourceDictionary. + The view object. + + + Returns whether the ResourceDictionary has an entry with the requested key. + true if the ResourceDictionary has an entry with the requested key; otherwise, false. + The requested key. + + + Adds a new entry to the ResourceDictionary. + true if calling the method replaced a value that already existed for the key; false if calling the method defined a new key. + The object key for the resource to insert. + The object value for the resource to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the ResourceDictionary. + The ICollection of all keys in this ResourceDictionary. + + + Returns the value from the requested key, if an entry with that key exists. + If the call is successful, the value. + The requested key. + + + Gets a collection of the ResourceDictionary dictionaries that constitute the various resource dictionaries in the merged dictionaries. + A list collection of the ResourceDictionary dictionaries that constitute the various resource dictionaries in the merged dictionaries. + + + Removes a specific item from the ResourceDictionary. + The key of the item to remove. + + + Removes a specific key-value pair from the ResourceDictionary. + true if the item was removed, otherwise, false. + The key-value pair to remove. + + + Removes a specific item from the ResourceDictionary. + true if the item was removed, otherwise, false. + The key of the item to remove. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets a Uniform Resource Identifier (URI) that provides the source location of a merged resource dictionary. + A Uniform Resource Identifier (URI) that provides the source location of a merged resource dictionary. This is typically a path that references a XAML resource within the app, or a reference to a loose XAML file. + + + Gets a collection of merged resource dictionaries that are specifically keyed and composed to address theme scenarios, for example supplying theme values for HighContrast. + A dictionary of ResourceDictionary theme dictionaries. Each must be keyed with x:Key. + + + Returns a value that indicates whether a specified key exists in the ResourceDictionary. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the ResourceDictionary; otherwise, false. + The key to check for in the ResourceDictionary. + The item, if it exists. Contains null if the item does not exist in the ResourceDictionary. + + + Gets an ICollection object containing the values of the ResourceDictionary . + The ICollection of all values in this ResourceDictionary. + + + Initializes a new instance of the ResourceDictionary class. + + + Represents a routed event to the Windows Runtime event system. + + + Contains state information and event data associated with a routed event. + + + Initializes a new instance of the RoutedEventArgs class. + + + Gets a reference to the object that raised the event. + The object that raised the event. + + + Applies a value to a property in a Style. + + + Initializes a new instance of the Setter class with no initial Property or Value. + + + Initializes a new instance of the Setter class with initial Property and Value information. + The dependency property identifier for the property that is being styled. + The value to assign to the value when the Setter applies. + + + Gets or sets the value to apply to the property that is specified by the Setter. + The value to apply to the property that is specified by the Setter. + + + Gets or sets the property to apply the Value to. + A DependencyProperty to which the Value will be applied. The default is null. + + + Represents the base class for value setters. + + + Gets a value that indicates whether this object is in an immutable state. + true if this object is in an immutable state; otherwise, false. + + + Represents a collection of objects that inherit from SetterBase. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the SetterBase located at the specified index. + The SetterBase value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items returned. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets a value that indicates whether the collection is in a read-only state. + true if this object is in a read-only state and cannot be changed; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the SetterBase value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the SetterBaseCollection class. + + + Provides data related to the SizeChanged event. + + + Gets the new size of the object reporting the size change. + The new size. The Size structure contains the new height and width. + + + Gets the previous size of the object reporting the size change. + The previous size. + + + Provides helper methods to evaluate or set Size values. C# and Microsoft Visual Basic code should use members of Size instead. + + + Gets a static Size value where the Size has no height or width (all values 0). C# and Microsoft Visual Basic code should use Empty instead. + A Size with all values as 0. + + + Provides comparison of the values of two Size values. C# and Microsoft Visual Basic code should use the = operator instead. + true if target and value hold equivalent values; otherwise, false. + The first Size to compare. + The second Size to compare. + + + Creates a new Size based on width and height element values. C# and Microsoft Visual Basic code should use Size(Double,Double) instead. + The created Size. + The initial Width. + The initial Height. + + + Returns whether a specified Size is equivalent to an Empty Size. C# and Microsoft Visual Basic code should use IsEmpty instead. + true if the specified Size is equivalent to an Empty Size; otherwise, false. + The Size to evaluate. + + + Contains property setters that can be shared between instances of a type. A Style is usually declared in a resources collection so that it can be shared and used for applying control templates and other styles. + + + Initializes a new instance of the Style class, with no initial TargetType and an empty Setters collection. + + + Initializes a new instance of the Style class, with a specified initial TargetType and an empty Setters collection. + The TargetType to set for the Style. + + + Gets or sets a defined style that is the basis of the current style. + A defined style that is the basis of the current style. The default value is null. + + + Gets a value that indicates whether the style is read-only and cannot be changed. + true if the style is read-only; otherwise, false. + + + Gets a collection of Setter objects. + A collection of Setter objects. The default is an empty collection. + + + Gets or sets the type for which the style is intended. This value also can be used to declare an implicit style resource if there's not also a resource key specified. + The type of object to which the style is applied. + + + Locks the style so that the TargetType property or any Setter in the Setters collection cannot be changed. + + + Provides helper methods to evaluate or set Thickness values. C# and Microsoft Visual Basic code should use members of Thickness instead. + + + Creates a Thickness value based on element values. C# and Microsoft Visual Basic code should use Thickness(Double,Double,Double,Double) instead. + The created Thickness. + The initial Left. + The initial Top. + The initial Right. + The initial Bottom. + + + Creates a new Thickness value using a uniform value for all the element values. C# and Microsoft Visual Basic code should use Thickness(Double) instead. + The created Thickness. + The uniform value to apply to all four of the Thickness element values. + + + Serves as the base class for BeginStoryboard. Not commonly used. + + + Represents a collection of BeginStoryboard objects. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The TriggerAction value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the TriggerAction value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the TriggerActionCollection class. + + + Serves as the base class for EventTrigger. Not commonly used. + + + Represents a collection of EventTrigger objects. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the TriggerBase value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + UIElement is a base class for most of the objects that have visual appearance and can process basic input as part of your app's user interface. + + + Gets or sets a value that determines whether this UIElement can be a drop target for purposes of drag-and-drop operations. + true if this UIElement can be a drop target for purposes of drag-and-drop operations; otherwise, false. The default is false. + + + Gets or sets a value that indicates that rendered content should be cached as a composited bitmap when possible. + A value that indicates that rendered content should be cached as a composited bitmap when possible. If you specify a value of CacheMode, rendering operations from RenderTransform and Opacity execute on the graphics processing unit (GPU), if available. The default is null, which does not enable a cached composition mode. + + + Gets or sets the RectangleGeometry used to define the outline of the contents of a UIElement. + The rectangle geometry to be used for clipping area sizing. The default value is null (no clipping). + + + Gets or sets a property that declares alternate composition and blending modes for the element in its parent layout and window. This is relevant for elements that are involved in a mixed XAML / Microsoft DirectX UI. + A value of the enumeration. The default is Inherit, but see Remarks. + + + Gets the size that this UIElement computed during the measure pass of the layout process. + The size that this UIElement computed during the measure pass of the layout process. + + + Gets or sets a value that determines whether the DoubleTapped event can originate from that element. + true if a DoubleTapped event can originate from this element; otherwise, false. + + + Gets or sets whether the contained area of this UIElement can return true values for hit testing. + true if the contained area of this UIElement can be used for hit testing; otherwise, false. The default is true. + + + Gets or sets a value that determines whether the Holding event can originate from that element. + true if a Holding event can originate from this element; otherwise, false. + + + Gets or sets a value that determines whether the RightTapped event can originate from that element. + true if a RightTapped event can originate from this element; otherwise, false. + + + Gets or sets a value that determines whether the Tapped event can originate from that element. + true if a Tapped event can originate from this element; otherwise, false. + + + Gets or sets the ManipulationModes value used for UIElement behavior and interaction with gestures. + A value of the enumeration. The default is typically System, but this can vary on specific controls and elements. See Remarks. + + + Gets or sets the degree of the object's opacity. + A value between 0 and 1.0 that declares the opacity factor, with 1.0 meaning full opacity and 0 meaning transparent. The default value is 1.0. + + + Gets the set of all captured pointers, represented as Pointer values. + The collection of captured pointers, each represented as a Pointer object. + + + Gets or sets the perspective projection (3-D effect) to apply when rendering this element. + A 3-D projection effect applied to the element. + + + Gets the final render size of a UIElement. + The rendered size for this object. There is no default value. + + + Gets or sets transform information that affects the rendering position of a UIElement. + Describes the specifics of the desired render transform. The default value is null. + + + Gets or sets the origin point of any possible render transform declared by RenderTransform, relative to the bounds of the UIElement. + The origin point of the render transform. The default value is a Point with value 0,0. + + + Gets or sets the collection of Transition style elements that apply to a UIElement. + The strongly typed collection of Transition style elements that apply to a UIElement. + + + Gets or sets a value that determines whether rendering for the object and its visual subtree should use rounding behavior that aligns rendering to whole pixels. + true if rendering and layout should use layout rounding to whole pixels; otherwise, false. The default is true. + + + Gets or sets the visibility of a UIElement. A UIElement that is not visible is not rendered and does not communicate its desired size to layout. + A value of the enumeration. The default value is Visible. + + + Adds a routed event handler for a specified routed event, adding the handler to the handler collection on the current element. Specify handledEventsToo as true to have the provided handler be invoked even if the event is handled elsewhere. + An identifier for the routed event to be handled. + A reference to the handler implementation. + true to register the handler such that it is invoked even when the routed event is marked handled in its event data. false to register the handler with the default condition that it will not be invoked if the routed event is already marked handled. The default is false. Do not routinely ask to rehandle a routed event, because it interferes with the intended design of the Windows Runtime event system for control compositing. + + + Positions child objects and determines a size for a UIElement. Parent objects that implement custom layout for their child elements should call this method from their layout override implementations to form a recursive layout update. + The final size that the parent computes for the child in layout, provided as a Rect value. + + + Cancels ongoing direct manipulation processing (system-defined panning/zooming) on any ScrollViewer parent that contains the current UIElement. + true if a ScrollViewer parent exists and setting the value resulted in canceling the panning/zooming action. false if calling the method results in no action. + + + Sets pointer capture to a UIElement. Once captured, only the element that has capture will fire pointer-related events. + true if the object has pointer capture; otherwise, false. + The pointer object reference. + + + Enables a UIElement subclass to expose child elements that assist with resolving touch targeting. + A set of point sets. These represent the vertices of sub elements that are intersected by the given touch point (plus tolerance). + The point being touched. + The bounds used for touch tolerance. + + + Invalidates the arrange state (layout) for a UIElement. After the invalidation, the UIElement will have its layout updated, which will occur asynchronously. + + + Invalidates the measurement state (layout) for a UIElement. + + + Updates the DesiredSize of a UIElement. Typically, objects that implement custom layout for their layout children call this method from their own MeasureOverride implementations to form a recursive layout update. + The available space that a parent can allocate to a child object. A child object can request a larger space than what is available; the provided size might be accommodated if scrolling or other resize behavior is possible in that particular container. + + + When implemented in a derived class, returns class-specific AutomationPeer implementations for the Microsoft UI Automation infrastructure. + The class-specific AutomationPeer subclass to return. + + + Override this method to implement how layout and logic should behave when items are removed from a class-specific content or children property. + + + Releases pointer captures for capture of one specific pointer by this UIElement. + The pointer reference. Use either saved references from previous captures, or pointer event data, to obtain this reference. + + + Releases all pointer captures held by this element. + + + Removes the specified routed event handler from this UIElement. Typically the handler in question was added by AddHandler. + The identifier of the routed event for which the handler is attached. + The specific handler implementation to remove from the event handler collection on this UIElement. + + + Returns a transform object that can be used to transform coordinates from the UIElement to the specified object. + The transform information as an object. Call methods on this object to get a practical transform. + The object to compare to the current object for purposes of obtaining the transform. + + + Ensures that all positions of child objects of a UIElement are properly updated for layout. + + + Occurs when an otherwise unhandled DoubleTap interaction occurs over the hit test area of this element. + + + Occurs when the input system reports an underlying drag event with this element as the target. + + + Occurs when the input system reports an underlying drag event with this element as the origin. + + + Occurs when the input system reports an underlying drag event with this element as the potential drop target. + + + Occurs when the input system reports an underlying drop event with this element as the drop target. + + + Occurs when a UIElement receives focus. + + + Occurs when an otherwise unhandled Hold interaction occurs over the hit test area of this element. + + + Occurs when a keyboard key is pressed while the UIElement has focus. + + + Occurs when a keyboard key is released while the UIElement has focus. + + + Occurs when a UIElement loses focus. + + + Occurs when a manipulation on the UIElement is complete. + + + Occurs when the input device changes position during a manipulation. + + + Occurs when the input device loses contact with the UIElement object during a manipulation and inertia begins. + + + Occurs when an input device begins a manipulation on the UIElement. + + + Occurs when the manipulation processor is first created. + + + Occurs when a pointer that made contact abnormally loses contact. + + + Occurs when pointer capture previously held by this element moves to another element or elsewhere. + + + Occurs when a pointer enters the hit test area of this element. + + + Occurs when a pointer leaves the hit test area of this element. + + + Occurs when a pointer moves while the pointer remains within the hit test area of this element. + + + Occurs when the pointer device initiates a Press action within this element. + + + Occurs when the pointer device that previously initiated a Press action is released, while within this element. + + + Occurs when the delta value of a pointer wheel changes. + + + Occurs when a right-tap input stimulus happens while the pointer is over the element. + + + Occurs when an otherwise unhandled Tap interaction occurs over the hit test area of this element. + + + Identifies the AllowDrop dependency property. + The identifier for the AllowDrop dependency property. + + + Identifies the CacheMode dependency property. + The identifier for the CacheMode dependency property. + + + Identifies the Clip dependency property. + The identifier for the Clip dependency property. + + + Identifies the CompositeMode dependency property. + The identifier for the CompositeMode dependency property. + + + Gets the identifier for the DoubleTapped routed event. + The identifier for the DoubleTapped routed event. + + + Gets the identifier for the DragEnter routed event. + The identifier for the DragEnter routed event. + + + Gets the identifier for the DragLeave routed event. + The identifier for the DragLeave routed event. + + + Gets the identifier for the DragOver routed event. + The identifier for the DragOver routed event. + + + Gets the identifier for the Drop routed event. + The identifier for the Drop routed event. + + + Gets the identifier for the Holding routed event. + The identifier for the Holding routed event. + + + Identifies the IsDoubleTapEnabled dependency property. + The identifier for the IsDoubleTapEnabled dependency property. + + + Identifies the IsHitTestVisible dependency property. + The identifier for the IsHitTestVisible dependency property. + + + Identifies the IsHoldingEnabled dependency property. + The identifier for the IsHoldingEnabled dependency property. + + + Identifies the IsRightTapEnabled dependency property. + The identifier for the IsRightTapEnabled dependency property. + + + Identifies the IsTapEnabled dependency property. + The identifier for the IsTapEnabled dependency property. + + + Gets the identifier for the KeyDown routed event. + The identifier for the KeyDown routed event. + + + Gets the identifier for the KeyUp routed event. + The identifier for the KeyUp routed event. + + + Gets the identifier for the ManipulationCompleted routed event. + The identifier for the ManipulationCompleted routed event. + + + Gets the identifier for the ManipulationDelta routed event. + The identifier for the ManipulationDelta routed event. + + + Gets the identifier for the ManipulationInertiaStarting routed event. + The identifier for the ManipulationInertiaStarting routed event. + + + Identifies the ManipulationMode dependency property. + The identifier for the ManipulationMode dependency property. + + + Gets the identifier for the ManipulationStarted routed event. + The identifier for the ManipulationStarted routed event. + + + Gets the identifier for the ManipulationStarting routed event. + The identifier for the ManipulationStarting routed event. + + + Identifies the IsHitTestVisible dependency property. + The identifier for the IsHitTestVisible dependency property. + + + Gets the identifier for the PointerCanceled routed event. + The identifier for the PointerCanceled routed event. + + + Gets the identifier for the PointerCaptureLost routed event. + The identifier for the PointerCaptureLost routed event. + + + Identifies the PointerCaptures dependency property. + The identifier for the PointerCaptures dependency property. + + + Gets the identifier for the PointerEntered routed event. + The identifier for the PointerEntered routed event. + + + Gets the identifier for the PointerExited routed event. + The identifier for the PointerExited routed event. + + + Gets the identifier for the PointerMoved routed event. + The identifier for the PointerMoved routed event. + + + Gets the identifier for the PointerPressed routed event. + The identifier for the PointerPressed routed event. + + + Gets the identifier for the PointerReleased routed event. + The identifier for the PointerReleased routed event. + + + Gets the identifier for the PointerWheelChanged routed event. + The identifier for the PointerWheelChanged routed event. + + + Identifies the Projection dependency property. + The identifier for the Projection dependency property. + + + Identifies the RenderTransformOrigin dependency property. + The identifier for the RenderTransformOrigin dependency property. + + + Identifies the RenderTransform dependency property. + The identifier for the RenderTransform dependency property. + + + Gets the identifier for the RightTapped routed event. + The identifier for the RightTapped routed event. + + + Gets the identifier for the Tapped routed event. + The identifier for the Tapped routed event. + + + Identifies the Transitions dependency property. + The identifier for the Transitions dependency property. + + + Identifies the UseLayoutRounding dependency property. + The identifier for the UseLayoutRounding dependency property. + + + Identifies the Visibility dependency property. + The identifier for the Visibility dependency property. + + + Provides data for the UnhandledException event. + + + Gets the HRESULT code associated with the unhandled exception. + The HRESULT code. + + + Gets or sets a value that indicates whether the exception is handled. + true to mark the exception as handled, which indicates that the event system should not process it further; otherwise, false. + + + Gets the message string as passed by the originating unhandled exception. + The message string, which may be useful for debugging. + + + Represents the visual appearance of the control when it is in a specific state. Visual states use a Storyboard to set UI properties of control element parts of the control template where the VisualState exists. + + + Initializes a new instance of the VisualState class. + + + Gets the name of the VisualState. + The name of the VisualState. + + + Gets or sets a Storyboard that defines state-specific property values and appearance of the control when it is using this visual state. + A Storyboard that defines the property changes to apply to the control when this VisualState is used as the current visual state. + + + Provides data for the CurrentStateChanging and CurrentStateChanged events. + + + Initializes a new instance of the VisualStateChangedEventArgs class. + + + Gets the Control that is changing states. + The Control that is changing states. + + + Gets the state the Control is changing to or has changed to. + The state the Control is changing to or has changed to. + + + Gets the state the Control is changing from or has changed from. + The state the Control is changing from or has changed from. + + + Contains mutually exclusive VisualState objects and VisualTransition objects that are used to go from one state to another. + + + Initializes a new instance of the VisualStateGroup class. + + + Gets the most recently set VisualState from a successful call to the GoToState method. + The most recently set VisualState from a successful call to the GoToState method, or null. + + + Gets the name of the VisualStateGroup. + The name of the VisualStateGroup. + + + Gets the collection of mutually exclusive VisualState objects. + The collection of mutually exclusive VisualState objects. + + + Gets the collection of VisualTransition objects. + The collection of VisualTransition objects. + + + Occurs after a control changes into a different state. + + + Occurs when a control begins changing into a different state. + + + Manages visual states and the logic for transitions between visual states for controls. Also provides the attached property support for VisualStateManager.VisualStateGroups, which is how you define visual states in XAML for a control template. + + + Initializes a new instance of the VisualStateManager class. + + + Gets or sets the custom VisualStateManager object that handles transitions between the states of a control. + + + Gets the collection of VisualStateGroup elements that are defined by a root element of a template definition. A control typically defines this as part of its template. + + + Gets the value of the VisualStateManager.CustomVisualStateManager attached property. + The VisualStateManager that transitions between the states of a control. + The object to get the value from. + + + Gets the value of the VisualStateManager.VisualStateGroups attached property. + The collection of VisualStateGroup objects that is associated with the specified object. + The object to get the value from. + + + Transitions a control between two states, by requesting a new VisualState by name. + true if the control successfully transitions to the new state, or was already using that state; otherwise, false. + The control to transition between states. + The state to transition to. + true to use a VisualTransition to transition between states. false to skip using transitions and go directly to the requested state. The default is false. + + + When overridden in a derived class, transitions a control between states. + true if the control successfully transitions to the new state; otherwise, false. + The control to transition between states. + The root element of the control's ControlTemplate. + The name of the state to transition to. + The VisualStateGroup that the state belongs to. + The representation of the state to transition to. + true to use a VisualTransition to transition between states; otherwise, false. + + + When overridden in a derived class, fires the CurrentStateChanged event on the specified VisualStateGroup. + The object on which the CurrentStateChanging event occurred. + The state that the control transitions from. + The state that the control transitions to. + The control that transitioned states. + + + When overridden in a derived class, fires the CurrentStateChanging event on the specified VisualStateGroup. + The object that the CurrentStateChanging event occurred on. + The state that the control is transitioning from. + The state that the control should transition to. + The control where the transition animation between states is applied. + + + Sets the value of the VisualStateManager.CustomVisualStateManager attached property. + The target element where the property is set. + The VisualStateManager that transitions between the states of a control. + + + Identifies the VisualStateManager.CustomVisualStateManager dependency property. + The identifier for the VisualStateManager.CustomVisualStateManager dependency property. + + + Represents the visual behavior that occurs when the control transitions from one visual state to another. + + + Initializes a new instance of the VisualTransition class. + + + Gets or sets the name of the VisualState to transition from. + The name of the VisualState to transition from. + + + Gets or sets the amount of time it takes to move from one state to another, and the time that any implicit transition animations should run as part of the transition behavior. + The amount of time it takes to move from one state to another. + + + Gets or sets the easing function applied to the generated animations. + An easing function implementation that is applied to the generated animations. + + + Gets or sets the Storyboard that runs when the transition occurs. + The Storyboard that occurs when the transition occurs. + + + Gets or sets the name of the VisualState to transition to. + The name of the VisualState to transition to. + + + Represents an application window. + + + Gets the height and width of the application window, as a Rect value. + A value that reports the height and width of the application window. + + + Gets or sets the visual root of an application window. + The visual root of an application window. + + + Gets an internal core object for the application window. + A CoreWindow object. + + + Gets the currently activated window for an application. + The currently activated window. + + + Gets the CoreDispatcher object for the Window, which is generally the CoreDispatcher for the UI thread. + An object that references the UI thread for the Window. + + + Gets a value that reports whether the window is visible. + true if the window is visible; false if the window is not visible. + + + Attempts to activate the application window by bringing it to the foreground and setting the input focus to it. + + + Closes the application window. + + + Occurs when the window has successfully been activated. + + + Occurs when the window has closed. + + + Occurs when the window has rendered or changed its rendering size. + + + Occurs when the value of the Visible property changes. + + + Provides data for the OnWindowCreated method. + + + Gets the window that was created. + The window that was created + + + Represents the callback that should be invoked during the initialization sequence. + Parameters that convey information for custom startup initialization. + + + Represents the method that will handle the DebugSettings.BindingFailed event. + The source of the event. + The event data. + + + Represents the method that can be invoked as part of a PropertyMetadata constructor to defer definition of a dependency property default value. + The desired default value. + + + Represents the method that will handle events raised when a DependencyProperty is changed on a particular DependencyObject implementation. + The source of the event (typically the object where the property changed). + The event data. + + + Represents the method that will handle the DragEnter, DragLeave, DragOver, and Drop events of a UIElement. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle certain events that report exceptions. These exceptions generally come from asynchronous operations. + The object where the handler is attached. + The event data. + + + Represents the callback that is invoked when the effective property value of a dependency property changes. + The DependencyObject on which the property has changed value. + Event data that is issued by any event that tracks changes to the effective value of this property. + + + Represents the method that will handle routed events. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the SizeChanged event. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the Suspending event. + The object where the handler is attached. + Event data. + + + Represents the method that will handle the UnhandledException event. + The object where the handler is attached. + Event data. + + + Represents the method that will handle the CurrentStateChanging and CurrentStateChanged events. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that will handle the Activated event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the Closed event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the Window.SizeChanged event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the VisibilityChanged event. + The object where the event handler is attached. + Event data for the event. + + + Declares the theme preference for an app. + + + Use the Light default theme. + + + Use the Dark default theme. + + + Declares whether a Duration has a special value of Automatic or Forever, or has valid information in its TimeSpan component. + + + Has the Automatic special value. + + + Has valid information in the TimeSpan component. + + + Has the Forever special value. + + + Specifies a UI theme that should be used for individual UIElement parts of an app UI. + + + Use the Application.RequestedTheme value for the element. This is the default. + + + Use the Light default theme. + + + Use the Dark default theme. + + + Defines constants that specify the content flow direction for text and UI elements. + + + Indicates that content should flow from left to right. + + + Indicates that content should flow from right to left. + + + Describes how an element obtained focus. + + + Element is not currently focused. + + + Element obtained focus through a pointer action. + + + Element obtained focus through a keyboard action, such as tab sequence traversal. + + + Element obtained focus through a deliberate call to Focus or a related API. + + + Describes the capital letter style value for the Typography.Capitals attached property. + + + Capital letters render normally. + + + Both capital and lowercase letters are replaced with a glyph form of an uppercase letter with the same approximate height. + + + Lowercase letters are replaced with a glyph form of an uppercase letter with the same approximate height. + + + Both capital and lowercase letters are replaced with a glyph form of an uppercase letter with the same approximate height. Petite capitals are smaller than small capitals. + + + Lowercase letters are replaced with a glyph form of an uppercase letter with the same approximate height. Petite capitals are smaller than small capitals. + + + Capital letters display in unicase. Unicase fonts render both uppercase and lowercase letters in a mixture of uppercase and lowercase glyphs determined by the type designer. + + + Glyph forms are substituted with a typographic form specifically designed for titles. + + + Provides a mechanism for selecting font-specific versions of glyphs for a specified East Asian writing system or language. + + + No font-specific glyph versions are applied. + + + Replaces default glyphs with the corresponding forms from the Hojo Kanji specification. + + + Replaces default Japanese glyphs with the corresponding forms from the JIS04 specification. + + + Replaces default Japanese glyphs with the corresponding forms from the JIS78 specification. + + + Replaces default Japanese glyphs with the corresponding forms from the JIS83 specification. + + + Replaces default Japanese glyphs with the corresponding forms from the JIS90 specification. + + + Replaces default glyphs with the corresponding forms from the NLC Kanji specification. + + + Replaces traditional Chinese or Japanese forms with their corresponding simplified forms. + + + Replaces simplified Chinese or Japanese forms with their corresponding traditional forms. + + + Replaces simplified Kanji forms with their corresponding traditional forms. This glyph set is explicitly limited to the traditional forms considered proper for use in personal names. + + + Provides a mechanism for selecting glyphs of different width styles. + + + Default width style. + + + Replaces uniform width glyphs with full width (usually em) glyphs. + + + Replaces uniform width glyphs with half width (half em) glyphs + + + Replaces uniform width glyphs with proportionally spaced glyphs. + + + Replaces uniform width glyphs with one-quarter width (one-quarter em) glyphs. + + + Replaces uniform width glyphs with one-third width (one-third em) glyphs. + + + Describes a fraction style value for the Typography.Fraction attached property. + + + Default style is used. + + + Slashed fraction style is used. + + + Stacked fraction style is used. + + + Describes the numeral alignment value for the Typography.NumeralAlignment attached property. + + + Default numeral alignment is used. + + + Proportional width alignment is used. + + + Tabular alignment is used. + + + Describes a numeral style value for the Typography.NumeralStyle attached property. + + + Default numeral style is used. + + + Lining numeral style is used. Replaces default glyphs with numeric forms of even height. + + + Old style numeral style is used. Replaces default glyphs with a figure style that matches lowercase letters in height and color. + + + Describes a font variant value for the Typography.Variants attached property. + + + Default font behavior. Font scaling and positioning is normal. + + + Replaces a default glyph with a superscript glyph. Superscript is commonly used for footnotes. + + + Replaces a default glyph with a subscript glyph. + + + Replaces a default glyph with an ordinal glyph, or it may combine glyph substitution with positioning adjustments for proper placement. Ordinal forms are normally associated with numeric notation of an ordinal word, such as 1st for first. + + + Replaces a default glyph with an inferior glyph, or it may combine glyph substitution with positioning adjustments for proper placement. Inferior forms are typically used in chemical formulas or mathematical notation. + + + Replaces a default glyph with a smaller Japanese Kana glyph. This is used to clarify the meaning of Kanji, which may be unfamiliar to the reader. + + + Describes the kind of value that a GridLength object is holding. + + + The size is determined by the size properties of the content object. + + + The value is expressed in pixels. + + + The value is expressed as a weighted proportion of available space. + + + Indicates where an element should be displayed on the horizontal axis relative to the allocated layout slot of the parent element. + + + An element aligned to the left of the layout slot for the parent element. + + + An element aligned to the center of the layout slot for the parent element. + + + An element aligned to the right of the layout slot for the parent element. + + + An element stretched to fill the entire layout slot of the parent element. + + + Describes the mechanism by which a line box is determined for each line. + + + The stack height is the smallest value that contains the extended block progression dimension of all the inline elements on that line when those elements are properly aligned. This is the default. + + + The stack height is determined by the block element line-height property value. + + + The stack height is the distance between text baselines. Does not affect the distance between the baselines. + + + Specifies how side bearing values in per-character typography are handled when aligning to a text container boundary. + + + Use side bearings that come from font typography values. This is the default. + + + Don't use side bearings that come from font typography values, and align the side of the glyph to where the "ink" part of the glyph begins. + + + Specifies whether text is centered, left-aligned, or right-aligned. + + + Text is centered within the container. + + + Text is aligned to the left edge of the container. + + + Text is aligned to the right edge of the container. + + + Text is justified within the container. + + + Influences how a line box height is calculated + + + Uses normal line box height calculation, this is the default. + + + Top of line box height is the cap height from the font. + + + Bottom of line box height is the text baseline. + + + Top of line box height is the cap height from the font, bottom of line box height is the text baseline. + + + Provides a value for TextReadingOrder properties. + + + Do not detect flow direction from content. Use FlowDirection value (if any) for reading order decisions. + + + Detect flow direction from text content. For bidirectional text, text containers will infer the reading order for text based on the content, see Remarks. + + + Describes how text is trimmed when it overflows the edge of its containing box. + + + Text is not trimmed. + + + Introduced in Windows 8.1. Text is trimmed at a character boundary. An ellipsis (...) is drawn in place of remaining text. + + + Text is trimmed at a word boundary. An ellipsis (...) is drawn in place of remaining text. + + + Introduced in Windows 8.1. Text is trimmed at a pixel level, visually clipping the excess glyphs. + + + Specifies whether text wraps when it reaches the edge of its container. + + + No line wrapping is performed. + + + Line breaking occurs if a line of text overflows beyond the available width of its container. Line breaking occurs even if the text logic can't determine any line break opportunity. For example, if a very long word is constrained in a fixed-width container that can't scroll, it will wrap at a point that might be in the middle of a word. + + + Introduced in Windows 8.1. Line-breaking occurs if the line overflows beyond the available block width. A line may overflow beyond the block width if the text logic can't determine a line break opportunity. For example, if a very long word is constrained in a fixed-width container that can't scroll, it will overflow the long word and continue the text after the long word on the next line. Not supported by all controls; see Remarks. + + + Describes how a child element is vertically positioned or stretched within a parent's layout slot. + + + The element is aligned to the top of the parent's layout slot. + + + The element is aligned to the center of the parent's layout slot. + + + The element is aligned to the bottom of the parent's layout slot. + + + The element is stretched to fill the entire layout slot of the parent element. + + + Specifies the display state of an element. + + + Display the element. + + + Do not display the element, and do not reserve space for it in layout. + + + Describes the characteristics of a rounded corner, such as can be applied to a Border. + + + The radius of rounding, in pixels, of the upper-left corner of the object where a CornerRadius is applied. + + + The radius of rounding, in pixels, of the upper-right corner of the object where a CornerRadius is applied. + + + The radius of rounding, in pixels, of the lower-right corner of the object where a CornerRadius is applied. + + + The radius of rounding, in pixels, of the lower-left corner of the object where a CornerRadius is applied. + + + Initializes a new CornerRadius structure, applying the same uniform radius to all its corners. + A uniform radius applied to all four CornerRadius properties (TopLeft, TopRight, BottomRight, BottomLeft). + + + Initializes a new CornerRadius structure, applying the same uniform radius to all its corners. + Sets the initial TopLeft. + Sets the initial TopRight. + Sets the initial BottomLeft. + Sets the initial BottomRight. + + + Gets or sets the radius of rounding, in pixels, of the bottom left corner of the object where a CornerRadius is applied. + A Double that represents the radius of rounding, in pixels, of the bottom left corner of the object where a CornerRadius is applied. The default is 0. + + + Gets or sets the radius of rounding, in pixels, of the bottom right corner of the object where a CornerRadius is applied. + A Double that represents the radius of rounding, in pixels, of the bottom right corner of the object where a CornerRadius is applied. The default is 0. + + + Gets or sets the radius of rounding, in pixels, of the top left corner of the object where a CornerRadius is applied. + A Double that represents the radius of rounding, in pixels, of the top left corner of the object where a CornerRadius is applied. The default is 0. + + + Gets or sets the radius of rounding, in pixels, of the top right corner of the object where a CornerRadius is applied. + A Double that represents the radius of rounding, in pixels, of the top right corner of the object where a CornerRadius is applied. The default is 0. + + + Determines whether the specified object is equal to a CornerRadius. + true if value is equal to this CornerRadius; otherwise, false. + Object to check for equality. + + + Compares two CornerRadius structures for equality. + true if both CornerRadius structures contain the same values; otherwise, false. + The CornerRadius structure to compare to this CornerRadius. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a CornerRadius to a String representation. + A String representation of this CornerRadius. + + + Compares two CornerRadius structures for equality. + true if all values of cr1 and cr2 are equal; otherwise, false. + The first CornerRadius structure to compare. + The second CornerRadius structure to compare. + + + Compares two CornerRadius structures for inequality. + true if cr1 and cr2 have different values; false if cr1 and cr2 have the same values. + The first CornerRadius structure to compare. + The second CornerRadius structure to compare. + + + Represents the duration of time that a Timeline is active, or more generally represents a duration of time that also supports two special values Automatic and Forever. + + + The TimeSpan value component. + + + The type as a member of the enumeration. + + + Initializes a new instance of the Duration structure with the supplied TimeSpan value. + Represents the initial time interval of this duration. + + + Gets a Duration value that is automatically determined. + A Duration initialized to an automatic value. + + + Gets a Duration value that represents an infinite interval. + A Duration initialized to a forever value. + + + Gets a value that indicates if this Duration represents a TimeSpan value. + true if this Duration is a TimeSpan value; otherwise, false. + + + Gets the TimeSpan value that this Duration represents. + The TimeSpan value that this Duration represents. Microsoft .NET uses System.TimeSpan, Visual C++ component extensions (C++/CX) uses Windows::Foundation::TimeSpan, that structure projects differently per language. + + + Adds the value of the specified Duration to this Duration. + If each involved Duration has values, a Duration that represents the combined values. Otherwise this method returns null. + An instance of Duration that represents the value of the current instance plus duration. + + + Compares one Duration value to another. + If t1 is less than t2, a negative value that represents the difference. If t1 is equal to t2, a value of 0. If t1 is greater than t2, a positive value that represents the difference. + The first instance of Duration to compare. + The second instance of Duration to compare. + + + Determines whether the specified object is equal to a Duration. + true if value is equal to this Duration; otherwise, false. + Object to check for equality. + + + Compares two Duration structures for equality. + true if both Duration structures contain the same values; otherwise, false. + The Duration structure to compare to this Duration. + + + Compares two Duration structures for equality, as a static helper method. + true if both Duration structures contain the same values; otherwise, false. + The first Duration structure to compare. + The first Duration structure to compare. + + + Gets a hash code for this object. + The hash code identifier. + + + Subtracts the specified Duration from this Duration. + The subtracted Duration. + The Duration to subtract from this Duration. + + + Converts a Duration to a String representation. + A String representation of this Duration. + + + Adds the values of two Duration structures. + If both instances of Duration have TimeSpan values, this method returns the sum of those two values. If either value is set to Automatic, the method returns Automatic. If either value is set to Forever, the method returns Forever. +If either t1 or t2 has no value, this method returns null. + The first Duration. + The second Duration. + + + Compares two Duration structures for equality. + true if all values of t1 and t2 are equal; otherwise, false. + The first Duration structure to compare. + The second Duration structure to compare. + + + Determines if one Duration is greater than another. + true if both t1 and t2 have values and t1 is greater than t2; otherwise, false. + The first Duration. + The second Duration. + + + Determines if one Duration is greater than or equal to another. + true if both t1 and t2 have values and t1 is greater than or equal to t2; otherwise, false. + The first Duration. + The second Duration. + + + Implicitly creates a Duration from a given TimeSpan. + The created Duration. + The TimeSpan from which an instance of Duration is implicitly created. + + + Compares two Duration structures for inequality. + true if t1 and t2 have different values; false if t1 and t2 have the same values. + The first Duration structure to compare. + The second Duration structure to compare. + + + Determines if one Duration is less than another. + true if both t1 and t2 have values and t1 is less than t2; otherwise, false. + The first Duration. + The second Duration. + + + Determines if one Duration is less than or equal to another. + true if both t1 and t2 have values and t1 is less than or equal to t2; otherwise, false. + The first Duration. + The second Duration. + + + Subtracts the value of one Duration from another. + If each Duration has values, a Duration that represents the value of t1 minus t2. If t1 has a value of Forever and t2 has a value of TimeSpan, this method returns Forever. Otherwise this method returns null. + The first Duration. + The second Duration. + + + Returns the specified Duration. + A Duration value identical to duration. + The Duration to specify. + + + Represents a measurement for control logc that explicitly supports Star (*) sizing and Auto sizing. + + + The measure for this GridLength, which is not necessarily a pixel measure. + + + A value of the GridUnitType enumeration that qualifies how Value is interpreted as a measure. + + + Initializes a new GridLength structure, using the specified absolute value in pixels. + The absolute count of pixels to establish as the value. + + + Initializes a new GridLength structure and specifies what kind of value it holds. + The initial value of the GridLength. + The GridUnitType value held by the GridLength. + + + Gets an instance of GridLength that holds a value whose size is determined by the size properties of the content object. + A instance of GridLength whose GridUnitType property is set to Auto. + + + Gets the associated GridUnitType for the GridLength. + One of the GridUnitType values. The default is Auto. + + + Gets a value that indicates whether the GridLength holds a value that represents an absolute measure in pixels. + true if the GridUnitType property is Pixel; otherwise, false. + + + Gets a value that indicates whether the GridLength holds a value whose size is determined by the size properties of the content object where the GridLength applies. + true if the GridUnitType property is Auto; otherwise, false. + + + Gets a value that indicates whether the GridLength holds a value that is expressed as a weighted proportion of available space. + true if the GridUnitType property is Star; otherwise, false. + + + Gets a Double that represents the value of the GridLength. + A Double that represents the value of the current instance. + + + Determines whether the specified object is equal to a GridLength. + true if oCompare is equal to this GridLength; otherwise, false. + Object to check for equality. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a GridLength to a String representation. + A String representation of this GridLength. + + + Compares two GridLength structures for equality. + true if all values of gl1 and gl2 are equal; otherwise, false. + The first GridLength structure to compare. + The second GridLength structure to compare. + + + Compares two GridLength structures for inequality. + true if gl1 and gl2 have different values; false if gl1 and gl2 have the same values. + The first GridLength structure to compare. + The second GridLength structure to compare. + + + Describes the thickness of a frame around a rectangle. Four Double values describe the Left, Top, Right, and Bottom sides of the rectangle, respectively. + + + The left side measure of the Thickness. + + + The top edge measure of the Thickness. + + + The right side measure of the Thickness. + + + The bottom edge measure of the Thickness. + + + Initializes a Thickness structure that has the specified uniform length on each side. + The uniform length applied to all four sides of the bounding rectangle. + + + Initializes a Thickness structure that has specific lengths (each supplied as a Double) applied to each side of the rectangle. + The thickness for the left side of the rectangle. + The thickness for the upper side of the rectangle. + The thickness for the right side of the rectangle + The thickness for the lower side of the rectangle. + + + Gets or sets the width, in pixels, of the lower side of the bounding rectangle. + A Double that represents the width, in pixels, of the lower side of the bounding rectangle for this instance of Thickness. The default is 0. + + + Gets or sets the width, in pixels, of the left side of the bounding rectangle. + A Double that represents the width, in pixels, of the left side of the bounding rectangle for this instance of Thickness. The default is 0. + + + Gets or sets the width, in pixels, of the right side of the bounding rectangle. + A Double that represents the width, in pixels, of the right side of the bounding rectangle for this instance of Thickness. The default is 0. + + + Gets or sets the width, in pixels, of the upper side of the bounding rectangle. + A Double that represents the width, in pixels, of the upper side of the bounding rectangle for this instance of Thickness. The default is 0. + + + Determines whether the specified object is equal to a Thickness. + true if obj is equal to this Thickness; otherwise, false. + Object to check for equality. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a Thickness to a String representation. + A String representation of this Thickness. + + + Compares two Thickness structures for equality. + true if all values of t1 and t2 are equal; otherwise, false. + The first Thickness structure to compare. + The second Thickness structure to compare. + + + Compares two Thickness structures for inequality. + true if t1 and t2 have different values; false if t1 and t2 have the same values. + The first Thickness structure to compare. + The second Thickness structure to compare. + + + Defines the support types for Microsoft UI Automation infrastructure. These support types are for implementing Microsoft UI Automation support for a custom control. +Also, AutomationProperties provides accessibility info as part of a XAML UI definition. + + + Contains values used as identifiers by IAnnotationProvider. + + + Gets the identifier for the AnnotationTypeId automation property. + The automation property identifier. + + + Gets the identifier for the AnnotationTypeName automation property. + The automation property identifier. + + + Gets the identifier for the Author automation property. + The automation property identifier. + + + Gets the identifier for the DateTime automation property. + The automation property identifier. + + + Gets the identifier for the Target automation property. + The automation property identifier. + + + Contains values used as automation property identifiers by UI Automation providers and UI Automation clients. + + + Identifies the accelerator key automation property. + The automation property identifier. + + + Identifies the access key automation property. + The automation property identifier. + + + Identifies the automation element identifier automation property. + The automation property identifier. + + + Identifies the bounding rectangle automation property. + The automation property identifier. + + + Identifies the class name automation property. + The automation property identifier. + + + Identifies the clickable point automation property. + The automation property identifier. + + + Identifies the controlled peers automation property. + The automation property identifier. + + + Identifies the control type automation property. + The automation property identifier. + + + Identifies the keyboard focus automation property. + The automation property identifier. + + + Identifies the help text automation property. + The automation property identifier. + + + Identifies the content element determination automation property. The content element status indicates whether the element contains content that is valuable to the end user. + The automation property identifier. + + + Identifies the control element determination automation property. The control element status indicates whether the element contains user interface components that can be manipulated. + The automation property identifier. + + + Identifies the enabled determination automation property. The enabled status indicates whether the item referenced by the automation peer is enabled. + The automation property identifier. + + + Identifies the keyboard-focusable determination automation property. + The automation property identifier. + + + Identifies the offscreen determination automation property. The offscreen status indicates whether the item referenced by the automation peer is off the screen. + The automation property identifier. + + + Identifies the password determination automation property. The password status indicates whether the item referenced by the automation peer contains a password. + The automation property identifier. + + + Identifies the form requirement determination automation property. The form requirement status indicates whether the element must be completed on a form. + The automation property identifier. + + + Identifies the item status automation property. + The automation property identifier. + + + Identifies the item type automation property. + The automation property identifier. + + + Identifies the labeled-by peer automation property. + The automation property identifier. + + + Identifies the live settings automation property. The live settings property value is returned by the GetLiveSetting method. + The automation property identifier. + + + Identifies the localized control type automation property. + The automation property identifier. + + + Identifies the element name automation property. + The automation property identifier. + + + Identifies the orientation automation property. + The automation property identifier. + + + Provides support for getting or setting instance-level values of automation properties. These property values are set as attached properties (typically in XAML) and supplement or override automation property values from a control's AutomationPeer. + + + Gets or sets the accelerator key for the specified element. + + + Gets or sets the Microsoft UI Automation tree view mode for an element. + + + Gets or sets the access key for the specified element. + + + Gets or sets the string that uniquely identifies the element to UI Automation. + + + Gets or sets the help text for the element. + + + Gets or sets a value that indicates whether the element is required to be filled out on a form. + + + Gets or sets a description of the status of an item in an element. + + + Gets or sets a description of the type of the specified element. + + + Gets or sets the element that contains the text label for the element. + + + Gets or sets the live setting value for the specified element. + + + Gets or sets the UI Automation name of the element. + + + Gets the value of the AutomationProperties.AcceleratorKey attached property for the specified DependencyObject. + The accelerator key, as a string. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.AccessibilityView attached property for the specified DependencyObject. + The accessibility view setting, as a value of the enumeration. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.AccessKey attached property for the specified DependencyObject. + The access key, as a string. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.AutomationId attached property for the specified DependencyObject. + The UI Automation identifier for the specified element. + The DependencyObject to check. + + + A static utility method that retrieves the list of controlled peers from a target owner. + A list containing the peers that the target element controls. + The owner object to retrieve controlled peers from. + + + Gets the value of the AutomationProperties.HelpText attached property for the specified DependencyObject. + The help text for the specified element. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.IsRequiredForForm attached property for the specified DependencyObject. + true if the specified element is required for completion of a form; otherwise, false. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.ItemStatus attached property for the specified DependencyObject. + The item status of the element. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.ItemType attached property for the specified DependencyObject. + The item type of the element. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.LabeledBy attached property for the specified DependencyObject. + The element that is targeted by the label. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.LiveSetting attached property for the specified DependencyObject. + The live setting value for the specified element. + The DependencyObject to check. + + + Gets the value of the AutomationProperties.Name attached property for the specified DependencyObject. + The name of the specified element. + The DependencyObject to check. + + + Sets the value of the AutomationProperties.AcceleratorKey attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The accelerator key value to set. + + + Sets the value of the AutomationProperties.AccessibilityView attached property for the specified DependencyObject. + The DependencyObject to set the attached property on. + The enumeration value to set + + + Sets the value of the AutomationProperties.AccessKey attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The access key value to set. + + + Sets the value of the AutomationProperties.AutomationId attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The UI Automation identifier value to set. + + + Sets the value of the AutomationProperties.HelpText attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The help text. + + + Sets the value of the AutomationProperties.IsRequiredForForm attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + true to specify that the element is required to be filled out on a form; otherwise, false. + + + Sets the value of the AutomationProperties.ItemStatus attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The item status. + + + Sets the value of the AutomationProperties.ItemType attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The item type. + + + Sets the value of the AutomationProperties.LabeledBy attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The UI element that represents the label for element. + + + Sets the value of the AutomationProperties.LiveSetting attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The AutomationLiveSetting value to set. + + + Sets the value of the AutomationProperties.Name attached property for the specified DependencyObject. + The DependencyObject for which to set the property. + The object name. + + + Identifies the AutomationProperties.AcceleratorKey attached property. + The identifier for the AutomationProperties.AcceleratorKey attached property. + + + Identifies the AutomationProperties.AccessibilityView attached property. + The identifier for the AutomationProperties.AccessibilityView attached property. + + + Identifies the AutomationProperties.AccessKey attached property. + The identifier for the AutomationProperties.AccessKey attached property. + + + Identifies the AutomationProperties.AutomationId attached property. + The identifier for the AutomationProperties.AutomationId attached property. + + + Identifies a dependency property that's used for controlled peers reporting information. + A dependency property identifier. + + + Identifies the AutomationProperties.HelpText attached property. + The identifier for the AutomationProperties.HelpText attached property. + + + Identifies the AutomationProperties.IsRequiredForForm attached property. + The identifier for the AutomationProperties.IsRequiredForForm attached property. + + + Identifies the AutomationProperties.ItemStatus attached property. + The identifier for the AutomationProperties.ItemStatus attached property. + + + Identifies the AutomationProperties.ItemType attached property. + The identifier for the AutomationProperties.ItemType dependency property. + + + Identifies the AutomationProperties.LabeledBy attached property. + The identifier for the AutomationProperties.LabeledBy attached property. + + + Identifies the AutomationProperties.LiveSetting attached property. + The property identifier for the AutomationProperties.LiveSetting attached property. + + + Identifies the AutomationProperties.Name attached property. + The identifier for the AutomationProperties.Name attached property. + + + Identifies a property of AutomationElementIdentifiers or of a specific control pattern. + + + Contains values used as identifiers by IDockProvider. + + + Identifies the DockPosition automation property. + The automation property identifier. + + + Contains values used as identifiers by IDragProvider. + + + Gets the identifier for the DropEffect automation property. + The automation property identifier. + + + Gets the identifier for the DropEffects automation property. + The automation property identifier. + + + Gets the identifier for the GrabbedItems automation property. + The automation property identifier. + + + Gets the identifier for the IsGrabbed automation property. + The automation property identifier. + + + Contains values used as identifiers by IDropTargetProvider. + + + Gets the identifier for the DropEffect automation property. + The automation property identifier. + + + Gets the identifier for the DropEffects automation property. + The automation property identifier. + + + The exception that is thrown when an attempt is made to access a Microsoft UI Automation element corresponding to a part of the user interface that is no longer available. + + + Initializes a new instance of the ElementNotAvailableException class. + + + Initializes a new instance of the ElementNotAvailableException class with a specified error message. + The message that describes the error. + + + Initializes a new instance of the ElementNotAvailableException class with a specified error message and a reference to the inner exception that is the cause of this exception. + The message that describes the error. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + The exception that is thrown when an attempt is made through UI automation to manipulate a control that is not enabled. + + + Initializes a new instance of the ElementNotEnabledException class. + + + Initializes a new instance of the ElementNotEnabledException class with a specified error message. + The message that describes the error. + + + Initializes a new instance of the ElementNotEnabledException class with a specified error message and a reference to the inner exception that is the cause of this exception. + The message that describes the error. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + Contains values used as identifiers by IExpandCollapseProvider. + + + Identifies the ExpandCollapseState automation property. + The automation property identifier. + + + Contains values used as identifiers by IGridItemProvider. + + + Identifies the Column automation property. + The automation property identifier. + + + Identifies the ColumnSpan automation property. + The automation property identifier. + + + Identifies the ContainingGrid automation property. + The automation property identifier. + + + Identifies the Row automation property. + The automation property identifier. + + + Identifies the RowSpan property. + The automation property identifier. + + + Contains values used as identifiers by IGridProvider. + + + Identifies the ColumnCount automation property. + The automation property identifier. + + + Identifies the RowCount automation property. + The automation property identifier. + + + Contains values used as identifiers by IMultipleViewProvider. + + + Identifies the CurrentView automation property. + The automation property identifier. + + + Identifies the automation property that gets the control-specific collection of views. + The automation property identifier. + + + Contains values used as identifiers by IRangeValueProvider. + + + Identifies the IsReadOnly automation property. + The automation property identifier. + + + Identifies the LargeChange automation property. + The automation property identifier. + + + Identifies the Maximum automation property. + The automation property identifier. + + + Identifies the Minimum automation property. + The automation property identifier. + + + Identifies the SmallChange automation property. + The automation property identifier. + + + Identifies the Value automation property. + The automation property identifier. + + + Contains values used as identifiers by IScrollProvider, and also contains the NoScroll constant. + + + Specifies that scrolling should not be performed. + The value 1. This is the value to return if a client asks for the scrolling percentage, but scrolling is not enabled. + + + Identifies the HorizontallyScrollable automation property. + The automation property identifier. + + + Identifies the HorizontalScrollPercent automation property. + The automation property identifier. + + + Identifies the HorizontalViewSize automation property. + The automation property identifier. + + + Identifies the VerticallyScrollable automation property. + The automation property identifier. + + + Identifies the VerticalScrollPercent automation property. + The automation property identifier. + + + Identifies the VerticalViewSize automation property. + The automation property identifier. + + + Contains values used as identifiers by ISelectionItemProvider. + + + Identifies the IsSelected automation property. + The automation property identifier. + + + Identifies the SelectionContainer automation property. + The automation property identifier. + + + Contains values used as identifiers by ISelectionProvider. + + + Identifies the CanSelectMultiple automation property. + The automation property identifier. + + + Identifies the IsSelectionRequired automation property. + The automation property identifier. + + + Identifies the property that gets the selected items in a container. + The automation property identifier. + + + Contains values used as automation property identifiers for properties of the ISpreadsheetItemProvider pattern. + + + Identifies the Formula automation property. + The automation property identifier. + + + Contains values used as identifiers by IStylesProvider. + + + Identifies the ExtendedProperties automation property. + The automation property identifier. + + + Identifies the FillColor automation property. + The automation property identifier. + + + Identifies the FillPatternColor automation property. + The automation property identifier. + + + Identifies the FillPatternStyle automation property. + The automation property identifier. + + + Identifies the Shape automation property. + The automation property identifier. + + + Identifies the StyleId automation property. + The automation property identifier. + + + Identifies the StyleName automation property. + The automation property identifier. + + + Contains values used as identifiers by ITableProvider. + + + Identifies the automation property that retrieves all the column headers associated with a table item or cell. + The automation property identifier. + + + Identifies the automation property that retrieves all the row headers associated with a table item or cell. + The automation property identifier. + + + Contains values used as identifiers by ITableProvider. + + + Identifies the automation property that is accessed by the GetColumnHeaders method. + The automation property identifier. + + + Identifies the automation property that is accessed by the GetRowHeaders method. + The automation property identifier. + + + Identifies the RowOrColumnMajor automation property. + The automation property identifier. + + + Contains values used as identifiers by IToggleProvider. + + + Identifies the ToggleState automation property. + The automation property identifier. + + + Contains values used as identifiers by ITransformProvider. + + + Identifies the CanMove automation property. + The automation property identifier. + + + Identifies the CanResize automation property. + The automation property identifier. + + + Identifies the CanRotate automation property. + The automation property identifier. + + + Contains values used as identifiers by ITransformProvider2. + + + Identifies the CanZoom automation property. + The automation property identifier. + + + Identifies the MaxZoom automation property. + The automation property identifier. + + + Identifies the MinZoom automation property. + The automation property identifier. + + + Identifies the ZoomLevel automation property. + The automation property identifier. + + + Contains values used as identifiers by IValueProvider. + + + Identifies the IsReadOnly property. + The automation property reference for the IsReadOnly property. + + + Identifies the Value automation property. + The automation property identifier. + + + Contains values used as identifiers by IWindowProvider. + + + Identifies the Maximizable automation property. + The automation property identifier. + + + Identifies the Minimizable automation property. + The automation property identifier. + + + Identifies the IsModal automation property. + The automation property identifier. + + + Identifies the IsTopmost automation property. + The automation property identifier. + + + Identifies the InteractionState automation property. + The automation property identifier. + + + Identifies the VisualState automation property. + The automation property identifier. + + + Provides a set of constants that identify types of annotations in a document, as used by the ISpreadsheetItemProvider Microsoft UI Automation interface. + + + The annotation type is unknown. + + + A spelling error, often denoted by a red squiggly line. + + + A grammatical error, often denoted by a green squiggly line. + + + A comment. Comments can take different forms depending on the application. + + + An error in a formula. Formula errors typically include red text and exclamation marks. + + + A change that was made to the document. + + + The header for a page in a document. + + + The footer for a page in a document. + + + Highlighted content, typically denoted by a contrasting background color. + + + Contains values that specify the dock position of an object within a docking container. Used by IDockProvider.DockPosition. + + + Indicates that the UI Automation element is docked along the top edge of the docking container. + + + Indicates that the UI Automation element is docked along the left edge of the docking container. + + + Indicates that the UI Automation element is docked along the bottom edge of the docking container. + + + Indicates that the UI Automation element is docked along the right edge of the docking container. + + + Indicates that the UI Automation element is docked along all edges of the docking container and fills all available space within the container. + + + Indicates that the UI Automation element is not docked to any edge of the docking container. + + + Contains values that specify the ExpandCollapseState automation property value of a UI Automation element. + + + No child nodes, controls, or content of the UI Automation element are displayed. + + + All child nodes, controls, and content of the UI Automation element are displayed. + + + Some, but not all, child nodes, controls, or content of the UI Automation element are displayed. + + + The UI Automation element has no child nodes, controls, or content to display. + + + Specifies whether data in a table should be read primarily by row or by column. + + + Data in the table should be read row by row. + + + Data in the table should be read column by column. + + + The best way to present the data is indeterminate. + + + Contains values that are used by the IScrollProvider pattern to indicate the direction and distance to scroll. + + + Specifies that scrolling is performed in large decrements, which is equivalent to pressing the PAGE UP key or to clicking a blank part of a scrollbar. If the distance represented by the PAGE UP key is not a relevant amount for the control, or if no scrollbar exists, the value represents an amount equal to the size of the currently visible window. + + + Specifies that scrolling is performed in small decrements, which is equivalent to pressing an arrow key or to clicking the arrow button on a scrollbar. + + + Specifies that scrolling should not be performed. + + + Specifies that scrolling is performed in large increments, which is equivalent to pressing the PAGE DOWN key or to clicking a blank part of a scrollbar. If the distance represented by the PAGE DOWN key is not a relevant amount for the control, or if no scrollbar exists, the value represents an amount equal to the size of the currently visible region. + + + Specifies that scrolling is performed in small increments, which is equivalent to pressing an arrow key or to clicking the arrow button on a scrollbar. + + + Contains values that specify whether a text provider supports selection and, if so, whether it supports a single, continuous selection or multiple, disjoint selections. + + + Does not support text selections. + + + Supports a single, continuous text selection. + + + Supports multiple, disjoint text selections. + + + Provides a of set constants that identify, as used by the ISynchronizedInputProvider Microsoft UI Automation interface. + + + A key has been released. + + + A key has been pressed. + + + The left mouse button has been released. + + + The left mouse button has been pressed. + + + The right mouse button has been released. + + + The right mouse button has been pressed. + + + Contains values that specify the ToggleState of a UI Automation element. + + + The UI Automation element isn't selected, checked, marked, or otherwise activated. + + + The UI Automation element is selected, checked, marked, or otherwise activated. + + + The UI Automation element is in an indeterminate state. + + + Defines values that specify the current state of the window for purposes of user or programmatic interaction. + + + The window is running. This doesn't guarantee that the window is responding or ready for user interaction. + + + The window is closing. + + + The window is ready for user interaction. + + + The window is blocked by a modal window. + + + The window is not responding. + + + Contains values that specify the visual state of a window for the IWindowProvider pattern. + + + Specifies that the window is normal (restored). + + + Specifies that the window is maximized. + + + Specifies that the window is minimized. + + + Contains possible values for the ZoomByUnit method, which zooms the viewport of a control by the specified unit. + + + No increase or decrease in zoom. + + + Decrease zoom by a large decrement. + + + Decrease zoom by a small decrement. + + + Increase zoom by a large increment. + + + Increase zoom by a small increment. + + + Contains automation peers for controls and base classes. + + + Exposes AppBar types to Microsoft UI Automation. + + + Initializes a new instance of the AppBarAutomationPeer class. + The AppBar control instance to create the peer for. + + + Gets the state, expanded or collapsed, of the control. + A value of the enumeration. + + + Retrieves the toggle state of the owner AppBar. + The ToggleState of the owner control. + + + Hides all nodes, controls, or content that are descendants of the control. + + + Displays all child nodes, controls, or content of the control. + + + Cycles through the toggle states of an AppBarAutomationPeer. + + + Exposes AppBarButton types to Microsoft UI Automation. + + + Initializes a new instance of the AppBarButtonAutomationPeer class. + The AppBarButton to create the peer for. + + + Exposes AppBarToggleButton types to Microsoft UI Automation. + + + Initializes a new instance of the AppBarToggleButtonAutomationPeer class. + The AppBarToggleButton to create the peer for. + + + Provides a base class that exposes the automation peer for an associated owner class to Microsoft UI Automation. + + + Provides base class initialization behavior for AutomationPeer derived classes. + + + Gets or sets an AutomationPeer that is reported to the automation client as the source for all the events that come from this AutomationPeer. See Remarks. + The AutomationPeer that is the source of events. + + + Gets the accelerator key combinations for the object that is associated with the UI Automation peer. + The accelerator key. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetAcceleratorKey or an equivalent Microsoft UI Automation client API. + The accelerator key. + + + Gets the access key for the element that is associated with the automation peer. + The access key. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetAccessKey or an equivalent Microsoft UI Automation client API. + The access key. + + + Gets the control type for the element that is associated with the UI Automation peer. + The control type. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetAutomationControlType or an equivalent Microsoft UI Automation client API. + The control type. + + + Gets the AutomationId of the element that is associated with the automation peer. + The automation identifier. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetAutomationId or an equivalent Microsoft UI Automation client API. + The automation identifier. + + + Gets the Rect object that represents the screen coordinates of the element that is associated with the automation peer. + The bounding rectangle. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetBoundingRectangle or an equivalent Microsoft UI Automation client API. + The bounding rectangle. + + + Gets the collection of child elements that are represented in the UI Automation tree as immediate child elements of the automation peer. + The collection of AutomationPeer objects for child elements. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetChildren or an equivalent Microsoft UI Automation client API. + The collection of AutomationPeer objects for child elements. + + + Gets a name that is used with AutomationControlType, to differentiate the control that is represented by this AutomationPeer. + The class name. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetClassName or an equivalent Microsoft UI Automation client API. + The class name. + + + Gets a point on the element that is associated with the automation peer that responds to a mouse click. + A point in the clickable area of the element. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetClickablePoint or an equivalent Microsoft UI Automation client API. + A point within the clickable area of the element. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetControlledPeers or an equivalent Microsoft UI Automation client API such as getting a property value as identified by UIA_ControllerForPropertyId. + A list of the controlled peers for the current automation peer. + + + Gets a list of the controlled peers for the current automation peer. + A list of the controlled peers for the current automation peer. + + + Gets text that describes the functionality of the control that is associated with the automation peer. + The help text. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetHelpText or an equivalent Microsoft UI Automation client API. + The help text. + + + Gets text that conveys the visual status of the element that is associated with this automation peer. + The item status. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetItemStatus or an equivalent Microsoft UI Automation client API. + The item status. + + + Gets a string that describes what kind of item an element represents. + The kind of item. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetItemType or an equivalent Microsoft UI Automation client API. + The kind of item. + + + Gets the AutomationPeer for the UIElement that is targeted to the element. + The AutomationPeer for the element that is targeted by the UIElement. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetLabeledBy or an equivalent Microsoft UI Automation client API. + The AutomationPeer for the element that is targeted by the UIElement. + + + Gets the live setting notification behavior information for the object that is associated with the UI Automation peer. + A value of the enumeration. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetLiveSetting or an equivalent Microsoft UI Automation client API. + A value of the enumeration that reports the live setting notification behavior for a peer implementation. + + + Gets a localized string that represents the AutomationControlType value for the control that is associated with this automation peer. + The type of the control. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetLocalizedControlType or an equivalent Microsoft UI Automation client API. + The type of the control, as a string that is localized to be suitable for direct presentation to users by assistive technology. + + + Gets text that describes the element that is associated with this automation peer. +The Microsoft UI Automation Name value is the primary identifier used by most assistive technology when they represent your app's UI by interacting with the Microsoft UI Automation framework. + The name of the element that is the peer's owner, as used by assistive technology and other Microsoft UI Automation clients. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetName or an equivalent Microsoft UI Automation client API. + The name as used by assistive technology and other Microsoft UI Automation clients. + + + Gets a value that indicates the explicit control orientation, if any. + The orientation of the control as a value of the enumeration. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetOrientation or an equivalent Microsoft UI Automation client API. + The orientation of the control. + + + Gets the AutomationPeer that is the parent of this AutomationPeer. + The parent automation peer. + + + Gets the control pattern that is associated with the specified PatternInterface. + The object that implements the pattern interface; null if the peer does not support this interface. + A value from the PatternInterface enumeration. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetPattern or an equivalent Microsoft UI Automation client API. + The object that implements the pattern interface; null if the peer does not support this interface. + A value from the PatternInterface enumeration. + + + Gets an AutomationPeer from the specified point. + The AutomationPeer for the UI element at the specified point. + The relative position of the target UI element in the UI. + + + Provides the peer's behavior when a Microsoft UI Automation client calls GetPeerFromPoint or an equivalent Microsoft UI Automation client API. + The AutomationPeer for the UI element at the specified point. + The relative position of the target UI element in the UI. + + + Gets a value that indicates whether the element that is associated with this automation peer currently has keyboard focus. + true if the element has keyboard focus; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls HasKeyboardFocus or an equivalent Microsoft UI Automation client API. + true if the element has keyboard focus; otherwise, false. + + + Triggers recalculation of the main properties of the AutomationPeer and raises the PropertyChanged notification to the automation client if the properties have changed. + + + Gets a value that indicates whether the element that is associated with this automation peer contains data that is presented to the user. + true if the element is a content element; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsContentElement or an equivalent Microsoft UI Automation client API. + true if the element is a content element; otherwise, false. + + + Gets a value that indicates whether the element is understood by the user as interactive or as contributing to the logical structure of the control in the GUI. + true if the element is a control; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsControlElement or an equivalent Microsoft UI Automation client API. + true if the element is a control; otherwise, false. + + + Gets a value that indicates whether the element associated with this automation peer supports interaction. + true if the element supports interaction; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsEnabled or an equivalent Microsoft UI Automation client API. + true if the element can be interacted with; otherwise, false. + + + Gets a value that indicates whether the element can accept keyboard focus. + true if the element can accept keyboard focus; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsKeyboardFocusable or an equivalent Microsoft UI Automation client API. + true if the element can accept keyboard focus; otherwise, false. + + + Gets a value that indicates whether an element is off the screen. + true if the element is not on the screen; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsOffscreen or an equivalent Microsoft UI Automation client API. + true if the element is not on the screen; otherwise, false. + + + Gets a value that indicates whether the element contains sensitive content. + true if the element contains sensitive content such as a password; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsPassword or an equivalent Microsoft UI Automation client API. + true if the element contains sensitive content; otherwise, false. + + + Gets a value that indicates whether the element that is associated with this peer must be completed on a form. + true if the element must be completed; otherwise, false. + + + Provides the peer's behavior when a Microsoft UI Automation client calls IsRequiredForForm or an equivalent Microsoft UI Automation client API. + true if the element must be completed; otherwise, false. + + + Gets a value that indicates whether Microsoft UI Automation reports that a client is listening for the specified event. + true if Microsoft UI Automation reports a client is listening for the specified event; otherwise, false. + One of the enumeration values. + + + Gets an AutomationPeer for the specified IRawElementProviderSimple proxy. + The AutomationPeer. + The class that implements IRawElementProviderSimple. + + + Gets the IRawElementProviderSimple proxy for the specified AutomationPeer. + The proxy. + The automation peer. + + + Raises an automation event. + The event identifier for the event to raise, as a value of the enumeration. See AutomationEvents. + + + Raises an event to notify the automation client of a changed property value. + The property that changed. + The previous value of the property. + The new value of the property. + + + Sets the keyboard focus on the element that is associated with this automation peer. + + + Provides the peer's behavior when a Microsoft UI Automation client calls SetFocus or an equivalent Microsoft UI Automation client API. + + + Shows the available context menu for the owner element. + + + Provides the peer's behavior when a Microsoft UI Automation client calls ShowContextMenu or an equivalent Microsoft UI Automation client API. + + + Exposes Button types to Microsoft UI Automation. + + + Initializes a new instance of the ButtonAutomationPeer class. + The owner element to create for. + + + Sends a request to activate a control and initiate its single, unambiguous action. + + + Represents a base class for exposing classes derived from ButtonBase to Microsoft UI Automation. + + + Provides base class initialization behavior for ButtonBase derived classes. + The owner element to create for. + + + Exposes CaptureElement types to Microsoft UI Automation. + + + Initializes a new instance of the CaptureElementAutomationPeer class. + The CaptureElement instance to create the peer for. + + + Exposes CheckBox types to Microsoft UI Automation. + + + Initializes a new instance of the CheckBoxAutomationPeer class. + The owner element to create for. + + + Exposes ComboBox types to Microsoft UI Automation. + + + Initializes a new instance of the ComboBoxAutomationPeer class. + The owner element to create for. + + + Gets the state, expanded or collapsed, of the control. + A value of the enumeration. + + + Gets a value that specifies whether the value of a control is read-only. + true if the control value can be set; otherwise, false. + + + Gets the value of the control. + The value of the control, as a string. + + + Hides all nodes, controls, or content that are descendants of the control. + + + Displays all child nodes, controls, or content of the control. + + + Sets the value of a control, as an implementation of the IValueProvider pattern. + The value to set. + + + Exposes the ComboBoxItem contents in a ComboBox to Microsoft UI Automation. + + + Initializes a new instance of the ComboBoxItemAutomationPeer class. + The ComboBoxItem to create the peer for. + + + Exposes the data content of a ComboBoxItem to Microsoft UI Automation. + + + Initializes a new instance of the ComboBoxItemDataAutomationPeer class. + The item data. + The owner to create for. + + + Scrolls the content area of a parent container in order to display the peer owner's content within the visible region (viewport) of the container. + + + Exposes DatePicker types to Microsoft UI Automation. + + + Initializes a new instance of the DatePickerAutomationPeer class. + The DatePicker to create the peer for. + + + Exposes FlipView types to Microsoft UI Automation. + + + Initializes a new instance of the FlipViewAutomationPeer class. + The FlipView to create the peer for. + + + Exposes a FlipViewItem to Microsoft UI Automation. + + + Initializes a new instance of the FlipViewItemAutomationPeer class. + The FlipViewItem to create the peer for. + + + Exposes the data content of a FlipViewItem to Microsoft UI Automation. + + + Initializes a new instance of the FlipViewItemDataAutomationPeer class. + The item data. + The owner to create for. + + + Scrolls the content area of a parent container in order to display the peer owner's content within the visible region (viewport) of the container. + + + Exposes FlyoutPresenter types to Microsoft UI Automation. + + + Initializes a new instance of the FlyoutPresenterAutomationPeer class. + The FlyoutPresenter to create the peer for. + + + Exposes FrameworkElement derived types (including all controls) to Microsoft UI Automation. + + + Initializes a new instance of the FrameworkElementAutomationPeer class. + The owner element to create for. + + + Gets the UIElement owner that is associated with this FrameworkElementAutomationPeer. + The element that owns this instance of the peer class. + + + Creates a FrameworkElementAutomationPeer for the specified UIElement. + A FrameworkElementAutomationPeer. + The UIElement that is associated with this FrameworkElementAutomationPeer. + + + Returns the FrameworkElementAutomationPeer for the specified UIElement. + The FrameworkElementAutomationPeer, or null if the FrameworkElementAutomationPeer could not be created. + The UIElement that is associated with this FrameworkElementAutomationPeer. + + + Exposes GridView types to Microsoft UI Automation. + + + Initializes a new instance of the GridViewAutomationPeer class. + The GridView to create a peer for. + + + Exposes GridViewHeaderItem types to Microsoft UI Automation. + + + Initializes a new instance of the GridViewHeaderItemAutomationPeer class. + The GridViewHeaderItem to create the peer for. + + + Exposes a GridViewItem to Microsoft UI Automation. + + + Initializes a new instance of the GridViewItemAutomationPeer class. + The owner element to create for. + + + Exposes GridView items to Microsoft UI Automation, using a data representation of the item so that the peer supports scrolling to that item with data awareness. + + + Initializes a new instance of the GridViewItemDataAutomationPeer class. + The specific data item. + The automation peer for the GridView that contains the item. + + + Scrolls the content area of a container object in order to display the control within the visible region (viewport) of the container. + + + Exposes a GroupItem to Microsoft UI Automation. + + + Initializes a new instance of the GroupItemAutomationPeer class. + The GroupItem to create the peer for. + + + Exposes Hub types to Microsoft UI Automation. + + + Initializes a new instance of the HubAutomationPeer class. + The Hub to create the peer for. + + + Exposes HubSection types to Microsoft UI Automation. + + + Initializes a new instance of the HubSectionAutomationPeer class. + The HubSection to create the peer for. + + + Exposes HyperlinkButton types to Microsoft UI Automation. + + + Initializes a new instance of the HyperlinkButtonAutomationPeer class. + The owner element to create for. + + + Sends a request to activate a control and initiate its single, unambiguous action. + + + Exposes Image types to Microsoft UI Automation. + + + Initializes a new instance of the ImageAutomationPeer class. + The Image to create a peer for. + + + Exposes a data item in an Items collection to Microsoft UI Automation. + + + Initializes a new instance of the ItemAutomationPeer class. + The specific item to create for. + The items-control owner to create for. + + + Gets the data item in the Items collection that is associated with this ItemAutomationPeer. + The data item. + + + Gets the ItemsControlAutomationPeer that is associated with the ItemsControl that holds the Items collection. + The ItemsControlAutomationPeer associated with the ItemsControl that holds the Items collection. + + + Makes the virtual item fully accessible as a Microsoft UI Automation element. + + + Exposes ItemsControl types to Microsoft UI Automation. + + + Initializes a new instance of the ItemsControlAutomationPeer class. + The owner element to create for. + + + Retrieves an element by the specified property value. + The first item that matches the search criterion if such an item exists; otherwise, null. + The item in the container after which to begin the search. + The property that contains the value to retrieve. + The value to retrieve. + + + Exposes ListBox types to Microsoft UI Automation. + + + Initializes a new instance of the ListBoxAutomationPeer class. + The owner element to create for. + + + Exposes the items in the Items collection of a ListBox to Microsoft UI Automation. + + + Initializes a new instance of the ListBoxItemAutomationPeer class. + The owner element to create for. + + + Exposes ListBox items to Microsoft UI Automation, using a data representation of the item so that the peer supports scrolling to that item with data awareness. + + + Initializes a new instance of the ListBoxItemDataAutomationPeer class. + The specific data item. + The automation peer for the ListBox that contains the item. + + + Scrolls the content area of a container object in order to display the control within the visible region (viewport) of the container. + + + Exposes ListView types to Microsoft UI Automation. + + + Initializes a new instance of the ListViewAutomationPeer class. + The ListView to create a peer for. + + + A base class that provides a Microsoft UI Automation peer implementation for types that derive from ListViewBase. + + + Initializes a new instance of the ListViewBaseAutomationPeer class. + The ListViewBase derived object to create a peer for. + + + Gets a string that indicates what will happen when the item is dropped. + A string that indicates what will happen when the item is dropped. + + + Gets an array of strings that enumerates possible drop effects when this item is dropped. + An array of strings that enumerates possible drop effects when this item is dropped. + + + Exposes ListViewBaseHeaderItem types to Microsoft UI Automation. + + + Initializes a new instance of the ListViewBaseHeaderItemAutomationPeer class. + The ListViewBaseHeaderItem to create the peer for. + + + Exposes ListViewHeaderItem types to Microsoft UI Automation. + + + Initializes a new instance of the ListViewHeaderItemAutomationPeer ListViewBaseHeaderItemAutomationPeer class. + The ListViewHeaderItem to create the peer for. + + + Exposes a ListViewItem to Microsoft UI Automation. + + + Initializes a new instance of the ListViewItemAutomationPeer class. + The ListViewItem to create a peer for. + + + Exposes ListView items to Microsoft UI Automation, using a data representation of the item so that the peer supports scrolling to that item with data awareness. + + + Initializes a new instance of the ListViewItemDataAutomationPeer class. + The specific data item. + The automation peer for the ListViewBase derived type that contains the item. + + + Scrolls the content area of the parent container in order to display the peer's data within the visible region (viewport) of the container. + + + Exposes MediaElement types to Microsoft UI Automation. + + + Initializes a new instance of the MediaElementAutomationPeer class. + The owner element to create for. + + + Exposes MenuFlyoutItem types to Microsoft UI Automation. + + + Initializes a new instance of the MenuFlyoutItemAutomationPeer class. + The owner element to create for. + + + Sends a request to activate a control and initiate its single, unambiguous action. + + + Exposes MenuFlyoutPresenter types to Microsoft UI Automation. + + + Initializes a new instance of the MenuFlyoutPresenterAutomationPeer class. + The owner element to create for. + + + Exposes PasswordBox types to Microsoft UI Automation. + + + Initializes a new instance of the PasswordBoxAutomationPeer class. + The PasswordBox to create a peer for. + + + Exposes ProgressBar types to Microsoft UI Automation. + + + Initializes a new instance of the ProgressBarAutomationPeer class. + The ProgressBar to create a peer for. + + + Exposes ProgressRing types to Microsoft UI Automation. + + + Initializes a new instance of the ProgressRingAutomationPeer class. + The ProgressRing to create a peer for. + + + Exposes RadioButton types to Microsoft UI Automation. + + + Initializes a new instance of the RadioButtonAutomationPeer class. + The owner element to create for. + + + Gets a value that indicates whether an item is selected. + true if the element is selected; otherwise, false. + + + Gets the UI automation provider that implements ISelectionProvider and acts as the container for the calling object. + The provider that supports ISelectionProvider. + + + Adds the current element to the collection of selected items. + + + Removes the current element from the collection of selected items. + + + Clears any existing selection and then selects the current element. + + + A base class that provides a Microsoft UI Automation peer implementation for types that derive from RangeBase. + + + Initializes a new instance of the RangeBaseAutomationPeer class. + The owner element to create for. + + + Gets a value that indicates whether the value of a control is read-only. + true if the value is read-only; false if it can be modified. + + + Gets the value that is added to or subtracted from the Value property when a large change is made, such as with the PAGE DOWN key. + The large-change value supported by the control. + + + Gets the maximum range value that is supported by the control. + The maximum range value supported by the control. + + + Gets the minimum range value that is supported by the control. + The minimum range value supported by the control. + + + Gets the value that is added to or subtracted from the Value property when a small change is made, such as with an arrow key. + The small-change value supported by the control. + + + Gets the value of the control. + The value of the control. + + + Sets the value of the control, as an implementation of the IValueProvider pattern. + The value to set. + + + Exposes RepeatButton types to Microsoft UI Automation. + + + Initializes a new instance of the RepeatButtonAutomationPeer class. + The owner element to create for. + + + Sends a request to activate a control and initiate its single, unambiguous action. + + + Exposes RichEditBox types to Microsoft UI Automation. + + + Initializes a new instance of the RichEditBoxAutomationPeer class. + The owner element to create for. + + + Exposes RichTextBlock types to Microsoft UI Automation. + + + Initializes a new instance of the RichTextBlockAutomationPeer class. + The RichTextBlock to create a peer for. + + + Exposes RichTextBlockOverflow types to Microsoft UI Automation. + + + Initializes a new instance of the RichTextBlockOverflowAutomationPeer class. + The RichTextBlockOverflow to create a peer for. + + + Exposes ScrollBar types to Microsoft UI Automation. + + + Initializes a new instance of the ScrollBarAutomationPeer class. + The owner element to create for. + + + Exposes ScrollViewer types to Microsoft UI Automation. + + + Initializes a new instance of the ScrollViewerAutomationPeer class. + The ScrollViewer to create a peer for. + + + Gets a value that indicates whether the control can scroll horizontally. + true if the control can scroll horizontally; otherwise, false. + + + Gets the current horizontal scroll position. + The horizontal scroll position as a percentage of the total content area within the control. + + + Gets the current horizontal view size. + The horizontal size of the viewable region as a percentage of the total content area within the control. + + + Gets a value that indicates whether the control can scroll vertically. + true if the control can scroll vertically; otherwise, false. + + + Gets the current vertical scroll position. + The vertical scroll position as a percentage of the total content area within the control. + + + Gets the vertical view size. + The vertical size of the viewable region as a percentage of the total content area within the control. + + + Scrolls the visible region of the content area horizontally, vertically, or both. + The horizontal increment that is specific to the control. Pass NoScroll if the control cannot be scrolled in this direction. + The vertical increment that is specific to the control. Pass NoScroll if the control cannot be scrolled in this direction. + + + Sets the horizontal and vertical scroll position as a percentage of the total content area within the control. + The horizontal position as a percentage of the content area's total range. Pass NoScroll if the control cannot be scrolled in this direction. + The vertical position as a percentage of the content area's total range. Pass NoScroll if the control cannot be scrolled in this direction. + + + Exposes SearchBox types to Microsoft UI Automation. + + + Initializes a new instance of the SearchBoxAutomationPeer class. + The SearchBox to create a peer for. + + + A base class that provides a Microsoft UI Automation peer implementation for types that derive from Selector. + + + Initializes a new instance of the SelectorAutomationPeer class. + The owner Selector implementation to create for. + + + Gets a value that indicates whether the Microsoft UI Automation provider allows more than one child element to be selected concurrently. + true if multiple selection is allowed; otherwise, false. + + + Gets a value that indicates whether the Microsoft UI Automation provider requires at least one child element to be selected. + true if selection is required; otherwise, false. + + + Retrieves a Microsoft UI Automation provider for each child element that is selected. + A generic list of Microsoft UI Automation providers. + + + Exposes the items in a Selector to Microsoft UI Automation. + + + Initializes a new instance of the SelectorItemAutomationPeer class. + The specific item. + The parent items control to create for. + + + Gets a value that indicates whether an item is selected. + true if the element is selected; otherwise, false. + + + Gets the UI Automation provider that implements ISelectionProvider and acts as container for the calling object. + The UI Automation provider. + + + Adds the current element to the collection of selected items. + + + Removes the current element from the collection of selected items. + + + Clears any existing selection and then selects the current element. + + + Exposes SemanticZoom types to Microsoft UI Automation. + + + Initializes a new instance of the SemanticZoomAutomationPeer class. + The SemanticZoom to create a peer for. + + + Gets a value that indicates whether the Toggle method can be called and result in a toggled view. + true if calling Toggle will result in a toggled view; otherwise, false. + + + Cycles through the toggle states of a control. + + + Exposes SettingsFlyout types to Microsoft UI Automation. + + + Initializes a new instance of the SettingsFlyoutAutomationPeer class. + The SettingsFlyout to create the peer for. + + + Exposes Slider types to Microsoft UI Automation. + + + Initializes a new instance of the SliderAutomationPeer class. + The Slider to create a peer for. + + + Exposes TextBlock types to Microsoft UI Automation. + + + Initializes a new instance of the TextBlockAutomationPeer class. + The TextBlock to create a peer for. + + + Exposes TextBox types to Microsoft UI Automation. + + + Initializes a new instance of the TextBoxAutomationPeer class. + The TextBox to create a peer for. + + + Exposes Thumb types to Microsoft UI Automation. + + + Initializes a new instance of the ThumbAutomationPeer class. + The Thumb to create a peer for. + + + Exposes TimePicker types to Microsoft UI Automation. + + + Initializes a new instance of the TimePickerAutomationPeer class. + The TimePicker to create the peer for. + + + Exposes ToggleButton types to Microsoft UI Automation. + + + Initializes a new instance of the ToggleButtonAutomationPeer class. + The ToggleButton to create a peer for. + + + Gets the toggle state of the control. + The toggle state of the control. + + + Cycles through the toggle states of a control. + + + Exposes ToggleSwitch types to Microsoft UI Automation. + + + Initializes a new instance of the ToggleSwitchAutomationPeer class. + The ToggleSwitch to create a peer for. + + + Gets the toggle state of the control. + The toggle state of the control. + + + Cycles through the toggle states of a control. + + + Exposes ToggleMenuFlyoutItem types to Microsoft UI Automation. + + + Initializes a new instance of the ToggleMenuFlyoutItemAutomationPeer class. + The owner element to create for. + + + Cycles through the toggle states of a control. + + + Gets the toggle state of the control. + The toggle state of the control. + + + Declares how a control should included in different views of a Microsoft UI Automation tree. + + + The control is included in the Raw view of a Microsoft UI Automation tree. + + + The control is included in the Control view of a Microsoft UI Automation tree. + + + The control is included in the Content view of a Microsoft UI Automation tree. This is the default. + + + Specifies the control type that is exposed to the Microsoft UI Automation client. +Used by GetAutomationControlType. + + + A button control. + + + A calendar control, such as a date picker. + + + A check box control. + + + A combo box control. + + + An edit control, such as a text box. + + + A hyperlink control. + + + An image control. + + + A list item control, which is a child item of a list control. + + + A list control, such as a list box. + + + A menu control, such as a top-level menu in an application window. + + + A menu bar control, which generally contains a set of top-level menus. + + + A menu item control. + + + A progress bar control, which visually indicates the progress of a lengthy operation. + + + A radio button control, which is a selection mechanism allowing exactly one selected item in a group. + + + A scroll bar control, such as a scroll bar in an application window. + + + A slider control. + + + A spinner control. + + + A status bar control. + + + A tab control. + + + A tab item control, which represents a page of a tab control. + + + An edit control, such as a text box or rich text box. + + + A toolbar, such as the control that contains a set of command buttons in an application window. + + + A tooltip control, an informational window that appears as a result of moving the pointer over a control or sometimes when tabbing to a control using the keyboard. + + + A tree control. + + + A node in a tree control. + + + A control that is not one of the defined control types. + + + A group control, which acts as a container for other controls. + + + The control in a scrollbar that can be dragged to a different position. + + + A data grid control. + + + A data item control. + + + A document control. + + + A split button, which is a button that performs a default action and can also expand to a list of other possible actions. + + + A window frame, which contains child objects. + + + A pane control. + + + A header control, which is a container for the labels of rows and columns of information. + + + A header item, which is the label for a row or column of information. + + + A table. + + + The caption bar on a window. + + + A separator, which creates a visual division in controls such as menus and toolbars. + + + A semantic zoom control. + + + Introduced in Windows 8.1. An app bar control (AppBar). + + + Specifies the event that is raised by the element through the associated AutomationPeer. Used by RaiseAutomationEvent. + + + The event that is raised when a tooltip is opened. + + + The event that is raised when a tooltip is closed. + + + The event that is raised when a menu is opened. + + + The event that is raised when a menu is closed. + + + The event that is raised when the focus has changed. See SetFocus. + + + The event that is raised when a control is activated. See Invoke. + + + The event that is raised when an item is added to a collection of selected items. See AddToSelection. + + + The event that is raised when an item is removed from a collection of selected items. See RemoveFromSelection. + + + The event that is raised when a single item is selected (which clears any previous selection). See Select. + + + The event that is raised when a selection in a container has changed significantly. + + + The event that is raised when the text selection is modified. + + + The event that is raised when textual content is modified. + + + The event that is raised when content is loaded asynchronously. + + + The event that is raised when a property has changed. + + + The event that is raised when the UI Automation tree structure is changed. + + + The event that is raised when a drag operation originates from a peer. + + + The event that is raised when a drag operation is canceled from a peer. + + + The event that is raised when a drag operation finishes from a peer. + + + The event that is raised when a drag operation targets a peer. + + + The event that is raised when a drag operation switches targets away from a peer. + + + The event that is raised when a drag operation drops on a peer. + + + The event that is raised as notification when a live region refreshes its content without having focus. + + + Describes the notification characteristics of a particular live region in an app UI. Used by GetLiveSetting and AutomationProperties.LiveSetting. + + + The element does not send notifications if the content of the live region has changed. + + + The element sends non-interruptive notifications if the content of the live region has changed. With this setting, Microsoft UI Automation clients and assistive technology are expected to not interrupt the user to inform of changes to the live region. + + + The element sends interruptive notifications if the content of the live region has changed. With this setting, Microsoft UI Automation clients and assistive technology are expected to interrupt the user to inform of changes to the live region. + + + Specifies the orientation direction in which a control can be presented. Values are used by GetOrientation. + + + The control does not have an orientation. + + + The control is presented horizontally. + + + The control is presented vertically. + + + Specifies the control pattern that the GetPattern method returns. + + + The IInvokeProvider control pattern interface. + + + The ISelectionProvider control pattern interface. + + + The IValueProvider control pattern interface. + + + The IRangeValueProvider control pattern interface. + + + The IScrollProvider control pattern interface. + + + The IScrollItemProvider control pattern interface. + + + The IExpandCollapseProvider control pattern interface. + + + The IGridProvider control pattern interface. + + + The IGridItemProvider control pattern interface. + + + The IMultipleViewProvider control pattern interface. + + + The IWindowProvider control pattern interface. + + + The ISelectionItemProvider control pattern interface. + + + The IDockProvider control pattern interface. + + + The ITableProvider control pattern interface. + + + The ITableItemProvider control pattern interface. + + + The IToggleProvider control pattern interface. + + + The ITransformProvider control pattern interface. + + + The ITextProvider control pattern interface. + + + The IItemContainerProvider control pattern interface. + + + The IVirtualizedItemProvider control pattern interface. + + + The ITextProvider2 interface. + + + The ITextChildProvider interface. + + + The ITextRangeProvider interface. + + + The IAnnotationProvider interface. + + + The IDragProvider interface. + + + The IDropTargetProvider interface. + + + Introduced in Windows 8.1. The IObjectModelProvider interface. + + + Introduced in Windows 8.1. The ISpreadsheetProvider interface. + + + Introduced in Windows 8.1. The ISpreadsheetItemProvider interface. + + + Introduced in Windows 8.1. The IStylesProvider interface. + + + Introduced in Windows 8.1. The ITransformProvider2 interface. + + + Introduced in Windows 8.1. The ISynchronizedInputProvider interface. + + + Defines provider patterns that are implemented by automation peers and recognized by automation clients. + + + Exposes the properties of an annotation in a document. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Annotation. + + + Gets the annotation type identifier of this annotation. + The annotation type identifier of this annotation. + + + Gets the name of this annotation type. + The name of this annotation type. + + + Gets the name of the annotation author. + The name of the annotation author. + + + Gets the date and time when this annotation was created. + The date and time when this annotation was created. + + + Gets the UI Automation element that is being annotated. + The UI Automation element that is being annotated. + + + Enables a Microsoft UI Automation element to describe itself as an element that can be dragged as part of a drag-and-drop operation. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Drag. + + + Gets a string that indicates what will happen when the item is dropped. + A string that indicates what will happen when the item is dropped. + + + Gets an array of strings that enumerates possible drop effects when this item is dropped. + An array of strings that enumerates possible drop effects when this item is dropped. + + + Gets a value indicating whether an item is currently being dragged. + true if the item is being dragged. Otherwise, false. + + + Gets an array of UI Automation elements that are being dragged as part of this drag operation. + An array of UI Automation elements that are being dragged. Null if this item is an individual item being dragged. Used to enable providers that support dragging multiple items at a time to create an intermediary IDragProvider that encapsulates all of the items being dragged. + + + Enables a Microsoft UI Automation element to describe itself as an element that can receive a drop of a dragged element as part of a drag-and-drop operation. +Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.DropTarget. + + + Gets a string that indicates what will happen when the item is dropped. + A string that indicates what will happen when the item is dropped. + + + Gets an array of strings that enumerates possible drop effects when this item is dropped. + An array of strings that enumerates possible drop effects when this item is dropped. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that expose their dock properties in a docking container. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Dock. + + + Gets the current DockPosition of the control in a docking container. + The DockPosition of the control, relative to the boundaries of the docking container and to other elements in the container. + + + Docks the control in a docking container. + The dock position, relative to the boundaries of the docking container and to other elements in the container. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that visually expand to display content and that collapse to hide content. +Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.ExpandCollapse. + + + Gets the state (expanded or collapsed) of the control. + The state (expanded or collapsed) of the control. + + + Hides all nodes, controls, or content that are descendants of the control. + + + Displays all child nodes, controls, or content of the control. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to individual child controls of containers that implement IGridProvider. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.GridItem. + + + Gets the ordinal number of the column that contains the cell or item. + A zero-based ordinal number that identifies the column that contains the cell or item. + + + Gets the number of columns that are spanned by a cell or item. + The number of columns. + + + Gets a UI Automation provider that implements IGridProvider and that represents the container of the cell or item. + A UI Automation provider that implements the Grid control pattern and that represents the cell or item container. + + + Gets the ordinal number of the row that contains the cell or item. + A zero-based ordinal number that identifies the row that contains the cell or item. + + + Gets the number of rows spanned by a cell or item. + The number of rows. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that act as containers for a collection of child elements. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Grid. + + + Gets the total number of columns in a grid. + The total number of columns in a grid. + + + Gets the total number of rows in a grid. + The total number of rows in a grid. + + + Retrieves the UI Automation provider for the specified cell. + The UI Automation provider for the specified cell. + The ordinal number of the row that contains the cell. + The ordinal number of the column that contains the cell. + + + Exposes a method to support Microsoft UI Automation access to controls that initiate or perform a single, unambiguous action and do not maintain state when activated. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Invoke. + + + Sends a request to activate a control and initiate its single, unambiguous action. + + + Exposes a Microsoft UI Automation method to enable applications to find an element in a container, such as a virtualized list. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.ItemContainer. + + + Retrieves an element by the specified property value. + The first item that matches the search criterion; otherwise, null. + The item in the container after which to begin the search. + The property that contains the value to retrieve. + The value to retrieve. + + + Exposes methods and properties to support Microsoft UI Automation client access to controls that provide, and are able to switch between, multiple representations of the same set of information or child controls. +Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.MultipleView. + + + Gets the current control-specific view. + The view identifier for the current view of the UI Automation element. + + + Retrieves a collection of control-specific view identifiers. + A collection of values that identifies the views available for a UI Automation element. + + + Retrieves the name of a control-specific view. + A localized name for the view. + The view identifier. + + + Sets the current control-specific view. + A view identifier. + + + Provides access to the underlying object model implemented by a control or app. + + + Returns an interface used to access the underlying object model of the provider. + An untyped interface for accessing the underlying object model. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that can be set to a value within a range. +Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.RangeValue. + + + Gets a value that indicates whether the value of a control is read-only. + true if the value is read-only; false if it can be modified. + + + Gets the value that is added to or subtracted from the Value property when a large change is made, such as with the PAGE DOWN key. + The large-change value that is supported by the control, or null if the control does not support LargeChange. + + + Gets the maximum range value that is supported by the control. + The maximum value that is supported by the control, or null if the control does not support Maximum. + + + Gets the minimum range value that is supported by the control. + The minimum value that is supported by the control, or null if the control does not support Minimum. + + + Gets the value that is added to or subtracted from the Value property when a small change is made, such as with an arrow key. + The small-change value supported by the control, or null if the control does not support SmallChange. + + + Gets the value of the control. + The value of the control, or null if the control does not support Value. + + + Sets the value of the control. + The value to set. + + + Provides methods and properties that expose basic information about a UI element. IRawElementProviderSimple is a Windows Runtime class, not an interface. + + + Exposes methods and properties to support access by Microsoft UI Automation client to individual child controls of containers that implement IScrollProvider. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.ScrollItem. + + + Scrolls the content area of a container object in order to display the control within the visible region (viewport) of the container. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to a control that acts as a scrollable container for a collection of child objects. The children of this element must implement IScrollItemProvider. Implement IScrollProvider in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Scroll. + + + Gets a value that indicates whether the control can scroll horizontally. + true if the control can scroll horizontally; otherwise, false. + + + Gets the current horizontal scroll position. + The horizontal scroll position as a percentage of the total content area within the control. + + + Gets the current horizontal view size. + The horizontal size of the viewable region as a percentage of the total content area within the control. + + + Gets a value that indicates whether the control can scroll vertically. + true if the control can scroll vertically; otherwise, false. + + + Gets the current vertical scroll position. + The vertical scroll position as a percentage of the total content area within the control. + + + Gets the vertical view size. + The vertical size of the viewable region as a percentage of the total content area within the control. + + + Scrolls the visible region of the content area horizontally, vertically, or both. + The horizontal increment that is specific to the control. Pass NoScroll if the control cannot be scrolled in this direction. + The vertical increment that is specific to the control. Pass NoScroll if the control cannot be scrolled in this direction. + + + Sets the horizontal and vertical scroll position as a percentage of the total content area within the control. + The horizontal position as a percentage of the content area's total range. Pass NoScroll if the control cannot be scrolled in this direction. + The vertical position as a percentage of the content area's total range. Pass NoScroll if the control cannot be scrolled in this direction. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to individual, selectable child controls of containers that implement ISelectionProvider. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.SelectionItem. + + + Gets a value that indicates whether an item is selected. + true if the element is selected; otherwise, false. + + + Gets the UI Automation provider that implements ISelectionProvider and acts as the container for the calling object. + The UI Automation provider. + + + Adds the current element to the collection of selected items. + + + Removes the current element from the collection of selected items. + + + Clears any existing selection and then selects the current element. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that act as containers for a collection of individual, selectable child items. The children of this element must implement ISelectionItemProvider. Implement ISelectionProvider in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.SelectionItem. + + + Gets a value that indicates whether the Microsoft UI Automation provider allows more than one child element to be selected concurrently. + true if multiple selection is allowed; otherwise, false. + + + Gets a value that indicates whether the UI Automation provider requires at least one child element to be selected. + true if selection is required; otherwise, false. + + + Retrieves a UI Automation provider for each child element that is selected. + An array of UI Automation providers. + + + Provides access to information about an item (cell) in a spreadsheet. + + + Gets the formula for this spreadsheet cell, as a string. + The formula for this cell, as a string. + + + Returns an array of objects that represent the annotations associated with this spreadsheet cell. + An array of IRawElementProviderSimple interfaces for Microsoft UI Automation elements that represent the annotations associated with the spreadsheet cell. + + + Returns an array of annotation type identifiers indicating the types of annotations that are associated with this spreadsheet cell. + An array of annotation type identifiers, which contains one entry for each type of annotation associated with the spreadsheet cell. For a list of possible values, see AnnotationType. + + + Provides access to items (cells) in a spreadsheet. + + + Returns a Microsoft UI Automation element that represents the spreadsheet cell that has the specified name. + A Microsoft UI Automation element that represents the target cell. + The name of the target cell. + + + Provides access to the visual styles associated with the content of a document. + + + Gets a string value that contains additional property info. The info is for properties are that are not included in this control pattern, but that provide information about the document content that might be useful to the user. + A localized, formatted string that contains the list of extended properties. The string must be formatted as a list of name/value pairs, as follows: prop1=value;prop2=value2. + + + Gets the fill color of an element in a document. + The fill color, represented as a Windows Runtime Color value. + + + Gets the color of the pattern used to fill an element in a document. + The color of the fill pattern, represented as a Windows Runtime Color value. + + + Gets a string that represents the fill pattern style of an element in a document. + A localized string that indicates the fill pattern style, such as "Vertical Stripe". + + + Gets a string that represents the shape of an element in a document. + A localized string that indicates the shape. + + + Gets the identifier for a visual style of an element in a document. + The style identifier. For a list of possible values, see Style Identifiers. + + + Gets the name of the visual style of an element in a document. + The name of the style, or empty string if the style has no name. + + + Enables Microsoft UI Automation client applications to direct the mouse or keyboard input to a specific UI element. + + + Cancels listening for input. + + + Starts listening for input of the specified type. + The type of input that is requested to be synchronized. + + + Exposes methods and properties to support Microsoft UI Automation client access to child controls of containers that implement ITableProvider. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.TableItem. + + + Retrieves an array of UI Automation providers representing all the column headers associated with a table item or cell. + An array of UI Automation providers. + + + Retrieves an array of UI Automation providers representing all the row headers associated with a table item or cell. + An array of UI Automation providers. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that act as containers for a collection of child elements. The children of this element must implement ITableItemProvider and be organized in a two-dimensional logical coordinate system that can be traversed (a Microsoft UI Automation client can move to adjacent controls, which are headers or cells of the table) by using the keyboard. + + + Gets the primary direction of traversal for the table. + The primary direction of traversal, as a value of the enumeration. + + + Returns a collection of UI Automation providers that represents all the column headers in a table. + An array of UI Automation providers. + + + Returns a collection of UI Automation providers that represents all row headers in the table. + An array of UI Automation providers. + + + Provides access to a text-based control that is a child of another text-based control. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.TextChild. + + + Gets this element's nearest ancestor provider that supports the Text (ITextProvider) control pattern. + The nearest ancestor provider that supports the Text (ITextProvider) control pattern. + + + Gets a text range that encloses this child element. + A text range that encloses this child element. + + + Exposes methods and properties to support Microsoft UI Automation client access to controls that contain text. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Text. + + + Gets a text range that encloses the main text of a document. + A text range that encloses the main text of a document. + + + Gets a value that specifies whether a text provider supports selection, and if it does, the type of selection that is supported. + A value of SupportedTextSelection. + + + Retrieves a collection of disjoint text ranges that are associated with the current text selection or selections. + A collection of disjoint text ranges. + + + Retrieves an array of disjoint text ranges from a text container. Each text range begins with the first partially visible line and ends with the last partially visible line. + The collection of visible text ranges within a container or an empty array. This method never returns null. + + + Retrieves a text range that encloses a child element, such as an image, hyperlink, or other embedded object. + A range that spans the child element. + The enclosed object. + + + Retrieves a text range from the vicinity of a screen coordinate. + A range that contains text. + The coordinate screen location. + + + Extends the ITextProvider interface to enable Microsoft UI Automation providers to expose textual content that is the target of an annotation or selection. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Text2. + + + Retrieves a zero-length text range at the location of the caret that belongs to the text-based control. + A text range that represents the current location of the caret that belongs to the text-based control. + true if the text-based control that contains the caret has keyboard focus; otherwise, false. + + + Exposes a text range that contains the text that is the target of the annotation associated with the specified annotation element. + A text range that contains the annotation target text. + The provider for an element that implements the IAnnotationProvider interface. The annotation element is a sibling of the element that implements the ITextProvider2 interface for the document. + + + Exposes methods and properties to support Microsoft UI Automation client access to a span of continuous text in a text container that implements ITextProvider. + + + Adds to the collection of highlighted text in a text container that supports multiple disjoint selections. + + + Returns a new ITextRangeProvider that is identical to the original ITextRangeProvider and that inherits all the properties of the original. + The new text range. This method never returns null. + + + Returns a value that indicates whether the start and end points of a text range are the same as another text range. + true if the span of both text ranges is identical; otherwise, false. + A text range to compare to the implementing peer's text range. + + + Returns a value that indicates whether two text ranges have identical endpoints. + Returns a negative value if the caller's endpoint occurs earlier in the text than the target endpoint. Returns zero if the caller's endpoint is at the same location as the target endpoint. Returns a positive value if the caller's endpoint occurs later in the text than the target endpoint. + The Start or End endpoint of the caller. + The target range for comparison. + The Start or End endpoint of the target. + + + Expands the text range to the specified text unit. + The text measure unit. + + + Returns a text range subset that has the specified attribute ID and attribute value. + A text range that has a matching attribute ID and attribute value; otherwise null. + The attribute ID to search for. + The attribute value to search for. This value must match the type specified for the attribute. + true if the last occurring text range should be returned instead of the first; otherwise, false. + + + Returns a text range subset that contains the specified text. + A text range that matches the specified text; otherwise null. + The text string to search for. + true to return the last occurring text range instead of the first; otherwise, false. + true to ignore case; otherwise, false. + + + Retrieves the value of the specified attribute ID across the text range. + Retrieves an object that represents the value of the specified attribute. + The text attribute ID. + + + Retrieves a collection of bounding rectangles for each fully or partially visible line of text in a text range. + An array of bounding rectangles for each full or partial line of text in a text range. +An empty array for a degenerate range. +An empty array for a text range that has screen coordinates placing it completely off-screen, scrolled out of view, or obscured by an overlapping window. + + + Retrieves a collection of all the embedded objects that exist within the text range. + A collection of child objects that exist within the range. Child objects that overlap with the text range but are not completely enclosed by it are also included in the collection. Returns an empty collection if no child objects exist. + + + Returns the innermost element that encloses the text range. + The enclosing control, typically the text provider that provides the text range. However, if the text provider supports child text elements such as tables or hyperlinks, the enclosing element can be a descendant of the text provider. + + + Retrieves the plain text of the range. + The plain text of the text range, which might represent a portion of the full string truncated at the specified maxLength. + The maximum length of the string to return. Use 1 to specify an unlimited length. + + + Moves the text range the specified number of text units. + The number of units actually moved. This value can be less than the count requested if either of the new text range endpoints is greater than or less than the DocumentRange endpoints. This value can be negative if navigation is happening in the backward direction. + The text unit boundary. + The number of text units to move. A positive value moves the text range forward; a negative value moves the text range backward; and a value of 0 has no effect. + + + Moves one endpoint of a text range to the specified endpoint of a second text range. + The endpoint to move. + Another range from the same text provider. + An endpoint on the other range. + + + Moves one endpoint of the text range the specified number of text units within the document range. + The number of units actually moved, which can be less than the number requested if moving the endpoint runs into the beginning or end of the document. + The endpoint to move. + The text measure unit for moving. + The number of units to move. A positive value moves the endpoint forward. A negative value moves it backward. A value of 0 has no effect. + + + From the collection of highlighted text in a text container that supports multiple disjoint selections, removes a highlighted section of text that corresponds to the caller's text range endpoints. + + + Causes the text control to scroll vertically until the text range is visible in the viewport. + true if the text control should be scrolled so that the text range is flush with the top of the viewport; false if the text range is flush with the bottom of the viewport. + + + Highlights text in the text control that corresponds to the start and end endpoints of the text range. + + + Extends the ITextRange interface to enable Microsoft UI Automation providers to programmatically open context menus that are contextual to text input operations. + + + Shows the available context menu for the owner element. + + + Exposes methods and properties to support Microsoft UI Automation client access to controls that can cycle through a set of states and maintain a particular state. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Toggle. + + + Gets the toggle state of the control. + The toggle state of the control, as a value of the enumeration. + + + Cycles through the toggle states of a control. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls or elements that can be moved, resized, or rotated within a two-dimensional space. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Transform. + + + Gets a value that indicates whether the element can be moved. + true if the element can be moved; otherwise, false. + + + Gets a value that indicates whether the element can be resized. + true if the element can be resized; otherwise, false. + + + Gets a value that indicates whether the element can be rotated. + true if the element can be rotated; otherwise, false. + + + Moves the control. + The absolute screen coordinates of the left side of the control. + The absolute screen coordinates of the top of the control. + + + Resizes the control. + The new width of the window, in pixels. + The new height of the window, in pixels. + + + Rotates the control. + The number of degrees to rotate the control. A positive number rotates the control clockwise. A negative number rotates the control counterclockwise. + + + Extends the ITransformProvider interface to enable Microsoft UI Automation providers to expose API to support the viewport zooming functionality of a control. + + + Gets a value that indicates whether the control supports zooming of its viewport. + true if the viewport can be zoomed; otherwise, false. + + + Gets the maximum zoom level of the element. + The maximum zoom level, as a percentage. + + + Gets the minimum zoom level of the element. + The minimum zoom level, as a percentage. + + + Gets the zoom level of the control's viewport. + The zoom level, specified as a percentage. The provider should zoom the viewport to the nearest supported value. + + + Zooms the viewport of the control. + The amount to zoom the viewport, specified as a percentage. The provider should zoom the viewport to the nearest supported value. + + + Zooms the viewport of the control by the specified logical unit. + The logical unit by which to increase or decrease the zoom of the viewport. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that have an intrinsic value that does not span a range and that can be represented as a string. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Value. + + + Gets a value that indicates whether the value of a control is read-only. + true if the value is read-only; false if it can be modified. + + + Gets the value of the control. + The value of the control. + + + Sets the value of a control. + The value to set. The provider is responsible for converting the value to the appropriate data type. + + + Exposes a method to support the virtualized item control pattern. Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.VirtualizedItem. + + + Makes the virtual item fully accessible as a UI Automation element. + + + Exposes methods and properties to support access by a Microsoft UI Automation client to controls that provide fundamental window-based functionality within a traditional graphical user interface (GUI). Implement this interface in order to support the capabilities that an automation client requests with a GetPattern call and PatternInterface.Window. + + + Gets the interaction state of the window. + The interaction state of the control, as a value of the enumeration. + + + Gets a value that specifies whether the window is modal. + true if the window is modal; otherwise, false. + + + Gets a value that specifies whether the window is the topmost element in the z-order of layout. + true if the window is topmost; otherwise, false. + + + Gets a value that specifies whether the window can be maximized. + true if the window can be maximized; otherwise, false. + + + Gets a value that specifies whether the window can be minimized. + true if the window can be minimized; otherwise, false. + + + Gets the visual state of the window. + The visual state of the window, as a value of the enumeration. + + + Closes the window. + + + Changes the visual state of the window (such as minimizing or maximizing it). + The visual state of the window to change to, as a value of the enumeration. + + + Blocks the calling code for the specified time or until the associated process enters an idle state, whichever completes first. + true if the window has entered the idle state; false if the timeout occurred. + The amount of time, in milliseconds, to wait for the associated process to become idle. + + + Contains enumerations that report specifics about text automation patterns. + + + Identifies text range endpoints for methods of ITextRangeProvider. + + + The start point of the range. + + + The endpoint of the range. + + + Represents predefined units of text for the purposes of navigation within a document. + + + Specifies that the text unit is one character in length. + + + Specifies that the text unit is the length of a single, common format specification, such as bold, italic, or similar. + + + Specifies that the text unit is one word in length. + + + Specifies that the text unit is one line in length. + + + Specifies that the text unit is one paragraph in length. + + + Specifies that the text unit is one document-specific page in length. + + + Specifies that the text unit is an entire document in length. + + + Provides UI controls and classes that support existing and custom controls. + + + Represents the container control that holds app UI components for commanding and experiences. + + + Initializes a new instance of the AppBar class. + + + Gets or sets a value that indicates whether the AppBar is visible. + True to display the AppBar and make it visible. False to hide the AppBar. + + + Gets or sets a value that indicates whether the AppBar does not close on light dismiss. + True if the AppBar does not close on light dismiss. False if the AppBar is hidden on light dismiss. + + + Invoked when the AppBar changes from visible to hidden. + Event data for the event. + + + Invoked when the AppBar changes from hidden to visible, or is first displayed. + Event data for the event. + + + Occurs when the AppBar changes from visible to hidden. + + + Occurs when the AppBar changes from hidden to visible. + + + Identifies the IsOpen dependency property. + The identifier for the IsOpen dependency property. + + + Identifies the IsSticky dependency property. + The identifier for the IsSticky dependency property. + + + Represents a templated button control to be displayed in an AppBar. + + + Initializes a new instance of the AppBarButton class. + + + Gets or sets the graphic content of the app bar button. + The graphic content of the app bar button. + + + Gets or sets a value that indicates whether the button is shown with no label and reduced padding. + true if the button is shown in its compact state; otherwise, false. The default is false. + + + Gets or sets the text description displayed on the app bar button. + The text description displayed on the app bar button. + + + Identifies the Icon dependency property. + The identifier for the Icon dependency property. + + + Identifies the IsCompact dependency property. + The identifier for the IsCompact dependency property. + + + Identifies the Label dependency property. + The identifier for the Label dependency property. + + + Represents a vertical line that separates items in an AppBar. + + + Initializes a new instance of the AppBarSeparator class. + + + Gets or sets a value that indicates whether the separator is shown with reduced padding. + True if the separator is shown in its compact state; otherwise, false. The default is false. + + + Identifies the IsCompact dependency property. + The identifier for the IsCompact dependency property. + + + Represents a button control that can switch states and be displayed in an AppBar. + + + Initializes a new instance of the AppBarToggleButton class. + + + Gets or sets the graphic content of the app bar toggle button. + The graphic content of the app bar toggle button. + + + Gets or sets a value that indicates whether the button is shown with no label and reduced padding. + True if the button is shown in its compact state; otherwise, false. The default is false. + + + Gets or sets the text description displayed on the app bar toggle button. + The text description displayed on the app bar toggle button. + + + Identifies the Icon dependency property. + The identifier for the Icon dependency property. + + + Identifies the IsCompact dependency property. + The identifier for the IsCompact dependency property. + + + Identifies the Label dependency property. + The identifier for the Label dependency property. + + + Provides event data for the SettingsFlyout.BackClick event. + + + Initializes a new instance of the BackClickEventArgs class. + + + Gets or sets a value that can cancel the navigation. A true value for Handled cancels the default behavior. + true to cancel the navigation. false to use default behavior. The default is false. + + + Represents an icon that uses a bitmap as its content. + + + Initializes a new instance of the BitmapIcon class. + + + Gets or sets the Uniform Resource Identifier (URI) of the bitmap to use as the icon content. + The Uri of the bitmap to use as the icon content. The default is null. + + + Identifies the UriSource dependency property. + The identifier for the UriSource dependency property. + + + Draws a border, background, or both, around another object. + + + Initializes a new instance of the Border class. + + + Gets or sets the Brush that fills the background of the border. + The brush that fills the background. + + + Gets or sets the Brush that is used to create the border. + The brush that fills the border. + + + Gets or sets the thickness of the border. + The thickness of the border, in pixels. The default is 0 on all four sides. + + + Gets or sets the child element to draw the border around. + The UIElement to apply the border to. + + + Gets or sets the collection of Transition style elements that apply to child content of a Border. + The strongly typed collection of Transition style elements. + + + Gets or sets the radius for the corners of the border. + The degree to which the corners are rounded, expressed as values of the CornerRadius structure. + + + Gets or sets the distance between the border and its child object. + The dimensions of the space between the border and its child as a Thickness value. Thickness is a structure that stores dimension values using pixel measures. + + + Identifies the Background dependency property. + The identifier for the Background dependency property. + + + Identifies the BorderBrush dependency property. + The identifier for the BorderBrush dependency property. + + + Identifies the BorderThickness dependency property. + The identifier for the BorderThickness dependency property. + + + Identifies the ChildTransitions dependency property. + The identifier for the ChildTransitions dependency property. + + + Identifies the CornerRadius dependency property. + The identifier for the CornerRadius dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Represents a templated button control that interprets a Click user interaction. + + + Initializes a new instance of the Button class. + + + Gets or sets the flyout associated with this button. + The flyout associated with this button, if any; otherwise, null. The default is null. + + + Identifies the Flyout dependency property. + The identifier for the Flyout dependency property. + + + Defines an area within which you can explicitly position child objects, using coordinates that are relative to the Canvas area. + + + Initializes a new instance of the Canvas class. + + + Gets or sets the distance between the left side of an object and the left side of its parent Canvas. + + + Gets or sets the distance between the top of an element and the top of its parent Canvas. + + + Gets or sets the Z-order of an element when that element is presented in its parent Canvas layout container. + + + Gets the value of the Canvas.Left XAML attached property for the target element. + The Canvas.Left XAML attached property value of the specified object. + The object from which the property value is read. + + + Gets the value of the Canvas.Top XAML attached property for the target element. + The Canvas.Top XAML attached property value of the specified object. + The object from which the property value is read. + + + Gets the value of the Canvas.ZIndex XAML attached property for the target element. + The Canvas.ZIndex XAML attached property value of the requested object. + The object from which the property value is read. + + + Sets the value of the Canvas.Left XAML attached property for a target element. + The object to which the property value is written. + The value to set. + + + Sets the value of the Canvas.Top XAML attached property for a target element. + The object to which the property value is written. + The value to set. + + + Sets the value of the Canvas.ZIndex XAML attached property for a target element. + The object to which the property value is written. + The value to set. + + + Identifies the Canvas.Left XAML attached property. + The identifier for the Canvas.Left XAML attached property. + + + Identifies the Canvas.Top XAML attached property. + The identifier for the Canvas.Top XAML attached property. + + + Identifies the Canvas.ZIndex XAML attached property. + The identifier for the Canvas.ZIndex XAML attached property. + + + Renders a stream from a capture device, such as a camera or webcam. + + + Initializes a new instance of the CaptureElement class. + + + Gets or sets the source MediaCapture that this CaptureElement represents. + The source MediaCapture + + + Gets or sets how content from Source is resized to fill its allocated space, as declared by the Height and Width properties of the CaptureElement. + A value of the enumeration. + + + Identifies the Source dependency property. + The identifier for the Source dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Represents a control that a user can select (check) or clear (uncheck). A CheckBox can also report its value as indeterminate. + + + Initializes a new instance of the CheckBox class. + + + Provides data for the CleanUpVirtualizedItemEvent event. + + + Gets or sets a value that indicates whether this item should not be revirtualized. + true if you want to prevent revirtualization of this item; otherwise, false. + + + Gets an instance of the visual element that represents the data value. + The UIElement that represents the data value. + + + Gets an object that represents the original data value. + The Object that represents the original data value. + + + Defines column-specific properties that apply to Grid objects. + + + Initializes a new instance of the ColumnDefinition class. + + + Gets a value that represents the actual calculated width of a ColumnDefinition. + A Double that represents the actual calculated width in pixels. The default is 0. + + + Gets or sets a value that represents the maximum width of a ColumnDefinition. + A Double that represents the maximum width in pixels. The default is PositiveInfinity. + + + Gets or sets a value that represents the minimum width of a ColumnDefinition. + A Double that represents the minimum width in pixels. The default is 0. + + + Gets the calculated width of a ColumnDefinition element, or sets the GridLength value of a column that is defined by the ColumnDefinition. + The GridLength that represents the width of the column. The default value is a GridLength representing a 1* sizing. + + + Identifies the MaxWidth dependency property. + The identifier for the MaxWidth dependency property. + + + Identifies the MinWidth dependency property. + The identifier for the MinWidth dependency property. + + + Identifies the Width dependency property. + The identifier for the Width dependency property. + + + Provides access to an ordered, strongly typed collection of ColumnDefinition objects. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the ColumnDefinition located at the specified index. + The ColumnDefinition value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The item to find in the collection. + The index of the item, if it is found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the ColumnDefinition value specified. + The index at which to set the value. + The value to set. + + + Represents a selection control that combines a non-editable text box and a drop-down list box that allows users to select an item from a list. + + + Initializes a new instance of the ComboBox class. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets a value that indicates whether the drop-down portion of the ComboBox is currently open. + True if the drop-down portion is open; otherwise, false. The default is false. + + + Gets a value that indicates whether the user can edit text in the text box portion of the ComboBox. This property always returns false. + False in all cases. + + + Gets a value that indicates whether the SelectionBoxItem component is highlighted. + True if the SelectionBoxItem is highlighted; otherwise, false. The default is true. + + + This property is ignored. Gets or sets the maximum height for a combo box drop-down. + The maximum height of the drop-down. The default is infinity. + + + Gets or sets the text that is displayed in the control until the value is changed by a user action or some other operation. + The text that is displayed in the control when no value is selected. The default is an empty string (""). + + + Gets the item shown when the ComboBox is closed. + The item shown when the ComboBox is closed. + + + Gets the template applied to the selection box content. + The template applied to the selection box content. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a ComboBox control. + An object that provides calculated values for templates. + + + Invoked when the DropDownClosed event is raised. + Event data for the event. + + + Invoked when the DropDownOpened event is raised. + Event data for the event. + + + Occurs when the drop-down portion of the ComboBox closes. + + + Occurs when the drop-down portion of the ComboBox opens. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IsDropDownOpen dependency property. + The identifier for the IsDropDownOpen dependency property. + + + Identifies the MaxDropDownHeight dependency property. + The identifier for the MaxDropDownHeight dependency property. + + + Identifies the PlaceholderText dependency property. + The identifier for the PlaceholderText dependency property. + + + Represents the container for an item in a ComboBox control. + + + Initializes a new instance of the ComboBoxItem class. + + + Represents a specialized app bar that provides layout for AppBarButton and related command elements. + + + Initializes a new instance of the CommandBar class. + + + Gets the collection of primary command elements for the CommandBar. + The collection of primary command elements for the CommandBar. The default is an empty collection. + + + Gets the collection of secondary command elements for the CommandBar. + The collection of secondary command elements for the CommandBar. The default is an empty collection. + + + Identifies the PrimaryCommands dependency property. + The identifier for the PrimaryCommands dependency property. + + + Identifies the SecondaryCommands dependency property. + The identifier for the SecondaryCommands dependency property. + + + Provides data for the ContainerContentChanging event. + + + Initializes a new instance of the ContainerContentChangingEventArgs class. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets a value that indicates whether this container is in the recycle queue of the ListViewBase and is not being used to visualize a data item. + true if the container is in the recycle queue of the ListViewBase; otherwise, false. + + + Gets the data item associated with this container. + The data item associated with this container, or null if no data is associated with this container. + + + Gets the UI container used to display the current data item. + The UI container used to display the current data item. + + + Gets the index in the ItemsSource of the data item associated with this container. + The index in the ItemsSource of the data item associated with this container. The default is -1. + + + Gets the number of times this container and data item pair has been called. + The number of times this container and data item pair has been called. + + + Registers the event handler to be called again during the next phase. + The event handler function. + + + Registers the event handler to be called again during the specified phase. + The phase during which the callback should occur. + The event handler function. + + + Represents a control with a single piece of content. Controls such as Button, CheckBox, and ScrollViewer directly or indirectly inherit from this class. + + + Initializes a new instance of the ContentControl class. + + + Gets or sets the content of a ContentControl. + An object that contains the control's content. The default is null. + + + Gets or sets the data template that is used to display the content of the ContentControl. + The data template that is used to display the content of the ContentControl. + + + Gets the root element of the date template specified by the ContentTemplate property. + The root element of the date template specified by the ContentTemplate property. The default is null. + + + Gets or sets a selection object that changes the DataTemplate to apply for content, based on processing information about the content item or its container at run time. + A selection object that changes the DataTemplate to apply for content. + + + Gets or sets the collection of Transition style elements that apply to the content of a ContentControl. + The strongly typed collection of Transition style elements. + + + Invoked when the value of the Content property changes. + The old value of the Content property. + The new value of the Content property. + + + Invoked when the value of the ContentTemplate property changes. + The old value of the ContentTemplate property. + The new value of the ContentTemplate property. + + + Invoked when the value of the ContentTemplateSelector property changes. + The old value of the ContentTemplateSelector property. + The new value of the ContentTemplateSelector property. + + + Identifies the Content dependency property. + The identifier for the Content dependency property. + + + Identifies the ContentTemplate dependency property + The identifier for the ContentTemplate dependency property. + + + Identifies the ContentTemplateSelector dependency property. + The identifier for the ContentTemplateSelector dependency property. + + + Identifies the ContentTransitions dependency property. + The identifier for the ContentTransitions dependency property. + + + Displays the content of a ContentControl. Can also provide content presentation for non-controls. Provides a base class for specialized presenters such as ScrollContentPresenter. + + + Initializes a new instance of the ContentPresenter class. + + + Gets or sets the uniform spacing between characters, in units of 1/1000 of an em. + The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing. + + + Gets or sets the data that is used to generate the child elements of a ContentPresenter. + The data that is used to generate the child elements. The default is null. + + + Gets or sets the template that is used to display the content of the control. + A DataTemplate that defines the visualization of the content. The default is null. + + + Gets or sets a selection object that changes the DataTemplate to apply for content presented in the ContentPresenter, based on processing information about the content item or its container at run time. + A selection object that changes the DataTemplate to apply for content. + + + Gets or sets the collection of Transition style elements that apply to content presented by the ContentPresenter. + The strongly typed collection of Transition style elements. + + + Gets or sets the preferred top-level font family for the text content presented by the ContentPresenter. + A FontFamily object that specifies the preferred font family, or a primary preferred font family with one or more fallback font families. For information about defaults, see the FontFamily class topic. + + + Gets or sets the font size for the text content presented by the ContentPresenter. + A non-negative value that specifies the font size, measured in pixels. + + + Gets or sets the font stretch for the text content presented by the ContentPresenter. + The requested font stretch, as a FontStretch constant. The default is Normal. + + + Gets or sets the font style for the presented content. + The requested font style, which is a FontStyle constant name. The default is Normal. + + + Gets or sets the top-level font weight for the text content presented by the ContentPresenter. + The requested font weight, which is a FontWeight that is obtained from one of the FontWeights property values. The default is Normal. + + + Gets or sets the Brush to apply to the text content handled by the ContentPresenter. + The brush used as the foreground brush for the text contents. The default is a SolidColorBrush with a Color value of Black. + + + Invoked when the value of the ContentTemplate property changes. + The old value of the ContentTemplate property. + The new value of the ContentTemplate property. + + + Invoked when the value of the ContentTemplateSelector property changes. + The old value of the ContentTemplateSelector property. + The new value of the ContentTemplateSelector property. + + + Identifies the CharacterSpacing dependency property. + The identifier for the CharacterSpacing dependency property. + + + Identifies the Content dependency property + The identifier for the Content dependency property. + + + Identifies the ContentTemplate dependency property. + The identifier for the ContentTemplate dependency property. + + + Identifies the ContentTemplateSelector dependency property. + The identifier for the ContentTemplateSelector dependency property. + + + Identifies the ContentTransitions dependency property. + The identifier for the ContentTransitions dependency property. + + + Identifies the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Identifies the FontSize dependency property. + The identifier for the FontSize dependency property. + + + Identifies the FontStretch dependency property. + The identifier for the FontStretch dependency property. + + + Identifies the FontStyle dependency property. + The identifier for the FontStyle dependency property. + + + Identifies the FontWeight dependency property. + The identifier for the FontWeight dependency property. + + + Identifies the Foreground dependency property. + The identifier for the Foreground dependency property. + + + Provides event data for the ContextMenuOpening event that exists on several text-related UI elements. + + + Gets the pixel offset of the text cursor horizontal position. + A value in pixels. + + + Gets the pixel offset of the text cursor vertical position. + A value in pixels. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + True to mark the routed event handled. False to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Represents the base class for UI elements that use a ControlTemplate to define their appearance. + + + Provides base class initialization behavior for Control derived classes. + + + Gets or sets a brush that provides the background of the control. + The brush that provides the background of the control. The default is null (a null Brush, which evaluates as transparent). + + + Gets or sets a brush that describes the border background of a control. + The brush that is used to fill the control's border; the default is null. + + + Gets or sets the border thickness of a control. + The border thickness of a control, as a Thickness value. + + + Gets or sets the uniform spacing between characters, in units of 1/1000 of an em. + The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing. + + + Gets or sets the key that references the default style for the control. + The key that references the default style for the control. To work correctly as part of theme style lookup, this value is expected to be the System.Type (TypeName in C++) of the control being styled. + + + Gets a value that specifies whether this control has focus, and the mode by which focus was obtained. + A value of the enumeration. A value of Unfocused indicates that the control does not have focus. + + + Gets or sets the font used to display text in the control. + The font used to display text in the control. + + + Gets or sets the size of the text in this control. + The size of the text in the Control, in pixels. + + + Gets or sets the degree to which a font is condensed or expanded on the screen. + One of the values that specifies the degree to which a font is condensed or expanded on the screen. The default is Normal. + + + Gets or sets the style in which the text is rendered. + One of the values that specifies the style in which the text is rendered. The default is Normal. + + + Gets or sets the thickness of the specified font. + One of the values that specifies the thickness of the specified font. The default is Normal. + + + Gets or sets a brush that describes the foreground color. + The brush that paints the foreground of the control. The default value is a SolidColorBrush with color of Black. + + + Gets or sets the horizontal alignment of the control's content. + One of the HorizontalAlignment values. The default is Center. + + + Gets or sets a value indicating whether the user can interact with the control. + true if the user can interact with the control; otherwise, false. + + + Gets or sets a value that indicates whether a control is included in tab navigation. + True if the control is included in tab navigation; otherwise, false. The default is true. + + + Gets or sets the padding inside a control. + The amount of space between the content of a Control and its Margin or Border. The default is a Thickness with values of 0 on all four sides. + + + Gets or sets a value that determines the order in which elements receive focus when the user navigates through controls by pressing the Tab key. + A value that determines the order of logical navigation for a device. The default value is MaxValue. + + + Gets or sets a value that modifies how tabbing and TabIndex work for this control. + A value of the enumeration. The default is Local. + + + Gets or sets a control template. The control template defines the visual appearance of a control in UI, and is defined in XAML markup. + The template that defines the appearance of the Control. The ControlTemplate must have exactly one root element as its content. + + + Gets or sets the vertical alignment of the control's content. + One of the VerticalAlignment values. The default is Center. + + + Loads the relevant control template so that its parts can be referenced. + A value that indicates whether the visual tree was rebuilt by this call. True if the tree was rebuilt; false if the previous visual tree was retained. + + + Attempts to set the focus on the control. + true if focus was set to the control, or focus was already on the control. false if the control is not focusable. + Specifies how focus was set, as a value of the enumeration. + + + Retrieves the named element in the instantiated ControlTemplate visual tree. + The named element from the template, if the element is found. Can return null if no element with name childName was found in the template. + The name of the element to find. + + + Called before the DoubleTapped event occurs. + Event data for the event. + + + Called before the DragEnter event occurs. + Event data for the event. + + + Called before the DragLeave event occurs. + Event data for the event. + + + Called before the DragOver event occurs. + Event data for the event. + + + Called before the Drop event occurs. + Event data for the event. + + + Called before the GotFocus event occurs. + The data for the event. + + + Called before the Holding event occurs. + Event data for the event. + + + Called before the KeyDown event occurs. + The data for the event. + + + Called before the KeyUp event occurs. + The data for the event. + + + Called before the LostFocus event occurs. + The data for the event. + + + Called before the ManipulationCompleted event occurs. + Event data for the event. + + + Called before the ManipulationDelta event occurs. + Event data for the event. + + + Called before the ManipulationInertiaStarting event occurs. + Event data for the event. + + + Called before the ManipulationStarted event occurs. + Event data for the event. + + + Called before the ManipulationStarting event occurs. + Event data for the event. + + + Called before the PointerCanceled event occurs. + Event data for the event. + + + Called before the PointerCaptureLost event occurs. + Event data for the event. + + + Called before the PointerEntered event occurs. + Event data for the event. + + + Called before the PointerExited event occurs. + Event data for the event. + + + Called before the PointerMoved event occurs. + Event data for the event. + + + Called before the PointerPressed event occurs. + Event data for the event. + + + Called before the PointerReleased event occurs. + Event data for the event. + + + Called before the PointerWheelChanged event occurs. + Event data for the event. + + + Called before the RightTapped event occurs. + Event data for the event. + + + Called before the Tapped event occurs. + Event data for the event. + + + Occurs when the IsEnabled property changes. + + + Identifies the Background dependency property. + The identifier for the Background dependency property. + + + Identifies the BorderBrush dependency property. + The identifier for the BorderBrush dependency property. + + + Identifies the BorderThickness dependency property. + The identifier for the BorderThickness dependency property. + + + Identifies the CharacterSpacing dependency property. + The identifier for the CharacterSpacing dependency property. + + + Identifies the DefaultStyleKey dependency property. + The identifier for the DefaultStyleKey dependency property. + + + Identifies the FocusState dependency property. + The identifier for the FocusState dependency property. + + + Identifies the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Identifies the FontSize dependency property. + The identifier for the FontSize dependency property. + + + Identifies the FontStretch dependency property. + The identifier for the FontStretch dependency property. + + + Identifies the FontStyle dependency property. + The identifier for the FontStyle dependency property. + + + Identifies the FontWeight dependency property. + The identifier for the FontWeight dependency property. + + + Identifies the Foreground dependency property. + The identifier for the Foreground dependency property. + + + Identifies the HorizontalContentAlignment dependency property. + The identifier for the HorizontalContentAlignment dependency property. + + + Identifies the IsEnabled dependency property. + The identifier for the IsEnabled dependency property. + + + Identifies the IsTabStop dependency property. + The identifier for the IsTabStop dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Identifies the TabIndex dependency property. + The identifier for the TabIndex dependency property. + + + Identifies the TabNavigation dependency property. + The identifier for the TabNavigation dependency property. + + + Identifies the Template dependency property. + The identifier for the Template dependency property. + + + Identifies the VerticalContentAlignment dependency property. + The identifier for the VerticalContentAlignment dependency property. + + + Defines the element tree that is applied as the control template for a control. + + + Initializes a new instance of the ControlTemplate class. + + + Gets or sets the type to which the ControlTemplate is applied. + The type to which the ControlTemplate is applied. + + + Enables custom template selection logic at the application level. + + + Initializes a new instance of the DataTemplateSelector class. + + + Returns a specific DataTemplate for a given item. + The template to use for the given item and/or container. + The item to return a template for. + + + Returns a specific DataTemplate for a given item or container. + The template to use for the given item and/or container. + The item to return a template for. + The parent container for the templated item. + + + When implemented by a derived class, returns a specific DataTemplate for a given item or container. + The template to use for the given item and/or container. + The item to return a template for. + + + When implemented by a derived class, returns a specific DataTemplate for a given item or container. + The template to use for the given item and/or container. + The item to return a template for. + The parent container for the templated item. + + + Represents a control that allows a user to pick a date value. + + + Initializes a new instance of the DatePicker class. + + + Gets or sets the calendar system to use. + The calendar system to use. + + + Gets or sets the date currently set in the date picker. + The date currently set in the picker. + + + Gets or sets the display format for the day value. + The display format for the day value. + + + Gets or sets a value that indicates whether the day selector is shown. + True if the day selector is shown; otherwise, false. The default is true. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the maximum Gregorian year available for picking. + The maximum Gregorian year available for picking. + + + Gets or sets the minimum Gregorian year available for picking. + The minimum Gregorian year available for picking. + + + Gets or sets the display format for the month value. + The display format for the month value. + + + Gets or sets a value that indicates whether the month selector is shown. + True if the month selector is shown; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether the day, month, and year selectors are stacked horizontally or vertically. + A named constant of the enumeration that indicates whether the day, month, and year selectors are stacked horizontally or vertically. The default is Horizontal. + + + Gets or sets the display format for the year value. + The display format for the year value. + + + Gets or sets a value that indicates whether the year selector is shown. + True if the year selector is shown; otherwise, false. The default is true. + + + Occurs when the date value is changed. + + + Gets the identifier for the CalendarIdentifier dependency property. + The identifier for the CalendarIdentifier dependency property. + + + Gets the identifier for the Date dependency property. + The identifier for the Date dependency property. + + + Gets the identifier for the DayFormat dependency property. + The identifier for the DayFormat dependency property. + + + Gets the identifier for the DayVisible dependency property. + The identifier for the DayVisible dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Gets the identifier for the MaxYear dependency property. + The identifier for the MaxYear dependency property. + + + Gets the identifier for the MinYear dependency property. + The identifier for the MinYear dependency property. + + + Gets the identifier for the MonthFormat dependency property. + The identifier for the MonthFormat dependency property. + + + Gets the identifier for the MonthVisible dependency property. + The identifier for the MonthVisible dependency property. + + + Gets the identifier for the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Gets the identifier for the YearFormat dependency property. + The identifier for the YearFormat dependency property. + + + Gets the identifier for the YearVisible dependency property. + The identifier for the YearVisible dependency property. + + + Provides event data for the DatePicker.DateChanged event. + + + Gets the new date selected in the picker. + The new date selected in the picker. + + + Gets the date previously selected in the picker. + The date previously selected in the picker. + + + Provides event data for the DragItemsStarting event. + + + Initializes a new instance of the DragItemsStartingEventArgs class. + + + Gets or sets a value that indicates whether the item drag action should be canceled. + True to cancel the item drag action; otherwise, false. + + + Gets the data payload associated with an items drag action. + The data payload. + + + Gets the loosely typed collection of objects that are selected for the item drag action. + A loosely typed collection of objects. + + + Represents an items control that displays one item at a time, and enables "flip" behavior for traversing its collection of items. + + + Initializes a new instance of the FlipView class. + + + Gets or sets a value that indicates whether transition animations are always used whether the navigation is touch-based, button-based and programmatic. + true if transition animations are always used; false if transition animations are used only for touch navigation. The default is true. + + + Identifies the UseTouchAnimationsForAllNavigation dependency property. + The identifier for the UseTouchAnimationsForAllNavigation dependency property. + + + Represents the container for an item in a FlipView control. + + + Initializes a new instance of the FlipViewItem class. + + + Represents a control that displays lightweight UI that is either information, or requires user interaction. Unlike a dialog, a Flyout can be light dismissed by clicking or tapping off of it. + + + Initializes a new instance of the Flyout class. + + + Gets or sets the content of the Flyout. + The content of theFlyout. + + + Gets or sets an instance Style applied to the Flyout content. + The applied Style for the Flyout content, if present; otherwise, null. The default is null. + + + Gets the identifier for the Content dependency property. + The identifier for the Content dependency property. + + + Gets the identifier for the FlyoutPresenterStyle dependency property. + The identifier for the FlyoutPresenterStyle dependency property. + + + Display the content of a Flyout. + + + Initializes a new instance of the FlyoutPresenter class. + + + Represents an icon that uses a glyph from the specified font. + + + Initializes a new instance of the FontIcon class. + + + Gets or sets the font used to display the icon glyph. + The font used to display the icon glyph. + + + Gets or sets the size of the icon glyph. + A non-negative value that specifies the font size, measured in pixels. + + + Gets or sets the font style for the icon glyph. + A named constant of the enumeration that specifies the style in which the icon glyph is rendered. The default is Normal. + + + Gets or sets the thickness of the icon glyph. + A value that specifies the thickness of the icon glyph. The default is Normal. + + + Gets or sets the character code that identifies the icon glyph. + The hexadecimal character code for the icon glyph. + + + Gets the identifier for the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Gets the identifier for the FontSize dependency property. + The identifier for the FontSize dependency property. + + + Gets the identifier for the FontStyle dependency property. + The identifier for the FontStyle dependency property. + + + Gets the identifier for the FontWeight dependency property. + The identifier for the FontWeight dependency property. + + + Gets the identifier for the Glyph dependency property. + The identifier for the Glyph dependency property. + + + Displays Page instances, supports navigation to new pages, and maintains a navigation history to support forward and backward navigation. + + + Initializes a new instance of the Frame class. + + + Gets a collection of PageStackEntry instances representing the backward navigation history of the Frame. + The backward navigation stack. + + + Gets the number of entries in the navigation back stack. + The number of entries in the navigation back stack. + + + Gets or sets the number of pages in the navigation history that can be cached for the frame. + The number of pages that can be in the navigation history. + + + Gets a value that indicates whether there is at least one entry in back navigation history. + true if there is at least one entry in back navigation history; false if there are no entries in back navigation history or the Frame does not own its own navigation history. + + + Gets a value that indicates whether there is at least one entry in forward navigation history. + true if there is at least one entry in forward navigation history; false if there are no entries in forward navigation history or the Frame does not own its own navigation history. + + + Gets the data type of the content that is currently displayed. + A data type for the content that is currently displayed. + + + Gets a collection of PageStackEntry instances representing the forward navigation history of the Frame. + The forward navigation stack. + + + Gets or sets the data type of the current content, or the content that should be navigated to. + A data type for the current content, or the content to navigate to. + + + Serializes the Frame navigation history into a string. + The string-form serialized navigation history. See Remarks. + + + Navigates to the most recent item in back navigation history, if a Frame manages its own navigation history. + + + Navigates to the most recent item in forward navigation history, if a Frame manages its own navigation history. + + + Causes the Frame to load content represented by the specified Page-derived data type. + true if the frame can navigate according to its settings; otherwise, false. + The data type of the content to load. + + + Causes the Frame to load content represented by the specified Page-derived data type, also passing a parameter to be interpreted by the target of the navigation. + true if the frame can navigate according to its settings; otherwise, false. + The data type of the content to load. + The navigation parameter to pass to the target page; must have a basic type (string, char, numeric, or GUID) to support parameter serialization using GetNavigationState. + + + Causes the Frame to load content represented by the specified Page-derived data type, also passing a parameter to be interpreted by the target of the navigation, and a value indicating the animated transition to use. + true if the frame can navigate according to its settings; otherwise, false. + The data type of the content to load. + The navigation parameter to pass to the target page; must have a basic type (string, char, numeric, or GUID) to support parameter serialization using GetNavigationState. + Info about the animated transition. + + + Reads and restores the navigation history of a Frame from a provided serialization string. + The serialization string that supplies the restore point for navigation history. + + + Occurs when the content that is being navigated to has been found and is available from the Content property, although it may not have completed loading. + + + Occurs when a new navigation is requested. + + + Occurs when an error is raised while navigating to the requested content. + + + Occurs when a new navigation is requested while a current navigation is in progress. + + + Identifies the BackStack dependency property. + The identifier for the BackStack dependency property. + + + Identifies the BackStackDepth dependency property. + The identifier for the BackStackDepth dependency property. + + + Identifies the CacheSize dependency property. + The identifier for the CacheSize dependency property. + + + Identifies the CanGoBack dependency property. + The identifier for the CanGoBack dependency property. + + + Identifies the CanGoForward dependency property. + The identifier for the CanGoForward dependency property. + + + Identifies the CurrentSourcePageType dependency property. + The identifier for the CurrentSourcePageType dependency property. + + + Identifies the ForwardStack dependency property. + The identifier for the ForwardStack dependency property. + + + Identifies the SourcePageType dependency property. + The identifier for the SourcePageType dependency property. + + + Defines a flexible grid area that consists of columns and rows. Child elements of the Grid are measured and arranged according to their row/column assignments (set by using Grid.Row and Grid.Column attached properties) and other logic. + + + Initializes a new instance of the Grid class. + + + Gets or sets the column alignment of an element when child layout is processed by a parent Grid layout container. + + + Gets or sets a value that indicates the total number of columns that the element content spans within a parent Grid. + + + Gets or sets the row alignment of an element when child layout is processed by a visual tree parent Grid. + + + Gets or sets a value that indicates the total number of rows that the element content spans within a parent Grid. + + + Gets a list of ColumnDefinition objects defined on this instance of Grid. + A list of ColumnDefinition objects defined on this instance of Grid. + + + Gets a list of RowDefinition objects defined on this instance of Grid. + A list of RowDefinition objects defined on this instance of Grid. + + + Gets the value of the Grid.Column XAML attached property from the specified FrameworkElement. + The value of the Grid.Column XAML attached property on the target element. This is a zero-based index. + The element from which to read the property value. + + + Gets the value of the Grid.ColumnSpan XAML attached property from the specified FrameworkElement. + The value of the Grid.ColumnSpan XAML attached property on the target element. + The element from which to read the property value. + + + Gets the value of the Grid.Row XAML attached property from the specified FrameworkElement. + The value of the Grid.Row XAML attached property on the target element. + The element from which to read the property value. + + + Gets the value of the Grid.RowSpan XAML attached property from the specified FrameworkElement. + The value of the Grid.RowSpan XAML attached property on the target element. + The element from which to read the property value. + + + Sets the value of the Grid.Column XAML attached property on the specified FrameworkElement. + The target element on which to set the Grid.Column XAML attached property. + The property value to set. + + + Sets the value of the Grid.ColumnSpan XAML attached property on the specified FrameworkElement. + The element on which to set the Grid.ColumnSpan XAML attached property. + The property value to set. + + + Sets the value of the Grid.Row XAML attached property on the specified FrameworkElement. + The target element on which to set the Grid.Row XAML attached property. + The property value to set. + + + Sets the value of the Grid.RowSpan XAML attached property on the specified FrameworkElement. + The target element on which to set the Grid.RowSpan XAML attached property. + The property value to set. + + + Identifies the Grid.Column XAML attached property. + The identifier for the Grid.Column XAML attached property. + + + Identifies the Grid.ColumnSpan XAML attached property. + The identifier for the Grid.ColumnSpan XAML attached property. + + + Identifies the Grid.Row XAML attached property. + The identifier for the Grid.Row XAML attached property. + + + Identifies the Grid.RowSpan XAML attached property. + The identifier for the Grid.RowSpan XAML attached property. + + + Represents a control that displays a horizontal grid of data items. + + + Initializes a new instance of the GridView class. + + + Represents a group header for a group inside a GridView. + + + Initializes a new instance of the GridViewHeaderItem class. + + + Represents the container for an item in a GridView control. + + + Initializes a new instance of the GridViewItem class. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a GridViewItem. + An object that provides calculated values for templates. + + + Represents the root element for a subtree that is created for a group. + + + Initializes a new instance of the GroupItem class. + + + Describes how to display the grouped items in a collection, such as the collection from GroupItems. + + + Initializes a new instance of the GroupStyle class. + + + Gets or sets the style that is applied to the GroupItem generated for each item. + ContainerStyle may be altered or unavailable for releases after Windows 8.1 and is not supported for ItemsControl.GroupStyle. + The style that is applied to the GroupItem generated for each item. The default is null. + + + Gets or sets a reference to a custom StyleSelector logic class. The StyleSelector referenced by this property returns a style to apply to each generated GroupItem. + ContainerStyleSelector may be altered or unavailable for releases after Windows 8.1 and is not supported for ItemsControl.GroupStyle. + An object that derives from StyleSelector. The default is null. + + + Gets or sets the style that is applied to the header for each item. + The style that is applied to the header for each item. The default is null. + + + Gets or sets the template that is used to display the group header. + A DataTemplate object that is used to display the group header. The default is null. + + + Gets or sets a reference to a custom DataTemplateSelector logic class. The DataTemplateSelector returns different DataTemplate values to use for the header area of group item content. + An object that derives from DataTemplateSelector. The default is null. + + + Gets or sets a value that indicates whether items corresponding to empty groups should be displayed. + True to not display empty groups; otherwise, false. The default is false. + + + Gets or sets a template that creates the panel used to lay out the items. + An ItemsPanelTemplate object that creates the panel used to layout the items. + + + Occurs when a property value changes. + + + Enables custom group style selection logic as a function of the parent group and its level. + + + Initializes a new instance of the GroupStyleSelector class. + + + Returns a specific GroupStyle for a given group and level. + TheGroupStyle to use when this GroupStyleSelector is invoked in an application. + The group to return a GroupStyle for. + The level of nesting for the specified group. + + + When implemented by a derived class, returns a specific GroupStyle for a given group and level. + The GroupStyle to use for the specified group and level. + The group to return a GroupStyle for. + The level of nesting for the specified group. + + + Represents a control that displays groups of content in a panning view. + + + Initializes a new instance of the Hub class. + + + Gets or sets the index of the hub section to show first when the Hub is initialized. + The index of the hub section to show first when the Hub is initialized. + + + Gets or sets the content for the hub header. + The content of the hub header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the hub header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets a value that indicates whether the Hub instance is the active view in its owning SemanticZoom. + true if the Hub is the active view; otherwise, false. + + + Gets or sets a value that indicates whether the Hub instance is the zoomed-in view in its owning SemanticZoom. + true if the Hub is the zoomed-in view; otherwise, false. + + + Gets or sets the orientation of a Hub. + One of the Orientation values. The default is Horizontal. + + + Gets a collection of the headers of the hub sections. + The headers of the hub sections. The default is an empty collection. + + + Gets all the hub sections in the Hub. + All the hub sections in the Hub. The default is an empty collection. + + + Gets the hub sections currently on the screen. + The hub sections currently on the screen. + + + Gets or sets the SemanticZoom instance that hosts the Hub. + The SemanticZoom instance that hosts this Hub, or null if the Hub is not hosted in a SemanticZoom control. + + + Changes related aspects of presentation when the overall view for a SemanticZoom changes. + + + Completes item-wise operations that are related to a view change when the Hub instance is the source view and the new view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Completes item-wise operations that are related to a view change when the Hub instance is the destination view and the source view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes the changes to related aspects of presentation (such as scrolling UI or state) when the overall view for a SemanticZoom is about to change. + + + Forces content in the view to scroll until the item that's specified by SemanticZoomLocation is visible. Also focuses the item if it finds the item. + The item in the view to scroll to. + + + Scrolls the hub to bring the specified hub section into view. + The hub section to bring into view. + + + Initializes item-wise operations that are related to a view change when the Hub instance is the source view and the pending destination view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes item-wise operations that are related to a view change when the source view is a different view and the pending destination view is the Hub instance. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Occurs when a section header is clicked and the section's IsHeaderInteractive property is true. + + + Occurs when the SectionsInView collection changes. + + + Identifies the DefaultSectionIndex dependency property. + The identifier for the DefaultSectionIndex dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IsActiveView dependency property. + The identifier for the IsActiveView dependency property. + + + Identifies the IsZoomedInView dependency property. + The identifier for the IsZoomedInView dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the SemanticZoomOwner dependency property. + The identifier for the SemanticZoomOwner dependency property. + + + Represents a single group of content in a Hub. + + + Initializes a new instance of the HubSection class. + + + Gets or sets the data template that is used to display the content of the HubSection. + The data template that is used to display the content of the HubSection. + + + Gets or sets the content for the hub section header. + The content of the section header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the hub section header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets a value that indicates whether the section header raises a SectionHeaderClick event on its containing Hub. + true if the section header raises a SectionHeaderClick event; otherwise, false. The default is false. + + + Identifies the ContentTemplate dependency property. + The identifier for the ContentTemplate dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IsHeaderInteractive dependency property. + The identifier for the IsHeaderInteractive dependency property. + + + Represents an ordered collection of HubSection objects. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HubSection items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The item value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item, if it is found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the item value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Provides data for the Hub.SectionHeaderClick event. + + + Initializes a new instance of the HubSectionHeaderClickEventArgs class. + + + Gets the HubSection for the header that was clicked. + The HubSection for the header that was clicked. + + + Represents a button control that displays a hyperlink. + + + Initializes a new instance of the HyperlinkButton class. + + + Gets or sets the Uniform Resource Identifier (URI) to navigate to when the HyperlinkButton is clicked. + The Uniform Resource Identifier (URI) to navigate to when the HyperlinkButton is clicked. + + + Identifies the NavigateUri dependency property. + The identifier for the NavigateUri dependency property. + + + Represents the base class for an icon UI element. + + + Gets or sets a brush that describes the foreground color. + The brush that paints the foreground of the control. + + + Identifies the Foreground dependency property. + The identifier for the Foreground dependency property. + + + Represents a control that displays an image. The image source is specified by referring to an image file, using several supported formats. The image source can also be set with a stream. + + + Initializes a new instance of the Image class. + + + Gets or sets a value for a nine-grid metaphor that controls how the image can be resized. + A Thickness value that sets the Left, Top, Right, Bottom measurements for the nine-grid resizing metaphor. + + + Gets the information that is transmitted if the Image is used for a Play To scenario. + A reference object that carries the Play To source information. + + + Gets or sets the source for the image. + An object that represents the image source file for the drawn image. Typically you set this with a BitmapImage object, constructed with the Uniform Resource Identifier (URI) that describes the path to a valid image source file, or populated with a stream from a storage file. + + + Gets or sets a value that describes how an Image should be stretched to fill the destination rectangle. + A value of the Stretch enumeration that specifies how the source image is rendered, if the Height and/or Width of the Image are not explicitly specified. The default value is Uniform. + + + Occurs when there is an error associated with image retrieval or format. + + + Occurs when the image source is downloaded and decoded with no failure. You can use this event to determine the natural size of the image source. + + + Identifies the NineGrid dependency property. + The identifier for the NineGrid dependency property. + + + Identifies the PlayToSource dependency property. + The identifier for the PlayToSource dependency property. + + + Identifies the Source dependency property. + The identifier for the Source dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Provides event data for the ItemClick event. + + + Initializes a new instance of the ItemClickEventArgs class. + + + Gets a reference to the clicked item. + The clicked item. + + + Holds the list of items that represent the content of an ItemsControl. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The item value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item, if it is found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the item value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + Provides mappings between the items of an ItemsControl and their container elements. + + + Returns the container for the item at the specified index within the ItemCollection. + ContainerFromIndex may be altered or unavailable for releases after Windows 8.1. Instead, use ItemsControl.ContainerFromIndex. + The container for the item at the specified index within the item collection, if the item has a container; otherwise, null. + The index of the item to retrieve. + + + Returns the container corresponding to the specified item. + ContainerFromItem may be altered or unavailable for releases after Windows 8.1. Instead, use ItemsControl.ContainerFromItem. + A container that corresponds to the specified item, if the item has a container and exists in the collection; otherwise, null. + The item to retrieve the container for. + + + Returns the container element used to display the next item, and indicates whether the container element has been newly generated (realized). + A DependencyObject that is the container element that is used to display the next item. + true if the returned DependencyObject is newly generated (realized); otherwise, false. + + + Gets the generated position of the item at the specified index. + The position of the item as generated by the ItemContainerGenerator. + The index of the item to retrieve the position of. + + + Returns the ItemContainerGenerator that is appropriate for use by the specified panel. + An ItemContainerGenerator appropriate for use by the specified panel. + The panel for which to return an appropriate ItemContainerGenerator. + + + Returns the index to the item that has the specified, generated container. + IndexFromContainer may be altered or unavailable for releases after Windows 8.1. Instead, use ItemsControl.IndexFromContainer. + The index to the item that corresponds to the specified generated container. + The generated container to retrieve the item index for. + + + Returns the index that maps to the specified GeneratorPosition. + The index that maps to the specified GeneratorPosition. + The GeneratorPosition for the desired index. + + + Returns the item that corresponds to the specified, generated container. + ItemFromContainer may be altered or unavailable for releases after Windows 8.1. Instead, use ItemsControl.ItemFromContainer. + The contained item, or the container if it does not contain an item. + The DependencyObject that corresponds to the item to be returned. + + + Prepares the specified element as the container for the corresponding item. + The container to prepare. Typically, container is the result of the previous call to GenerateNext. + + + Disassociates item containers from their data items and saves the containers so they can be reused later for other data items. + The zero-based index of the first element to reuse. position must refer to a previously generated (realized) item. + The number of elements to reuse, starting at position. + + + Removes one or more generated (realized) items. + The index of the element to remove. position must refer to a previously generated (realized) item, which means its offset must be zero. + The number of elements to remove, starting at position. + + + Removes all generated (realized) items. + + + Prepares the generator to generate items, starting at the specified GeneratorPosition and moving in the specified GeneratorDirection. This method also controls whether or not to start at a generated (realized) item. + A GeneratorPosition that specifies the position of the item to start generating items at. + Specifies the position of the item to start generating items at. + Specifies whether to start at a generated (realized) item. + + + Disposes the ItemContainerGenerator. + + + Occurs when the contents of the items collection changes. + + + Represents a control that can be used to present a collection of items. + + + Initializes a new instance of the ItemsControl class. + + + Gets or sets the name or path of the property that is displayed for each data item. + The name or path of the property that is displayed for each the data item in the control. The default is an empty string (""). + + + Gets a collection of GroupStyle objects that define the appearance of each level of groups. + A collection of GroupStyle objects that define the appearance of each level of groups. + + + Gets or sets a reference to a custom GroupStyleSelector logic class. The GroupStyleSelector returns different GroupStyle values to use for content based on the characteristics of that content. + A reference to a custom GroupStyleSelector logic class. + + + Gets a value that indicates whether the control is using grouping. + true if a control is using grouping; otherwise, false. + + + Gets the ItemContainerGenerator associated with this ItemsControl. + The ItemContainerGenerator associated with this ItemsControl. + + + Gets or sets the style that is used when rendering the item containers. + The style applied to the item containers. The default is null. + + + Gets or sets a reference to a custom StyleSelector logic class. The StyleSelector returns different Style values to use for the item container based on characteristics of the object being displayed. + A custom StyleSelector logic class. + + + Gets or sets the collection of Transition style elements that apply to the item containers of an ItemsControl. + The collection of Transition style elements that apply to the item containers of an ItemsControl. + + + Gets the collection used to generate the content of the control. + The collection that is used to generate the content of the control, if it exists; otherwise, null. The default is an empty collection. + + + Gets or sets the template that defines the panel that controls the layout of items. + An ItemsPanelTemplate that defines the panel to use for the layout of the items. The default value for the ItemsControl is an ItemsPanelTemplate that specifies a StackPanel. + + + Gets the Panel specified by ItemsPanel. + The Panel specified by ItemsPanel. The default is null. + + + Gets or sets an object source used to generate the content of the ItemsControl. + The object that is used to generate the content of the ItemsControl. The default is null. + + + Gets or sets the DataTemplate used to display each item. + The template that specifies the visualization of the data objects. The default is null. + + + Gets or sets a reference to a custom DataTemplateSelector logic class. The DataTemplateSelector referenced by this property returns a template to apply to items. + A reference to a custom DataTemplateSelector logic class. + + + Undoes the effects of the PrepareContainerForItemOverride method. + The container element. + The item. + + + Returns the container for the item at the specified index within the ItemCollection. + The container for the item at the specified index within the item collection, if the item has a container; otherwise, null. + The index of the item to retrieve. + + + Returns the container corresponding to the specified item. + A container that corresponds to the specified item, if the item has a container and exists in the collection; otherwise, null. + The item to retrieve the container for. + + + Creates or identifies the element that is used to display the given item. + The element that is used to display the given item. + + + Returns the ItemsControl that the specified element hosts items for. + The ItemsControl that the specified element hosts items for, or null. + The host element. + + + Returns the index to the item that has the specified, generated container. + The index to the item that corresponds to the specified generated container. + The generated container to retrieve the item index for. + + + Determines whether the specified item is (or is eligible to be) its own container. + true if the item is (or is eligible to be) its own container; otherwise, false. + The item to check. + + + Returns the item that corresponds to the specified, generated container. + The contained item, or the container if it does not contain an item. + The DependencyObject that corresponds to the item to be returned. + + + Returns the ItemsControl that owns the specified container element. + The ItemsControl that owns the specified container element; otherwise, null. + The container element to return the ItemsControl for. + + + Invoked when the value of the GroupStyleSelector property changes. + The previous value of the GroupStyleSelector property. + The current value of the GroupStyleSelector property. + + + Invoked when the value of the ItemContainerStyle property changes. + The previous value of the ItemContainerStyle property. + The current value of the ItemContainerStyle property. + + + Invoked when the value of the ItemContainerStyleSelector property changes. + The previous value of the ItemContainerStyleSelector property. + The current value of the ItemContainerStyleSelector property. + + + Invoked when the value of the Items property changes. + Event data. Not specifically typed in the current implementation. + + + Invoked when the value of the ItemTemplate property changes. + The previous value of the ItemTemplate property. + The current value of the ItemTemplate property. + + + Invoked when the value of the ItemTemplateSelector property changes. + The previous value of the ItemTemplateSelector property. + The current value of the ItemTemplateSelector property. + + + Prepares the specified element to display the specified item. + The element that's used to display the specified item. + The item to display. + + + Identifies the DisplayMemberPath dependency property. + The identifier for the DisplayMemberPath dependency property. + + + Identifies the GroupStyleSelector dependency property. + The identifier for the GroupStyleSelector dependency property. + + + Identifies the IsGrouping dependency property. + The identifier for the IsGrouping dependency property. + + + Identifies the ItemContainerStyle dependency property. + The identifier for the ItemContainerStyle dependency property. + + + Identifies the ItemContainerStyleSelector dependency property. + The identifier for the ItemContainerStyleSelector dependency property. + + + Identifies the ItemContainerTransitions dependency property. + The identifier for the ItemContainerTransitions dependency property. + + + Identifies the ItemsPanel dependency property. + The identifier for the ItemsPanel dependency property. + + + Identifies the ItemsSource dependency property. + The identifier for the ItemsSource dependency property. + + + Identifies the ItemTemplate dependency property. + The identifier for the ItemTemplate dependency property. + + + Identifies the ItemTemplateSelector dependency property. + The identifier for the ItemTemplateSelector dependency property. + + + Specifies the panel that the ItemsPresenter creates for the layout of the items of an ItemsControl. + + + Initializes a new instance of the ItemsPanelTemplate class. + + + Specifies where items are placed in a control, usually an ItemsControl. + + + Initializes a new instance of the ItemsPresenter class. + + + Gets a value that indicates whether the horizontal snap points for the ItemsPresenter are equidistant from each other. + True if the horizontal snap points for the ItemsPresenter are equidistant from each other; otherwise, false. + + + Gets a value that indicates whether the vertical snap points for the ItemsPresenter are equidistant from each other. + True if the vertical snap points for the ItemsPresenter are equidistant from each other; otherwise, false. + + + Gets or sets the content for the items footer. + The content of the items footer. The default is null. + + + Gets or sets the DataTemplate used to display the content of the items header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the collection of Transition style elements that apply to the footer of an ItemsPresenter. + The collection of Transition style elements that apply to the footer of an ItemsPresenter. + + + Gets or sets the content for the items header. + The content of the items header. The default value is null. + + + Gets or sets the DataTemplate used to display the content of the items header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the collection of Transition style elements that apply to the header of an ItemsPresenter. + The collection of Transition style elements that apply to the header of an ItemsPresenter. + + + Gets or sets the distance between the ItemsPresenter and its child objects. + The dimensions of the space between the presenter and its children as a Thickness value. Thickness is a structure that stores dimension values using pixel measures. + + + Returns a read-only collection of numbers that represent the snap points for the specified orientation. + A read-only collection of numbers that represent the snap points for the specified orientation, or an empty collection when no snap points are present. + The orientation of the requested snap points. + The alignment used by the caller when applying the requested snap points. + + + Returns an original offset and interval for equidistant snap points for the specified orientation. + The interval between equidistant snap points for the specified orientation or 0 when no snap points are present. + The orientation of the requested snap points. + The alignment used by the caller when applying the requested snap points. + The offset of the first snap point. + + + Occurs when the horizontal snap points change. + + + Occurs when the vertical snap points change. + + + Identifies the Footer dependency property. + The identifier for the Footer dependency property. + + + Identifies the FooterTemplate dependency property. + The identifier for the FooterTemplate dependency property. + + + Identifies the FooterTransitions dependency property. + The identifier for the FooterTransitions dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the HeaderTransitions dependency property. + The identifier for the HeaderTransitions dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Arranges child elements into a single line that can be oriented horizontally or vertically. Supports pixel-based UI virtualization and grouped layouts. Can only be used to display items in an ItemsControl that shows multiple items; not supported for ComboBox and FlipView. + + + Initializes a new instance of the ItemsStackPanel class. + + + Gets or sets the size of the buffers for items outside the viewport, in multiples of the viewport size. + The size of the buffers for items outside the viewport, in multiples of the viewport size. The default is 4.0. + + + Gets the index in the data collection of the first item in the cache. + The index in the data collection of the first item in the cache. The default is -1. + + + Gets the index in the data collection of the first item on the screen. Partially visible items are considered to be on screen. + The index in the data collection of the first item on the screen. The default is -1. + + + Gets or sets a value that specifies where group headers are positioned in relation to the group. + An enumeration value that specifies where group headers are positioned in relation to the group. The default is Top. + + + Gets or sets the amount of space around a group. + The amount of space around a group as a Thickness value. Thickness is a structure that stores dimension values using pixel measures. The default is a uniform Thickness of 0. + + + Gets or sets a value that specifies scrolling behavior when the ItemsSource is updated. + A value of the enumeration. The default is KeepItemsInView. + + + Gets the index in the data collection of the last item in the cache. + The index in the data collection of the last item in the cache. The default is -1. + + + Gets the index in the data collection of the last item on the screen. Partially visible items are considered to be on screen. + The index in the data collection of the last item on the screen. The default is -1. + + + Gets or sets the dimension by which child elements are stacked. + One of the enumeration values that specifies the orientation of child elements. The default is Vertical. + + + Gets a value that indicates whether items are panning forward or backward, or aren't panning. + An enumeration value that indicates whether the items are panning Forward or Backward, or None if the items are not panning. + + + Identifies the CacheLength dependency property. + The identifier for the CacheLength dependency property. + + + Identifies the GroupHeaderPlacement dependency property. + The identifier for the GroupHeaderPlacement dependency property. + + + Identifies the GroupPadding dependency property. + The identifier for the GroupPadding dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Positions child elements sequentially from left to right or top to bottom. When elements extend beyond the container edge, elements are positioned in the next row or column. Supports pixel-based UI virtualization and grouped layouts. Can only be used to display items in an ItemsControl that shows multiple items; not supported for ComboBox and FlipView. + + + Initializes a new instance of the ItemsWrapGrid class. + + + Gets or sets the size of the buffers for items outside the viewport, in multiples of the viewport size. + The size of the buffers for items outside the viewport, in multiples of the viewport size. The default is 4.0. + + + Gets the index in the data collection of the first item in the cache. + The index in the data collection of the first item in the cache. The default is -1. + + + Gets the index in the data collection of the first item on the screen. Partially visible items are considered to be on screen. + The index in the data collection of the first item on the screen. The default is -1. + + + Gets or sets a value that specifies where group headers are positioned in relation to the group. + An enumeration value that specifies where group headers are positioned in relation to the group. The default is Top. + + + Gets or sets the amount of space around a group. + The amount of space around a group as a Thickness value. Thickness is a structure that stores dimension values using pixel measures. The default is a uniform Thickness of 0. + + + Gets or sets the height of the layout area for each item that is contained in an ItemsWrapGrid. + The height of the layout area for each item that is contained in an ItemsWrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets or sets the width of the layout area for each item that is contained in an ItemsWrapGrid. + The width of the layout area for each item that is contained in an ItemsWrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets the index in the data collection of the last item in the cache. + The index in the data collection of the last item in the cache. The default is -1. + + + Gets the index in the data collection of the last item on the screen. Partially visible items are considered to be on screen. + The index in the data collection of the last item on the screen. The default is -1. + + + Gets or sets a value that influences the wrap point, also accounting for Orientation. + The maximum rows or columns that this ItemsWrapGrid should present before it introduces wrapping to the layout. The default is -1, which is a special value that indicates no maximum. + + + Gets or sets the dimension by which child elements are stacked. + One of the enumeration values that specifies the orientation of child elements. The default is Vertical. + + + Gets a value that indicates whether items are panning forward or backward, or aren't panning. + An enumeration value that indicates whether the items are panning Forward or Backward, or None if the items are not panning. + + + Identifies the CacheLength dependency property. + The identifier for the CacheLength dependency property. + + + Identifies the GroupHeaderPlacement dependency property. + The identifier for the GroupHeaderPlacement dependency property. + + + Identifies the GroupPadding dependency property. + The identifier for the GroupPadding dependency property. + + + Identifies the ItemHeight dependency property. + The identifier for the ItemHeight dependency property. + + + Identifies the ItemWidth dependency property. + The identifier for the ItemWidth dependency property. + + + Identifies the MaximumRowsOrColumns dependency property. + The identifier for the MaximumRowsOrColumns dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Contains a list of selectable items. + + + Initializes a new instance of the ListBox class. + + + Gets the list of currently selected items for the ListBox control. + The list of currently selected items for the ListBox control. + + + Gets or sets the selection behavior for the ListBox control. + One of the SelectionMode values. + + + Causes the object to scroll into view. + The object to scroll to. + + + Selects all the items in the ListBox control. + + + Identifies the SelectionMode dependency property. + The identifier for the SelectionMode dependency property. + + + Represents the container for an item in a ListBox control. + + + Initializes a new instance of the ListBoxItem class. + + + Represents a control that displays a vertical list of data items. + + + Initializes a new instance of the ListView class. + + + Provides the infrastructure for the ListView and GridView classes. + + + Provides base-class initialization behavior for classes that are derived from the ListViewBase class. + + + Gets or sets a value that indicates whether items in the view can be dragged as data payload. + True if items in the view can be dragged as data payload; otherwise, false. The default is false. + + + Gets or sets a value that indicates whether items in the view can be reordered through user interaction. + True if items in the view can be reordered through user interaction; otherwise, false. The default is false. + + + Gets or sets the amount of data to fetch for virtualizing/prefetch operations. + The amount of data to fetch per interval, in pages. + + + Gets or sets the content for the list footer. + The content of the list footer. The default is null. + + + Gets or sets the DataTemplate used to display the content of the view footer. + The template that specifies the visualization of the footer object. The default is null. + + + Gets or sets the collection of Transition style elements that apply to the view footer. + The collection of Transition style elements that apply to the list footer. + + + Gets or sets the content for the list header. + The content of the list header. The default value is null. + + + Gets or sets the DataTemplate used to display the content of the view header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the collection of Transition style elements that apply to the view header. + The collection of Transition style elements that apply to the list header. + + + Gets or sets the threshold range that governs when the ListViewBase class will begin to prefetch more items. + The loading threshold, in terms of pages. + + + Gets or sets a value that indicates the conditions for prefetch operations by the ListViewBase class. + An enumeration value that indicates the conditions that trigger prefetch operations. The default is Edge. + + + Gets or sets a value that indicates whether the ListViewBase instance is the active view in its owning SemanticZoom. + True if the ListViewBase is the active view; otherwise, false. + + + Gets or sets a value that indicates whether items in the view raise an ItemClick event in response to interaction. + True if interaction raises an ItemClick event; otherwise, false. The default is false. + + + Gets or sets a value that indicates whether the view supports discrete input processing for a swipe interaction. + True if discrete input processing for swipe interactions is enabled; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether the ListViewBase instance is the zoomed-in view in its owning SemanticZoom. + True if the ListViewBase is the zoomed-in view; otherwise, false. + + + Gets the currently selected items. + A collection of the currently selected items. + + + Gets or sets the selection behavior for a ListViewBase instance. + One of the ListViewSelectionMode enumeration values. The default is Single selection. + + + Gets or sets the SemanticZoom instance that hosts the ListViewBase. + The SemanticZoom instance that hosts this view, or null if the view is not hosted in a SemanticZoom control. + + + Gets or sets a value that indicates whether the view shows placeholder UI for items during scrolling. + true if the view shows placeholder UI for items during scrolling; otherwise, false. The default is false. + + + Changes related aspects of presentation when the overall view for a SemanticZoom changes. + + + Completes item-wise operations that are related to a view change when the ListViewBase instance is the source view and the new view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Completes item-wise operations that are related to a view change when the ListViewBase instance is the destination view and the source view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes the changes to related aspects of presentation (such as scrolling UI or state) when the overall view for a SemanticZoom is about to change. + + + Initiates the asynchronous request to load more data items, in accordance with the active incremental loading settings. + A LoadMoreItemsResult payload. + + + Forces content in the view to scroll until the item that's specified by SemanticZoomLocation is visible. Also focuses the item if it finds the item. + The item in the view to scroll to. + + + Scrolls the list to bring the specified data item into view. + The data item to bring into view. + + + Scrolls the list to bring the specified data item into view with the specified alignment. + The data item to bring into view. + An enumeration value that specifies whether the item uses Default or Leading alignment. + + + Selects all the items in a view. + + + Initializes item-wise operations that are related to a view change when the ListViewBase instance is the source view and the pending destination view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes item-wise operations that are related to a view change when the source view is a different view and the pending destination view is the ListViewBase instance. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Sets the maximum target time between two render passes when a ListViewBase is updating its UI with data items during initial load or scrolling. + The maximum target time between two render passes. + + + Occurs when the data item associated with a UI container changes. + + + Occurs when a drag operation that involves one of the items in the view is initiated. + + + Occurs when an item in the list view receives an interaction, and the IsItemClickEnabled property is true. + + + Identifies the CanDragItems dependency property. + The identifier for the CanDragItems dependency property. + + + Identifies the CanReorderItems dependency property. + The identifier for the CanReorderItems dependency property. + + + Identifies the DataFetchSize dependency property. + The identifier for the DataFetchSize dependency property. + + + Identifies the Footer dependency property. + The identifier for the Footer dependency property. + + + Identifies the FooterTemplate dependency property. + The identifier for the FooterTemplate dependency property. + + + Identifies the FooterTransitions dependency property. + The identifier for the FooterTransitions dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the HeaderTransitions dependency property. + The identifier for the HeaderTransitions dependency property. + + + Identifies the IncrementalLoadingThreshold dependency property. + The identifier for the IncrementalLoadingThreshold dependency property. + + + Identifies the IncrementalLoadingTrigger dependency property. + The identifier for the IncrementalLoadingTrigger dependency property. + + + Identifies the IsActiveView dependency property. + The identifier for the IsActiveView dependency property. + + + Identifies the IsItemClickEnabled dependency property. + The identifier for the IsItemClickEnabled dependency property. + + + Identifies the IsSwipeEnabled dependency property. + The identifier for the IsSwipeEnabled dependency property. + + + Identifies the IsZoomedInView dependency property. + The identifier for the IsZoomedInView dependency property. + + + Identifies the SelectionMode dependency property. + The identifier for the SelectionMode dependency property. + + + Identifies the SemanticZoomOwner dependency property. + The identifier for the SemanticZoomOwner dependency property. + + + Identifies the ShowsScrollingPlaceholders dependency property. + The identifier for the ShowsScrollingPlaceholders dependency property. + + + Provides the infrastructure for the ListViewHeaderItem and GridViewHeaderItem classes. + + + Represents a group header for a group inside a ListView. + + + Initializes a new instance of the ListViewHeaderItem class. + + + Represents the container for an item in a ListView control. + + + Initializes a new instance of the ListViewItem class. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when you're defining templates for a ListViewItem class. + An object that provides calculated values for templates. + + + Represents an object that renders audio and video to the display. + + + Instantiates a new instance of the MediaElement class. + + + Gets an enumeration value that determines the current value of stereo 3-D video frame-packing mode, accounting for other factors such as whether the media engine is ready for use. + A value of the enumeration. May be None if media engine is not ready for use. + + + Gets or sets a value that determines whether the standard transport controls are enabled. + true if the standard transport controls are enabled; otherwise, false. + + + Gets the height portion of the native aspect ratio of the media. + The height portion of the native aspect ratio of the media. This value holds meaning only when you compare it with the value for the AspectRatioWidth property; the two properties together describe the aspect ratio. + + + Gets the width portion of the native aspect ratio of the media. + The width portion of the native aspect ratio of the media. This value holds meaning only when you compare it with the value for the AspectRatioHeight property; the two properties together describe the aspect ratio. + + + Gets or sets a value that describes the purpose of the audio information in an audio stream. + A value of the enumeration. + + + Gets or sets a value that describes the primary usage of the device that is being used to play back audio. + A value of the enumeration. + + + Gets the number of audio streams that exist in the current media file. + The number of audio streams that exist in the source media file. The default value is 0. + + + Gets or sets the index of the audio stream that plays along with the video component. The collection of audio streams is composed at run time and represents all audio streams that are available in the media file. + The index in the media file of the audio component that plays along with the video component. The index can be unspecified, in which case the value is null. The default value is null. If you're programming using C# or Microsoft Visual Basic, the type of this property is projected as int? (a nullable integer). + + + Gets or sets a value that indicates whether media will begin playback automatically when the Source property is set. + true if playback is automatic; otherwise, false. The default value is true. + + + Gets or sets a ratio of volume across stereo speakers. + The ratio of volume across speakers in the range between -1 and 1. The default value is 0. + + + Gets a value that indicates the current buffering progress. + The amount of buffering that is completed for media content. The value ranges from 0 to 1. Multiply by 100 to obtain a percentage. + + + Gets a value that indicates whether media can be paused if the Pause method is called. + true if the media can be paused; otherwise, false. + + + Gets a value that indicates whether media can be repositioned by setting the value of the Position property. + true if the media can be repositioned; otherwise, false. + + + Gets the status of this MediaElement. + The current state of this MediaElement. The state can be one of the following (as defined in the MediaElementState enumeration): Buffering, Closed, Opening, Paused, Playing, or Stopped. The default value is Closed. + + + Gets or sets the default playback rate for the media engine. The playback rate applies when the user isn't using fast forward or reverse. + The default playback rate. The default is 1.0, which indicates normal playback speed. + + + Gets a value that indicates the amount of download completed for content located on a remote server. + A value that indicates the amount of download completed for content that is located on a remote server. The value ranges from 0 to 1. Multiply by 100 to obtain a percentage. + + + Gets the offset of download progress, which is relevant in seek-ahead scenarios. + The offset of download progress. + + + Gets a value that reports whether the current source media is an audio-only media file. + true if the current source media is audio-only, otherwise, false. + + + Gets a value that specifies if the MediaElement is rendering in full window mode. Setting this property enables or disables full window rendering. + true if the MediaElement is in full window mode; otherwise, false. The default value is false. + + + Gets or sets a value that describes whether the media source currently loaded in the media engine should automatically set the position to the media start after reaching its end. + true to loop the media and play continuously. false to not loop the media automatically. + + + Gets or sets a value indicating whether the audio is muted. + true if audio is muted; otherwise, false. The default is false. + + + Gets a value that reports whether the current source media is a stereo 3-D video media file. + true if the current source media is stereo 3-D video, otherwise, false. + + + Gets the collection of timeline markers associated with the currently loaded media file. + The collection of timeline markers (represented as TimelineMarker objects) associated with the currently loaded media file. The default value is an empty collection. + + + Gets the duration of the media file currently opened. + The natural duration of the media. The default value is a Duration structure that evaluates as Automatic, which is the value held if you query this property before MediaOpened. + + + Gets the height of the video associated with the media. + The height of the video that is associated with the media, in pixels. Audio files will return 0. The default value is 0. + + + Gets the width of the video associated with the media. + The width of the video associated with the media. The default value is 0. + + + Gets or sets the playback rate ratio for the media engine. + The playback rate ratio for the media. A value of 1.0 is the normal playback speed. Value can be negative to play backwards. + + + Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server. + The path to the preferred media source. + + + Gets the information that is transmitted if the MediaElement is used for a "PlayTo" scenario. + A reference object that carries the "PlayTo" source information. + + + Gets or sets the current position of progress through the media's playback time. + The amount of time since the beginning of the media. The default is a TimeSpan with value 0:0:0. + + + Gets or sets the image source that is used for a placeholder image during MediaElement loading transition states. + An image source for a transition ImageBrush that is applied to the MediaElement content area. + + + Gets or sets the dedicated object for media content protection that is associated with this MediaElement. + The dedicated object for media content protection. + + + Gets or sets a value that configures the MediaElement for real-time communications scenarios. + true to configure for real-time communications. false to not configure the MediaElement for real-time communications. + + + Gets or sets a media source on the MediaElement. + The source of the element, as an object describing a Uniform Resource Identifier (URI). The default value is null. + + + Gets or sets an enumeration value that determines the stereo 3-D video frame-packing mode for the current media source. + A value of the enumeration. See Remarks. + + + Gets or sets an enumeration value that determines the stereo 3-D video render mode for the current media source. + A value of the enumeration. + + + Gets or sets a value that describes how an MediaElement should be stretched to fill the destination rectangle. + A value of the Stretch enumeration that specifies how the source image is rendered, if the Height and/or Width of the Image are not explicitly specified. The default value is Uniform. + + + Gets or sets the media's volume. + The media's volume represented on a linear scale between 0 and 1. The default is 0.5. + + + Applies an audio effect to playback. Takes effect for the next source that is set on this MediaElement. + The identifier for the desired effect. + true if the effect shouldn't block playback when the effect can't be used at run time. false if the effect should block playback when the effect can't be used at run time. + A property set that transmits property values to specific effects as selected by effectID. + + + Applies a video effect to playback. Takes effect for the next source that is set on this MediaElement. + The identifier for the desired effect. + true if the effect shouldn't block playback when the effect can't be used at run time. false if the effect should block playback when the effect can't be used at run time. + A property set that transmits property values to specific effects as selected by effectID. + + + Returns an enumeration value that describes the likelihood that the current MediaElement and its client configuration can play that media source. + A value of the enumeration that describes the likelihood that the current media engine can play the source. + A string that describes the desired type as a MIME string. + + + Returns the RFC 1766 language for the specified audio stream. + The RFC 1766 language for the specified audio stream, expressed as a string (for example, en-us). + The index of the stream to get the language for. If you are programming using C# or Microsoft Visual Basic, the type of this parameter is projected as int? (a nullable integer). + + + Pauses media at the current position. + + + Plays media from the current position. + + + Removes all effects for the next source set for this MediaElement. + + + Sets the Source of the MediaElement to the specified MediaStreamSource. + The media source. + + + Sets the Source property using the specified stream and MIME type. + The stream that contains the media to load. + The MIME type of the media resource, expressed as the string form typically seen in HTTP headers and requests. The empty string "" can be passed in as the mimeType value if the MIME type is unknown. + + + Stops and resets media to be played from the beginning. + + + Occurs when the BufferingProgress property changes. + + + Occurs when the value of the CurrentState property changes. + + + Occurs when the DownloadProgress property has changed. + + + Occurs when a timeline marker is encountered during media playback. + + + Occurs when the MediaElement finishes playing audio or video. + + + Occurs when there is an error associated with the media Source. + + + Occurs when the media stream has been validated and opened, and the file headers have been read. + + + Occurs when PlaybackRate or DefaultPlaybackRate changes value. + + + Occurs when the seek point of a requested seek operation is ready for playback. + + + Occurs when the value of the Volume property changes. + + + Identifies the ActualStereo3DVideoPackingMode dependency property. + The identifier for the ActualStereo3DVideoPackingMode dependency property. + + + Identifies the AreTransportControlsEnabled dependency property. + The identifier for the AreTransportControlsEnabled dependency property. + + + Identifies the AspectRatioHeight dependency property. + The identifier for the AspectRatioHeight dependency property. + + + Identifies the AspectRatioWidth dependency property. + The identifier for the AspectRatioWidth dependency property. + + + Identifies the AudioCategory dependency property. + The identifier for the AudioCategory dependency property. + + + Identifies the AudioDeviceType dependency property. + The identifier for the AudioDeviceType dependency property. + + + Identifies the AudioStreamCount dependency property. + The identifier for the AudioStreamCount dependency property. + + + Identifies the AudioStreamIndex dependency property. + The identifier for the AudioStreamIndex dependency property. + + + Identifies the AutoPlay dependency property. + The identifier for the AutoPlay dependency property. + + + Identifies the Balance dependency property. + The identifier for the Balance dependency property. + + + Identifies the BufferingProgress dependency property. + The identifier for the BufferingProgress dependency property. + + + Identifies the CanPause dependency property. + The identifier for the CanPause dependency property. + + + Identifies the CanSeek dependency property. + The identifier for the CanSeek dependency property. + + + Identifies the CurrentState dependency property. + The identifier for the CurrentState dependency property. + + + Identifies the DefaultPlaybackRate dependency property. + The identifier for the DefaultPlaybackRate dependency property. + + + Identifies the DownloadProgressOffset dependency property. + The identifier for the DownloadProgressOffset dependency property. + + + Identifies the DownloadProgress dependency property. + The identifier for the DownloadProgress dependency property. + + + Identifies the IsAudioOnly dependency property. + The identifier for the IsAudioOnly dependency property. + + + Identifies the IsFullWindow dependency property. + The identifier for the IsFullWindow dependency property. + + + Identifies the IsLooping dependency property. + The identifier for the IsLooping dependency property. + + + Identifies the IsMuted dependency property. + The identifier for the IsMuted dependency property. + + + Identifies the IsStereo3DVideo dependency property. + The identifier for the IsStereo3DVideo dependency property. + + + Identifies the NaturalDuration dependency property. + The identifier for the NaturalDuration dependency property. + + + Identifies the NaturalVideoHeight dependency property. + The identifier for the NaturalVideoHeight dependency property. + + + Identifies the NaturalVideoWidth dependency property. + The identifier for the NaturalVideoWidth dependency property. + + + Identifies the PlaybackRate dependency property. + The identifier for the PlaybackRate dependency property. + + + Identifies the PlayToPreferredSourceUri dependency property. + The identifier for the PlayToPreferredSourceUri dependency property. + + + Identifies the PlayToSource dependency property. + The identifier for the PlayToSource dependency property. + + + Identifies the Position dependency property. + The identifier the Position dependency property. + + + Identifies the PosterSource dependency property. + The identifier for the PosterSource dependency property. + + + Identifies the ProtectionManager dependency property. + The identifier for the ProtectionManager dependency property. + + + Identifies the RealTimePlayback dependency property. + The identifier for the RealTimePlayback dependency property. + + + Identifies the Source dependency property. + The identifier for the Source dependency property. + + + Identifies the Stereo3DVideoPackingMode dependency property. + The identifier for the Stereo3DVideoPackingMode dependency property. + + + Identifies the Stereo3DVideoRenderMode dependency property. + The identifier for the Stereo3DVideoRenderMode dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Identifies the Volume dependency property. + The identifier for the Volume dependency property. + + + Represents a flyout that displays a menu of commands. + + + Initializes a new instance of the MenuFlyout class. + + + Gets the collection used to generate the content of the menu. + The collection that is used to generate the content of the menu, if it exists; otherwise, null. The default is an empty collection. + + + Gets or sets the style that is used when rendering the MenuFlyout. + The style that is used when rendering the MenuFlyout. + + + Identifies the MenuFlyoutPresenterStyle dependency property. + The identifier for the MenuFlyoutPresenterStyle dependency property. + + + Represents a command in a MenuFlyout control. + + + Initializes a new instance of the MenuFlyoutItem class. + + + Gets or sets the command to invoke when the item is pressed. + The command to invoke when the item is pressed. The default is null. + + + Gets or sets the parameter to pass to the Command property. + The parameter to pass to the Command property. The default is null. + + + Gets or sets the text content of a MenuFlyoutItem. + A string that specifies the text content of this MenuFlyoutItem. The default is an empty string. + + + Occurs when a menu item is clicked. + + + Identifies the CommandParameter dependency property. + The identifier for the CommandParameter dependency property. + + + Identifies the Command dependency property. + The identifier for the Command dependency property. + + + Identifies the Text dependency property. + The identifier for the Text dependency property. + + + Represents the base class for items in a MenuFlyout control. + + + Displays the content of a MenuFlyout control. + + + Initializes a new instance of the MenuFlyoutPresenter class. + + + Represents a horizontal line that separates items in an MenuFlyout. + + + Initializes a new instance of the MenuFlyoutSeparator class. + + + Provides data for the ScriptNotify event. + + + Gets the Uniform Resource Identifier (URI) of the page containing the script that raised the ScriptNotify event. + The Uniform Resource Identifier (URI) of the page that raised the event. + + + Gets the method name as passed to the application. + The JavaScript method name. + + + Represents content that a Frame control can navigate to. + + + Initializes a new instance of the Page class. + + + Gets a reference to an AppBar displayed at the bottom of the page, if any. + A reference to an AppBar displayed at the bottom of the page, or null. + + + Gets the controlling Frame for the Page content. + The controlling Frame for the Page content. + + + Gets or sets the navigation mode that indicates whether this Page is cached, and the period of time that the cache entry should persist. + A value of the enumeration. The default is Disabled. + + + Gets a reference to an AppBar displayed at the top of the page, if any. + A reference to an AppBar displayed at the top of the page, or null. + + + Invoked immediately after the Page is unloaded and is no longer the current source of a parent Frame. + Event data that can be examined by overriding code. The event data is representative of the navigation that has unloaded the current Page. + + + Invoked when the Page is loaded and becomes the current source of a parent Frame. + Event data that can be examined by overriding code. The event data is representative of the pending navigation that will load the current Page. Usually the most relevant property to examine is Parameter. + + + Invoked immediately before the Page is unloaded and is no longer the current source of a parent Frame. + Event data that can be examined by overriding code. The event data is representative of the navigation that will unload the current Page unless canceled. The navigation can potentially be canceled by setting Cancel. + + + Identifies the BottomAppBar dependency property. + The identifier for the BottomAppBar dependency property. + + + Identifies the Frame dependency property. + The identifier for the Frame dependency property. + + + Identifies the TopAppBar dependency property. + The identifier for the TopAppBar dependency property. + + + Provides a base class for all Panel elements. Use Panel elements to position and arrange child objects in a UI page. + + + Provides base class initialization behavior for Panel derived classes. + + + Gets or sets a Brush that is used to fill the panel. + The brush used to fill the panel. The default is null. + + + Gets the collection of child elements of the panel. + The collection of child objects. The default is an empty collection. + + + Gets or sets the collection of Transition style elements that apply to child content of a Panel subclass. + The strongly typed collection of Transition style elements. + + + Gets a value that indicates whether this Panel is a container for UI items that are generated by an ItemsControl. + True if this instance of Panel is an items host; otherwise, false. The default is false. + + + Identifies the Background dependency property. + The identifier for the Background dependency property. + + + Identifies the ChildrenTransitions dependency property. + The identifier for the ChildrenTransitions dependency property. + + + Identifies the IsItemsHost dependency property. + The identifier for the IsItemsHost dependency property. + + + Represents a control for entering passwords. + + + Initializes a new instance of the PasswordBox class + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets a value that specifies whether the visual UI of the PasswordBox includes a button element that toggles showing or hiding the typed characters. + True to show a password reveal button; false to not show a password reveal button. The default is false. + + + Gets or sets the maximum length for passwords to be handled by this PasswordBox. + An integer that specifies the maximum number of characters for passwords to be handled by this PasswordBox. A value of zero (0) means no limit. The default is 0 (no length limit). + + + Gets or sets the password currently held by the PasswordBox. + A string that represents the password currently held by the PasswordBox. The default is an empty string. + + + Gets or sets the masking character for the PasswordBox. + A masking character to echo when the user enters text into the PasswordBox. The default value is a bullet character (â—). + + + Gets or sets the text that is displayed in the control until the value is changed by a user action or some other operation. + The text that is displayed in the control when no value is entered. The default is an empty string (""). + + + Gets or sets a value that indicates whether the on-screen keyboard is shown when the control receives focus programmatically. + true if the on-screen keyboard is shown when the control receives focus programmatically; otherwise, false. The default is false. + + + Gets or sets the brush used to highlight the selected text. + The brush used to highlight the selected text. + + + Selects all the characters in the PasswordBox. + + + Occurs when the system processes an interaction that displays a context menu. + + + Occurs when the value of the Password property changes. + + + Occurs when text is pasted into the control. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IsPasswordRevealButtonEnabled dependency property. + The identifier for the IsPasswordRevealButtonEnabled dependency property. + + + Identifies the MaxLength dependency property. + The identifier for the MaxLength dependency property. + + + Identifies the PasswordChar dependency property. + The identifier for the PasswordChar dependency property. + + + Identifies the Password dependency property. + The identifier for the Password dependency property. + + + Identifies the PlaceholderText dependency property. + The identifier for the PlaceholderText dependency property. + + + Identifies the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + The identifier for the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + + + Identifies the SelectionHighlightColor dependency property. + The identifier for the SelectionHighlightColor dependency property. + + + Represents an icon that uses a Path as its content. + + + Initializes a new instance of the PathIcon class. + + + Gets or sets a Geometry that specifies the shape to be drawn. + A description of the shape to be drawn. + + + Identifies the Data dependency property. + The identifier for the Data dependency property. + + + Represents a control that indicates the progress of an operation, where the typical visual appearance is a bar that animates a filled area as progress continues. + + + Initializes a new instance of the ProgressBar class. + + + Gets or sets a value that indicates whether the progress bar reports generic progress with a repeating pattern or reports progress based on the Value property. + True if the progress bar reports generic progress with a repeating pattern; false if the progress bar reports progress based on the Value property. The default is false. + + + Gets or sets a value that indicates whether the progress bar should use visual states that communicate an Error state to the user. + True if the progress bar should use visual states that communicate an Error state to the user; otherwise, false. The default is false. + + + Gets or sets a value that indicates whether the progress bar should use visual states that communicate a Paused state to the user. + True if the progress bar should use visual states that communicate a Paused state to the user; otherwise, false. The default is false. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a ProgressBar control. + An object that provides calculated values for templates. + + + Identifies the IsIndeterminate dependency property. + The identifier for the IsIndeterminate dependency property. + + + Identifies the ShowError dependency property. + The identifier for the ShowError dependency property. + + + Identifies the ShowPaused dependency property. + The identifier for the ShowPaused dependency property. + + + Represents a control that indicates that an operation is ongoing. The typical visual appearance is a ring-shaped "spinner" that cycles an animation as progress continues. + + + Initializes a new instance of the ProgressRing class. + + + Gets or sets a value that indicates whether the ProgressRing is showing progress. + True if the ProgressRing is showing progress; otherwise, false. The default is false. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a ProgressRing control. + An object that provides calculated values for templates. + + + Identifies the IsActive dependency property. + The identifier for the IsActive dependency property. + + + Represents a button that allows a user to select a single option from a group of options. + + + Initializes a new instance of the RadioButton class. + + + Gets or sets the name that specifies which RadioButton controls are mutually exclusive. + The name that specifies which RadioButton controls are mutually exclusive. The default is null. + + + Identifies the GroupName dependency property. + The identifier for GroupName dependency property. + + + Represents a rich text editing control that supports formatted text, hyperlinks, and other rich content. + + + Initializes a new instance of the RichEditBox class. + + + Gets or sets a value that indicates whether the RichEditBox allows and displays the newline or return characters when the ENTER or RETURN keys are pressed. + True if the RichEditBox allows newline characters; otherwise, false. The default is true. + + + Gets an object that enables access to the text object model for the text contained in a RichEditBox. + An object that enables access to the text object model. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the context for input used by this RichEditBox. + The input scope, which provides a hint at the type of text input expected by the control. + + + Gets or sets a value that determines whether color glyphs, such as emoji, are shown in color. + true if color glyphs show in color; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether the user can change the text in the RichEditBox. + True if the RichEditBox is read-only; otherwise, false. The default is false. + + + Gets or sets a value that indicates whether the text input should interact with a spell check engine. + True if the text input should interact with a spell check engine; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether text prediction features ("autocomplete") are enabled for this RichEditBox. + True to enable text prediction features; otherwise, false. The default is true. + + + Gets or sets the text that is displayed in the control until the value is changed by a user action or some other operation. + The text that is displayed in the control when no value is entered. The default is an empty string (""). + + + Gets or sets a value that indicates whether the on-screen keyboard is shown when the control receives focus programmatically. + true if the on-screen keyboard is shown when the control receives focus programmatically; otherwise, false. The default is false. + + + Gets or sets the brush used to highlight the selected text. + The brush used to highlight the selected text. + + + Gets or sets a value that indicates how text is aligned in the RichEditBox. + One of the TextAlignment enumeration values that specifies how text is aligned. The default is Left. + + + Gets or sets a value that indicates how text wrapping occurs if a line of text extends beyond the available width of the RichEditBox. + One of the TextWrapping enumeration values that specifies whether text is wrapped. The default is Wrap. + + + Occurs when the system processes an interaction that displays a context menu. + + + Occurs when text is pasted into the control. + + + Occurs when the text selection has changed. + + + Occurs when content changes in the RichEditBox. + + + Identifies the AcceptsReturn dependency property. + The identifier for the AcceptsReturn dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the InputScope dependency property. + The identifier for the InputScope dependency property. + + + Identifies the IsColorFontEnabled dependency property. + The identifier for the IsColorFontEnabled dependency property. + + + Identifies the IsReadOnly dependency property. + The identifier for the IsReadOnly dependency property. + + + Identifies the IsSpellCheckEnabled dependency property. + The identifier for the IsSpellCheckEnabled dependency property. + + + Identifies the IsTextPredictionEnabled dependency property. + The identifier for the IsTextPredictionEnabled dependency property. + + + Identifies the PlaceholderText dependency property. + The identifier for the PlaceholderText dependency property. + + + Identifies the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + The identifier for the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + + + Identifies the SelectionHighlightColor dependency property. + The identifier for the SelectionHighlightColor dependency property. + + + Identifies the TextAlignment dependency property. + Identifier for the TextAlignment dependency property. + + + Identifies the TextWrapping dependency property. + The identifier for the TextWrapping dependency property. + + + Represents a rich text display container that supports formatted text, hyperlinks, inline images, and other rich content. RichTextBlock supports a built-in overflow model. + + + Initializes a new instance of the RichTextBlock class. + + + Gets a value that represents the offset in pixels from the top of the content to the baseline of the first paragraph. The baseline of the paragraph is the baseline of the first line in it. + The computed baseline for the first paragraph, or 0 if the RichTextBlock is empty. + + + Gets the contents of the RichTextBlock. + A BlockCollection that contains the contents of the RichTextBlock. + + + Gets or sets the uniform spacing between characters, in units of 1/1000 of an em. + The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing. + + + Gets a TextPointer that indicates the end of content in the RichTextBlock. + A TextPointer that indicates the end of content in the RichTextBlock. + + + Gets a TextPointer that indicates the start of content in the RichTextBlock. + A TextPointer that indicates the start of content in the RichTextBlock. + + + Gets or sets the preferred top-level font family for the text content in this element. + A FontFamily object that specifies the preferred font family, or a primary preferred font family with one or more fallback font families. For information about defaults, see the FontFamily class topic. + + + Gets or sets the font size for the text content in this element. + A non-negative value that specifies the font size, measured in pixels. The default is 11. + + + Gets or sets the font stretch for the text content in this element. + The requested font stretch, as a FontStretch constant. The default is Normal. + + + Gets or sets the font style for the content in this element. + The requested font style, which is a FontStyle enumeration named constant. The default is Normal. + + + Gets or sets the top-level font weight for the RichTextBlock. + The requested font weight, which is a FontWeight that is obtained from one of the FontWeights property values. The default is Normal. + + + Gets or sets the Brush to apply to the text contents of the RichTextBlock. + The brush used to apply to the text contents. The default is a SolidColorBrush with a Color value of Black. + + + Gets a value that indicates whether the RichTextBlock has content that extends beyond its bounds, that can provide content to an OverflowContentTarget element. + True if the RichTextBlock has content that extends beyond its bounds; otherwise, false. + + + Gets or sets a value that determines whether color glyphs, such as emoji, are shown in color. + true if color glyphs show in color; otherwise, false. The default is true. + + + Gets or sets a value that determines whether text content of the RichTextBlock can be selected for clipboard or drag purposes, or for UI styling changes that indicate selected text. + true if text content of the RichTextBlock can be selected for clipboard or drag purposes. false if text cannot be selected. The default is true. + + + Gets or sets the height of each line of content. + The height of each line in pixels. A value of 0 indicates that the line height is determined automatically from the current font characteristics. The default is 0. + + + Gets or sets a value that indicates how a line box is determined for each line of text in the RichTextBlock. + A value that indicates how a line box is determined for each line of text in the RichTextBlock. The default is MaxHeight. + + + Gets or sets the maximum lines of text shown in the RichTextBlock. + The maximum lines of text shown in the RichTextBlock. The default is 0, which is a special value that represents Auto behavior. The value cannot be negative. + + + Get or sets a value that indicates how the font is modified to align with fonts of different sizes. + A value of the enumeration that indicates how the font is modified to align at different sizes. The default is None. + + + Gets or sets a reference to a RichTextBlockOverflow that is the linked target for any text overflow from this RichTextBlock. + The target for overflow. + + + Gets or sets a value that indicates the thickness of padding space between the boundaries of the content area and the content displayed by a RichTextBlock. + A Thickness structure that specifies the amount of padding to apply. + + + Gets a text range of selected text. + A text range of the selected text. + + + Gets the end position of the text selected in the RichTextBlock. + An object that represents the selection end, or null if no selection exists. + + + Gets or sets the brush used to highlight the selected text. + The brush used to highlight the selected text. + + + Gets the starting position of the text selected in the RichTextBlock . + An object that represents the selection start, or null if no selection exists. + + + Gets or sets a value that indicates how the text is aligned in the RichTextBlock. + One of the TextAlignment enumeration values that indicates how text is aligned. The default is Left. + + + Gets or sets the indentation of the first line of text in each paragraph in the RichTextBlock. + The offset amount of the first line of text in a paragraph. + + + Gets or sets a value that indicates how the line box height is determined for each line of text in the RichTextBlock. + A value that indicates how the line box height is determined for each line of text in the RichTextBlock. The default is Full. + + + Gets or sets a value that indicates how the reading order is determined for the RichTextBlock. + A value that indicates how the reading order is determined for the RichTextBlock. The default is Default. + + + Gets or sets a value that indicates how text is trimmed when it overflows the content area. + One of the TextTrimming enumeration values that specifies the text trimming behavior to use. The default is None. + + + Gets or sets a value that indicates whether text wrapping occurs if a line of text extends beyond the available width of the RichTextBlock. + One of the TextWrapping enumeration values that specifies whether text is wrapped. The default is Wrap. + + + Focuses the RichTextBlock, as if it were a conventionally focusable control. + true if focus was set to the RichTextBlock, or focus was already there. false if the RichTextBlock is not focusable. + Specifies the desired target for focus state, as a value of the enumeration. + + + Returns a TextPointer text reference from a RichTextBlock by hit-testing a specific Point within the text display area. + The determined text reference. + The point to test. + + + Selects a range of text in the RichTextBlock. + An object that represents the start of the range to select. + An object that represents the end of the range to select. + + + Selects the entire contents in the RichTextBlock. + + + Occurs when the system processes an interaction that displays a context menu. + + + Occurs when the text selection has changed. + + + Identifies the CharacterSpacing dependency property. + The identifier for the CharacterSpacing dependency property. + + + Identifies the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Identifies the FontSize dependency property. + The identifier for the FontSize dependency property. + + + Identifies the FontStretch dependency property. + The identifier for the FontStretch dependency property. + + + Identifies the FontStyle dependency property. + The identifier for the FontStyle dependency property. + + + Identifies the FontWeight dependency property. + The identifier for the FontWeight dependency property. + + + Identifies the Foreground dependency property. + The identifier for the Foreground dependency property. + + + Identifies the HasOverflowContent dependency property. + The identifier for the HasOverflowContent dependency property. + + + Identifies the IsColorFontEnabled dependency property. + The identifier for the IsColorFontEnabled dependency property. + + + Identifies the IsTextSelectionEnabled dependency property. + The identifier for the IsTextSelectionEnabled dependency property. + + + Identifies the LineHeight dependency property. + The identifier for the LineHeight dependency property. + + + Identifies the LineStackingStrategy dependency property. + The identifier for the LineStackingStrategy dependency property. + + + Identifies the MaxLines dependency property. + The identifier for the MaxLines dependency property. + + + Identifies the OpticalMarginAlignment dependency property. + The identifier for the OpticalMarginAlignment dependency property. + + + Identifies the OverflowContentTarget dependency property. + The identifier for the OverflowContentTarget dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Identifies the SelectedText dependency property. + The identifier for the SelectedText dependency property. + + + Identifies the SelectionHighlightColor dependency property. + The identifier for the SelectionHighlightColor dependency property. + + + Identifies the TextAlignment dependency property. + Identifier for the TextAlignment dependency property. + + + Identifies the TextIndent dependency property. + The identifier of the TextIndent dependency property. + + + Identifies the TextLineBounds dependency property. + The identifier for the TextLineBounds dependency property. + + + Identifies the TextReadingOrder dependency property. + The identifier for the TextReadingOrder dependency property. + + + Identifies the TextTrimming dependency property. + The identifier of the TextTrimming dependency property. + + + Identifies the TextWrapping dependency property. + The identifier for the TextWrapping dependency property. + + + Represents a rich text display overflow container. This element cannot have direct content. The only purpose of RichTextBlockOverflow is to display text content that does not fit in the bounds of a RichTextBlock or another RichTextBlockOverflow element. + + + Initializes a new instance of the RichTextBlockOverflow class. + + + Gets a value that represents the offset in pixels from the top of the content to the baseline of the first paragraph. The baseline of the paragraph is the baseline of the first line in it. + The computed baseline for the first paragraph, or 0 if the RichTextBlockOverflow is empty. + + + Gets a TextPointer that indicates the end of content in the RichTextBlockOverflow. + A TextPointer that indicates the end of content in the RichTextBlockOverflow. + + + Gets the RichTextBlock content source of this RichTextBlockOverflow. + The content source for this RichTextBlockOverflow. + + + Gets a TextPointer that indicates the start of content in the RichTextBlockOverflow. + A TextPointer that indicates the start of content in the RichTextBlockOverflow. + + + Gets a value that indicates whether the RichTextBlockOverflow has content that extends beyond its bounds, that can provide content to an OverflowContentTarget element. + True if the RichTextBlockOverflow has content that extends beyond its bounds; otherwise, false. + + + Gets or sets the maximum lines of text shown in the RichTextBlockOverflow. + The maximum lines of text shown in the RichTextBlockOverflow. The default is 0, which is a special value that represents Auto behavior. The value cannot be negative. + + + Gets or sets a reference to another RichTextBlockOverflow that is the linked target for any text overflow from this RichTextBlockOverflow. + The target for overflow. + + + Gets or sets a value that indicates the thickness of padding space between the boundaries of the content area and the content displayed by a RichTextBlockOverflow. + A Thickness structure that specifies the amount of padding to apply. + + + Focuses the RichTextBlockOverflow, as if it were a conventionally focusable control. + true if focus was set to the RichTextBlockOverflow, or focus was already there. false if the RichTextBlockOverflow is not focusable. + Specifies the desired target for focus state, as a value of the enumeration. + + + Returns a TextPointer text reference from a RichTextBlockOverflow by hit-testing a specific Point within the text display area. + The determined text reference. + The point to test. + + + Identifies the HasOverflowContent dependency property. + The identifier for the HasOverflowContent dependency property. + + + Identifies the MaxLines dependency property. + The identifier for the MaxLines dependency property. + + + Identifies the OverflowContentTarget dependency property. + The identifier for the OverflowContentTarget dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Defines row-specific properties that apply to Grid elements. + + + Initializes a new instance of the RowDefinition class. + + + Gets a value that represents the calculated height of the RowDefinition. + A value that represents the calculated height in pixels. The default value is 0. + + + Gets the calculated height of a RowDefinition element, or sets the GridLength value of a row that is defined by the RowDefinition. + The GridLength that represents the height of the row. The default value is a GridLength representing a 1* sizing. + + + Gets or sets a value that represents the maximum height of a RowDefinition. + A Double that represents the maximum height. + + + Gets or sets a value that represents the minimum allowed height of a RowDefinition. + A Double that represents the minimum allowed height. The default value is 0. + + + Identifies the Height dependency property. + The identifier for the Height dependency property. + + + Identifies the MaxHeight dependency property. + The identifier for the MaxHeight dependency property. + + + Identifies the MinHeight dependency property. + The identifier for the MinHeight dependency property. + + + Provides access to an ordered, strongly typed collection of RowDefinition objects. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the RowDefinition located at the specified index. + The RowDefinition value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the RowDefinition value specified. + The index at which to set the value. + The value to set. + + + Displays the content of a ScrollViewer control. + + + Initializes a new instance of the ScrollContentPresenter class. + + + Gets or sets a value that indicates whether scrolling on the horizontal axis is possible. Not intended to be set in Extensible Application Markup Language (XAML). + true if scrolling is possible; otherwise, false. + + + Gets or sets a value that indicates whether scrolling on the vertical axis is possible. Not intended to be set in Extensible Application Markup Language (XAML). + true if scrolling is possible; otherwise, false. + + + Gets the vertical size of all the scrollable content. + The vertical size of the all scrollable content. + + + Gets the horizontal size of all the scrollable content. + The horizontal size of all the scrollable content. + + + Gets the distance the content has been scrolled horizontally. + The distance the content has been scrolled horizontally. + + + Gets or sets the ScrollViewer element that controls scrolling behavior. + The ScrollViewer element that controls scrolling behavior. + + + Gets the distance the content has been scrolled vertically. + The distance the content has been scrolled vertically. + + + Gets the vertical size of the viewable content. + The vertical size of the viewable content. + + + Gets the horizontal size of the viewable content. + The horizontal size of the viewable content. + + + Scrolls the ScrollContentPresenter content downward by one line. + + + Scrolls the ScrollContentPresenter content to the left by a predetermined amount. + + + Scrolls the ScrollContentPresenter content to the right by a predetermined amount. + + + Scrolls the ScrollContentPresenter content upward by one line. + + + Forces content to scroll until the coordinate space of a visual object is visible. + A Rect that represents the visible region after scrolling happens. + A UIElement that becomes visible. + The bounding rectangle that identifies the coordinate space to make visible. + + + Scrolls down within content after a user clicks the wheel button on a mouse. + + + Scrolls left within content after a user clicks the wheel button on a mouse. + + + Scrolls right within content after a user clicks the wheel button on a mouse. + + + Scrolls up within content after a user clicks the wheel button on a mouse. + + + Scrolls down within the content by one page. + + + Scrolls left within the content by one page. + + + Scrolls right within the content by one page. + + + Scrolls up within the content by one page. + + + Sets the distance the content has been scrolled horizontally. + The distance the content has been scrolled horizontally. + + + Sets the distance the content has been scrolled vertically. + The distance the content has been scrolled vertically. + + + Represents a scrollable area that can contain other visible elements. + + + Initializes a new instance of the ScrollViewer class. + + + Gets or sets a value that determines whether the ScrollViewer uses a bring-into-view scroll behavior when an item in the view gets focus. + true to use a behavior that brings focused items into view. false to use a behavior that focused items do not automatically scroll into view. The default is true. + + + Gets a value that indicates whether the horizontal ScrollBar is visible. + A Visibility that indicates whether the horizontal scroll bar is visible. The default value is Hidden. + + + Gets a value that indicates whether the vertical ScrollBar is visible. + A Visibility that indicates whether the vertical scroll bar is visible. The default value is Visible. + + + Gets the vertical size of all the scrollable content in the ScrollViewer. + The vertical size of all the scrollable content in the ScrollViewer. + + + Gets the horizontal size of all the scrollable content in the ScrollViewer. + The horizontal size of all the scrollable content in the ScrollViewer. + + + Gets the distance the content has been scrolled horizontally. + The distance the content has been scrolled horizontally. + + + Gets or sets a value that indicates whether a horizontal ScrollBar should be displayed. + A ScrollBarVisibility value that indicates whether a horizontal ScrollBar should be displayed. The default value is Disabled. + + + Gets or sets a value that determines how manipulation input influences scrolling behavior on the horizontal axis. + A value of the enumeration. The typical default (as set through the default template, not class initialization) is Enabled. + + + Gets or sets a value that indicates how the existing snap points are horizontally aligned versus the initial viewport. + A value of the enumeration. + + + Gets or sets a value that declares how manipulation behavior reacts to the snap points along the horizontal axis. + A value of the enumeration. + + + Gets or sets a value that determines the deferred scrolling behavior for a ScrollViewer. + true if deferred scrolling should occur; otherwise, false. + + + Gets or sets a value that indicates whether the scroll rail is enabled for the horizontal axis. + True to enable the horizontal scroll rail; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether scroll chaining is enabled from this child to its parent, for the horizontal axis. + true to enable horizontal scroll chaining from child to parent; otherwise, false. + + + Gets or sets a value that indicates whether scroll actions should include inertia in their behavior and value. + true if scroll actions should include inertia in their behavior and value; otherwise, false. + + + Gets or sets a value that indicates whether the scroll rail is enabled for the vertical axis. + True to enable the vertical scroll rail; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether scroll chaining is enabled from this child to its parent, for the vertical axis. + true to enable vertical scroll chaining from child to parent; otherwise, false. + + + Gets or sets a value that indicates whether zoom chaining is enabled from this child to its parent. + true to enable zoom chaining from child to parent; otherwise, false. + + + Gets or sets a value that indicates whether zoom actions should include inertia in their behavior and value. + true if zoom actions should include inertia in their behavior and value; otherwise, false. + + + Gets or sets the content of the left header. + The content of the left header. + + + Gets or sets a value that indicates the maximum permitted run-time value of ZoomFactor. + The maximum permitted run-time value of ZoomFactor. The default is 10. + + + Gets or sets a value that indicates the minimum permitted run-time value of ZoomFactor. + The minimum permitted run-time value of ZoomFactor. The default is 0.1. + + + Gets a value that represents the vertical size of the area that can be scrolled; the difference between the width of the extent and the width of the viewport. + The vertical size of the area that can be scrolled. This property has no default value. + + + Gets a value that represents the horizontal size of the area that can be scrolled; the difference between the width of the extent and the width of the viewport. + The horizontal size of the area that can be scrolled. This property has no default value. + + + Gets or sets the content of the top header. + The content of the top header. + + + Gets or sets the content of the top, left header. + The content of the top, left header. + + + Gets the distance the content has been scrolled vertically. + The distance the content has been scrolled vertically. + + + Gets or sets a value that indicates whether a vertical ScrollBar should be displayed. + A ScrollBarVisibility value that indicates whether a vertical ScrollBar should be displayed. The default value is Visible. + + + Gets or sets a value that determines how manipulation input influences scrolling behavior on the vertical axis. + A value of the enumeration. The typical default (as set through the default template, not class initialization) is Enabled. + + + Gets or sets a value that indicates how the existing snap points are vertically aligned versus the initial viewport. + A value of the enumeration. + + + Gets or sets a value that declares how manipulation behavior reacts to the snap points along the vertical axis. + A value of the enumeration. + + + Gets the vertical size of the viewable content. + The vertical size of the viewable content. + + + Gets the horizontal size of the viewable content. + The horizontal size of the viewable content. + + + Gets a value that indicates the current zoom factor engaged for content scaling. + The current zoom factor engaged for content scaling. The default is 1.0, where 1.0 indicates no additional scaling. + + + Gets or sets a value that indicates whether zoom behavior in the ScrollViewer content is enabled. + A value of the enumeration. + + + Gets the observable collection of zoom snap point factors that are held by the ScrollViewer. + A collection of Single values that represent zoom factors as snap points. + + + Gets or sets a value that indicates how zoom snap points are processed for interaction input. + A value of the enumeration. + + + Causes the ScrollViewer to load a new view into the viewport using the specified offsets and zoom factor. + true if the view is changed; otherwise, false. + A value between 0 and ScrollableWidth that specifies the distance the content should be scrolled horizontally. + A value between 0 and ScrollableHeight that specifies the distance the content should be scrolled vertically. + A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor. + + + Causes the ScrollViewer to load a new view into the viewport using the specified offsets and zoom factor, and optionally disables scrolling animation. + true if the view is changed; otherwise, false. + A value between 0 and ScrollableWidth that specifies the distance the content should be scrolled horizontally. + A value between 0 and ScrollableHeight that specifies the distance the content should be scrolled vertically. + A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor. + true to disable zoom/pan animations while changing the view; otherwise, false. The default is false. + + + Gets the value of the BringIntoViewOnFocusChange dependency property / ScrollViewer.BringIntoViewOnFocusChange XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the HorizontalScrollBarVisibility dependency property / ScrollViewer.HorizontalScrollBarVisibility XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the HorizontalScrollMode dependency property / ScrollViewer.HorizontalScrollMode XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsDeferredScrollingEnabled dependency property / ScrollViewer.IsDeferredScrollingInertiaEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsHorizontalRailEnabled dependency property / ScrollViewer.IsHorizontalRailEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsHorizontalScrollChainingEnabled dependency property / ScrollViewer.IsHorizontalScrollChainingEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsScrollInertiaEnabled dependency property / ScrollViewer.IsScrollInertiaEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsVerticalRailEnabled dependency property / ScrollViewer.IsVerticalRailEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsVerticalScrollChainingEnabled dependency property / ScrollViewer.IsVerticalScrollChainingEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsZoomChainingEnabled dependency property / ScrollViewer.IsZoomChainingEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the IsZoomInertiaEnabled dependency property / ScrollViewer.IsZoomInertiaEnabled XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the VerticalScrollBarVisibility dependency property / ScrollViewer.VerticalScrollBarVisibility XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the VerticalScrollMode dependency property / ScrollViewer.VerticalScrollMode XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Gets the value of the ZoomMode dependency property / ScrollViewer.ZoomMode XAML attached property from a specified element. + The value of the property, as obtained from the property store. + The element from which the property value is read. + + + Called when the value of properties that describe the size and location of the scroll area change. + + + Scrolls the content that is within the ScrollViewer to the specified horizontal offset position. + ScrollToHorizontalOffset may be altered or unavailable for releases after Windows 8.1. Instead, use ChangeView. + The position that the content scrolls to. + + + Scrolls the content that is within the ScrollViewer to the specified vertical offset position. + ScrollToVerticalOffset may be altered or unavailable for releases after Windows 8.1. Instead, use ChangeView. + The position that the content scrolls to. + + + Sets the value of the BringIntoViewOnFocusChange dependency property / ScrollViewer.BringIntoViewOnFocusChange XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the HorizontalScrollBarVisibility dependency property / ScrollViewer.HorizontalScrollBarVisibility XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the HorizontalScrollMode dependency property / ScrollViewer.HorizontalScrollMode XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsDeferredScrollingEnabled dependency property / ScrollViewer.IsDeferredScrollingEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsHorizontalRailEnabled dependency property / ScrollViewer.IsHorizontalRailEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsHorizontalScrollChainingEnabled dependency property / ScrollViewer.IsHorizontalScrollChainingEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsScrollInertiaEnabled dependency property / ScrollViewer.IsScrollInertiaEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsVerticalRailEnabled dependency property / ScrollViewer.IsVerticalRailEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsVerticalScrollChainingEnabled dependency property / ScrollViewer.IsVerticalScrollChainingEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsZoomChainingEnabled dependency property / ScrollViewer.IsZoomChainingEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the IsZoomInertiaEnabled dependency property / ScrollViewer.IsZoomInertiaEnabled XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the VerticalScrollBarVisibility dependency property / ScrollViewer.VerticalScrollBarVisibility XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the VerticalScrollMode dependency property / ScrollViewer.VerticalScrollMode XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the value of the ZoomMode dependency property / ScrollViewer.ZoomMode XAML attached property on a specified element. + The element on which to set the property value. + The value to set. + + + Sets the effective value of ZoomFactor. + ZoomToFactor may be altered or unavailable for releases after Windows 8.1. Instead, use ChangeView. + The zoom factor to set. The factors are based on a norm of 1.0, which represents no zoom applied. The values you can set are also influenced by current values for MinZoomFactor and MaxZoomFactor. + + + Occurs when manipulations such as scrolling and zooming have caused the view to change. + + + Occurs when manipulations such as scrolling and zooming cause the view to change. + + + Identifies the BringIntoViewOnFocusChange dependency property. + The identifier for the BringIntoViewOnFocusChange dependency property. + + + Identifies the ComputedHorizontalScrollBarVisibility dependency property. + The identifier for the ComputedHorizontalScrollBarVisibility dependency property. + + + Identifies the ComputedVerticalScrollBarVisibility dependency property. + The identifier for the ComputedVerticalScrollBarVisibility dependency property. + + + Identifier for the ExtentHeight dependency property. + The identifier for the ExtentHeight dependency property. + + + Identifier for the ExtentWidth dependency property. + The identifier for the ExtentWidth dependency property. + + + Identifies the HorizontalOffset dependency property. + The identifier for the HorizontalOffset dependency property. + + + Identifies the HorizontalScrollBarVisibility dependency property. + The identifier for the HorizontalScrollBarVisibility dependency property. + + + Identifies the HorizontalScrollMode dependency property. + The identifier for the HorizontalScrollMode dependency property. + + + Identifies the HorizontalSnapPointsAlignment dependency property. + The identifier for the HorizontalSnapPointsAlignment dependency property. + + + Identifies the HorizontalSnapPointsType dependency property. + The identifier for the HorizontalSnapPointsType dependency property. + + + Identifies the IsDeferredScrollingEnabled dependency property. + The identifier for the IsDeferredScrollingEnabled dependency property. + + + Identifies the IsHorizontalRailEnabled dependency property. + The identifier for the IsHorizontalRailEnabled dependency property. + + + Identifies the IsHorizontalScrollChainingEnabled dependency property. + The identifier for the IsHorizontalScrollChainingEnabled dependency property. + + + Identifies the IsScrollInertiaEnabled dependency property. + The identifier for the IsScrollInertiaEnabled dependency property. + + + Identifies the IsVerticalRailEnabled dependency property. + The identifier for the IsVerticalRailEnabled dependency property. + + + Identifies the IsVerticalScrollChainingEnabled dependency property. + The identifier for the IsVerticalScrollChainingEnabled dependency property. + + + Identifies the IsZoomChainingEnabled dependency property. + The identifier for the IsZoomChainingEnabled dependency property. + + + Identifies the IsZoomInertiaEnabled dependency property. + The identifier for the IsZoomInertiaEnabled dependency property. + + + Identifies the LeftHeader dependency property. + The identifier for the LeftHeader dependency property. + + + Identifies the MaxZoomFactor dependency property. + The identifier for the MaxZoomFactor dependency property. + + + Identifies the MinZoomFactor dependency property. + The identifier for the MinZoomFactor dependency property. + + + Identifies the ScrollableHeight dependency property. + The identifier for the ScrollableHeight dependency property. + + + Identifies the ScrollableWidth dependency property. + The identifier for the ScrollableWidth dependency property. + + + Identifies the TopHeader dependency property. + The identifier for the TopHeader dependency property. + + + Identifies the TopLeftHeader dependency property. + The identifier for the TopLeftHeader dependency property. + + + Identifies the VerticalOffset dependency property. + The identifier for the VerticalOffset dependency property. + + + Identifies the VerticalScrollBarVisibility dependency property. + The identifier for the VerticalScrollBarVisibility dependency property. + + + Identifies the VerticalScrollMode dependency property. + The identifier for the VerticalScrollMode dependency property. + + + Identifies the VerticalSnapPointsAlignment dependency property. + The identifier for the VerticalSnapPointsAlignment dependency property. + + + Identifies the VerticalSnapPointsType dependency property. + The identifier for the VerticalSnapPointsType dependency property. + + + Identifies the ViewportHeight dependency property. + The identifier for the ViewportHeight dependency property. + + + Identifies the ViewportWidth dependency property. + The identifier for the ViewportWidth dependency property. + + + Identifies the ZoomFactor dependency property. + The identifier for the ZoomFactor dependency property. + + + Identifies the ZoomMode dependency property. + The identifier for the ZoomMode dependency property. + + + Identifies the ZoomSnapPoints dependency property. + The identifier for the ZoomSnapPoints dependency property. + + + Identifies the ZoomSnapPointsType dependency property. + The identifier for the ZoomSnapPointsType dependency property. + + + Provides a view for a ScrollViewer when its view is changing. + + + Gets the distance the content has been scrolled horizontally. + The distance the content has been scrolled horizontally. + + + Gets the distance the content has been scrolled vertically. + The distance the content has been scrolled vertically. + + + Gets a value that indicates the current zoom factor engaged for content scaling. + The current zoom factor engaged for content scaling. The default is 1.0, where 1.0 indicates no additional scaling. + + + Provides event data for the ViewChanged event and similar control-specific events. + + + Initializes a new instance of the ScrollViewerViewChangedEventArgs class. + + + Gets a value that indicates whether the underlying manipulation that raised the event is complete. + True if the manipulation is at an intermediate stage and not yet final; false if the manipulation is final. + + + Provides event data for the ViewChanging event and similar control-specific events. + + + Gets the view that the ScrollViewer will show when the view comes to rest after a pan/zoom manipulation. + The view that the ScrollViewer will show when the view comes to rest after a pan/zoom manipulation. + + + Gets a value that indicates whether the pan/zoom manipulation has an inertial component. + true if the pan/zoom manipulation has an inertial component; otherwise, false. + + + Gets the view that the ScrollViewer will show next. + The view that the ScrollViewer will show next. + + + Provides data for the Hub.SectionsInViewChanged event. + + + Gets a collection that contains the hub sections that moved into view. + A collection that contains the hub sections that moved into view. + + + Gets a collection that contains the hub sections that moved out of view. + A collection that contains the hub sections that moved into view. + + + Provides data for the SelectionChanged event. + + + Initializes a new instance of the SelectionChangedEventArgs class. + Sets the initial AddedItems value. May be null. + Sets the initial RemovedItems value. May be null. + + + Gets a list that contains the items that were selected. + The loosely typed collection of items that were selected in this event. + + + Gets a list that contains the items that were unselected. + The loosely typed list of items that were unselected in this event. + + + Represents a control that can be used to enter search query text. + + + Initializes a new instance of the SearchBox class. + + + Gets or sets a value that determines whether the suggested search query is activated when the user presses Enter. + true if the suggested search query is activated when the user presses Enter; otherwise, false. The default is false. + + + Gets or sets a value that determines whether a user can search by typing anywhere in the app. + true if the user can search by typing anywhere in the app; otherwise, false. The default is false. + + + Gets or sets the text that is displayed in the control until the value is changed by a user action or some other operation. + The text that is displayed in the control when no value is entered. The default is an empty string (""). + + + Gets or sets the text contents of the search box. + A string containing the text contents of the search box. The default is an empty string (""). + + + Gets or sets a string that identifies the context of the search and is used to store the user's search history with the app. + A string that identifies the context of the search. The default is an empty string (""). + + + Gets or sets a value that determines whether search suggestions are made from the search history. + true if search suggestions are made from the search history; otherwise, false. The default is true. + + + Specifies whether suggestions based on local files are automatically displayed in the search box suggestions, and defines the criteria that Windows uses to locate and filter these suggestions. + The new settings for local content suggestions. + + + Occurs when the FocusOnKeyboardInput property is true and the app receives textual keyboard input. + + + Occurs when the query text changes. + + + Occurs when the user submits a search query. + + + Occurs when the user picks a suggested search result. + + + Occurs when the user's query text changes and the app needs to provide new suggestions to display in the search pane. + + + Identifies the ChooseSuggestionOnEnter dependency property. + The identifier for the ChooseSuggestionOnEnter dependency property. + + + Identifies the FocusOnKeyboardInput dependency property. + The identifier for the FocusOnKeyboardInput dependency property. + + + Identifies the PlaceholderText dependency property. + The identifier for the PlaceholderText dependency property. + + + Identifies the QueryText dependency property. + The identifier for the QueryText dependency property. + + + Identifies the SearchHistoryContext dependency property. + The identifier for the SearchHistoryContext dependency property. + + + Identifies the SearchHistoryEnabled dependency property. + The identifier for the SearchHistoryEnabled dependency property. + + + Provides event data for the SearchBox.QueryChanged event. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The IETF BCP 47 standard language tag. + + + Gets information about query text that the user enters through an Input Method Editor (IME). + Linguistic information about query text that the user enters through an Input Method Editor (IME). + + + Gets the query text of the current search. + The query text of the current search. + + + Provides event data for the SearchBox.QuerySubmitted event. + + + Gets any modifier keys that are pressed when the user presses enter to submit a query. + Any modifier keys that are pressed when the user presses enter to submit a query. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The IETF BCP 47 standard language tag. + + + Gets information about query text that the user enters through an Input Method Editor (IME). + Linguistic information about query text that the user enters through an Input Method Editor (IME). + + + Gets the query text of the current search. + The query text of the current search. + + + Provides event data for the SearchBox.ResultSuggestionChosen event. + + + Initializes a new instance of the SearchBoxResultSuggestionChosenEventArgs class. + + + Gets any modifier keys that are pressed when the user presses enter to pick a search result. + Any modifier keys that are pressed when the user presses enter to pick a search result. + + + The app-defined tag for the suggested result that the user selected. + The app-defined tag for the selected search result. + + + Provides event data for the SearchBox.SuggestionsRequested event. + + + Gets the Internet Engineering Task Force (IETF) language tag (BCP 47 standard) that identifies the language currently associated with the user's text input device. + The IETF BCP 47 standard language tag. + + + Gets information about query text that the user enters through an Input Method Editor (IME). + Linguistic information about query text that the user enters through an Input Method Editor (IME). + + + Gets the query text of the current search. + The query text of the current search. + + + Gets the object that stores the suggestions and information about this request. + The object that stores the suggestions and information about this request. + + + Represents a scrollable control that incorporates two views that have a semantic relationship. For example, the ZoomedOutView might be an index of titles, and the ZoomedInView might include details and summaries for each of the title entries. Views can be changed using zoom or other interactions. + + + Initializes a new instance of the SemanticZoom class. + + + Gets or sets a value that declares whether the SemanticZoom can change display views. + true if views can be changed; otherwise, false. The default is true. + + + Gets or sets a value that determines whether the ZoomedInView is the active view. + true if the ZoomedInView is the active view. false if the ZoomedOutView is the active view. + + + Gets or sets a value that indicates whether the ZoomedInView shows a button that activates the ZoomedOutView. + True if the ZoomedInView shows a button that activates the ZoomedOutView; otherwise, false. The default is true. + + + Gets or sets the semantically more complete zoomed-in view of the SemanticZoom. + An object that implements ISemanticZoomInfo. Typically this is a practical ListViewBase implementation such as GridView. + + + Gets or sets the zoomed-out view of the SemanticZoom. + An object that implements ISemanticZoomInfo. Typically this is a practical ListViewBase implementation such as GridView. + + + Changes from the current active view to the other possible view. For example, if IsZoomedInViewActive is true, calling this method changes to zoomed-out view. + + + Occurs when a view change is complete and the view is displayed. + + + Occurs when a view change is requested. + + + Identifies the CanChangeViews dependency property. + The identifier for the CanChangeViews dependency property. + + + Identifies the IsZoomedInViewActive dependency property. + The identifier for the IsZoomedInViewActive dependency property. + + + Identifies the IsZoomOutButtonEnabled dependency property. + The identifier of the IsZoomOutButtonEnabled dependency property. + + + Identifies the ZoomedInView dependency property. + The identifier for the ZoomedInView dependency property. + + + Identifies the ZoomedOutView dependency property. + The identifier for the ZoomedOutView dependency property. + + + Communicates information for items and view state in a SemanticZoom, such that hosts for scrolling and virtualization (such as ListViewBase) can get correct item and bounds information. + + + Initializes a new instance of the SemanticZoomLocation class. + + + Gets or sets the sizing bounds of the item as it exists in the current view of a SemanticZoom. + The sizing bounds of the item. + + + Gets or sets the display item as it exists in the current view of a SemanticZoom. + The specific item in the SemanticZoom. + + + Provides event data for the ViewChangeStarted and ViewChangeCompleted events. + + + Initializes a new instance of the SemanticZoomViewChangedEventArgs class. + + + Provides information about the item and its bounds, once the view change is complete. + Information about the item and its bounds. + + + Gets or sets a value that indicates whether the starting view is the ZoomedInView. + true if the starting view is the ZoomedInView; otherwise, false. + + + Provides information about the item and its bounds, for the item as represented in the previous view. + Information about the item and its bounds. + + + Represents a control that provides in-context access to settings that affect the current app. + + + Initializes a new instance of the SettingsFlyout class. + + + Gets or sets the Brush that fills the background of the settings flyout header. + The brush that provides the background of the settings flyout header. + + + Gets or sets the Brush that fills the foreground of the settings flyout header. + The brush that provides the foreground of the settings flyout header. + + + Gets or sets the icon image displayed in the settings flyout header. + The icon image displayed in the settings flyout header. The default is null. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a SettingsFlyout control. + An object that provides calculated values for templates. + + + Gets or sets the title of the settings flyout. + The title of the settings flyout. The default is an empty string. + + + Closes the settings flyout. + + + Opens the settings flyout, and returns the user to the Settings pane after the flyout is dismissed. + + + Opens the settings flyout, and returns the user to the app after the flyout is dismissed. + + + Occurs when the user clicks the back button on the settings flyout. + + + Identifies the HeaderBackground dependency property. + The identifier for the HeaderBackground dependency property. + + + Identifies the HeaderForeground dependency property. + The identifier for the HeaderForeground dependency property. + + + Identifies the IconSource dependency property. + The identifier for the IconSource dependency property. + + + Identifies the Title dependency property. + The identifier for the Title dependency property. + + + Represents a control that lets the user select from a range of values by moving a Thumb control along a track. + + + Initializes a new instance of the Slider class. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the value of the Slider while the user is interacting with it, before the value is snapped to either the tick or step value. The value the Slider snaps to is specified by the SnapsTo property. + A temporary value. + + + Gets or sets a value that indicates the direction of increasing value. + true if the direction of increasing value is to the left for a horizontal slider or down for a vertical slider; otherwise, false. The default is false. + + + Gets or sets a value that determines whether the slider value is shown in a tool tip for the Thumb component of the Slider. + True if a tool tip is shown for the Thumb component; otherwise, false. The default is true. + + + Gets or sets the orientation of a Slider. + One of the Orientation values. The default is Horizontal. + + + Gets or sets a value that indicates how the Slider conforms the thumb position to its steps or tick marks. + An enumeration value that specifies whether the Slider snaps to steps or tick marks. The default is StepValues. + + + Gets or sets the value part of a value range that steps should be created for. + The value part of a value range that steps should be created for. + + + Gets or sets the converter logic that converts the range value of the Slider into tool tip content. + A converter implementation. + + + Gets or sets the increment of the value range that ticks should be created for. + The increment to create tick marks for. The default is 0.0. + + + Gets or sets a value that indicates where to draw tick marks in relation to the track. + An enumeration value that specifies where to draw tick marks in relation to the track. The default is Inline. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IntermediateValue dependency property. + The identifier for the IntermediateValue dependency property. + + + Identifies the IsDirectionReversed dependency property. + The identifier for the IsDirectionReversed dependency property. + + + Identifies the IsThumbToolTipEnabled dependency property. + The identifier for the IsThumbToolTipEnabled dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the SnapsTo dependency property. + The identifier for the SnapsTo dependency property. + + + Identifies the StepFrequency dependency property. + The identifier for the StepFrequency dependency property. + + + Identifies the ThumbToolTipValueConverter dependency property. + The identifier for the ThumbToolTipValueConverter dependency property. + + + Identifies the TickFrequency dependency property. + The identifier for the TickFrequency dependency property. + + + Identifies the TickPlacement dependency property. + The identifier for the TickPlacement dependency property. + + + Arranges child elements into a single line that can be oriented horizontally or vertically. + + + Initializes a new instance of the StackPanel class. + + + Gets a value that indicates whether the horizontal snap points for the StackPanel are equidistant from each other. + true if the horizontal snap points for the StackPanel are equidistant from each other; otherwise, false. + + + Gets or sets a value that indicates whether the generated snap points used for panning in the StackPanel are equidistant from each other. + true if the snap points in the StackPanel are equidistant from each other; otherwise, false. + + + Gets a value that indicates whether the vertical snap points for the StackPanel are equidistant from each other. + true if the vertical snap points for the StackPanel are equidistant from each other; otherwise, false. + + + Gets or sets the dimension by which child elements are stacked. + One of the enumeration values that specifies the orientation of child elements. The default is Vertical. + + + Returns the set of distances between irregular snap points for a specified orientation and alignment. + The read only collection of snap point distances. Returns an empty collection when no snap points are present. + The orientation (dimension) for the desired snap point set. + The alignment to use when applying the snap points. + + + Gets the distance between regular snap points for a specified orientation and alignment. + The distance between the equidistant snap points. Returns 0 when no snap points are present. + The orientation/dimension for the desired snap point set. + The alignment to use when applying the snap points. + Out parameter. The offset of the first snap point. + + + Occurs when the measurements for horizontal snap points change. + + + Occurs when the measurements for vertical snap points change. + + + Identifies the AreScrollSnapPointsRegular dependency property. + The identifier for the AreScrollSnapPointsRegular dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Enables custom item style selection logic as a function of the content data and its specific item container. + + + Initializes a new instance of the StyleSelector class. + + + Returns a specific Style based on custom logic. + An application-specific style to apply; may also return null. + The content. + The element to which the style is applied. + + + When implemented by a derived class, returns a specific Style based on custom logic. + An application-specific style to apply; may also return null. + The content. + The element to which the style is applied. + + + Implements a XAML layout surface target for Microsoft DirectX interoperation scenarios. + + + Creates a core input object that handles the input types as specified by the deviceTypes parameter. + An object that represents the input subsystem for interoperation purposes and can be used for input event connection points. + A combined value of the enumeration. + + + Initializes a new instance of the SwapChainBackgroundPanel class. + + + Provides a hosting surface, where Microsoft DirectX swap chains provide content that can be rendered into a XAML UI. + + + Initializes a new instance of the SwapChainPanel class. + + + Occurs when the composition scale factor of the SwapChainPanel has changed. + + + Gets the x-axis scale factor of the SwapChainPanel. + The x-axis scale factor of the SwapChainPanel. A value of 1.0 means no scaling is applied. + + + Identifies the CompositionScaleX dependency property. + The identifier for the CompositionScaleX dependency property. + + + Gets the y-axis scale factor of the SwapChainPanel. + The y-axis scale factor of the SwapChainPanel. A value of 1.0 means no scaling is applied. + + + Identifies the CompositionScaleY dependency property. + The identifier for the CompositionScaleY dependency property. + + + Creates a core input object that handles the input types as specified by the deviceTypes parameter. + An object that represents the input subsystem for interoperation purposes and can be used for input event connection points. + A combined value of the enumeration. + + + Represents an icon that uses a glyph from the Segoe UI Symbol font as its content. + + + Initializes a new instance of the SymbolIcon class. + + + Initializes a new instance of the SymbolIcon class using the specified symbol. + A named constant of the enumeration that specifies the Segoe UI Symbol glyph to use. The default is null. + + + Gets or sets the Segoe UI Symbol glyph used as the icon content. + A named constant of the numeration that specifies the Segoe UI Symbol glyph to use. + + + Identifies the Symbol dependency property. + The identifier for the Symbol dependency property. + + + Provides a lightweight control for displaying small amounts of text. + + + Initializes a new instance of the TextBlock class. + + + Returns a value by which each line of text is offset from a baseline. + The amount by which each line of text is offset from the baseline, in device independent pixels. System.Double.NaN indicates that an optimal baseline offset is automatically calculated from the current font characteristics. The default is System.Double.NaN. + + + Gets or sets the uniform spacing between characters, in units of 1/1000 of an em. + The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing. + + + Gets a TextPointer object for the end of text content in the TextBlock. + A TextPointer object for the end of text content in the TextBlock. + + + Gets a TextPointer object for the start of text content in the TextBlock. + A TextPointer object for the start of text content in the TextBlock. + + + Gets or sets the preferred top-level font family for the text content in this element. + A FontFamily object that specifies the preferred font family, or a primary preferred font family with one or more fallback font families. For information about defaults, see the FontFamily class topic. + + + Gets or sets the font size for the text content in this element. + A non-negative value that specifies the font size, measured in pixels. The default is 11. + + + Gets or sets the font stretch for the text content in this element. + The requested font stretch, as a FontStretch constant. The default is Normal. + + + Gets or sets the font style for the content in this element. + The requested font style, which is a FontStyle enumeration value. The default is Normal. + + + Gets or sets the top-level font weight for the TextBlock. + The requested font weight, which is a FontWeight that is obtained from one of the FontWeights property values. The default is Normal. + + + Gets or sets the Brush to apply to the text contents of the TextBlock. + The brush used to apply to the text contents. The default is a SolidColorBrush with a Color value of Black. + + + Gets the collection of inline text elements within a TextBlock. + A collection that holds all inline text elements from the TextBlock. The default is an empty collection. + + + Gets or sets a value that determines whether color glyphs, such as emoji, are shown in color. + true if color glyphs show in color; otherwise, false. The default is true. + + + Gets or sets a value that indicates whether text selection is enabled in the TextBlock, either through user action or calling selection-related API. + true if text selection is enabled; otherwise, false. + + + Gets or sets the height of each line of content. + The height of each line in pixels. A value of 0 indicates that the line height is determined automatically from the current font characteristics. The default is 0. + + + Gets or sets a value that indicates how a line box is determined for each line of text in the TextBlock. + A value that indicates how a line box is determined for each line of text in the TextBlock. The default is MaxHeight. + + + Gets or sets the maximum lines of text shown in the TextBlock. + The maximum lines of text shown in the TextBlock. The default is 0, which is a special value that represents Auto behavior. The value cannot be negative. + + + Get or sets a value that indicates how the font is modified to align with fonts of different sizes. + A value of the enumeration that indicates how the font is modified to align at different sizes. The default is None. + + + Gets or sets a value that indicates the thickness of padding space between the boundaries of the content area and the content displayed by a TextBlock. + A Thickness structure that specifies the amount of padding to apply. + + + Gets a text range of selected text. + A text range of the selected text. + + + Gets the end position of the text selected in the TextBlock. + An object that represents the selection end, or null if no selection exists. + + + Gets or sets the brush used to highlight the selected text. + The brush used to highlight the selected text. + + + Gets the starting position of the text selected in the TextBlock. + An object that represents the selection start, or null if no selection exists. + + + Gets or sets the text contents of a TextBlock. + A string that specifies the text contents of this TextBlock. The default is an empty string. + + + Gets or sets a value that indicates the horizontal alignment of text content. + The text alignment. The default is Left. + + + Gets or sets a value that indicates how the line box height is determined for each line of text in the TextBlock. + A value that indicates how the line box height is determined for each line of text in the TextBlock. The default is Full. + + + Gets or sets a value that indicates how the reading order is determined for the TextBlock. + A value that indicates how the reading order is determined for the TextBlock. The default is Default. + + + Gets or sets the text trimming behavior to employ when content overflows the content area. + One of the TextTrimming values that specifies the text trimming behavior to employ. The default is None. + + + Gets or sets how the TextBlock wraps text. + A value that indicates how the TextBlock wraps text. The default is NoWrap. + + + Focuses the TextBlock, as if it were a conventionally focusable control. + true if focus was set to the TextBlock, or focus was already there. false if the TextBlock is not focusable. + Specifies the desired target for focus state, as a value of the enumeration. + + + Selects a range of text in the TextBlock. + An object that represents the start of the range to select. + An object that represents the end of the range to select. + + + Selects the entire contents in the TextBlock. + + + Occurs when the system processes an interaction that displays a context menu. + + + Occurs when the text selection has changed. + + + Identifies the CharacterSpacing dependency property. + The identifier for the CharacterSpacing dependency property. + + + Identifies the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Identifies the FontSize dependency property. + The identifier for the FontSize dependency property. + + + Identifies the FontStretch dependency property. + The identifier for the FontStretch dependency property. + + + Identifies the FontStyle dependency property. + The identifier for the FontStyle dependency property. + + + Identifies the FontWeight dependency property. + The identifier for the FontWeight dependency property. + + + Identifies the Foreground dependency property. + The identifier for the Foreground dependency property. + + + Identifies the IsColorFontEnabled dependency property. + The identifier for the IsColorFontEnabled dependency property. + + + Identifies the IsTextSelectionEnabled dependency property. + The identifier for the IsTextSelectionEnabled dependency property. + + + Identifies the LineHeight dependency property. + The identifier for the LineHeight dependency property. + + + Identifies the LineStackingStrategy dependency property. + The identifier for the LineStackingStrategy dependency property. + + + Identifies the MaxLines dependency property. + The identifier for the MaxLines dependency property. + + + Identifies the OpticalMarginAlignment dependency property. + The identifier for the OpticalMarginAlignment dependency property. + + + Identifies the Padding dependency property. + The identifier for the Padding dependency property. + + + Identifies the SelectedText dependency property. + The identifier for the SelectedText dependency property. + + + Identifies the SelectionHighlightColor dependency property. + The identifier for the SelectionHighlightColor dependency property. + + + Identifies the TextAlignment dependency property. + The identifier for the TextAlignment dependency property. + + + Identifies the TextLineBounds dependency property. + The identifier for the TextLineBounds dependency property. + + + Identifies the Text dependency property. + The identifier of the Text dependency property. + + + Identifies the TextReadingOrder dependency property. + The identifier for the TextReadingOrder dependency property. + + + Identifies the TextTrimming dependency property. + The identifier of the TextTrimming dependency property. + + + Identifies the TextWrapping dependency property. + The identifier of the TextWrapping dependency property. + + + Represents a control that can be used to display single-format, multi-line text. + + + Initializes a new instance of the TextBox class. + + + Gets or sets the value that determines whether the text box allows and displays the newline or return characters. + true if the text box allows newline characters; otherwise, false. The default is false. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets the context for input used by this TextBox . + The input scope, which provides a hint at the type of text input expected by the control. + + + Gets or sets a value that determines whether color glyphs, such as emoji, are shown in color. + true if color glyphs show in color; otherwise, false. The default is true. + + + Gets or sets the value that determines if the user can change the text in the text box. + true if the text box is read-only; otherwise, false. The default is false. + + + Gets or sets a value that specifies whether the TextBox input interacts with a spell check engine. + True if the TextBox input interacts with a spell check engine; otherwise, false. The default is false. + + + Gets or sets a value that determines whether text prediction features ("autocomplete") should be enabled for this TextBox. + true to enable text prediction features, otherwise, false. The default is true. + + + Gets or sets the value that specifies the maximum number of characters allowed for user input. + The maximum number of characters allowed for user input. The default is 0 (no limit). + + + Gets or sets the text that is displayed in the control until the value is changed by a user action or some other operation. + The text that is displayed in the control when no value is entered. The default is an empty string (""). + + + Gets or sets a value that indicates whether the on-screen keyboard is shown when the control receives focus programmatically. + true if the on-screen keyboard is shown when the control receives focus programmatically; otherwise, false. The default is false. + + + Gets or sets the content of the current selection in the text box. + The currently selected text in the text box. If no text is selected, the value is String.Empty. + + + Gets or sets the brush used to highlight the selected text. + The brush used to highlight the selected text. + + + Gets or sets the number of characters in the current selection in the text box. + The number of characters in the current selection in the text box, or 0 if there is no selection. + + + Gets or sets the starting position of the text selected in the text box. + The starting position of the current selection. + + + Gets or sets the text contents of the text box. + A string containing the text contents of the text box. The default is an empty string (""). + + + Gets or sets how the text should be aligned in the text box. + One of the TextAlignment enumeration values. The default is Left. + + + Gets or sets how line breaking occurs if a line of text extends beyond the available width of the text box. + One of the TextWrapping values. The default is NoWrap. + + + Returns a rectangular region for the leading or trailing edge of a character at a specific character index. + A rectangle for the edge of the character at the specified index. + A zero-based index of the character for which to retrieve the rectangle. + true to get the trailing edge; false to get the leading edge of the character. + + + Selects a range of text in the text box. + The zero-based index of the first character in the selection. + The length of the selection, in characters. + + + Selects the entire contents of the text box. + + + Occurs when the system processes an interaction that displays a context menu. + + + Occurs when text is pasted into the control. + + + Occurs when the text selection has changed. + + + Occurs when content changes in the text box. + + + Identifies the AcceptsReturn dependency property. + The identifier for the AcceptsReturn dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the InputScope dependency property. + The identifier for the InputScope dependency property. + + + Identifies the IsColorFontEnabled dependency property. + The identifier for the IsColorFontEnabled dependency property. + + + Identifies the IsReadOnly dependency property. + The identifier for the IsReadOnly dependency property. + + + Identifies the IsSpellCheckEnabled dependency property. + The identifier for the IsSpellCheckEnabled dependency property. + + + Identifies the IsTextPredictionEnabled dependency property. + The identifier for the IsTextPredictionEnabled dependency property. + + + Identifies the MaxLength dependency property. + The identifier for the MaxLength dependency property. + + + Identifies the PlaceholderText dependency property. + The identifier for the PlaceholderText dependency property. + + + Identifies the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + The identifier for the PreventKeyboardDisplayOnProgrammaticFocus dependency property. + + + Identifies the SelectionHighlightColor dependency property. + The identifier for the SelectionHighlightColor dependency property. + + + Identifies the TextAlignment dependency property. + The identifier for the TextAlignment dependency property. + + + Identifies the Text dependency property. + The identifier for the Text dependency property. + + + Identifies the TextWrapping dependency property. + The identifier for the TextWrapping dependency property. + + + Provides data for the TextChanged event. + + + Provides data for the text control Paste event. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Represents a control that allows a user to pick a time value. + + + Initializes a new instance of the TimePicker class. + + + Gets or sets the clock system to use. + The name of the clock system to use. + + + Gets or sets the content for the control's header. + The content of the control's header. The default is null. + + + Gets or sets the DataTemplate used to display the content of the control's header. + The template that specifies the visualization of the header object. The default is null. + + + Gets or sets a value that indicates the time increments shown in the minute picker. For example, 15 specifies that the TimePicker minute control displays only the choices 00, 15, 30, 45. + An integer from 0-59 that indicates the increments shown in the minute picker. The default is 1. + + + Gets or sets the time currently set in the time picker. + The time currently set in the time picker. + + + Occurs when the time value is changed. + + + Gets the identifier for the ClockIdentifier dependency property. + The identifier for the ClockIdentifier dependency property. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Gets the identifier for the MinuteIncrement dependency property. + The identifier for the MinuteIncrement dependency property. + + + Gets the identifier for the Time dependency property. + The identifier for the Time dependency property. + + + Provides event data for the TimePicker.TimeChanged event. + + + Gets the new time selected in the picker. + The new time selected in the picker. + + + Gets the time previously selected in the picker. + The time previously selected in the picker. + + + Represents an item in a MenuFlyout that a user can change between two states, checked or unchecked. + + + Initializes a new instance of the ToggleMenuFlyoutItem class. + + + Gets or sets whether the ToggleMenuFlyoutItem is checked. + true if the ToggleMenuFlyoutItem is checked; false if the ToggleMenuFlyoutItem is unchecked. The default is false. + + + Identifies the IsChecked dependency property. + The identifier for the IsChecked dependency property. + + + Represents a switch that can be toggled between two states. + + + Initializes a new instance of the ToggleSwitch class. + + + Gets or sets the header content. + The header content for the ToggleSwitch. + + + Gets or sets the DataTemplate used to display the control's header. + The DataTemplate used to display the control's header. + + + Gets or sets a value that declares whether the state of the ToggleSwitch is On. + true if the state is On; false if the state is Off. + + + Provides the object content that should be displayed using the OffContentTemplate when this ToggleSwitch has state of Off. + The object content. In some cases this is a string, in other cases it is a single element that provides a root for further composition content. Probably the most common set usage is to place a binding here. + + + Gets or sets the DataTemplate used to display the control's content while in Off state. + The DataTemplate that displays the control's content while in Off state. + + + Provides the object content that should be displayed using the OnContentTemplate when this ToggleSwitch has state of On. + The object content. In some cases this is a string, in other cases it is a single element that provides a root for further composition content. Probably the most common set usage is to place a binding here. + + + Gets or sets the DataTemplate used to display the control's content while in On state. + The DataTemplate that displays the control's content while in On state. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a ToggleSwitch control. + An object that provides calculated values for templates. + + + Invoked when the content for Header changes. + The string or object content of the old content. + The string or object content of the new content. + + + Invoked when the content for OffContent changes. + The string or object content of the old content. + The string or object content of the new content that is about to display. + + + Invoked when the content for OnContent changes. + The string or object content of the old content. + The string or object content of the new content that is about to display. + + + Invoked before the Toggled event is raised. + + + Occurs when On/Off state changes for this ToggleSwitch. + + + Identifies the Header dependency property. + The identifier for the Header dependency property. + + + Identifies the HeaderTemplate dependency property. + The identifier for the HeaderTemplate dependency property. + + + Identifies the IsOn dependency property. + The identifier for the IsOn dependency property. + + + Identifies the OffContent dependency property. + The identifier for the OffContent dependency property. + + + Identifies the OffContentTemplate dependency property. + The identifier for the OffContentTemplate dependency property. + + + Identifies the OnContent dependency property. + The identifier for the OnContent dependency property. + + + Identifies the OnContentTemplate dependency property. + The identifier for the OnContentTemplate dependency property. + + + Represents a control that creates a pop-up window that displays information for an element in the UI. + + + Initializes a new instance of the ToolTip class. + + + Gets or sets the horizontal distance between the target origin and the pop-up alignment point. + The horizontal distance between the target origin and the pop-up alignment point. The default is 0. + + + Gets or sets a value that indicates whether the ToolTip is visible. + True if the ToolTip is visible; otherwise, false. The default is false. + + + Gets or sets how a ToolTip is positioned in relation to the placement target element. + One of the PlacementMode values. + + + Gets or sets the visual element or control that the tool tip should be positioned in relation to when opened by the ToolTipService. + The visual element or control that the tool tip is positioned in relation to when opened by the ToolTipService. The default is null. + + + Gets an object that provides calculated values that can be referenced as TemplateBinding sources when defining templates for a ToolTip. + An object that provides calculated values for templates. + + + Gets or sets the vertical distance between the target origin and the pop-up alignment point. + The vertical distance between the target origin and the pop-up alignment point. The default is 0. + + + Occurs when a ToolTip is closed and is no longer visible. + + + Occurs when a ToolTip becomes visible. + + + Identifies the HorizontalOffset dependency property. + The identifier for the HorizontalOffset dependency property. + + + Identifies the IsOpen dependency property. + The identifier for the IsOpen dependency property. + + + Identifies the Placement dependency property. + The identifier for the Placement dependency property. + + + Identifies the PlacementTarget dependency property. + The identifier for the PlacementTarget dependency property. + + + Identifies the VerticalOffset dependency property. + The identifier for the VerticalOffset dependency property. + + + Represents a service that provides static methods to display a ToolTip. + + + Gets or sets how a ToolTip is positioned in relation to the placement target. + + + Gets or sets the object relative to which a tooltip is positioned. + + + Gets or sets the object or string content of an element's ToolTip. + + + Gets the ToolTipService.Placement XAML attached property value for the specified target element. + The relative position of the specified tooltip. + The target element for the attached property value. + + + Gets the ToolTipService.PlacementTarget XAML attached property value for the specified target element. + The visual element that the tooltip is positioned relative to. + The target element for the attached property value. + + + Gets the value of the ToolTipService.ToolTip XAML attached property for an object. + The object's tooltip content. + The object from which the property value is read. + + + Sets the ToolTipService.Placement XAML attached property value for the specified target element. + The target element for the attached property value. + One of the PlacementMode values, which specifies where the tooltip should appear relative to the control that is the placement target. + + + Sets the ToolTipService.PlacementTarget XAML attached property value for the specified target element. + The target element for the attached property value. + The visual element that should be the placement target for the tooltip. + + + Sets the value of the ToolTipService.ToolTip XAML attached property. + The object to set tooltip content on. + The value to set for tooltip content. + + + Identifies the ToolTipService.Placement XAML attached property. + The identifier for the ToolTipService.Placement XAML attached property. + + + Identifies the ToolTipService.PlacementTarget XAML attached property. + The identifier for the ToolTipService.PlacementTarget XAML attached property. + + + Identifies the ToolTipService.ToolTip XAML attached property. + The identifier for the ToolTipService.ToolTip XAML attached property. + + + Represents an ordered collection of UIElement objects. + + + Adds a new item to the end of the collection. The item you add must be a UIElement derived element. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of UIElement items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Returns the iterator object that can iterate over the items in the UIElementCollection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The UIElement value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. This object implements IVectorView<T> with a UIElement constraint. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the UIElement value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Provides the base class for defining a new control that encapsulates related existing controls and provides its own logic. + + + Initializes a new instance of the UserControl class. + + + Gets or sets the content that is contained within a user control. + The content of the user control. + + + Identifies the Content dependency property. + The identifier for the Content dependency property. + + + Provides a grid-style layout panel where each tile/cell can be variable size based on content. + + + Initializes a new instance of the VariableSizedWrapGrid class. + + + Gets or sets a value that indicates the total number of columns that the element content spans within a parent VariableSizedWrapGrid. + + + Gets or sets a value that indicates the total number of rows that the element content spans within a parent VariableSizedWrapGrid. + + + Gets or sets the alignment rules by which child elements are arranged for the horizontal dimension. + A value of the enumeration. The default is Left. + + + Gets or sets the height of the layout area for each item that is contained in a VariableSizedWrapGrid. + The height of the layout area for each item that is contained in a VariableSizedWrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets or sets the width of the layout area for each item that is contained in a VariableSizedWrapGrid. + The width of the layout area for each item that is contained in a VariableSizedWrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets or sets a value that influences the wrap point, also accounting for Orientation. + The maximum rows or columns that this VariableSizedWrapGrid should present before it introduces wrapping to the layout. The default is -1, which is a special value that indicates no maximum. + + + Gets or sets the direction in which child elements are arranged. + A value of the enumeration. The default is Vertical. + + + Gets or sets the alignment rules by which child elements are arranged for the vertical dimension. + A value of the enumeration. The default is Top. + + + Gets the value of the VariableSizedWrapGrid.ColumnSpan XAML attached property from a target element. + The obtained value. + The target element. + + + Gets the value of the VariableSizedWrapGrid.RowSpan XAML attached property from a target element. + The obtained value. + The target element. + + + Sets the value of the VariableSizedWrapGrid.ColumnSpan XAML attached property on a target element. + The target element. + The value to set. + + + Sets the value of the VariableSizedWrapGrid.RowSpan XAML attached property on a target element. + The target element. + The value to set. + + + Identifies the VariableSizedWrapGrid.ColumnSpan XAML attached property. + The identifier for the VariableSizedWrapGrid.ColumnSpan XAML attached property. + + + Identifies the HorizontalChildrenAlignment dependency property. + The identifier for the HorizontalChildrenAlignment dependency property. + + + Identifies the ItemHeight dependency property. + The identifier for the ItemHeight dependency property. + + + Identifies the ItemWidth dependency property. + The identifier for the ItemWidth dependency property. + + + Identifies the MaximumRowsOrColumns dependency property. + The identifier for the MaximumRowsOrColumns dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the VariableSizedWrapGrid.RowSpan XAML attached property. + The identifier for the VariableSizedWrapGrid.RowSpan XAML attached property. + + + Identifies the VerticalChildrenAlignment dependency property. + The identifier for the VerticalChildrenAlignment dependency property. + + + Defines a content decorator that can stretch and scale a single child to fill the available space. + + + Initializes a new instance of the Viewbox class. + + + Gets or sets the single child element of a Viewbox element. + The single child element of a Viewbox element. + + + Gets or sets the Stretch mode, which determines how content fits into the available space. + A Stretch mode, which determines how content fits in the available space. The default is Uniform. + + + Gets or sets the StretchDirection, which determines how scaling is applied to the contents of a Viewbox. + A StretchDirection, which determines how scaling is applied to the contents of a Viewbox. The default is Both. + + + Identifies the StretchDirection dependency property. + The identifier for the StretchDirection dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Provides a framework for Panel elements that virtualize their visual children. + + + Gets a value that identifies the ItemContainerGenerator for this VirtualizingPanel. + The ItemContainerGenerator for this VirtualizingPanel. + + + Adds the specified UIElement to the Children collection of a VirtualizingPanel element. + The UIElement child to add to the collection. + + + Generates the item at the specified index location and makes it visible. + The index position of the item that is generated and made visible. + + + Adds the specified UIElement to the collection of a VirtualizingPanel element at the specified index position. + The index position within the collection at which the child element is inserted. + The UIElement child to add to the collection. + + + Called when the collection of child elements is cleared by the base Panel class. + + + Called when the Items collection that is associated with the ItemsControl for this Panel changes. + The Object that raised the event. + Provides data for the ItemsChanged event. + + + Removes child elements from the Children collection. + The beginning index position within the collection at which the first child element is removed. + The total number of child elements to remove from the collection. + + + Arranges and virtualizes content on a single line that is oriented either horizontally or vertically. Can only be used to display items in an ItemsControl. + + + Initializes a new instance of the VirtualizingStackPanel class. + + + Gets or sets a value that sets the virtualization mode of items being virtualized by a parent VirtualizingStackPanel and items set. + + + Gets or sets a value that indicates whether the generated snap points used for panning in the VirtualizingStackPanel are equidistant from each other. + true if the snap points in the VirtualizingStackPanel are equidistant from each other; otherwise, false. + + + Gets or sets a value that describes the horizontal or vertical orientation of stacked content. + The Orientation of child content, as a value of the enumeration. The default is Vertical. + + + Gets a value that determines whether an item is currently being virtualized as part of an items set where the ItemsPanel is templated with a VirtualizingStackPanel. + true if the item specified by o is currently virtualizing its content; otherwise, false. + The object item where you want to determine the current virtualization state. + + + Gets the VirtualizingStackPanel.VirtualizationMode XAML attached property value for the specified target element. + One of the enumeration values that specifies whether the object uses container recycling. + The object from which the VirtualizationMode is read. + + + Called when an item that is hosted by the VirtualizingStackPanel is re-virtualized. + Data about the event. + + + Sets the VirtualizingStackPanel.VirtualizationMode XAML attached property on the specified target element. + The target element. + One of the enumeration values that specifies whether element uses container recycling. + + + Occurs when an item that is hosted by the VirtualizingStackPanel is re-virtualized. + + + Identifies the AreScrollSnapPointsRegular dependency property. + The identifier for the AreScrollSnapPointsRegular dependency property. + + + Identifies the VirtualizingStackPanel.IsVirtualizing attached property. + The identifier for the VirtualizingStackPanel.IsVirtualizing attached property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the VirtualizingStackPanel.VirtualizationMode XAML attached property. + The identifier for the VirtualizingStackPanel.VirtualizationMode XAML attached property. + + + Provides a control that hosts HTML content in an app. + + + Initializes a new instance of the WebView class. + + + Gets or sets a safe list of URIs that are permitted to fire ScriptNotify events to this WebView. + AllowedScriptNotifyUris is not supported in apps compiled for Windows 8.1. Instead, update the ApplicationContentUriRules section of the app manifest. For more info, see the Remarks section. + The safe list of URIs that are permitted to fire ScriptNotify events. + + + Gets a value that you can use to set the AllowedScriptNotifyUris property to indicate that any page can fire ScriptNotify events to this WebView. + AnyScriptNotifyUri is not supported in apps compiled for Windows 8.1. Instead, update the ApplicationContentUriRules section of the app manifest. For more info, see the Remarks section. + The safe list of URIs that are permitted to fire ScriptNotify events. + + + Gets a value that indicates whether there is at least one page in the backward navigation history. + true if the WebView can navigate backward; otherwise, false. + + + Gets a value that indicates whether there is at least one page in the forward navigation history. + true if the WebView can navigate forward; otherwise, false. + + + Gets a clipboard DataPackage as passed to the WebView. + DataTransferPackage may be altered or unavailable for releases after Windows 8.1. Instead, use CaptureSelectedContentToDataPackageAsync. + A clipboard data package. + + + Gets or sets the color to use as the WebView background when the HTML content does not specify a color. + The background color. + + + Gets the title of the page currently displayed in the WebView. + The page title. + + + Gets or sets the Uniform Resource Identifier (URI) source of the HTML content to display in the WebView control. + The Uniform Resource Identifier (URI) source of the HTML content to display in the WebView control. + + + Creates a URI that you can pass to NavigateToLocalStreamUri. + The URI created by combining and normalizing the contentIdentifier and relativePath. + A unique identifier for the content the URI is referencing. This defines the root of the URI. + The path to the resource, relative to the root. + + + Creates an image of the current WebView contents and writes it to the specified stream. + An asynchronous action to await the capture operation. + The stream to write the image to. + + + Asynchronously gets a DataPackage that contains the selected content within the WebView. + When this method completes, it returns the selected content as a DataPackage. + + + Sets the input focus to the WebView. + true if focus was set; otherwise, false. + A value that indicates how the focus was set. + + + Navigates the WebView to the previous page in the navigation history. + + + Navigates the WebView to the next page in the navigation history. + + + Executes the specified script function from the currently loaded HTML, with specific arguments. + InvokeScript may be altered or unavailable for releases after Windows 8.1. Instead, use InvokeScriptAsync. + The result of the script invocation. + The name of the script function to invoke. + A string array that packages arguments to the script function. + + + As an asynchronous action, executes the specified script function from the currently loaded HTML, with specific arguments. + When this method returns, the string result of the script invocation. + The name of the script function to invoke. + A string array that packages arguments to the script function. + + + Loads the HTML content at the specified Uniform Resource Identifier (URI). + The Uniform Resource Identifier (URI) to load. + + + Loads local web content at the specified URI using an IUriToStreamResolver. + A URI identifying the local HTML content to load. + A resolver that converts the URI into a stream to load. + + + Loads the specified HTML content as a new document. + The HTML content to display in the WebView control. + + + Navigates the WebView to a URI with a POST request and HTTP headers. + The details of the HTTP request. + + + Reloads the current content in the WebView. + + + Halts the current WebView navigation or download. + + + Occurs when the WebView has started loading new content. + + + Occurs when the WebView has finished parsing the current HTML content. + + + Occurs when a frame in the WebView has started loading new content. + + + Occurs when a frame in the WebView has finished parsing its current HTML content. + + + Occurs when a frame in the WebView has finished loading its content. + + + Occurs before a frame in the WebView navigates to new content. + + + Occurs when top-level navigation completes and the content loads into the WebView control or when an error occurs during loading. + LoadCompleted may be altered or unavailable for releases after Windows 8.1. Instead, use NavigationCompleted. + + + Occurs periodically while the WebView executes JavaScript, letting you halt the script. + + + Occurs when the WebView has finished loading the current content or if navigation has failed. + + + Occurs when the WebView cannot complete the navigation attempt. + NavigationFailed may be altered or unavailable for releases after Windows 8.1. Instead, use NavigationCompleted. + + + Occurs before the WebView navigates to new content. + + + Occurs when the content contained in the WebView control passes a string to the application by using JavaScript. + + + Occurs when the WebView shows a warning page for content that was reported as unsafe by SmartScreen Filter. + + + Occurs when the WebView attempts to download an unsupported file. + + + Identifies the AllowedScriptNotifyUris dependency property. + AllowedScriptNotifyUrisProperty is not supported in apps compiled for Windows 8.1. Instead, update the ApplicationContentUriRules section of the app manifest. For more info, see the Remarks section. + The identifier for the AllowedScriptNotifyUris dependency property. + + + Identifies the CanGoBack dependency property. + The identifier for the CanGoBack dependency property. + + + Identifies the CanGoForward dependency property. + The identifier for the CanGoForward dependency property. + + + Identifies the DataTransferPackage dependency property. + DataTransferPackageProperty may be altered or unavailable for releases after Windows 8.1. Instead, use CaptureSelectedContentToDataPackageAsync. + The identifier for the DataTransferPackage dependency property. + + + Identifies the DefaultBackgroundColor dependency property. + The identifier for the DefaultBackgroundColor dependency property. + + + Identifies the DocumentTitle dependency property. + The identifier of the DocumentTitle dependency property. + + + Identifies the Source dependency property. + The identifier for the Source dependency property. + + + Provides a brush that renders the content that is currently hosted in a WebView control. + + + Initializes a new instance of the WebViewBrush class. + + + Gets or sets the name of the source WebView control that provides the HTML content. + The Name of the WebView that provides the HTML content. + + + Forces the brush to asynchronously redraw itself. + + + Sets the source of the content for the WebViewBrush. + The WebView hosting the HTML content that is the source for the brush. + + + Identifies the SourceName dependency property. + The identifier for the SourceName dependency property. + + + Provides data for the WebView.ContentLoading event. + + + Gets the Uniform Resource Identifier (URI) of the content the WebView is loading. + The Uniform Resource Identifier (URI) of the content. + + + Provides data for the DOMContentLoaded event. + + + Gets the Uniform Resource Identifier (URI) of the content the WebView is loading. + The Uniform Resource Identifier (URI) of the content. + + + Provides data for the WebView.LongRunningScriptDetected event. + + + Gets the number of milliseconds that the WebView control has been executing a long-running script. + The number of milliseconds the script has been running. + + + Halts a long-running script executing in a WebView control. + true to halt the script; otherwise, false. + + + Provides data for the WebView.NavigationCompleted and FrameNavigationCompleted events. + + + Gets a value that indicates whether the navigation completed successfully. + true if the navigation completed successfully; otherwise, false. + + + Gets the Uniform Resource Identifier (URI) of the WebView content. + The Uniform Resource Identifier (URI) of the content. + + + If the navigation was unsuccessful, gets a value that indicates why + A value that explains an unsuccessful navigation. + + + Provides data for the WebView.NavigationFailed event. + + + Gets the URI that the WebView attempted to navigate to. + The attempted navigation target. + + + Gets the error that occurred when navigation failed. + The navigation error. + + + Provides data for the WebView.NavigationStarting and FrameNavigationStarting events. + + + Gets or sets a value indicating whether to cancel the WebView navigation. + true to cancel the navigation; otherwise, false. + + + Gets the Uniform Resource Identifier (URI) of the content the WebView is loading. + The Uniform Resource Identifier (URI) of the content. + + + Provides data for the WebView.UnviewableContentIdentified event. + + + Gets the Uniform Resource Identifier (URI) of the page that contains the link to the unviewable content. + The Uniform Resource Identifier (URI) of the referring page. + + + Gets the Uniform Resource Identifier (URI) of the content the WebView attempted to load. + The Uniform Resource Identifier (URI) of the content. + + + Positions child elements sequentially from left to right or top to bottom. When elements extend beyond the container edge, elements are positioned in the next row or column. Can only be used to display items in an ItemsControl. + + + Initializes a new instance of the WrapGrid class. + + + Gets or sets the alignment rules by which child elements are arranged for the horizontal dimension. + A value of the enumeration. The default is Left. + + + Gets or sets the height of the layout area for each item that is contained in a WrapGrid. + The height of the layout area for each item that is contained in a WrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets or sets the width of the layout area for each item that is contained in a WrapGrid. + The width of the layout area for each item that is contained in a WrapGrid. The default is Double.NaN, which results in the "Auto" layout behavior. + + + Gets or sets a value that influences the wrap point, also accounting for Orientation. + The maximum rows or columns that this WrapGrid should present before it introduces wrapping to the layout. The default is -1, which is a special value that indicates no maximum. + + + Gets or sets the direction in which child elements are arranged. + A value of the enumeration. The default is Vertical. + + + Gets or sets the alignment rules by which child elements are arranged for the vertical dimension. + A value of the enumeration. The default is Top. + + + Identifies the HorizontalChildrenAlignment dependency property. + The identifier for the HorizontalChildrenAlignment dependency property. + + + Identifies the ItemHeight dependency property. + The identifier for the ItemHeight dependency property. + + + Identifies the ItemWidth dependency property. + The identifier for the ItemWidth dependency property. + + + Identifies the MaximumRowsOrColumns dependency property. + The identifier for the MaximumRowsOrColumns dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the VerticalChildrenAlignment dependency property. + The identifier for the VerticalChildrenAlignment dependency property. + + + Represents the method that will handle a BackClick event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that handles the CleanUpVirtualizedItemEvent attached event. + The source of the event. + The event data. + + + Represents the method that will handle the ContextMenuOpening event that exists on several text-related UI elements. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that will handle the DragItemsStarting event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle a Hub.SectionHeaderClick event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle an ItemClick event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the ScriptNotify event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle a SectionsInViewChanged event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the SelectionChanged event. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the ViewChangeStarted and ViewChangeCompleted events. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the TextChanged event. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle a Paste event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the WebView.NavigationFailed event. + The object where the event handler is attached. + The event data. + + + Specifies when the Click event should be raised for a control. + + + Specifies that the Click event should be raised when the left mouse button is pressed and released, and the mouse pointer is over the control. If you are using the keyboard, specifies that the Click event should be raised when the SPACEBAR or ENTER key is pressed and released, and the control has keyboard focus. + + + Specifies that the Click event should be raised when the mouse button is pressed and the mouse pointer is over the control. If you are using the keyboard, specifies that the Click event should be raised when the SPACEBAR or ENTER key is pressed and the control has keyboard focus. + + + Specifies that the Click event should be raised when the mouse pointer moves over the control. + + + Defines constants that specify list view incremental loading behavior (IncrementalLoadingTrigger property). + + + Incremental loading does not occur. + + + Uses an "edge" offset for incremental loading visual behavior, and enables the list view to notify the scroll host of incremental load per interaction with other settings (IncrementalLoadingThreshold, DataFetchSize). + + + Defines constants that specify the scrolling behavior of items while updating. + + + Adjusts the scroll offset to keep visible items in the viewport when items are added to the ItemsSource. + + + Maintains the scroll offset relative to the beginning of the list, forcing items in the viewport to move down when items are added to the ItemsSource. + + + Defines constants that specify the selection mode of a ListView or GridView. + + + A user can't select items. + + + A user can select a single item. + + + The user can select multiple items without entering a special mode. + + + The user can select multiple items by entering a special mode, for example when depressing a modifier key. + + + Defines constants that specify the different orientations that a control or layout can have. + + + The control or layout should be vertically oriented. + + + The control or layout should be horizontally oriented. + + + Defines constants that specify the direction that a panel is scrolling. + + + The panel is not scrolling. + + + The panel is scrolling forward. + + + The panel is scrolling backward. + + + Defines constants that specify the visibility of a scrollbar within a ScrollViewer control. + + + A ScrollBar does not appear even when the viewport cannot display all of the content. Scrolling is disabled. The dimension of the content is set to the corresponding dimension of the ScrollViewer parent. For a horizontal ScrollBar, the width of the content is set to the ViewportWidth of the ScrollViewer. For a vertical ScrollBar, the height of the content is set to the ViewportHeight of the ScrollViewer. + + + A ScrollBar appears only when the viewport cannot display all of the content. The dimension of the content is set to the corresponding dimension of the ScrollViewer parent. For a horizontal ScrollBar, the width of the content is set to the ViewportWidth of the ScrollViewer. For a vertical ScrollBar, the height of the content is set to the ViewportHeight of the ScrollViewer. + + + A ScrollBar does not appear even when the viewport cannot display all of the content. Scrolling is still enabled, and can occur through touch, keyboard, or mouse wheel interaction. The dimension of the content is not affected by the dimension of the ScrollViewer. + + + A ScrollBar always appears. The dimension of the content is set to the corresponding dimension of the ScrollViewer parent. For a horizontal ScrollBar, the width of the content is set to the ViewportWidth of the ScrollViewer. For a vertical ScrollBar, the height of the content is set to the ViewportHeight of the ScrollViewer. + + + Defines constants that describe how an item that is programmatically scrolled into view aligns with the visible area. + + + The item aligns with the nearest edge. + + + The item aligns with the leading edge. + + + Defines constants that specify scrolling behavior for ScrollViewer and other parts involved in scrolling scenarios. + + + Scrolling is disabled. + + + Scrolling is enabled. + + + Scrolling is enabled but behavior uses a "rails" manipulation mode. + + + Defines constants that specify the selection behavior for a ListBox. + + + The user can select only one item at a time. + + + The user can select multiple items without entering a special mode. + + + The user can select multiple items by entering a special mode, for example when depressing a modifier key. + + + Defines constants that specify how panning snap points are processed for gesture/manipulation input. + + + No value set. + + + Viewer will snap to snap points on proximity. + + + Viewer will always snap to a snap point on interaction. + + + Snap points are optional and cannot be jumped over. + + + Snap points are mandatory and cannot be jumped over. + + + Defines constants that specify the direction that content is scaled. + + + The content scales upward only when it is smaller than the parent. If the content is larger, no scaling downward is performed. + + + The content scales downward only when it is larger than the parent. If the content is smaller, no scaling upward is performed. + + + The content stretches to fit the parent according to the Stretch property. + + + Defines constants that specify a glyph from the Segoe UI Symbol font to use as the content of a SymbolIcon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Defines constants that specify how VirtualizingStackPanel manages item containers for its child items. + + + Create and discard the item containers. + + + Reuse the item containers. + + + Defines constants that specify the current mode for zoom behavior in the ScrollViewer content. + + + Zoom of content is disabled. + + + Zoom of content is enabled. + + + Defines the compact view for command bar elements. + + + Gets or sets a value that indicates whether the element is shown with no label and reduced padding. + true if the element is shown in its compact state; otherwise, false. The default is false. + + + Provides methods that let an ItemsControl map data items to UI containers. + + + Returns the container for the item at the specified index within the ItemCollection. + The container for the item at the specified index within the item collection, if the item has a container; otherwise, null. + The index of the item to retrieve. + + + Returns the container corresponding to the specified item. + A container that corresponds to the specified item, if the item has a container and exists in the collection; otherwise, null. + The item to retrieve the container for. + + + Returns the index to the item that has the specified, generated container. + The index to the item that corresponds to the specified generated container. + The generated container to retrieve the item index for. + + + Returns the item that corresponds to the specified, generated container. + The contained item, or the container if it does not contain an item. + The DependencyObject that corresponds to the item to be returned. + + + Defines the navigation action for navigation hosts and navigation initiators. + + + Causes the navigation host to load content that is specified by data type. + true if the navigation host can navigate according to its settings; otherwise, false. + The data type of the content to load. + + + Communicates the info needed for a view to serve as one of the two possible views (ZoomedOutView or ZoomedInView) of a SemanticZoom. + + + Gets or sets a value that indicates whether the implementing view is the active view. + true if the implementing view is the active view; otherwise, false. + + + Gets or sets a value that indicates whether the implementing view is the semantically more complete zoomed-in view. + true if the implementing view is the zoomed-in view; otherwise, false. + + + Gets or sets the SemanticZoom owner that hosts the implementing view. + The SemanticZoom that hosts this view. + + + Changes related aspects of presentation (such as scrolling UI or state) when the overall view for a SemanticZoom changes. + + + Completes item-wise operations related to a view change when the implementing view is the source view and the new view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Completes item-wise operations related to a view change when the implementing view is the destination view and the source view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes the changes to related aspects of presentation (such as scrolling UI or state) when the overall view for a SemanticZoom is about to change. + + + Forces content in the view to scroll until the item specified by SemanticZoomLocation is visible. Also focuses that item if found. + The item in the view to scroll to. + + + Initializes item-wise operations related to a view change when the implementing view is the source view and the pending destination view is a potentially different implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Initializes item-wise operations related to a view change when the source view is a different view and the pending destination view is the implementing view. + The view item as represented in the source view. + The view item as represented in the destination view. + + + Defines classes that represent the component parts of UI controls, or otherwise support the control composition model. Also defines interfaces for control patterns such as snapping and selection. + + + Represents the base class for all button controls, such as Button, RepeatButton, and HyperlinkButton. + + + Provides base class initialization behavior for ButtonBase derived classes. + + + Gets or sets a value that indicates when the Click event occurs, in terms of device behavior. + A value of the enumeration that indicates when the Click event occurs. + + + Gets or sets the command to invoke when this button is pressed. + The command to invoke when this button is pressed. The default is null. + + + Gets or sets the parameter to pass to the Command property. + The parameter to pass to the Command property. The default is null. + + + Gets a value that indicates whether a device pointer is located over this button control. + True if a pointer is over the button control; otherwise false. The default is false. + + + Gets a value that indicates whether a ButtonBase is currently in a pressed state. + True if the ButtonBase is in a pressed state; otherwise false. The default is false. + + + Occurs when a button control is clicked. + + + Identifies the ClickMode dependency property + The identifier for the ClickMode dependency property. + + + Identifier for the CommandParameter dependency property. + The identifier for the CommandParameter dependency property. + + + Identifier for the Command dependency property. + The identifier for the Command dependency property. + + + Identifies the IsPointerOver dependency property. + The identifier for the IsPointerOver dependency property. + + + Identifies the IsPressed dependency property. + The identifier for the IsPressed dependency property. + + + Represents a panel that arranges its items in a line and circles around to the first item when the last item is reached. + + + Initializes a new instance of the CarouselPanel class. + + + Gets a value that indicates whether the horizontal snap points for the CarouselPanel are equidistant from each other. + true if the horizontal snap points for the CarouselPanel are equidistant from each other; otherwise, false. + + + Gets a value that indicates whether the vertical snap points for the CarouselPanel are equidistant from each other. + true if the vertical snap points for the CarouselPanel are equidistant from each other; otherwise, false. + + + Not intended for general use. Gets or sets a value that indicates whether scrolling on the horizontal axis is possible. + true if scrolling is possible; otherwise, false. + + + Not intended for general use. Gets or sets a value that indicates whether scrolling on the vertical axis is possible. + true if scrolling is possible; otherwise, false. + + + Gets the vertical size of the panel extent. + A value in pixels. + + + Gets the horizontal size of the panel extent. + A value in pixels. + + + Gets the horizontal offset of the scrolled content. + A value in pixels. + + + Gets or sets a reference to a ScrollViewer that is the scroll host or scroll owner for scrolling behavior of the CarouselPanel. + The scroll host or scroll owner for scrolling behavior. + + + Gets the vertical offset of the scrolled content. + A value in pixels. + + + Gets the vertical size of the viewport/content area. + A value in pixels. + + + Gets the horizontal size of the viewport/content area. + A value in pixels. + + + Returns the set of distances between irregular snap points for a specified orientation and alignment. + The read only collection of snap point distances. Returns an empty collection when no snap points are present. + The orientation/dimension for the desired snap point set. + The alignment to use when applying the snap points. + + + Gets the distance between regular snap points for a specified orientation and alignment. + The distance between the equidistant snap points. Returns 0 when no snap points are present. + The orientation/dimension for the desired snap point set. + The alignment to use when applying the snap points. + Out parameter. The offset of the first snap point. + + + Scrolls content by one line towards the bottom. + + + Scrolls content by one line towards the left. + + + Scrolls content by one line towards the right. + + + Scrolls content by one line towards the top. + + + Changes existing offsets in order to make the provided element visible in the viewport, and returns a Rect measurement and position of the area. + A rectangle that represents the input rectangle Rect transformed by using the CarouselPanel coordinate space. + The element to make visible. + A rectangle representing the element's coordinate space. + + + Scrolls content by one mousewheel click towards the bottom. + + + Scrolls content by one mousewheel click towards the left. + + + Scrolls content by one mousewheel click towards the right. + + + Scrolls content by one mousewheel click towards the top. + + + Scrolls content by one page towards the bottom. + + + Scrolls content by one page towards the left. + + + Scrolls content by one page towards the left. + + + Scrolls content by one page towards the top. + + + Changes the horizontal offset of content within the CarouselPanel viewport. + The horizontal offset to set, in pixels. + + + Changes the vertical offset of content within the CarouselPanel viewport. + The vertical offset to set, in pixels. + + + Occurs when the measurements for horizontal snap points change. + + + Occurs when the measurements for vertical snap points change. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ComboBox control. Not intended for general use. + + + Gets a value that reports the run-time layout slot height of the Popup part of a ComboBox in the Closed state. + The run-time layout slot height, in pixels. + + + Gets a value that reports the run-time offset value that is useful for a Split animation of the Popup part of a ComboBox. + The run-time offset value in pixels. + + + Gets a value that reports the run-time layout slot height of the Popup part of a ComboBox in the Opened state. + The run-time layout slot height, in pixels. + + + Gets a value that reports the selection direction in a ComboBox. This is either Bottom or Top depending on how DropDownOffset is set. + A value of the enumeration. + + + Provides data for the DragCompleted event that occurs when a user completes a drag operation with the mouse of a Thumb control. + + + Initializes a new instance of the DragCompletedEventArgs class. + The horizontal change in position of the Thumb control, resulting from the drag operation. + The vertical change in position of the Thumb control, resulting from the drag operation. + A value that indicates whether the drag operation was canceled by a call to the CancelDrag method. + + + Gets a value that indicates whether the drag operation was canceled. + true if the drag operation was canceled; otherwise, false. + + + Gets the horizontal distance between the current mouse position and the thumb coordinates. + The horizontal distance between the current mouse position and the thumb coordinates. + + + Gets the vertical distance between the current mouse position and the thumb coordinates. + The vertical distance between the current mouse position and the thumb coordinates. + + + Provides data for the DragDelta event that occurs one or more times when a user drags a Thumb control with the mouse. + + + Initializes a new instance of the DragDeltaEventArgs class. + The horizontal change in the Thumb position since the last DragDelta event. + The vertical change in the Thumb position since the last DragDelta event. + + + Gets the horizontal change in the Thumb position since the last DragDelta event. + The horizontal change in the Thumb position since the last DragDelta event. + + + Gets the vertical change in the Thumb position since the last DragDelta event. + The vertical change in the Thumb position since the last DragDelta event. + + + Provides data for the DragStarted event that occurs when a user drags a Thumb control with the mouse. + + + Initializes a new instance of the DragStartedEventArgs class. + The horizontal distance between the current mouse position and the thumb coordinates. + The vertical distance between the current mouse position and the thumb coordinates. + + + Gets the horizontal distance between the current mouse position and the thumb coordinates. + The horizontal distance between the current mouse position and the thumb coordinates. + + + Gets the vertical distance between the current mouse position and the thumb coordinates. + The vertical distance between the current mouse position and the thumb coordinates. + + + Represents the base class for flyout controls, such as Flyout and MenuFlyout. + + + Provides base class initialization behavior for FlyoutBase derived classes. + + + Gets or sets the flyout attached to a FrameworkElement. + + + Gets or sets the default placement to be used for the flyout, in relation to its placement target. + A named constant of the enumeration that indicates where the flyout is placed in relation to its placement target. The default is Top. + + + When overridden in a derived class, initializes a control to show the flyout content as appropriate for the derived control. + The control that displays the content of the flyout. + + + Gets the flyout associated with the specified element. + The flyout attached to the specified element. + The element for which to get the associated flyout. + + + Closes the flyout. + + + Associates the specified flyout with the specified FrameworkElement. + The element to associate the flyout with. + The flyout to associate with the specified element. + + + Shows the flyout placed in relation to the specified element. + The element to use as the flyout's placement target. + + + Shows the flyout associated with the specified element, if any. + The element for which to show the associated flyout. + + + Occurs when the flyout is hidden. + + + Occurs when the flyout is shown. + + + Occurs before the flyout is shown. + + + Identifies the FlyoutBase.AttachedFlyout XAML attached property. + The identifier for the FlyoutBase.AttachedFlyout XAML attached property. + + + Identifies the Placement dependency property. + The identifier for the Placement dependency property. + + + Provides utility methods for evaluating and creating GeneratorPosition structure values. C# and Microsoft Visual Basic code should use members of GeneratorPosition instead. + + + Creates a GeneratorPosition value using provided values for index and offset. C# and Microsoft Visual Basic code should use GeneratorPosition(Int32,Int32) instead. + The created GeneratorPosition structure with the desired values. + The index value to create with. + The offset value to create with. + + + Represents the visual elements of a GridViewItem. + + + Initializes a new instance of the GridViewItemPresenter class. + + + Gets or sets the brush used to render the check mark on a selected item. + The brush used to render the check mark on a selected item. + + + Gets or sets the brush used to render the check mark hint. + The brush used to render the check mark hint. + + + Gets or sets the brush used to render the check mark on an item while it's being selected using a swipe interaction. + The brush used to render the check mark on an item while it's being selected using a swipe interaction. + + + Gets or sets the opacity of an item that is disabled. + The opacity of an item that is disabled. The value should be between 0 and 1. 0 is no opacity (transparent), 1 is full opacity (renders normally). The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the background of an item that's being dragged. + The brush used to render the background of an item that's being dragged. + + + Gets or sets the brush used to render the foreground of an item that's being dragged. + The brush used to render the foreground of an item that's being dragged. + + + Gets or sets the opacity of an item that's being dragged. + The opacity of an item that's being dragged. The value should be between 0 and 1. 0 is no opacity (transparent), 1 is full opacity (renders normally). The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the border of an item that has focus. + The brush used to render the border of an item that has focus. + + + Gets or sets the brush used to render the placeholder background for an item. + The brush used to render the placeholder background for an item. + + + Gets or sets the horizontal alignment of the content being presented. + A value of the enumeration. The default is Center. + + + Gets or sets the brush used to render the background of an item that has the pointer over it. + The brush used to render the background of an item that has the pointer over it. + + + Gets or sets the amount that the reorder hint is offset. + The amount that the reorder hint is offset, in pixels. The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the background of an item that's selected. + The brush used to render the background of an item that's selected. + + + Gets or sets the thickness of the border around an item that's selected. + The thickness of the border around an item that's selected, as a Thickness value. + + + Gets or sets the brush used to render the foreground of an item that's selected. + The brush used to render the foreground of an item that's selected. + + + Gets or sets the brush used to render the background of an item that's selected and has the pointer over it. + The brush used to render the background of an item that's selected and has the pointer over it. + + + Gets or sets the brush used to render the border of an item that's selected and has the pointer over it. + The brush used to render the border of an item that's selected and has the pointer over it. + + + Gets or sets a value that indicates whether the check mark is shown when the item is selected. + true to show the selection check mark; otherwise, false. The default is true. + + + Gets or sets the vertical alignment of the content being presented. + A value of the enumeration. The default is Center. + + + Identifies the CheckBrush dependency property. + The identifier for the CheckBrush dependency property. + + + Identifies the CheckHintBrush dependency property. + The identifier for the CheckHintBrush dependency property. + + + Identifies the CheckSelectingBrush dependency property. + The identifier for the CheckSelectingBrush dependency property. + + + Identifies the DisabledOpacity dependency property. + The identifier for the DisabledOpacity dependency property. + + + Identifies the DragBackground dependency property. + The identifier for the DragBackground dependency property. + + + Identifies the DragForeground dependency property. + The identifier for the DragForeground dependency property. + + + Identifies the DragOpacity dependency property. + The identifier for the DragOpacity dependency property. + + + Identifies the FocusBorderBrush dependency property. + The identifier for the FocusBorderBrush dependency property. + + + Identifies the HorizontalContentAlignment dependency property. + The identifier for the HorizontalContentAlignment dependency property. + + + Identifies the PlaceholderBackground dependency property. + The identifier for the PlaceholderBackground dependency property. + + + Identifies the PointerOverBackground dependency property. + The identifier for the PointerOverBackground dependency property. + + + Identifies the ReorderHintOffset dependency property. + The identifier for the ReorderHintOffset dependency property. + + + Identifies the SelectedBackground dependency property. + The identifier for the SelectedBackground dependency property. + + + Identifies the SelectedBorderThickness dependency property. + The identifier for the SelectedBorderThickness dependency property. + + + Identifies the SelectedForeground dependency property. + The identifier for the SelectedForeground dependency property. + + + Identifies the SelectedPointerOverBackground dependency property. + The identifier for the SelectedPointerOverBackground dependency property. + + + Identifies the SelectedPointerOverBorderBrush dependency property. + The identifier for the SelectedPointerOverBorderBrush dependency property. + + + Identifies the SelectionCheckMarkVisualEnabled dependency property. + The identifier for the SelectionCheckMarkVisualEnabled dependency property. + + + Identifies the VerticalContentAlignment dependency property. + The identifier for the VerticalContentAlignment dependency property. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a GridView control. Not intended for general use. + + + Gets a value that reports the count of items in the current drag operation. + A value that reports the count of items in the current drag operation. + + + Provides data for the ItemsChanged event. + + + Gets the action that occurred on the items collection. + Returns the action that occurred. + + + Gets the number of items that were involved in the change. + Integer that represents the number of items involved in the change. + + + Gets the number of UI elements involved in the change. + Integer that represents the number of UI elements involved in the change. + + + Gets the position in the collection before the change occurred. + Returns a GeneratorPosition. + + + Gets the position in the collection where the change occurred. + Returns a GeneratorPosition. + + + Defines methods that provide additional information about the layout of an element. + + + Returns the element that was being processed by the layout system at the moment of an unhandled exception. + The element being processed at the time of an unhandled exception. + The dispatcher object that defines the scope of the operation. Direct support for Dispatcher type does not exist yet. + + + Returns the layout slot, or bounding box, that contains the specified element. + The area assigned to the element for layout. + The element for which to return the layout slot. + + + Represents the visual elements of a ListViewItem. + + + Initializes a new instance of the ListViewItemPresenter class. + + + Gets or sets the brush used to render the check mark on a selected item. + The brush used to render the check mark on a selected item. + + + Gets or sets the brush used to render the check mark hint. + The brush used to render the check mark hint. + + + Gets or sets the brush used to render the check mark on an item while it's being selected using a swipe interaction. + The brush used to render the check mark on an item while it's being selected using a swipe interaction. + + + Gets or sets the opacity of an item that is disabled. + The opacity of an item that is disabled. The value should be between 0 and 1. 0 is no opacity (transparent), 1 is full opacity (renders normally). The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the background of an item that's being dragged. + The brush used to render the background of an item that's being dragged. + + + Gets or sets the brush used to render the foreground of an item that's being dragged. + The brush used to render the foreground of an item that's being dragged. + + + Gets or sets the opacity of an item that's being dragged. + The opacity of an item that's being dragged. The value should be between 0 and 1. 0 is no opacity (transparent), 1 is full opacity (renders normally). The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the border of an item that has focus. + The brush used to render the border of an item that has focus. + + + Gets or sets the horizontal alignment of the content being presented. + A value of the enumeration. The default is Center. + + + Gets or sets the brush used to render the placeholder background for an item. + The brush used to render the placeholder background for an item. + + + Gets or sets the brush used to render the background of an item that has the pointer over it. + The brush used to render the background of an item that has the pointer over it. + + + Gets or sets the amount that the reorder hint is offset. + The amount that the reorder hint is offset, in pixels. The effective default value at run-time comes from themes. + + + Gets or sets the brush used to render the background of an item that's selected. + The brush used to render the background of an item that's selected. + + + Gets or sets the thickness of the border around an item that's selected. + The thickness of the border around an item that's selected, as a Thickness value. + + + Gets or sets the brush used to render the foreground of an item that's selected. + The brush used to render the foreground of an item that's selected. + + + Gets or sets the brush used to render the background of an item that's selected and has the pointer over it. + The brush used to render the background of an item that's selected and has the pointer over it. + + + Gets or sets the brush used to render the border of an item that's selected and has the pointer over it. + The brush used to render the border of an item that's selected and has the pointer over it. + + + Gets or sets a value that indicates whether the check mark is shown when the item is selected. + true to show the selection check mark; otherwise, false. The default is true. + + + Gets or sets the vertical alignment of the content being presented. + A value of the enumeration. The default is Center. + + + Identifies the CheckBrush dependency property. + The identifier for the CheckBrush dependency property. + + + Identifies the CheckHintBrush dependency property. + The identifier for the CheckHintBrush dependency property. + + + Identifies the CheckSelectingBrush dependency property. + The identifier for the CheckSelectingBrush dependency property. + + + Identifies the DisabledOpacity dependency property. + The identifier for the DisabledOpacity dependency property. + + + Identifies the DragBackground dependency property. + The identifier for the DragBackground dependency property. + + + Identifies the DragForeground dependency property. + The identifier for the DragForeground dependency property. + + + Identifies the DragOpacity dependency property. + The identifier for the DragOpacity dependency property. + + + Identifies the FocusBorderBrush dependency property. + The identifier for the FocusBorderBrush dependency property. + + + Identifies the HorizontalContentAlignment dependency property. + The identifier for the HorizontalContentAlignment dependency property. + + + Identifies the PlaceholderBackground dependency property. + The identifier for the PlaceholderBackground dependency property. + + + Identifies the PointerOverBackground dependency property. + The identifier for the PointerOverBackground dependency property. + + + Identifies the ReorderHintOffset dependency property. + The identifier for the ReorderHintOffset dependency property. + + + Identifies the SelectedBackground dependency property. + The identifier for the SelectedBackground dependency property. + + + Identifies the SelectedBorderThickness dependency property. + The identifier for the SelectedBorderThickness dependency property. + + + Identifies the SelectedForeground dependency property. + The identifier for the SelectedForeground dependency property. + + + Identifies the SelectedPointerOverBackground dependency property. + The identifier for the SelectedPointerOverBackground dependency property. + + + Identifies the SelectedPointerOverBorderBrush dependency property. + The identifier for the SelectedPointerOverBorderBrush dependency property. + + + Identifies the SelectionCheckMarkVisualEnabled dependency property. + The identifier for the SelectionCheckMarkVisualEnabled dependency property. + + + Identifies the VerticalContentAlignment dependency property. + The identifier for the VerticalContentAlignment dependency property. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ListViewItem. Not intended for general use. + + + Gets the number of items for a drag payload that contains this item as an origin. + The number of items for a drag payload. + + + Adds infrastructure (provides base class) for virtualizing layout containers that support spatial cues, such as VirtualizingStackPanel and WrapGrid. + + + Gets a value that indicates whether the horizontal snap points for the OrientedVirtualizingPanel are equidistant from each other. + true if the horizontal snap points for the OrientedVirtualizingPanel are equidistant from each other; otherwise, false. + + + Gets a value that indicates whether the vertical snap points for the OrientedVirtualizingPanel are equidistant from each other. + true if the vertical snap points for the OrientedVirtualizingPanel are equidistant from each other; otherwise, false. + + + Gets or sets a value that determines how the OrientedVirtualizingPanel measures space for child elements for possible scrolling in the horizontal dimension. Not intended to be set in XAML. + true to support a potentially infinite horizontal layout dimension. false to restrict to available size. + + + Gets or sets a value that determines how the OrientedVirtualizingPanel measures space for child elements for possible scrolling in the vertical dimension. Not intended to be set in XAML. + true to support a potentially infinite vertical layout dimension. false to restrict to available size. + + + Gets the vertical size of the panel extent. + A value in pixels. + + + Gets the horizontal size of the panel extent. + A value in pixels. + + + Gets the horizontal offset of the scrolled content. + A value in pixels. + + + Gets or sets a reference to a ScrollViewer that is the scroll host or scroll owner for scrolling behavior of the OrientedVirtualizingPanel. + The scroll host or scroll owner for scrolling behavior. + + + Gets the vertical offset of the scrolled content. + A value in pixels. + + + Gets the vertical size of the viewport or content area. + A value in pixels. + + + Gets the horizontal size of the viewport or content area. + A value in pixels. + + + Returns the set of distances between irregular snap points for a specified orientation and alignment. + The read-only collection of snap point distances. Returns an empty collection when no snap points are present. + The orientation for the desired snap point set. + The alignment to use when applying the snap points. + + + Gets the distance between regular snap points for a specified orientation and alignment. + The distance between the equidistant snap points. Returns 0 when no snap points are present. + The orientation for the desired snap point set. + The alignment to use when applying the snap points. + Out parameter. The offset of the first snap point. + + + Scrolls content by one line toward the bottom. + + + Scrolls content by one line toward the left. + + + Scrolls content by one line toward the right. + + + Scrolls content by one line toward the top. + + + Changes existing offsets in order to make the provided element visible in the viewport, and returns a Rect measurement of the area. + A rectangle representing the input rectangleRect transformed using the OrientedVirtualizingPanel coordinate space after scrolling happens. + The element to make visible. + A rectangle representing the element's coordinate space. + + + Scrolls content by one mouse-wheel click toward the bottom. + + + Scrolls content by one mouse-wheel click toward the left. + + + Scrolls content by one mouse-wheel click toward the right. + + + Scrolls content by one mouse-wheel click toward the top. + + + Scrolls content by one page toward the bottom. + + + Scrolls content by one page toward the left. + + + Scrolls content by one page toward the right. + + + Scrolls content by one page toward the top. + + + Changes the horizontal offset of content within the OrientedVirtualizingPanel viewport. + The horizontal offset to set, in pixels. + + + Changes the vertical offset of content within the OrientedVirtualizingPanel viewport. + The offset to set, in pixels. + + + Fires when the measurements for horizontal snap points change. + + + Fires when the measurements for vertical snap points change. + + + Displays content on top of existing content, within the bounds of the application window. + + + Initializes a new instance of the Popup class. + + + Gets or sets the content to be hosted in the popup. + The content to be hosted in the popup. + + + Gets or sets the collection of Transition style elements that apply to child content of a Popup. + The strongly typed collection of Transition style elements. + + + Gets or sets the distance between the left side of the application window and the left side of the popup. + A measurement in pixels. + + + Gets or sets a value that determines how the Popup can be dismissed. + true if light dismiss is enabled for this control; otherwise, false. + + + Gets or sets whether the popup is currently displayed on the screen. + true if the popup is currently displayed; otherwise, false. The default is false. + + + Gets or sets the distance between the top of the application window and the top of the popup. + A measurement in pixels. + + + Fires when the IsOpen property is set to false. + + + Fires when the IsOpen property is set to true. + + + Gets the identifier for the Child dependency property. + The identifier for the Child dependency property. + + + Identifies the ChildTransitions dependency property. + The identifier for the ChildTransitions dependency property. + + + Gets the identifier for the HorizontalOffset dependency property. + The identifier for the HorizontalOffset dependency property. + + + Identifies the IsLightDismissEnabled dependency property. + The identifier for the IsLightDismissEnabled dependency property. + + + Gets the identifier for the IsOpen dependency property. + The identifier for the IsOpen dependency property. + + + Gets the identifier for the VerticalOffset dependency property. + The identifier for the VerticalOffset dependency property. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ProgressBar control. Not intended for general use. + + + Gets the target To point of the container animation that animates the ProgressBar. + A double that represents the orientation-specific x- or y-value that is the target To point of the animation. + + + Gets the From point of the container animation that animates the ProgressBar. + A double that represents the orientation-specific x- or y-value that is theFrom point of the animation. + + + Gets the To point of the Ellipse animation that animates the ProgressBar. + The To point of the Ellipse animation that animates the ProgressBar. This is internally calculated as 2/3 of the ActualWidth of the control. + + + Gets the stopped point of the Ellipse animation that animates the ProgressBar. + The stopped point of the Ellipse animation that animates the ProgressBar. This is internally calculated as 1/3 of the ActualWidth of the control. + + + Gets the template-defined diameter of the Ellipse element that is animated in a templated ProgressBar. + The Ellipse element width in pixels. + + + Gets the template-defined offset position of the Ellipse element that is animated in a templated ProgressBar. + The offset in pixels. + + + Gets the indicator length delta, which is useful for repositioning transitions. + The delta in pixels. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ProgressRing control. Not intended for general use. + + + Gets the template-defined diameter of the Ellipse element that is animated in a templated ProgressRing. + The Ellipse width in pixels. + + + Gets the template-defined offset position of the Ellipse element that is animated in a templated ProgressRing. + The offset in pixels. + + + Gets the maximum bounding size of the progress ring as rendered. + The maximum bounding size of the progress ring as rendered, in pixels. + + + Represents an element that has a value within a specific range, such as the ProgressBar, ScrollBar, and Slider controls. + + + Provides base class initialization behavior for RangeBase-derived classes. + + + Gets or sets a value to be added to or subtracted from the Value of a RangeBase control. + Value to add to or subtract from the Value of the RangeBase element. The default is 1. + + + Gets or sets the highest possible Value of the range element. + The highest possible Value of the range element. The default is 1. + + + Gets or sets the Minimum possible Value of the range element. + Minimum possible Value of the range element. The default is 0. + + + Gets or sets a Value to be added to or subtracted from the Value of a RangeBase control. + Value to add to or subtract from the Value of the RangeBase element. The default is 0.1. + + + Gets or sets the current setting of the range control, which may be coerced. + The current setting of the range control, which may be coerced. The default is 0. + + + Called when the Maximum property changes. + Old value of the Maximum property. + New value of the Maximum property. + + + Called when the Minimum property changes. + Old value of the Minimum property. + New value of the Minimum property. + + + Fires the ValueChanged routed event. + Old value of the Value property. + New value of the Value property. + + + Occurs when the range value changes. + + + Identifies the LargeChange dependency property. + The identifier for the LargeChange dependency property. + + + Identifies the Maximum dependency property. + The identifier for the Maximum dependency property. + + + Identifies the Minimum dependency property. + The identifier for the Minimum dependency property. + + + Identifies the SmallChange dependency property. + The identifier for the SmallChange dependency property. + + + Identifies the Value dependency property. + The identifier for the Value dependency property. + + + Provides data about a change in range value for the ValueChanged event. + + + Gets the new value of a range value property. + The new value. + + + Gets the previous value of a range value property. + The previous value. + + + Represents a control that fires its Click event repeatedly until the click mode is released. + + + Initializes a new instance of the RepeatButton class. + + + Gets or sets the time, in milliseconds, that the RepeatButton waits when it is pressed before it starts repeating the click action. + The time, in milliseconds, that the RepeatButton waits when it is pressed before it starts repeating the click action. The default is 250. + + + Gets or sets the time, in milliseconds, between repetitions of the click action, as soon as repeating starts. + The time, in milliseconds, between repetitions of the click action, as soon as repeating starts. The default is 250. + + + Identifies the Delay dependency property. + The identifier for the Delay dependency property. + + + Identifies the Interval dependency property. + The identifier for the Interval dependency property. + + + Represents a control that provides a scroll bar that has a sliding Thumb whose position corresponds to a value. + + + Initializes a new instance of the ScrollBar class. + + + Gets or sets a value that results in different input indicator modes for the ScrollBar. + A value of the enumeration. The default is None. + + + Gets or sets a value that indicates whether the ScrollBar is displayed horizontally or vertically. + An Orientation enumeration value that defines whether the ScrollBar is displayed horizontally or vertically. The default is Horizontal. Specific control templates might change this value, which would cause the templated value to be the apparent runtime default. + + + Gets or sets the amount of the scrollable content that is currently visible. + The amount of the scrollable content that is currently visible. The default is 0. + + + Occurs one or more times as content scrolls in a ScrollBar when the user moves the Thumb by using the mouse. + + + Identifies the IndicatorMode dependency property. + The identifier for the IndicatorMode dependency property. + + + Identifies the Orientation dependency property. + The identifier for the Orientation dependency property. + + + Identifies the ViewportSize dependency property. + The identifier for the ViewportSize dependency property. + + + Provides data for the Scroll event. + + + Initializes a new instance of the ScrollEventArgs class. + + + Gets the new Value of the ScrollBar. + The Value of the ScrollBar after the event. + + + Gets a ScrollEventType describing the event. + A ScrollEventType describing the event. + + + Represents a control that allows a user to select an item from a collection of items. + + + Gets or sets a value that indicates whether a Selector should keep the SelectedItem synchronized with the current item in the Items property. + true if the SelectedItem is always synchronized with the current item in the ItemCollection; false if the SelectedItem is never synchronized with the current item; null if the SelectedItem is synchronized with the current item only if the Selector uses an ICollectionView. The default value is null/indeterminate. If you are programming using C# or Microsoft Visual Basic, the type of this property is projected as bool? (a nullable Boolean). + + + Gets or sets the index of the selected item. + The index of the selected item. The default is -1. + + + Gets or sets the selected item. + The selected item. The default is null. + + + Gets or sets the value of the selected item, obtained by using the SelectedValuePath. + The value of the selected item, obtained by using the SelectedValuePath, or null if no item is selected. The default value is null. + + + Gets or sets the property path that is used to get the SelectedValue property of the SelectedItem property. + The property path that is used to get the SelectedValue property of the SelectedItem property. The default is String.Empty. + + + Gets a value that indicates whether the specified Selector has the focus. + true to indicate that the Selector has the focus; otherwise, false. + The Selector to evaluate. + + + Occurs when the currently selected item changes. + + + Identifies the IsSynchronizedWithCurrentItem dependency property. + The identifier for the IsSynchronizedWithCurrentItem dependency property. + + + Identifies the SelectedIndex dependency property. + The identifier for the SelectedIndex dependency property. + + + Identifies the SelectedItem dependency property. + The identifier for the SelectedItem dependency property. + + + Gets the identifier for the SelectedValuePath dependency property. + The identifier for the SelectedValuePath dependency property. + + + Gets the identifier for the SelectedValue dependency property. + The identifier for the SelectedValue dependency property. + + + Provides a base class for ListViewItem or potentially for other item types in a selection control. + + + Provides base class initialization behavior for SelectorItem-derived classes. + + + Gets or sets a value that indicates whether the item is selected in a selector. + true if the item is selected; otherwise, false. + + + Identifies the IsSelected dependency property. + The identifier for the IsSelected dependency property. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a SettingsFlyout control. Not intended for general use. + + + Gets the brush that describes the border of the SettingsFlyout. + The brush that describes the border of the SettingsFlyout. + + + Gets the thickness of the SettingsFlyout border. + The thickness of the SettingsFlyout border. + + + Gets the collection of content transitions used by the SettingsFlyout. + The collection of content transitions used by the SettingsFlyout. + + + Gets the brush that describes the background of the SettingsFlyout header. + The brush that describes the background of the SettingsFlyout header. + + + Gets the brush that describes the foreground of the SettingsFlyout header. + The brush that describes the foreground of the SettingsFlyout header. + + + Gets the source image for the SettingsFlyout icon. + The source image for the SettingsFlyout icon. + + + Represents a control that can be dragged by the user. + + + Initializes a new instance of the Thumb class. + + + Gets whether the Thumb control has focus and mouse capture. + true if the Thumb control has focus and mouse capture; otherwise, false. The default is false. + + + Cancels a drag operation for the Thumb. + + + Fires when the Thumb control loses mouse capture. + + + Fires one or more times as the mouse pointer is moved when a Thumb control has logical focus and mouse capture. + + + Fires when a Thumb control receives logical focus and mouse capture. + + + Identifies the IsDragging dependency property. + The identifier for the IsDragging dependency property. + + + Represents a tick mark on a Slider control. Not intended for general use. + + + Initializes a new instance of the TickBar class. + + + Gets or sets the Brush that draws on the background area of the TickBar. + The Brush that draws on the background area of the TickBar. + + + Identifies the Fill dependency property. + The identifier for the Fill dependency property. + + + Base class for controls that can switch states, such as CheckBox and RadioButton. + + + Initializes a new instance of the ToggleButton class. + + + Gets or sets whether the ToggleButton is checked. + true if the ToggleButton is checked; false if the ToggleButton is unchecked; otherwise null. The default is false. If you are programming using C# or Microsoft Visual Basic, the type of this property is projected as bool? (a nullable Boolean). + + + Gets or sets a value that indicates whether the control supports three states. + True if the control supports three states; otherwise, false. The default is false. + + + Called when the ToggleButton receives toggle stimulus. + + + Fires when a ToggleButton is checked. + + + Fires when the state of a ToggleButton is switched to the indeterminate state. + + + Occurs when a ToggleButton is unchecked. + + + Identifies the IsChecked dependency property. + The identifier for the IsChecked dependency property. + + + Identifies the IsThreeState dependency property. + The identifier for the IsThreeState dependency property. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ToggleSwitch control. Not intended for general use. + + + Gets the calculated value of the offset for the curtain element of the ToggleSwitch, calculated for an Off action and current switch position. + A value in pixels. + + + Gets the calculated value of the offset for the curtain element of the ToggleSwitch, calculated for an On action and current switch position. + A value in pixels. + + + Gets the calculated value of the offset for the curtain element of the ToggleSwitch, in Off to On direction. + A value in pixels. + + + Gets the calculated value of the offset for the curtain element of the ToggleSwitch, in On to Off direction. + A value in pixels. + + + Gets the calculated value of the offset for the knob element of the ToggleSwitch, calculated for an Off action and current switch position. + A value in pixels. + + + Gets the calculated value of the offset for the knob element of the ToggleSwitch, calculated for an On action and current switch position. + A value in pixels. + + + Gets the calculated value of the offset for the knob element of the ToggleSwitch, in Off to On direction. + A value in pixels. + + + Gets the calculated value of the offset for the knob element of the ToggleSwitch, in On to Off direction. + A value in pixels. + + + Provides calculated values that can be referenced as TemplatedParent sources when defining templates for a ToolTip control. Not intended for general use. + + + Gets the offset that is appropriate as a value for FromHorizontalOffset in theme animations. + A value in pixels. + + + Gets the offset that is appropriate as a value for FromVerticalOffset in theme animations. + A value in pixels. + + + Represents the method that will handle the DragCompleted event of a Thumb. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the DragDelta event of a Thumb. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the DragStarted event of a Thumb. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the ItemsChanged event. + The source of the event. + The event data. + + + Represents the method that will handle a ValueChanged event. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle the Scroll event of a ScrollBar. + The source of the event. + A ScrollEventArgs that contains the event data. + + + Defines constants that specify the direction in which an animation translates from start to end. + + + The animation or transition progresses in a left direction. + + + The animation or transition progresses in an up direction. + + + The animation or transition progresses in a right direction. + + + The animation or transition progresses in a down direction. + + + Defines constants that specify the lookup behavior for references to application resources by Uniform Resource Identifier (URI) path. + + + Lookup treats the APPXPACKAGE as the root. + + + Lookup expects that the resource is a nested resource of a component. + + + Defines constants that specify the location of edge transitions for edge UI, such as app bars. + + + Edge transition goes to left. + + + Edge transition goes to top. + + + Edge transition goes to right. + + + Edge transition goes to bottom. + + + Defines constants that specify the preferred location for positioning a FlyoutBase derived control relative to a visual element. + + + The preferred location of the flyout is above the target element. + + + The preferred location of the flyout is below the target element. + + + The preferred location of the flyout is to the left of the target element. + + + The preferred location of the flyout is to the right of the target element. + + + The preferred location of the flyout is centered on the screen. + + + Defines constants that specify the direction in which item generation will occur. + + + Items are generated in a forward direction. + + + Items are generated in a backward direction. + + + Declares where the header is placed in relation to the items in an items grouping control. + + + Header appears on top of items. + + + Header appears to the left of items. + + + Defines constants that specify the preferred location for positioning a ToolTip relative to a visual element. + + + The preferred location of the ToolTip is at the bottom of the target element. + + + The preferred location of the ToolTip is at the left of the target element. + + + The preferred location of the ToolTip is at the mouse pointer location. + + + The preferred location of the ToolTip is at the right of the target element. + + + The preferred location of the ToolTip is at the top of the target element. + + + Defines constants that specify the type of Scroll event that occurred. + + + The Thumb moved a distance specified by the value of SmallChange. The Thumb moved to the left for a horizontal ScrollBar or upward for a vertical ScrollBar. + + + The Thumb moved a distance specified by the value of SmallChange. The Thumb moved to the right for a horizontal ScrollBar or downward for a vertical ScrollBar. + + + The Thumb moved a distance specified by the value of LargeChange. The Thumb moved to the left for a horizontal ScrollBar or upward for a vertical ScrollBar. + + + The Thumb moved a distance specified by the value of LargeChange. The Thumb moved to the right for a horizontal ScrollBar or downward for a vertical ScrollBar. + + + The Thumb moved to a new position because the user selected Scroll Here in the shortcut menu of the ScrollBar. + + + The Thumb was dragged and caused a PointerMoved event. A Scroll event of this ScrollEventType may occur more than one time when the Thumb is dragged in the ScrollBar. + + + The Thumb moved to the Minimum position of the ScrollBar. + + + The Thumb moved to the Maximum position of the ScrollBar. + + + The Thumb was dragged to a new position and is now no longer being dragged by the user. + + + Defines constants that specify input-specific transition animations that are part of the default template for ScrollBar. + + + Do not use input-specific transitions. + + + Use input-specific transitions that are appropriate for touch input. + + + Use input-specific transitions that are appropriate for mouse input. + + + Defines constants that specify how a Slider or related range control class conforms the indicator position to its steps or tick marks. + + + Conform the indicator to the step values. + + + Conform the indicator to the tick marks. + + + Defines constants that specify options for snap point alignment relative to an edge. Which edge depends on orientation. + + + Use snap points grouped closer to the orientation edge. + + + Use snap points that are centered in the orientation. + + + Use snap points grouped farther from the orientation edge. + + + Defines constants that specify the position of tick marks in a Slider in relation to the track that the control implements. + + + No tick marks appear. + + + Tick marks appear above the track for a horizontal Slider, or to the left of the track for a vertical Slider. + + + Tick marks appear below the track for a horizontal Slider, or to the right of the track for a vertical Slider. + + + Tick marks appear on both sides of either a horizontal or vertical track. + + + Tick marks appear directly on the track. + + + Describes snap point behavior for objects that contain and present items. + + + Gets a value that indicates whether the horizontal snap points for the container are equidistant from each other. + true if the horizontal snap points for the container are equidistant from each other; otherwise, false. + + + Gets a value that indicates whether the vertical snap points for the container are equidistant from each other. + true if the vertical snap points for the container are equidistant from each other; otherwise, false. + + + Returns the set of distances between irregular snap points for a specified orientation and alignment. + The read-only collection of snap point distances. Returns an empty collection when no snap points are present. + The orientation/dimension for the desired snap point set. + The alignment to use when applying the snap points. + + + Gets the distance between regular snap points for a specified orientation and alignment. + The distance between the equidistant snap points. Returns 0 when no snap points are present. + The orientation/dimension for the desired snap point set. + The alignment to use when applying the snap points. + Out parameter. The offset of the first snap point. + + + Occurs when the measurements for horizontal snap points change. + + + Occurs when the measurements for vertical snap points change. + + + GeneratorPosition is used to describe the position of an item that is managed by ItemContainerGenerator. + + + The index that is relative to the generated (realized) items. + + + The offset that is relative to the ungenerated (unrealized) items near the indexed item. + + + Initializes a new instance of GeneratorPosition with the specified index and offset. + An Int32 index that is relative to the generated (realized) items. -1 is a special value that refers to a fictitious item at the beginning or the end of the items list. + An Int32 offset that is relative to the ungenerated (unrealized) items near the indexed item. An offset of 0 refers to the indexed element itself, an offset 1 refers to the next ungenerated (unrealized) item, and an offset of -1 refers to the previous item. + + + Gets or sets the Int32 index that is relative to the generated (realized) items. + An Int32 index that is relative to the generated (realized) items. + + + Gets or sets the Int32 offset that is relative to the ungenerated (unrealized) items near the indexed item. + An Int32 offset that is relative to the ungenerated (unrealized) items near the indexed item. + + + Determines whether the specified object is equal to a GeneratorPosition. + true if o is equal to this GeneratorPosition; otherwise, false. + Object to check for equality. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a GeneratorPosition to a String representation. + A String representation of this GeneratorPosition. + + + Compares two GeneratorPosition structures for equality. + true if all values of gp1 and gp2 are equal; otherwise, false. + The first GeneratorPosition structure to compare. + The second GeneratorPosition structure to compare. + + + Compares two GeneratorPosition structures for inequality. + true if gp1 and gp2 have different values; false if gp1 and gp2 have the same values. + The first GeneratorPosition structure to compare. + The second GeneratorPosition structure to compare. + + + Defines the data binding infrastructure for apps. + + + Specifies that a type defined in C++ can be used for binding. + + + Initializes a new instance of the BindableAttribute class. + + + Defines a binding that connects the properties of binding targets and data sources. + + + Initializes a new instance of the Binding class. + + + Gets or sets the converter object that is called by the binding engine to modify the data as it is passed between the source and target, or vice versa. + The IValueConverter object that modifies the data. + + + Gets or sets a value that names the language to pass to any converter specified by the Converter property. + A string that names a language. Interpretation of this value is ultimately up to the converter logic. + + + Gets or sets a parameter that can be used in the Converter logic. + A parameter to be passed to the Converter. This can be used in the conversion logic. The default is null. + + + Gets or sets the name of the element to use as the binding source for the Binding. + The value of the Name property or x:Name attribute for the element you want to use as the binding source. The default is an empty string. + + + Gets or sets the value to use when the binding is unable to return a value. + The value to use when the binding is unable to return a value. + + + Gets or sets a value that indicates the direction of the data flow in the binding. + One of the BindingMode values. The default is OneWay: the source updates the target, but changes to the target value do not update the source. + + + Gets or sets the path to the binding source property. + The property path for the source of the binding. + + + Gets or sets the binding source by specifying its location relative to the position of the binding target. This is most often used in bindings within XAML control templates. + The relative location of the binding source to use. The default is null. + + + Gets or sets the data source for the binding. + The source object that contains the data for the binding. + + + Gets or sets the value that is used in the target when the value of the source is null. + The value that is used in the binding target when the value of the source is null. + + + Gets or sets a value that determines the timing of binding source updates for two-way bindings. + One of the UpdateSourceTrigger values. The default is Default, which evaluates as a PropertyChanged update behavior. + + + Provides an abstract base class for the Binding class. + + + Initializes a new instance of the BindingBase class. + + + Contains information about a single instance of a Binding. + + + Gets the binding source object that this BindingExpression uses. + The binding source object that this BindingExpression uses. + + + Gets the Binding object of this BindingExpression. + The Binding object of the current binding expression. + + + Sends the current binding target value to the binding source property in TwoWay bindings. + + + Represents the base class for BindingExpression. + + + Provides the static SetBinding method. + + + Associates a Binding with a target property on a target object. This method is the code equivalent to using a Binding markup extension in XAML markup. + The object that should be the target of the evaluated binding. + The property on the target to bind, specified by its identifier. These identifiers are usually available as static read-only properties on the type that defines the target object, or one of its base types. You can also bind to attached properties, but see Remarks. + The binding to assign to the target property. This Binding should be initialized: important Binding properties such as Path should already be set before passing it as the parameter. + + + Provides a data source that adds grouping and current-item support to collection classes. + + + Initializes a new instance of the CollectionViewSource class. + + + Gets or sets a value that indicates whether source data is grouped. + true if data is grouped. false if data is not grouped. + + + Gets or sets the property path to follow from the top level item to find groups within the CollectionViewSource. + The property path to follow from the top level item to find groups. The default is a PropertyPath created from an empty string. This path implies that the object itself is the collection. + + + Gets or sets the collection object from which to create this view. + The collection to create the view from. + + + Gets the view object that is currently associated with this instance of CollectionViewSource. + The view object that is currently associated with this instance of CollectionViewSource. + + + Identifies the IsSourceGrouped dependency property. + The identifier for the IsSourceGrouped dependency property. + + + Identifies the ItemsPath dependency property. + The identifier for the ItemsPath dependency property. + + + Identifies the Source dependency property. + The identifier for the Source dependency property. + + + Identifies the View dependency property. + The identifier for the View dependency property. + + + Provides data for the CurrentChanging event. + + + Initializes a new instance of the CurrentChangingEventArgs class. + + + Initializes a new instance of the CurrentChangingEventArgs class. + true to disable the ability to cancel a CurrentItem change; false to enable cancellation. + + + Gets or sets a value that indicates whether the CurrentItem change should be canceled. + true if the event should be canceled; otherwise, false. The default is false. + + + Gets a value that indicates whether the CurrentItem change can be canceled. + true if the event can be canceled; false if the event cannot be canceled. + + + Provides data for the PropertyChanged event. When building Windows Store app with the Microsoft .NET Framework, this class is hidden and developers should use the System.ComponentModel.PropertyChangedEventArgs class. + + + Initializes a new instance of the PropertyChangedEventArgs class. + The short name of the property that changed. + + + Gets the name of the property that changed. + The name of the property that changed. + + + Implements a markup extension that describes the location of the binding source relative to the position of the binding target. + + + Initializes a new instance of the RelativeSource class by using default relative source mode. + + + Gets or sets a value that describes the location of the binding source relative to the position of the binding target. + A value of the enumeration. + + + Represents a method that can handle the CurrentChanging event of an ICollectionView implementation. + The source of the event. + The event data. + + + Represents the method that will handle the PropertyChanged event. When building Windows Store app with the Microsoft .NET Framework, this delegate is hidden and developers should use the System.ComponentModel.PropertyChangedEventHandler delegate. + The source of the event. + Event data. + + + Describes how the data propagates in a binding. + + + Updates the target property when the binding is created. Changes to the source object can also propagate to the target. + + + Updates the target property when the binding is created. + + + Updates either the target or the source object when either changes. When the binding is created, the target property is updated from the source. + + + Defines constants that describe the location of the binding source relative to the position of the binding target. + + + Don't use this value of RelativeSourceMode; always use either Self or TemplatedParent. + + + Refers to the element to which the template (in which the data-bound element exists) is applied. This is similar to setting a TemplateBinding Markup Extension and is only applicable if the Binding is within a template. + + + Refers to the element on which you are setting the binding and allows you to bind one property of that element to another property on the same element. + + + Defines constants that indicate when a binding source is updated by its binding target in two-way binding. + + + Use default behavior from the dependency property that uses the binding. In Windows Runtime, this evaluates the same as a value with PropertyChanged. + + + The binding source is updated whenever the binding target value changes. This is detected automatically by the binding system. + + + The binding source is updated only when you call the BindingExpression.UpdateSource method. + + + Enables collections to support current record management, grouping, and incremental loading (data virtualization). + + + Returns any collection groups that are associated with the view. + A vector collection of possible views. + + + Gets the current item in the view. + The current item in the view or null if there is no current item. + + + Gets the ordinal position of the CurrentItem within the view. + The ordinal position of the CurrentItem within the view. + + + Gets a sentinel value that supports incremental loading implementations. See also LoadMoreItemsAsync. + true if additional unloaded items remain in the view; otherwise, false. + + + Gets a value that indicates whether the CurrentItem of the view is beyond the end of the collection. + true if the CurrentItem of the view is beyond the end of the collection; otherwise, false. + + + Gets a value that indicates whether the CurrentItem of the view is beyond the beginning of the collection. + true if the CurrentItem of the view is beyond the beginning of the collection; otherwise, false. + + + Initializes incremental loading from the view. + The wrapped results of the load operation. + The number of items to load. + + + Sets the specified item to be the CurrentItem in the view. + true if the resulting CurrentItem is within the view; otherwise, false. + The item to set as the CurrentItem. + + + Sets the first item in the view as the CurrentItem. + true if the resulting CurrentItem is an item within the view; otherwise, false. + + + Sets the last item in the view as the CurrentItem. + true if the resulting CurrentItem is an item within the view; otherwise, false. + + + Sets the item after the CurrentItem in the view as the CurrentItem. + true if the resulting CurrentItem is an item within the view; otherwise, false. + + + Sets the item at the specified index to be the CurrentItem in the view. + true if the resulting CurrentItem is an item within the view; otherwise, false. + The index of the item to move to. + + + Sets the item before the CurrentItem in the view as the CurrentItem. + true if the resulting CurrentItem is an item within the view; otherwise, false. + + + When implementing this interface, raise this event after the current item has been changed. + + + When implementing this interface, raise this event before changing the current item. The event handler can cancel this event. + + + Supports creation of the relevant ICollectionView implementation. + + + Creates an ICollectionView instance using default settings. + The default view. + + + Represents any grouped items within a view. + + + Gets or sets the grouping context used for grouping the data, which sets the data context for the default HeaderTemplate. + The grouping context used for grouping the data. + + + Gets the collection of grouped items that this ICollectionViewGroup implementation represents. + A collection of items for the group. + + + Implements custom property definition support for data binding sources that are implemented using COM. + + + Gets a value that determines whether the custom property supports read access. + true if the property value can be read as a data source. false if the property cannot be a data source value. + + + Gets a value that determines whether the custom property supports write access. + true if the value can be written to through a data source relationship in a two-way binding. false if the property cannot be written to. + + + Gets the path-relevant name of the property. + The name of the property as it would be specified in a binding expression. + + + Gets the underlying type of the custom property. + The underlying type, with relevant information as the values of the TypeName structure. TypeName provides the infrastructure such that property backing does not have to resemble common language runtime (CLR) and System.Type definitions. + + + Gets the value at an index location, for cases where the custom property has indexer support. + The retrieved value at the index. + The owning instance. + The index to get. + + + Gets the value of the custom property from a particular instance. + The retrieved value. + The owning instance. + + + Sets the value at an index location, for cases where the custom property has indexer support. + The owner instance. + The value to set. + The index location to set to. + + + Sets the custom property value on a specified instance. + The owner instance. + The value to set. + + + Provides lookup service for ICustomProperty support. This interface is implemented by objects so that their custom defined properties can be used as run-time binding sources. + + + Gets the underlying type of the custom property. + The underlying type, with relevant information as the values of the TypeName structure. TypeName provides the infrastructure such that property backing does not have to take a dependency on the common language runtime (CLR) and System.Type. + + + Gets a custom property's ICustomProperty support object by specifying a property name. + The returned support object for the custom property, or null. + The name of the property to get the support object for. + + + Gets a custom property's ICustomProperty support object by specifying a property name and the type of the indexed collection. + The returned support object for the custom property, or null. + The name of the property to get the support object for. + The type of the indexed collection, specified as a TypeName wrapper. + + + Provides support for GetStringFromObject and/or ToString logic on the assumption that the implementation supports System.Object. This logic might be accessed by features or services such as generating UI Automation values based on data content. + The provided string. + + + Notifies clients that a property value has changed. + + + Occurs when a property value changes. + + + Specifies a calling contract for collection views that support incremental loading. + + + Gets a sentinel value that supports incremental loading implementations. + true if additional unloaded items remain in the view; otherwise, false. + + + Initializes incremental loading from the view. + The wrapped results of the load operation. + The number of items to load. + + + Exposes methods that allow the data to be modified as it passes through the binding engine. + + + Modifies the source data before passing it to the target for display in the UI. + The value to be passed to the target dependency property. + The source data being passed to the target. + The type of the target property. This uses a different type depending on whether you're programming with Microsoft .NET or Visual C++ component extensions (C++/CX). See Remarks. + An optional parameter to be used in the converter logic. + The language of the conversion. + + + Modifies the target data before passing it to the source object. This method is called only in TwoWay bindings. + The value to be passed to the source object. + The target data being passed to the source. + The type of the target property, specified by a helper structure that wraps the type name. + An optional parameter to be used in the converter logic. + The language of the conversion. + + + Wraps the asynchronous results of a LoadMoreItemsAsync call. + + + The number of items that were actually loaded. + + + Provides basic text and document model classes. + + + An abstract class that provides a base for all block-level content elements. + + + Provides base class initialization behavior for Block derived classes. + + + Gets or sets the height of each line of content. + The pixel height of each line as modified by LineStackingStrategy. A value of 0 indicates that the line height is determined automatically from the current font characteristics. The default is 0. + + + Gets or sets a value that indicates how a line box is determined for each line of text in the Block. + A value that indicates how a line box is determined for each line of text in the Block. The default is MaxHeight. + + + Gets or sets the amount of space around a Block element. + The amount of space around a Block element. + + + Gets or sets the horizontal alignment of the text content. + The horizontal alignment of the text content. The default is Left. + + + Identifies the LineHeight dependency property. + The identifier for the LineHeight dependency property. + + + Identifies the LineStackingStrategy dependency property. + The identifier for the LineStackingStrategy dependency property. + + + Identifies the Margin dependency property. + The identifier for the Margin dependency property. + + + Identifies the TextAlignment dependency property. + The identifier for the TextAlignment dependency property. + + + Represents a collection of Block elements. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Block value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a "capacity" in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Block value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Provides an inline-level content element that causes content to render with a bold font weight. + + + Initializes a new instance of the Bold class. + + + Provides a visual representation of letters, characters, or symbols, in a specific font and style. + + + Initializes a new instance of the Glyphs class. + + + Gets or sets the Brush that is used to render the glyphs. + The brush to use to render the glyphs. The default is null, which is evaluated as Transparent for rendering. + + + Gets or sets the em size used for rendering the glyphs. + The em size used for rendering. The default is 0. + + + Gets or sets the location of the font used for rendering the glyphs. + An object describing the Uniform Resource Identifier (URI) source of the font. The default is null. + + + Gets or sets the glyph indices for the glyphs. + A string that defines glyph indices as well as other glyph specifics in a string mini-language. The default is null. + + + Gets or sets the x origin for the glyphs. + The x origin of the Glyphs, in pixels. The default is 0. + + + Gets or sets the y origin for the glyphs. + The y origin of the Glyphs, in pixels. The default is 0. + + + Gets or sets the style simulations applied to the glyphs. + One of the enumeration values that specifies the style simulations to apply to the glyphs. The default is None. + + + Gets or sets the Unicode string to render in glyphs. + A Unicode string with XAML-compatible encoding. The default is an empty string. + + + Identifies the Fill dependency property. + The identifier for the Fill dependency property. + + + Identifies the FontRenderingEmSize dependency property. + The identifier for the FontRenderingEmSize dependency property. + + + Identifies the FontUri dependency property. + The identifier for the FontUri dependency property. + + + Identifies the Indices dependency property. + The identifier for the Indices dependency property. + + + Identifies the OriginX dependency property. + The identifier for the OriginX dependency property. + + + Identifies the OriginY dependency property. + The identifier for the OriginY dependency property. + + + Identifies the StyleSimulations dependency property. + The identifier for the StyleSimulations dependency property. + + + Identifies the UnicodeString dependency property. + The identifier for the UnicodeString dependency property. + + + Provides an inline-level content element that provides facilities for hosting hyperlinks. + + + Initializes a new instance of the Hyperlink class. + + + Gets or sets the Uniform Resource Identifier (URI) to navigate to when the Hyperlink is activated. + The Uniform Resource Identifier (URI) to navigate to when the Hyperlink is activated. The default is a null reference. + + + Occurs when the Hyperlink is clicked. + + + Identifies the NavigateUri dependency property. + The identifier for the NavigateUri dependency property. + + + Provides data for the Hyperlink.Click event. + + + Provides a base for inline flow content element behavior. + + + Provides base class initialization behavior for Inline derived classes. + + + Represents a collection of Inline elements. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Inline value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Inline value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Provides an inline content element that enables UIElement types to be embedded in the content of a RichTextBlock. + + + Initializes a new instance of the InlineUIContainer class. + + + Gets or sets the UIElement hosted by the InlineUIContainer. + The UIElement hosted by the InlineUIContainer. + + + Provides an inline-level flow content element that causes content to render with an italic font style. + + + Initializes a new instance of the Italic class. + + + Represents an inline element that causes a new line to begin in content when rendered in a text container. + + + Initializes a new instance of the LineBreak class. + + + Provides a block-level content element that is used to group content into a paragraph. + + + Initializes a new instance of the Paragraph class. + + + Gets an InlineCollection containing the top-level Inline elements that include the contents of the Paragraph. + An InlineCollection containing the Inline elements that include the contents of the Paragraph. + + + Gets or sets the indentation of the first line of text in a paragraph, in pixels. + The offset amount, in pixels, of the first line of text in a paragraph. + + + Identifies the TextIndent dependency property. + The identifier for the TextIndent dependency property. + + + Represents a discrete section of formatted or unformatted text. + + + Initializes a new instance of the Run class. + + + Gets or sets the direction that text and other user interface elements flow within the Run element that controls their layout. + The direction that text and other user interface (UI) elements flow within the Run element. The default value is LeftToRight. + + + Gets or sets the text contents of the Run. + A string that specifies the text contents of the Run. The default is String.Empty. + + + Identifies the FlowDirection dependency property. + The identifier of the FlowDirection dependency property. + + + Groups other Inline content elements. + + + Initializes a new instance of the Span class. + + + Gets an InlineCollection containing the top-level inline elements that include the contents of Span. + An InlineCollection containing the inline elements that include the contents of the Span. This property has no default value. + + + An abstract class used as the base class for the abstract Block and Inline classes. + + + Gets or sets the uniform spacing between characters, in units of 1/1000 of an em. + The uniform spacing between characters, in units of 1/1000 of an em. The default is 0. Positive values increase tracking and loosen character spacing. Negative values decrease tracking and tighten the character spacing. + + + Gets a TextPointer that represents the end of the content in the element. + A TextPointer that represents the end of the content in the TextElement. + + + Gets a TextPointer that represents the start of content in the element. + A TextPointer that represents the start of the content in the TextElement. + + + Gets a TextPointer that represents the position just after the end of the element. + A TextPointer that represents the position just after the end of the TextElement. + + + Gets a TextPointer that represents the position just before the start of the element. + A TextPointer that represents the position just before the start of the TextElement. + + + Gets or sets the preferred top-level font family for the content of the element. + The preferred font family, or a primary preferred font family with one or more fallback font families. See FontFamily for default information. + + + Gets or sets the font size for the content of the element. + The desired font size in pixels. The default is 11 pixels. + + + Gets or sets the glyph width of the font in a family to select. + One of the FontStretch constant names, specifying the desired font stretch. The default is Normal. + + + Gets or sets the font style for the content in this element. + One of the FontStyle constant names, specifying the font style. The default is Normal. + + + Gets or sets the top-level font weight to select from the font family for the content in this element. + One of the FontWeights property values, specifying the font weight. The default is Normal. + + + Gets or sets the Brush to apply to the content in this element. + The brush that is applied to the text content. The default is a SolidColorBrush with Color value Black. + + + Gets or sets localization/globalization language information that applies to a TextElement. + A string specifying language and culture that follows the RFC 3066 / ISO 639-1 standards. For example, U.S. English is en-US. + + + Gets or sets a unique identification for the object. Name can only be set from initial parsing of XAML. + The unique identifier for the object. This property is read-only for code, but write-only for XAML, due to special parser handling of XAML properties named Name. + + + Retrieves an object in the object model / runtime object graph by referencing the object's x:Name or Name attribute value. + The object that has the specified name, or null if no object is retrieved. + The name of the object to retrieve. + + + Override this method to implement how layout and logic should behave when items are removed from a class-specific content or child property. + + + Identifies the CharacterSpacing dependency property. + The identifier for the CharacterSpacing dependency property. + + + Identifies the FontFamily dependency property. + The identifier for the FontFamily dependency property. + + + Identifies the FontSize dependency property. + Identifier for the FontSize dependency property. + + + Identifies the FontStretch dependency property. + Identifier for the FontStretch dependency property. + + + Identifies the FontStyle dependency property. + Identifier for the FontStyle dependency property. + + + Identifies the FontWeight dependency property. + Identifier for the FontWeight dependency property. + + + Identifies the Foreground dependency property. + Identifier for the Foreground dependency property. + + + Identifies the Language dependency property. + The identifier for the Language dependency property. + + + Represents a position within a text element. + + + Gets the logical direction associated with the current position, which is used to disambiguate content associated with the current position. + The LogicalDirection value that is associated with the current position. + + + Gets the character index of a TextPointer within its container. + The character index of a TextPointer within its container. + + + Gets the logical parent that contains the current position. + The logical parent that contains the current position. Can return the RichEditBox when at the top of the content stack. + + + Gets the user interface (UI) element that "owns" this TextPointer. + The UI element that "owns" this TextPointer. + + + Returns a bounding box for content that borders the current TextPointer in the specified logical direction. + A Rect for content that borders the current TextPointer in the specified direction, or a Rect that evaluates as Empty if current and valid layout information is unavailable. + One of the LogicalDirection values that specifies the logical direction in which to find a content bounding box. + + + Returns a TextPointer to the position indicated by the specified offset, in symbols, from the beginning of the current TextPointer and in the specified direction. + A TextPointer to the position indicated by the specified offset and in the direction specified by the direction parameter, or null if the offset extends past the end of the content. + An offset, in symbols, for which to calculate and return the position. If the offset is negative, the returned TextPointer precedes the current TextPointer; otherwise, it follows. + One of the LogicalDirection values that specifies the logical direction of the returned TextPointer. + + + Provides access to a set of Microsoft OpenType typography properties. These properties are implemented as XAML attached properties such that they can be set from text object model properties as well as from specific text controls. + + + Gets or sets a value that specifies the index of an alternate annotation form. + + + Gets or sets a FontCapitals value that indicates the capital form of the selected font. + + + Gets or sets a value that determines whether inter-glyph spacing for all-capital text is globally adjusted to improve readability. + + + Gets or sets a value that determines whether glyphs adjust their vertical position to better align with uppercase glyphs. + + + Gets or sets a value that determines whether custom glyph forms can be used based upon the context of the text being rendered. + + + Gets or sets a value that determines whether contextual ligatures are enabled. + + + Gets or sets a value that specifies the index of a contextual swashes form. + + + Gets or sets a value that determines whether discretionary ligatures are enabled. + + + Gets or sets a value that determines whether the standard Japanese font forms have been replaced with the corresponding preferred typographic forms. + + + Gets or sets a FontEastAsianLanguage value that indicates glyphs used for a specific writing system or language. + + + Gets or sets a FontEastAsianWidths value that indicates the proportional width for Latin characters in an East Asian font. + + + Gets or sets a FontFraction value that indicates the fraction style. + + + Gets or sets a value that determines whether historical forms are enabled. + + + Gets or sets a value that indicates whether historical ligatures are enabled. + + + Gets or sets a value that indicates whether kerning is enabled. + + + Gets or sets a value that indicates whether standard typographic font forms of Greek glyphs have been replaced with corresponding font forms commonly used in mathematical notation. + + + Gets or sets a FontNumeralAlignment value that indicates the alignment of widths for numerals. + + + Gets or sets a FontNumeralStyle value that determines the set of glyphs that are used to render numeric alternate font forms. + + + Gets or sets a value that indicates whether a nominal zero font form should be replaced with a slashed zero. + + + Gets or sets a value that indicates whether standard ligatures are enabled. + + + Gets or sets a value that specifies the index of a standard swashes form. + + + Gets or sets a value that specifies the index of a stylistic alternates form. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a value that indicates whether a stylistic set of a font form is enabled. + + + Gets or sets a FontVariants value that indicates a variation of the standard typographic form to be used. + + + Returns the value of the AnnotationAlternates attached property for a specified dependency object. + The current value of the AnnotationAlternates attached property on the specified dependency object. + The dependency object for which to retrieve the value of the AnnotationAlternates property. + + + Returns the value of the Capitals attached property for a specified dependency object. + The current value of the Capitals attached property on the specified dependency object. + The dependency object for which to retrieve the value of the Capitals property. + + + Returns the value of the CapitalSpacing attached property for a specified dependency object. + The current value of the CapitalSpacing attached property on the specified dependency object. + The dependency object for which to retrieve the value of the CapitalSpacing property. + + + Returns the value of the CaseSensitiveForms attached property for a specified dependency object. + The current value of the CaseSensitiveForms attached property on the specified dependency object. + The dependency object for which to retrieve the value of the CaseSensitiveForms property. + + + Returns the value of the ContextualAlternates attached property for a specified dependency object. + The current value of the ContextualAlternates attached property on the specified dependency object. + The dependency object for which to retrieve the value of the ContextualAlternates property. + + + Returns the value of the ContextualLigatures attached property for a specified dependency object. + The current value of the ContextualLigatures attached property on the specified dependency object. + The dependency object for which to retrieve the value of the ContextualLigatures property. + + + Returns the value of the ContextualSwashes attached property for a specified dependency object. + The current value of the ContextualSwashes attached property on the specified dependency object. + The dependency object for which to retrieve the value of the ContextualSwashes property. + + + Returns the value of the DiscretionaryLigatures attached property for a specified dependency object. + The current value of the DiscretionaryLigatures attached property on the specified dependency object. + The dependency object for which to retrieve the value of the DiscretionaryLigatures property. + + + Returns the value of the EastAsianExpertForms attached property for a specified dependency object. + The current value of the EastAsianExpertForms attached property on the specified dependency object. + The dependency object for which to retrieve the value of the EastAsianExpertForms property. + + + Returns the value of the EastAsianLanguage attached property for a specified dependency object. + The current value of the EastAsianLanguage attached property on the specified dependency object. + The dependency object for which to retrieve the value of the EastAsianLanguage property. + + + Returns the value of the EastAsianWidths attached property for a specified dependency object. + The current value of the EastAsianWidths attached property on the specified dependency object. + The dependency object for which to retrieve the value of the EastAsianWidths property. + + + Returns the value of the Fraction attached property for a specified dependency object. + The current value of the Fraction attached property on the specified dependency object. + The dependency object for which to retrieve the value of the Fraction property. + + + Returns the value of the HistoricalForms attached property for a specified dependency object. + The current value of the HistoricalForms attached property on the specified dependency object. + The dependency object for which to retrieve the value of the HistoricalForms property. + + + Returns the value of the HistoricalLigatures attached property for a specified dependency object. + The current value of the HistoricalLigatures attached property on the specified dependency object. + The dependency object for which to retrieve the value of the HistoricalLigatures property. + + + Returns the value of the Kerning attached property for a specified dependency object. + The current value of the Kerning attached property on the specified dependency object. + The dependency object for which to retrieve the value of the Kerning property. + + + Returns the value of the MathematicalGreek attached property for a specified dependency object. + The current value of the MathematicalGreek attached property on the specified dependency object. + The dependency object for which to retrieve the value of the MathematicalGreek property. + + + Returns the value of the NumeralAlignment attached property for a specified dependency object. + The current value of the NumeralAlignment attached property on the specified dependency object. + The dependency object for which to retrieve the value of the NumeralAlignment property. + + + Returns the value of the NumeralStyle attached property for a specified dependency object. + The current value of the NumeralStyle attached property on the specified dependency object. + The dependency object for which to retrieve the value of the NumeralStyle property. + + + Returns the value of the SlashedZero attached property for a specified dependency object. + The current value of the SlashedZero attached property on the specified dependency object. + The dependency object for which to retrieve the value of the SlashedZero property. + + + Returns the value of the StandardLigatures attached property for a specified dependency object. + The current value of the StandardLigatures attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StandardLigatures property. + + + Returns the value of the StandardSwashes attached property for a specified dependency object. + The current value of the StandardSwashes attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StandardSwashes property. + + + Returns the value of the StylisticAlternates attached property for a specified dependency object. + The current value of the StylisticAlternates attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticAlternates property. + + + Returns the value of the StylisticSet1 attached property for a specified dependency object. + The current value of the StylisticSet1 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet1 property. + + + Returns the value of the StylisticSet2 attached property for a specified dependency object. + The current value of the StylisticSet2 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet2 property. + + + Returns the value of the StylisticSet3 attached property for a specified dependency object. + The current value of the StylisticSet3 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet3 property. + + + Returns the value of the StylisticSet4 attached property for a specified dependency object. + The current value of the StylisticSet4 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet4 property. + + + Returns the value of the StylisticSet5 attached property for a specified dependency object. + The current value of the StylisticSet5 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet5 property. + + + Returns the value of the StylisticSet6 attached property for a specified dependency object. + The current value of the StylisticSet6 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet6 property. + + + Returns the value of the StylisticSet7 attached property for a specified dependency object. + The current value of the StylisticSet7 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet7 property. + + + Returns the value of the StylisticSet8 attached property for a specified dependency object. + The current value of the StylisticSet8 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet8 property. + + + Returns the value of the StylisticSet9 attached property for a specified dependency object. + The current value of the StylisticSet9 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet9 property. + + + Returns the value of the StylisticSet10 attached property for a specified dependency object. + The current value of the StylisticSet10 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet10 property. + + + Returns the value of the StylisticSet11 attached property for a specified dependency object. + The current value of the StylisticSet11 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet11 property. + + + Returns the value of the StylisticSet12 attached property for a specified dependency object. + The current value of the StylisticSet12 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet12 property. + + + Returns the value of the StylisticSet13 attached property for a specified dependency object. + The current value of the StylisticSet13 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet13 property. + + + Returns the value of the StylisticSet14 attached property for a specified dependency object. + The current value of the StylisticSet14 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet14 property. + + + Returns the value of the StylisticSet15 attached property for a specified dependency object. + The current value of the StylisticSet15 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet15 property. + + + Returns the value of the StylisticSet16 attached property for a specified dependency object. + The current value of the StylisticSet16 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet16 property. + + + Returns the value of the StylisticSet17 attached property for a specified dependency object. + The current value of the StylisticSet17 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet17 property. + + + Returns the value of the StylisticSet18 attached property for a specified dependency object. + The current value of the StylisticSet18 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet18 property. + + + Returns the value of the StylisticSet19 attached property for a specified dependency object. + The current value of the StylisticSet19 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet19 property. + + + Returns the value of the StylisticSet20 attached property for a specified dependency object. + The current value of the StylisticSet20 attached property on the specified dependency object. + The dependency object for which to retrieve the value of the StylisticSet20 property. + + + Returns the value of the Variants attached property for a specified dependency object. + The current value of the Variants attached property on the specified dependency object. + The dependency object for which to retrieve the value of the Variants property. + + + Sets the value of the AnnotationAlternates attached property for a specified dependency object. + The dependency object for which to set the value of the AnnotationAlternates property. + The new value to set the property to. + + + Sets the value of the Capitals attached property for a specified dependency object. + The dependency object for which to set the value of the Capitals property. + The new value to set the property to. + + + Sets the value of the CapitalSpacing attached property for a specified dependency object. + The dependency object for which to set the value of the CapitalSpacing property. + The new value to set the property to. + + + Sets the value of the CaseSensitiveForms attached property for a specified dependency object. + The dependency object for which to set the value of the CaseSensitiveForms property. + The new value to set the property to. + + + Sets the value of the ContextualAlternates attached property for a specified dependency object. + The dependency object for which to set the value of the ContextualAlternates property. + The new value to set the property to. + + + Sets the value of the ContextualLigatures attached property for a specified dependency object. + The dependency object for which to set the value of the ContextualLigatures property. + The new value to set the property to. + + + Sets the value of the ContextualSwashes attached property for a specified dependency object. + The dependency object for which to set the value of the ContextualSwashes property. + The new value to set the property to. + + + Sets the value of the DiscretionaryLigatures attached property for a specified dependency object. + The dependency object for which to set the value of the DiscretionaryLigatures property. + The new value to set the property to. + + + Sets the value of the EastAsianExpertForms attached property for a specified dependency object. + The dependency object for which to set the value of the EastAsianExpertForms property. + The new value to set the property to. + + + Sets the value of the EastAsianLanguage attached property for a specified dependency object. + The dependency object for which to set the value of the EastAsianLanguage property. + The new value to set the property to. + + + Sets the value of the EastAsianWidths attached property for a specified dependency object. + The dependency object for which to set the value of the EastAsianWidths property. + The new value to set the property to. + + + Sets the value of the Fraction attached property for a specified dependency object. + The dependency object for which to set the value of the Fraction property. + The new value to set the property to. + + + Sets the value of the HistoricalForms attached property for a specified dependency object. + The dependency object for which to set the value of the HistoricalForms property. + The new value to set the property to. + + + Sets the value of the HistoricalLigatures attached property for a specified dependency object. + The dependency object for which to set the value of the HistoricalLigatures property. + The new value to set the property to. + + + Sets the value of the Kerning attached property for a specified dependency object. + The dependency object for which to set the value of the Kerning property. + The new value to set the property to. + + + Sets the value of the MathematicalGreek attached property for a specified dependency object. + The dependency object for which to set the value of the MathematicalGreek property. + The new value to set the property to. + + + Sets the value of the NumeralAlignment attached property for a specified dependency object. + The dependency object for which to set the value of the NumeralAlignment property. + The new value to set the property to. + + + Sets the value of the NumeralStyle attached property for a specified dependency object. + The dependency object for which to set the value of the NumeralStyle property. + The new value to set the property to. + + + Sets the value of the SlashedZero attached property for a specified dependency object. + The dependency object for which to set the value of the SlashedZero property. + The new value to set the property to. + + + Sets the value of the StandardLigatures attached property for a specified dependency object. + The dependency object for which to set the value of the StandardLigatures property. + The new value to set the property to. + + + Sets the value of the StandardSwashes attached property for a specified dependency object. + The dependency object for which to set the value of the StandardSwashes property. + The new value to set the property to. + + + Sets the value of the StylisticAlternates attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticAlternates property. + The new value to set the property to. + + + Sets the value of the StylisticSet1 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet1 property. + The new value to set the property to. + + + Sets the value of the StylisticSet2 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet2 property. + The new value to set the property to. + + + Sets the value of the StylisticSet3 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet3 property. + The new value to set the property to. + + + Sets the value of the StylisticSet4 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet4 property. + The new value to set the property to. + + + Sets the value of the StylisticSet5 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet5 property. + The new value to set the property to. + + + Sets the value of the StylisticSet6 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet6 property. + The new value to set the property to. + + + Sets the value of the StylisticSet7 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet7 property. + The new value to set the property to. + + + Sets the value of the StylisticSet8 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet8 property. + The new value to set the property to. + + + Sets the value of the StylisticSet9 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet9 property. + The new value to set the property to. + + + Sets the value of the StylisticSet10 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet10 property. + The new value to set the property to. + + + Sets the value of the StylisticSet11 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet11 property. + The new value to set the property to. + + + Sets the value of the StylisticSet12 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet12 property. + The new value to set the property to. + + + Sets the value of the StylisticSet13 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet13 property. + The new value to set the property to. + + + Sets the value of the StylisticSet14 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet14 property. + The new value to set the property to. + + + Sets the value of the StylisticSet15 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet15 property. + The new value to set the property to. + + + Sets the value of the StylisticSet16 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet16 property. + The new value to set the property to. + + + Sets the value of the StylisticSet17 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet17 property. + The new value to set the property to. + + + Sets the value of the StylisticSet18 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet18 property. + The new value to set the property to. + + + Sets the value of the StylisticSet19 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet19 property. + The new value to set the property to. + + + Sets the value of the StylisticSet20 attached property for a specified dependency object. + The dependency object for which to set the value of the StylisticSet20 property. + The new value to set the property to. + + + Sets the value of the Variants attached property for a specified dependency object. + The dependency object for which to set the value of the Variants property. + The new value to set the property to. + + + Identifies the AnnotationAlternates attached property. + The identifier for the AnnotationAlternates attached property. + + + Identifies the CapitalSpacing attached property. + The identifier for the CapitalSpacing attached property. + + + Identifies the Capitals attached property. + The identifier for the Capitals attached property. + + + Identifies the CaseSensitiveForms attached property. + The identifier for the CaseSensitiveForms attached property. + + + Identifies the ContextualAlternates attached property. + The identifier for the ContextualAlternates attached property. + + + Identifies the ContextualLigatures attached property. + The identifier for the ContextualLigatures attached property. + + + Identifies the ContextualSwashes attached property. + The identifier for the ContextualSwashes attached property. + + + Identifies the DiscretionaryLigatures attached property. + The identifier for the DiscretionaryLigatures attached property. + + + Identifies the EastAsianExpertForms attached property. + The identifier for the EastAsianExpertForms attached property. + + + Identifies the EastAsianLanguage attached property. + The identifier for the EastAsianLanguage attached property. + + + Identifies the EastAsianWidths attached property. + The identifier for the EastAsianWidths attached property. + + + Identifies the Fraction attached property. + The identifier for the Fraction attached property. + + + Identifies the HistoricalForms attached property. + The identifier for the HistoricalForms attached property. + + + Identifies the HistoricalLigatures attached property. + The identifier for the HistoricalLigatures attached property. + + + Identifies the Kerning attached property. + The identifier for the Kerning attached property. + + + Identifies the MathematicalGreek attached property. + The identifier for the MathematicalGreek attached property. + + + Identifies the NumeralAlignment attached property. + The identifier for the NumeralAlignment attached property. + + + Identifies the NumeralStyle attached property. + The identifier for the NumeralStyle attached property. + + + Identifies the SlashedZero attached property. + The identifier for the SlashedZero attached property. + + + Identifies the StandardLigatures attached property. + The identifier for the StandardLigatures attached property. + + + Identifies the StandardSwashes attached property. + The identifier for the StandardSwashes attached property. + + + Identifies the StylisticAlternates attached property. + The identifier for the StylisticAlternates attached property. + + + Identifies the StylisticSet1 attached property. + The identifier for the StylisticSet1 attached property. + + + Identifies the StylisticSet2 attached property. + The identifier for the StylisticSet2 attached property. + + + Identifies the StylisticSet3 attached property. + The identifier for the StylisticSet3 attached property. + + + Identifies the StylisticSet4 attached property. + The identifier for the StylisticSet4 attached property. + + + Identifies the StylisticSet5 attached property. + The identifier for the StylisticSet5 attached property. + + + Identifies the StylisticSet6 attached property. + The identifier for the StylisticSet6 attached property. + + + Identifies the StylisticSet7 attached property. + The identifier for the StylisticSet7 attached property. + + + Identifies the StylisticSet8 attached property. + The identifier for the StylisticSet8 attached property. + + + Identifies the StylisticSet9 attached property. + The identifier for the StylisticSet9 attached property. + + + Identifies the StylisticSet10 attached property. + The identifier for the StylisticSet10 attached property. + + + Identifies the StylisticSet11 attached property. + The identifier for the StylisticSet11 attached property. + + + Identifies the StylisticSet12 attached property. + The identifier for the StylisticSet12 attached property. + + + Identifies the StylisticSet13 attached property. + The identifier for the StylisticSet13 attached property. + + + Identifies the StylisticSet14 attached property. + The identifier for the StylisticSet14 attached property. + + + Identifies the StylisticSet15 attached property. + The identifier for the StylisticSet15 attached property. + + + Identifies the StylisticSet16 attached property. + The identifier for the StylisticSet16 attached property. + + + Identifies the StylisticSet17 attached property. + The identifier for the StylisticSet17 attached property. + + + Identifies the StylisticSet18 attached property. + The identifier for the StylisticSet18 attached property. + + + Identifies the StylisticSet19 attached property. + The identifier for the StylisticSet19 attached property. + + + Identifies the StylisticSet20 attached property. + The identifier for the StylisticSet20 attached property. + + + Identifies the Variants attached property. + The identifier for the Variants attached property. + + + Provides an inline-level content element that causes content to render with an underlined text decoration. + + + Initializes a new instance of the Underline class. + + + Specifies a logical direction in which to perform certain text operations, such as inserting, retrieving, or navigating through text relative to a specified position (a TextPointer). + + + Backward, or from right to left. + + + Forward, or from left to right. + + + Provides services that are relevant for XAML design surfaces that are hosted in a larger application. + + + Represents a service that resolves resources from an application. This interface is used for design tool hosting scenarios and is not intended for general use. + + + Resolves a resource that is specified by a path and returns a string filename. + The resolved file name. + The local path to resolve. + + + Extends IXamlUIPresenterHost to add GetGenericXamlFilePath. + + + Loads an alternative generic.xaml file into the presenter host at design time. + A local path to the location of the alternative generic.xaml file. + + + Enables presenting a visual tree on a Microsoft Direct3D surface. This type is used for design tool hosting scenarios and is not intended for general use. + + + Gets or sets a value that determines whether the host wants timelines to always run to end. + true to always run timelines to end. Otherwise false. + + + Returns calculated bounds of a placement target that is intended to also display a flyout in the host. Additional out parameters provide more info on how the bounds were calculated. + The calculated placement target bounds. + The placement target element that the Flyout should be positioned in relation to. + A value of the enumeration that declares the host's preferred placement of the Flyout relative to the target. + A value of the enumeration that declares preferred placement of the Flyout. + true if fallback placements are permitted for the Flyout placement logic. false if only the targetPreferredPlacement value should be considered. + + + Invokes the FlyoutBase placement logic, using a suggested size of a control that will show a placement target and its flyout. Returns the bounds that are the result of running the placement logic. + The bounds as calculated by FlyoutBase placement logic. + The bounds of the placement target element, which are passed to FlyoutBase presenter logic. + The desired size of the control that should display the flyout. + The minimum size of the control that should display the flyout. + The bounds of the area that should hold the placement target and flyout. + The desired placement mode to use for FlyoutBase placement logic. + true if fallbacks can be used for the placement mode. false if fallbacks cannot be used. + The actual placement mode used by the invoked FlyoutBase placement logic. + + + Gets or sets the root visual element to draw to the surface. + The element to draw. + + + Gets or sets the string key that identifies the theme set to use from ThemeResourcesXaml. + A string key. + + + Gets or sets the XAML that specifies a resource dictionary. The resource dictionary contains themes that the host should resolve and that should be applied to the content. + A XAML resource dictionary specified in string form. + + + Invokes the SizeChanged event on Window.Current. Used by hosts to propagate size changes from host settings to user code, so that a design mode interaction can be differentiated from a run time interaction. + + + Presents the surface, as a synchronous call for the host. + + + Renders the surface. Intended for asynchronous calls via a timer. + + + Specifies the IXamlUIPresenterHost service implementation to use for application resource resolution. + A service implementation. + + + Specifies the width and height of the surface. + A width in pixels. + A height in pixels. + + + Defines the input and input event infrastructure for apps and UI elements. + + + Provides event data for the DoubleTapped event. + + + Initializes a new instance of the DoubleTappedRoutedEventArgs class. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets the PointerDeviceType for the pointer device that initiated the associated input event. + The PointerDeviceType for this event occurrence. + + + Returns the x- and y-coordinates of the pointer position, optionally evaluated against a coordinate origin of a supplied UIElement. + A Point that represents the current x- and y-coordinates of the mouse pointer position. If null was passed as relativeTo, this coordinate is for the overall window. If a relativeTo value other than null was passed, this coordinate is relative to the object referenced by relativeTo. + Any UIElement-derived object that is connected to the same object tree. To specify the object relative to the overall coordinate system, use a relativeTo value of null. + + + A helper class that enables getting and setting the UI element that has focus. + + + Attempts to change focus from the element with focus to the next focusable element in the specified direction. + true if focus moved; otherwise, false. + The direction to traverse (in tab order). + + + Gets the element in the UI that has focus. + The object that has focus. Typically, this is a Control class. + + + Provides event data for the Holding event. + + + Initializes a new instance of the HoldingRoutedEventArgs class. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets the underlying HoldingState for the interaction + A value of the enumeration. + + + Gets the PointerDeviceType for the pointer device that initiated the associated input event. + The PointerDeviceType for this event occurrence. + + + Returns the x- and y-coordinates of the pointer position, optionally evaluated against a coordinate origin of a supplied UIElement. + A Point that represents the current x- and y-coordinates of the mouse pointer position. If null was passed as relativeTo, this coordinate is for the overall window. If a relativeTo value other than null was passed, this coordinate is relative to the object referenced by relativeTo. + Any UIElement-derived object that is connected to the same object tree. To specify the object relative to the overall coordinate system, use a relativeTo value of null. + + + Controls the deceleration of a resizing manipulation during inertia. + + + Gets or sets the rate that resizing slows. + The rate that resizing slows. + + + Gets or sets the amount the element resizes at the end of inertia. + The amount the element resizes at the end of inertia. + + + Controls the deceleration of a rotation manipulation during inertia. + + + Gets or sets the rate the rotation slows in degrees per squared millisecond. + The rate the rotation slows in degrees per squared millisecond. + + + Gets or sets the rotation, in degrees, at the end of the inertial movement. + The rotation, in degrees, at the end of the inertial movement. + + + Controls deceleration on a translation manipulation during inertia. + + + Gets or sets the rate the linear movement slows in device-independent units (1/96th inch per unit) per squared millisecond. + The rate the linear movement slows in device-independent units (1/96th inch per unit) per squared millisecond. + + + Gets or sets the linear movement of the manipulation at the end of inertia. + The linear movement of the manipulation at the end of inertia. + + + Represents information related to the scope of data provided by an input method. + + + Initializes a new instance of the InputScope class. + + + Gets a collection of valid InputScopeName items that are relevant to this InputScope. + A collection of valid InputScopeName items. + + + Identifies a particular named input scope that is relevant to an overall InputScope. + + + Initializes a new instance of the InputScopeName class with no initial value. + + + Initializes a new instance of the InputScopeName class, using an input name based on the InputScopeNameValue enumeration. + An input name based on the InputScopeNameValue enumeration. + + + Gets or sets the specific input scope name value for this InputScopeName. + A value of the enumeration. + + + Provides data for the KeyUp and KeyDown routed events, as well as related attached and Preview events. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled; false to leave the routed event unhandled, which permits the event to potentially route further. The default is false. + + + Gets the keyboard key associated with the event. + A system value that indicates the code for the key referenced by the event. + + + Gets a structure value that reports various system-detected characteristics of the key press, including repeat count and menu status. + A structure value with flags that report status. + + + Provides data for the ManipulationCompleted event. + + + Initializes a new instance of the ManipulationCompletedRoutedEventArgs class. + + + Gets the UIElement that is considered the container of the manipulation. + The UIElement that is considered the container of the manipulation. + + + Gets the overall changes since the beginning of the manipulation. + The overall changes since the beginning of the manipulation. + + + Gets or sets a value that marks the routed event as handled. Setting to true prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled; false to leave the routed event unhandled, which permits the event to potentially route further. The default is false. + + + Gets whether the ManipulationCompleted event occurs during inertia. + true if the ManipulationCompleted event occurs during inertia; false if the event occurs while the user's input device has contact with the element. + + + Gets the PointerDeviceType for the pointer device involved in the manipulation. + A value of the enumeration. + + + Gets the x- and y- screen coordinates of the touch input at completed position. + The x- and y- screen coordinates of the touch input at completed position. + + + Gets the velocities that are used for the manipulation. + The velocities that are used for the manipulation. + + + Provides data for the ManipulationDelta event. + + + Initializes a new instance of the ManipulationDeltaRoutedEventArgs class. + + + Gets the UIElement that is considered the container of the manipulation. + The UIElement that is considered the container of the manipulation. + + + Gets the overall changes since the beginning of the manipulation. + The overall changes since the beginning of the manipulation. + + + Gets the most recent changes of the current manipulation, as a ManipulationDelta. + The most recent changes of the current manipulation. + + + Gets or sets a value that marks the routed event as handled. Setting to true prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled; false to leave the routed event unhandled, which permits the event to potentially route further. The default is false. + + + Gets whether the ManipulationDelta event occurs during inertia. + true if the ManipulationDelta event occurs during inertia; false if the event occurs while the user's input device has contact with the element. + + + Gets the PointerDeviceType for the pointer device involved in the manipulation. + A value of the enumeration. + + + Gets the point from which the manipulation originated. + The point from which the manipulation originated. + + + Gets the rates of the most recent changes to the manipulation. + The rates of the most recent changes to the manipulation. + + + Completes the manipulation without inertia. + + + Provides data for the ManipulationInertiaStarting event. + + + Initializes a new instance of the ManipulationInertiaStartingRoutedEventArgs class. + + + Gets the UIElement that is considered the container of the manipulation. + The UIElement that is considered the container of the manipulation. + + + Gets the overall changes since the beginning of the manipulation. + The overall changes since the beginning of the manipulation. + + + Gets the most recent changes of the current manipulation, as a ManipulationDelta. + The most recent changes of the current manipulation. + + + Get or sets the rate of slowdown of expansion inertial movement. + The rate of slowdown of expansion inertial movement + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets the PointerDeviceType for the pointer device involved in the manipulation. + A value of the enumeration. + + + Gets information about the rotation information associated with the manipulation for this event occurrence. + Manipulation rotation information. + + + Gets information about the translation information associated with the manipulation for this event occurrence. + Manipulation translation information. + + + Gets the rates of the most recent changes to the manipulation. + The rates of the most recent changes to the manipulation. + + + Specifies how a rotation occurs with one point of user input. + + + Initializes a new instance of the ManipulationPivot class with no initial values. + + + Initializes a new instance of the ManipulationPivot class with the specified center and radius values. + The center point of the pivot. + The pivot radius. + + + Gets or sets the center point for rotation manipulations. + The center point for rotation manipulations. + + + Gets or sets the effective radius of rotation for rotation manipulations. + A value in pixels. + + + Provides data for the ManipulationStarted event. + + + Initializes a new instance of the ManipulationStartedRoutedEventArgs class. + + + Gets the UIElement that is considered the container of the manipulation. + The UIElement that is considered the container of the manipulation. + + + Gets the overall changes since the beginning of the manipulation. + The overall changes since the beginning of the manipulation. + + + Gets or sets a value that marks the routed event as handled. Setting to true prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled; false to leave the routed event unhandled, which permits the event to potentially route further. The default is false. + + + Gets the PointerDeviceType for the pointer device involved in the manipulation. + A value of the enumeration. + + + Gets the point from which the manipulation originated. + The point from which the manipulation originated. + + + Completes the manipulation without inertia. + + + Provides data for the ManipulationStarting, event. + + + Initializes a new instance of the ManipulationStartingRoutedEventArgs class. + + + Gets the UIElement that is considered the container of the manipulation. + The UIElement that is considered the container of the manipulation. + + + Gets or sets a value that marks the routed event as handled. Setting to true prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled; false to leave the routed event unhandled, which permits the event to potentially route further. The default is false. + + + Gets or sets which types of manipulations are possible. + One of the enumeration values. The default is All. + + + Gets or sets an object that describes the pivot for a single-point manipulation. + An object that describes the pivot for a single-point manipulation. + + + Provides basic properties for the input pointer associated with a single mouse, pen/stylus, or touch contact. + + + Gets a value that determines whether the pointer device was in contact with a sensor or digitizer at the time that the event was reported. + true if the pointer device was in contact; otherwise, false. + + + Gets a value that indicates whether the pointer device is within detection range of a sensor or digitizer. + true if touch or pen is within detection range or mouse is over; otherwise false + + + Gets the PointerDeviceType for the pointer device. + The PointerDeviceType for this pointer reference. + + + Gets the system-generated identifier for this pointer reference. + The system-generated identifier. + + + Contains the arguments returned by the last pointer event message. + + + Gets or sets a value that marks the routed event as handled, and prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets a value that indicates which key modifiers were active at the time that the pointer event was initiated. + A value or values of the enumeration. + + + Gets a reference to a pointer token. + A pointer token. + + + Retrieves a PointerPoint object that provides basic info on the pointer associated with the event. + A PointerPoint value that represents the pointer point associated with this event. If null was passed as relativeTo, the coordinates are in the frame of reference of the overall window. If a relativeTo value other than null was passed, the coordinates are relative to the object referenced by relativeTo. + Any UIElement-derived object that is connected to the same object tree. To specify the object relative to the overall coordinate system, use a relativeTo value of null. + + + Retrieves a collection of PointerPoint objects that represent the pointer history from the last pointer event up to and including the current pointer event. Each PointerPoint in the collection provides basic info on the pointer associated with the event. + The collection of PointerPoint objects corresponding to the pointer history associated with the event. If relativeTo is null, location coordinates are in the context of the app. Otherwise, the coordinates are relative to the object referenced by relativeTo. + Provides the context for the pointer data. Can be any UIElement-derived object that is connected to the same object tree. If null, location coordinates are in the context of the app. + + + Provides event data for the RightTapped event. + + + Initializes a new instance of the RightTappedRoutedEventArgs class. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets the PointerDeviceType for the pointer device that initiated the associated input event. + The PointerDeviceType for this event occurrence. + + + Returns the x- and y-coordinates of the pointer position, optionally evaluated against a coordinate origin of a supplied UIElement. + A Point that represents the current x- and y-coordinates of the mouse pointer position. If null was passed as relativeTo, this coordinate is for the overall window. If a relativeTo value other than null was passed, this coordinate is relative to the object referenced by relativeTo. + Any UIElement-derived object that is connected to the same object tree. To specify the object relative to the overall coordinate system, use a relativeTo value of null. + + + Provides event data for the Tapped event. + + + Initializes a new instance of the TappedRoutedEventArgs class. + + + Gets or sets a value that marks the routed event as handled. A true value for Handled prevents most handlers along the event route from handling the same event again. + true to mark the routed event handled. false to leave the routed event unhandled, which permits the event to potentially route further and be acted on by other handlers. The default is false. + + + Gets the PointerDeviceType for the pointer device that initiated the associated input event. + The PointerDeviceType for this event occurrence. + + + Returns the x- and y-coordinates of the pointer position, optionally evaluated against a coordinate origin of a supplied UIElement. + A Point that represents the current x- and y-coordinates of the mouse pointer position. If null was passed as relativeTo, this coordinate is for the overall window. If a value other than null for relativeTo was passed, this coordinate is relative to the object referenced by relativeTo. + Any UIElement-derived object that is connected to the same object tree. To specify the object relative to the overall coordinate system, use a relativeTo value of null. + + + Represents the method that will handle the DoubleTapped event. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that will handle the Holding event. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that handles the KeyUp and KeyDown events. + The object where the event handler is attached. + The event data. + + + Represents the method that will handle ManipulationCompleted and related events. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle ManipulationDelta and related events. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the ManipulationInertiaStarting event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle ManipulationStarted and related events. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the ManipulationStarting event. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that will handle pointer message events such as PointerPressed. + The object where the event handler is attached. + Event data for the event. + + + Represents the method that will handle a RightTapped routed event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the Tapped event. + The object where the event handler is attached. + Event data for the event. + + + Specifies a direction, based on tab order, to try to move focus in the app UI. + + + The next element in the tab order. + + + The previous element in the tab order. + + + Specifies a particular named input mode that is used to populate an InputScope. + + + No input scope is applied. + + + Input scope is intended for working with a URL. + + + Input scope is intended for working with a SMTP form e-mail address (accountname@host). + + + Input scope is intended for working with amount and symbol of currency. + + + Input scope is intended for working with digits 0-9. + + + Input scope is intended for working with telephone numbers. + + + Input scope is intended for full-width number characters. + + + Input scope is intended for alphanumeric half-width characters. + + + Input scope is intended for alphanumeric full-width characters. + + + Input scope is intended for Hiragana characters. + + + Input scope is intended for Katakana half-width characters. + + + Input scope is intended for Katakana full-width characters. + + + Input scope is intended for Hanja characters. + + + Input scope is intended for Hangul half-width characters. + + + Input scope is intended for Hangul full-width characters. + + + Input scope is intended for search strings. + + + Input scope is intended for spreadsheet formula strings. + + + Input scope is intended for Chinese half-width characters. + + + Input scope is intended for Chinese full-width characters. + + + Input scope is intended for native script. + + + Input scope is intended for chat strings. + + + Input scope is intended for working with a name or telephone number. + + + Specifies the tabbing behavior across tab stops for a tabbing sequence within a container. + + + Tab indexes are considered on the local subtree only inside this container. + + + Focus returns to the first or the last keyboard navigation stop inside of a container when the first or last keyboard navigation stop is reached. + + + The container and all of its child elements as a whole receive focus only once. + + + Specifies how a target UI element interprets manipulation events. This enumeration is flagwise to facilitate setting multiple modes. + + + Do not present graphic interaction with manipulation events. + + + Permit manipulation actions that translate the target on the X axis. + + + Permit manipulation actions that translate the target on the Y axis. + + + Permit manipulation actions that translate the target on the X axis but using a rails mode. + + + Permit manipulation actions that translate the target on the Y axis but using a rails mode. + + + Permit manipulation actions that rotate the target. + + + Permit manipulation actions that scale the target. + + + Apply inertia to translate actions. + + + Apply inertia to rotate actions. + + + Apply inertia to scale actions. + + + Enable all manipulation interaction modes except those supported through Direct Manipulation. + + + Enable system-driven touch interactions supported through Direct Manipulation. + + + Defines the contract for commanding. + + + Defines the method that determines whether the command can execute in its current state. + true if this command can be executed; otherwise, false. + Data used by the command. If the command does not require data to be passed, this object can be set to null. + + + Defines the method to be called when the command is invoked. + Data used by the command. If the command does not require data to be passed, can be set to null. + + + Occurs when changes occur that affect whether the command should execute. + + + Provides basic types for cross-framework integration and interoperation. Notably, this includes interfaces and support types that enable binding patterns. + + + Provides the event data for a CollectionChanged event. + + + Initializes a new instance of the NotifyCollectionChangedEventArgs class. + The Action value to report. + The NewItems value to report. + The OldItems value to report. + The NewStartingIndex value to report. + The OldStartingIndex value to report. + + + Gets the description of the action that caused the event. + The description of the action that caused the event, as a value of the enumeration. + + + Gets the items affected by an action. + The bindable vector of items affected by an action. + + + Gets the index at which the change occurred. + The index at which the change occurred. + + + Gets the item affected by a Replace or Remove action. + The bindable vector of items affected by a Replace or Remove action. + + + Gets the starting index at which a Move, Remove, or Replace action occurred. + The zero-based index at which a Move, Remove, or Replace action occurred. + + + Represents the method that will handle the VectorChanged event. + The object where the handler is attached. + Event data, loosely typed. + + + Represents the method that will handle the CollectionChanged event. + The object where the handler is attached. + Event data for the event. + + + Describes the action that caused a CollectionChanged event. + + + One or more items were added to the collection. + + + One or more items were removed from the collection. + + + One or more items were replaced in the collection. + + + One or more items were moved within the collection. + + + The content of the collection changed dramatically. + + + Provides basic guidance about the origin of a type. Used as a value by TypeName. + + + The type is a language-level primitive. + + + The type is declared through WinMD (Windows Runtime metadata). + + + The type is a custom type declared by means other than WinMD. + + + Extends IIterable to enable data-binding infrastructure requirements. + + + Returns a bindable iterator that iterates over the items in the collection. + The bindable iterator. + + + Supports bindable iteration over a collection. + + + Gets the current item in the collection. + The current item in the collection. + + + Gets a value that indicates whether there is a current item or the iterator is at the end of the collection. + true if the iterator refers to a valid item that is in the collection; otherwise, false. + + + Moves the iterator forward to the next item and returns HasCurrent. + true if the iterator refers to a valid item that is in the collection; otherwise, false. + + + Extends IBindableVector by adding a VectorChanged event for change notification. + + + Occurs when the vector collection changes (add, delete, item change). + + + Represents a writeable vector collection of objects that is bindable. + + + Gets the number of items in the vector. + The number of items in the vector. + + + Appends an item to the end of the vector. + The item to append to the vector. + + + Removes all items from the vector. + + + Returns the item at the specified index in the vector. + The item at the specified index. + The zero-based index of the item in the vector to return. + + + Returns an immutable view of the vector. + The view of the vector. + + + Returns the index of a specified item in the vector. + true if the item is found; false if the item is not found. + The item to find in the vector. + The zero-based index of the item if found. 0 is returned if the item is not found, so be sure to check the return value. + + + Inserts an item into a vector at a specified index. + The index at which to insert. + The item to insert. + + + Removes the item at the specified index in the vector. + The zero-based index of the vector, at which to remove the item. + + + Removes the last item in the vector. + + + Sets the item value at the specified index of the vector. + The zero-based index of the vector, at which to set the value. + The item value to set. + + + Represents a read-only vector collection of objects that is bindable. + + + Gets the number of items in the vector. + The number of items in the vector. + + + Returns the item at the specified index in the vector. + The item at the specified index. + The zero-based index of the item in the vector to return. + + + Returns the index of a specified item in the vector. + true if the item is found; false if the item is not found. + The item to find in the vector. + The zero-based index of the item if found. 0 is returned if the item is not found, so be sure to check the return value. + + + Provides a collection-changed pattern interface for C++ bindable classes. + + + Occurs when the collection changes. + + + Substitutes for System.Type such that type information reported by other API does not have a dependency on the common language runtime (CLR). This structure is used as a value by properties such as UnderlyingType and Type. + + + Name of the type. + + + Basic guidance regarding the origin of the type. + + + Gets or sets the TypeKind classification of programming type that this TypeName represents. + + + + Gets or sets the name of the programming type that this TypeName represents. + + + + Provides XAML language support API for Windows Store app and the Windows Runtime. + + + Indicates which property of a type is the XAML content property. A XAML processor uses this information when processing XAML child elements of XAML representations of the attributed type. + + + Initializes a new instance of the ContentPropertyAttribute class. + + + Provides infrastructure support for event wiring and build actions. + + + Attaches events and names to XAML-initiated content. + An identifier token to distinguish calls. + The target to connect events and names to. + + + Provides the means to report XAML-type system specifics about XAML members. Using this interface contract, XAML parsers can load any custom types and members thereof that are defined in your app and are referenced in XAML files. + + + Gets a value that indicates whether the XAML member is an attachable member. + true if the XAML member is an attachable member; otherwise, false. + + + Gets a value that indicates whether the XAML member is implemented as a dependency property. + true if the XAML member is implemented as a dependency property; otherwise, false. + + + Gets whether the XAML member is read-only in its backing implementation. + true if the backing member is read-only; otherwise, false. + + + Gets the XamlName name string that declares the XAML member. + The XamlName name string that declares the XAML member. + + + Gets the IXamlType of the type where the member can exist. + The IXamlType of the type where the member can exist. + + + Gets the IXamlType of the type that is used by the member. + The IXamlType of the type that is used by the member. + + + Provides a get-value utility for this IXamlMember. + The member value. + The object instance to get the member value from. + + + Provides a set-value utility for this IXamlMember. + The object instance to set the member value on. + The member value to set. + + + Implements XAML schema context concepts that support XAML parsing. + + + Implements XAML schema context access to underlying type mapping, based on providing a helper value that describes a type. + The schema context's implementation of the IXamlType concept. + The type as represented by the relevant type system or interoperation support type. + + + Implements XAML schema context access to underlying type mapping, based on specifying a full type name. + The schema context's implementation of the IXamlType concept. + The name of the class for which to return a XAML type mapping. + + + Gets the set of XMLNS (XAML namespace) definitions that apply to the context. + The set of XMLNS (XAML namespace) definitions. + + + Provides the means to report XAML-type system specifics about XAML types. Using this interface contract, XAML parsers can load any custom types and members thereof that are defined in your app and are referenced in XAML files. + + + Gets the IXamlType for the immediate base type of the XAML type. Determination of this value is based on the underlying type for core types. + The IXamlType for the immediate base type of the XAML type. + + + Gets the IXamlMember information for the XAML content property of this IXamlType. + IXamlMember information for the XAML content property of the IXamlType. May be null if no XAML content property exists. + + + Gets the full class name of the underlying type. + The full class name of the underlying type. + + + Gets a value that indicates whether the IXamlType represents an array. + true if the IXamlType represents an array; otherwise, false. + + + Gets a value that declares whether the type is bindable. + true if the type is bindable, false if the type is not bindable. + + + Gets a value that indicates whether this IXamlType represents a collection. + true if this IXamlType represents a collection; otherwise, false. + + + Gets a value that indicates whether this IXamlType represents a constructible type, as per the XAML definition. + true if this IXamlType represents a constructible type; otherwise, false. + + + Gets a value that indicates whether this IXamlType represents a dictionary/map. + true if this IXamlType represents a dictionary/map; otherwise, false. + + + Gets a value that indicates whether the IXamlType represents a markup extension. + true if the IXamlType represents a markup extension; otherwise, false. + + + Gets a value that provides the type information for the Items property of this IXamlType. + The IXamlType information for the type of the items in the collection; otherwise, null if this IXamlType does not represent a collection. + + + Gets a value that provides the type information for the Key property of this IXamlType, if this IXamlType represents a dictionary/map. + The IXamlType information for the type of the key for dictionary usage; otherwise, null if this IXamlType does not represent a dictionary/map. + + + Gets information for the backing type. + The backing type as represented by the relevant type system or interop support type. + + + Given a XAML type, sets its values for initialization and returns a usable instance. + The usable instance. + + + Adds an item to a custom map type. + The type instance to set the map item to. + The key of the map item to add. + The value of the map item to add. + + + Adds an item to a custom vector type. + The type instance to set the item to. + The value of the item to add. + + + Creates a type system representation based on a string. The main scenario for this usage is creating an enumeration value and mapping the appropriate enumeration. + The resulting type system representation. + The string to create from. + + + Returns the IXamlMember information for a specific named member from this IXamlType. + The IXamlMember information for the member, if a member as specified by name was found; otherwise, null. + The name of the member to get (as a string). + + + Invokes any necessary pre-activation logic as required by the XAML schema context and its platform dependencies. + + + Records error information produced by calls to XamlBinaryWriter.Write. + + + The index of the stream in the original inputStreams parameter for XamlBinaryWriter.Write where the error occurred. + + + The line number in the input XAML text representation where the error was encountered. + + + The line position in the input XAML text representation where the error was encountered. + + + Produces a pre-parsed binary representation of a XAML production. + + + Produces a binary representation of XAML. Input streams are produced in text representation, and output streams are populated with XAML in binary (XBF) representation. + A structure that captures any error information that is reported by the conversion into XBF format. + The set of input streams. These are expected to access the text representation of the XAML to write into XBF format. + The set of output streams. When the method returns each output stream provides access to the XBF binary representation. You'd typically use this stream to create a file. + A helper object that maps types for XAML productions. + + + The exception that is thrown when an error occurs while parsing XAML. + + + Initializes a new instance of the XamlParseException class. + + + Initializes a new instance of the XamlParseException class with a specified error message. + The message that describes the error. + + + Initializes a new instance of the XamlParseException class with a specified error message and a reference to the inner exception that is the cause of this exception. + The message that describes the error. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + Provides a XAML processor engine for parsing XAML and creating corresponding object trees. + + + Parses a well-formed XAML fragment and creates a corresponding object tree, and returns the root of the object tree. + The root object of the created object tree. + A string that contains a valid XAML fragment. + + + Parses a well-formed XAML fragment creates a corresponding object tree, and returns the root of the object tree. Also performs load-time validation of any linked templates. + The root object of the created object tree. + A string that contains a valid XAML fragment. + + + Specifies a mapping on a per-assembly basis between a XAML namespace and a library-code namespace for backing types, which is then used for type resolution by a XAML object writer or XAML schema context. + + + The XAML namespace identifier specified in the attribute. + + + The library-code namespace, specified as a string. + + + Provides basic media support, graphics primitives, and brush-drawing API. + + + Represents an elliptical arc between two points. + + + Initializes a new instance of the ArcSegment class. + + + Gets or sets a value that indicates whether the arc should be greater than 180 degrees. + true if the arc should be greater than 180 degrees; otherwise, false. + + + Gets or sets the endpoint of the elliptical arc. + The point to which the arc is drawn. The default is a Point with value 0,0. + + + Gets or sets the amount (in degrees) by which the ellipse is rotated about the x-axis. + The amount (in degrees) by which the ellipse is rotated about the x-axis. The default is 0. + + + Gets or sets the x-radius and y-radius of the arc as a Size structure. + A Size structure that describes the x-radius and y-radius of the elliptical arc. The Size structure's Width value specifies the arc's x-radius; its Height value specifies the arc's y-radius. The default is a Size with value 0,0. + + + Gets or sets a value that specifies whether the arc is drawn in the Clockwise or Counterclockwise direction. + One of the enumeration values that specifies the direction in which the arc is drawn. The default is Counterclockwise. + + + Identifies the IsLargeArc dependency property. + The IsLargeArc dependency property identifier. + + + Identifies the Point dependency property. + The Point dependency property identifier. + + + Identifies the RotationAngle dependency property. + The RotationAngle dependency property identifier. + + + Identifies the Size dependency property. + The Size dependency property identifier. + + + Identifies the SweepDirection dependency property. + The SweepDirection dependency property identifier. + + + Represents a cubic Bezier curve drawn between two points. + + + Initializes a new instance of the BezierSegment class. + + + Gets or sets the first control point of the curve. + The first control point of the curve. The default is a Point with value 0,0. + + + Gets or sets the second control point of the curve. + The second control point of the curve. + + + Gets or sets the end point of the curve. + The end point of the curve. + + + Identifies the Point1 dependency property. + The identifier for the Point1 dependency property. + + + Identifies the Point2 dependency property. + The identifier for the Point2 dependency property. + + + Identifies the Point3 dependency property. + The identifier for the Point3 dependency property. + + + Represents the behavior of caching a visual element or tree of elements as bitmap surfaces. + + + Initializes a new instance of the BitmapCache class. + + + Defines objects used to paint graphical objects. Classes that derive from Brush describe how the area is painted. + + + Provides base class initialization behavior for Brush-derived classes. + + + Gets or sets the degree of opacity of a Brush. + The value of the Opacity property is expressed as a value between 0 and 1.0. The default value is 1.0, which is full opacity. 0 is transparent opacity. + + + Gets or sets the transformation that is applied to the brush using relative coordinates. + The transformation that is applied to the brush using relative coordinates. The default value is null. + + + Gets or sets the transformation that is applied to the brush. + The transformation to apply to the brush. + + + Identifies the Opacity dependency property. + The Opacity dependency property identifier. + + + Identifies the RelativeTransform dependency property. + The RelativeTransform dependency property identifier. + + + Identifies the Transform dependency property. + The Transform dependency property identifier. + + + Represents cached content modes for graphics acceleration features. + + + Provides base class initialization behavior for CacheMode derived classes. + + + Applies multiple transform operations to an object. + + + Initializes a new instance of the CompositeTransform class. + + + Gets or sets the x-coordinate of the center point for all transforms specified by the CompositeTransform. + The x-coordinate of the center point for all transforms specified by the CompositeTransform. + + + Gets or sets the y-coordinate of the center point for all transforms specified by the CompositeTransform. + The y-coordinate of the center point for all transforms specified by the CompositeTransform. + + + Gets or sets the angle, in degrees, of clockwise rotation. + The angle, in degrees, of clockwise rotation. The default is 0. + + + Gets or sets the x-axis scale factor. You can use this property to stretch or shrink an object horizontally. + The scale factor along the x-axis. The default is 1. + + + Gets or sets the y-axis scale factor. You can use this property to stretch or shrink an object vertically. + The scale factor along the y-axis. The default is 1. + + + Gets or sets the x-axis skew angle, which is measured in degrees counterclockwise from the y-axis. A skew transform can be useful for creating the illusion of three-dimensional depth in a two-dimensional object. + The skew angle, which is measured in degrees counterclockwise from the y-axis. The default is 0. + + + Gets or sets the y-axis skew angle, which is measured in degrees counterclockwise from the x-axis. A skew transform can be useful for creating the illusion of three-dimensional depth in a two-dimensional object. + The skew angle, which is measured in degrees counterclockwise from the x-axis. The default is 0. + + + Gets or sets the distance to translate along the x-axis. + The distance to translate (move) an object along the x-axis, in pixels. This property is read/write. The default is 0. + + + Gets or sets the distance to translate (move) an object along the y-axis. + The distance to translate (move) an object along the y-axis, in pixels. The default is 0. + + + Identifies the CenterX dependency property. + The identifier for the CenterX dependency property. + + + Identifies the CenterY dependency property. + The identifier for the CenterY dependency property. + + + Identifies the Rotation dependency property. + The identifier for the Rotation dependency property. + + + Identifies the ScaleX dependency property. + The identifier for the ScaleX dependency property. + + + Identifies the ScaleY dependency property. + The identifier for the ScaleY dependency property. + + + Identifies the SkewX dependency property. + The identifier for the SkewX dependency property. + + + Identifies the SkewY dependency property. + The identifier for the SkewY dependency property. + + + Identifies the TranslateX dependency property. + The identifier for the TranslateX dependency property. + + + Identifies the TranslateY dependency property. + The identifier for the TranslateY dependency property. + + + Represents the composited display surface for an application. + + + Occurs when the core rendering process renders a frame. + + + Occurs when an underlying major change occurs, such as a DirectX device change. Typically the application must regenerate its surface contents when notified of this event. + + + Represents an ordered collection of Double values. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Double value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Double value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the DoubleCollection class. + + + Represents the geometry of a circle or ellipse. + + + Initializes a new instance of the EllipseGeometry class. + + + Gets or sets the center point of the EllipseGeometry. + The center point of the EllipseGeometry. + + + Gets or sets the x-radius value of the EllipseGeometry. + The x-radius value of the EllipseGeometry. + + + Gets or sets the y-radius value of the EllipseGeometry. + The y-radius value of the EllipseGeometry. + + + Identifies the Center dependency property. + The Center dependency property identifier. + + + Identifies the RadiusX dependency property. + The RadiusX dependency property identifier. + + + Identifies the RadiusY dependency property. + The RadiusY dependency property identifier. + + + Represents a family of related fonts. + + + Initializes a new instance of the FontFamily class from the specified font family string. + The family name of the font to represent. This can include a hashed suffix. + + + Gets the font family name that is used to construct the FontFamily object. + The font family name of the FontFamily object. + + + Provides generalized transformation support for objects, such as points and rectangles. + + + Provides base class initialization behavior for GeneralTransform-derived classes. + + + Gets the inverse transformation of this GeneralTransform, if possible. + An inverse of this instance, if possible; otherwise null. + + + Implements the behavior for return value of Inverse in a derived or custom GeneralTransform. + The value that should be returned as Inverse by the GeneralTransform. + + + Transforms the specified bounding box and returns an axis-aligned bounding box that is exactly large enough to contain it. + The smallest axis-aligned bounding box possible that contains the transformed rect. + The bounding box to transform. + + + Provides the means to override the TransformBounds behavior in a derived transform class. + The smallest axis-aligned bounding box possible that contains the transformed rect. + The bounding box to transform. + + + Transforms the specified point and returns the result. + The result of transforming point. + The point to transform. + + + Attempts to transform the specified point and returns a value that indicates whether the transformation was successful. + true if inPoint was transformed; otherwise, false. + The point to transform. + The result of transforming inPoint. + + + Provides the means to override the TryTransform behavior in a derived transform class. + true if inPoint was transformed; otherwise, false. + The point to transform. + The result of transforming inPoint. + + + Provides a base class for objects that define geometric shapes. Geometry objects can be used for clipping regions and as geometry definitions for rendering two-dimensional graphical data as a Path. + + + Gets a Rect that specifies the axis-aligned bounding box of the Geometry. + The axis-aligned bounding box of the Geometry. + + + Gets an empty geometry object. + The empty geometry object. + + + Gets the standard tolerance used for polygonal approximation. + The standard tolerance. The default value is 0.25. + + + Gets or sets the Transform object applied to a Geometry. + The transformation applied to the Geometry. Note that this value may be a single Transform or a list of Transform items. + + + Identifies the Transform dependency property. + The identifier for the Transform dependency property. + + + Represents a collection of Geometry objects. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator object. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the GeometryCollection class. + + + Represents a composite geometry, composed of other Geometry objects. + + + Initializes a new instance of the GeometryGroup class. + + + Gets or sets the GeometryCollection that contains the objects that define this GeometryGroup. + A collection containing the children of this GeometryGroup. + + + Gets or sets how the intersecting areas of the objects contained in this GeometryGroup are combined. + One of the enumeration values that specifies how the intersecting areas are combined to form the resulting area. The default is EvenOdd. + + + Identifies the Children dependency property. + The identifier for the Children dependency property. + + + Identifies the FillRule dependency property. + The identifier for the FillRule dependency property. + + + An abstract class that describes a gradient, composed of gradient stops. Classes that derive from GradientBrush describe different ways of interpreting gradient stops. + + + Provides base class initialization behavior for GradientBrush-derived classes. + + + Gets or sets a ColorInterpolationMode enumeration value that specifies how the gradient's colors are interpolated. + Specifies how the colors in a gradient are interpolated. The default is SRgbLinearInterpolation. + + + Gets or sets the brush's gradient stops. + A collection of the GradientStop objects associated with the brush, each of which specifies a color and an offset along the brush's gradient axis. The default is an empty GradientStopCollection. + + + Gets or sets a BrushMappingMode enumeration value that specifies whether the positioning coordinates of the gradient brush are absolute or relative to the output area. + A BrushMappingMode value that specifies how to interpret the gradient brush's positioning coordinates. The default is RelativeToBoundingBox. + + + Gets or sets the type of spread method that specifies how to draw a gradient that starts or ends inside the bounds of the object to be painted. + The type of spread method used to paint the gradient. The default is Pad. + + + Identifies the ColorInterpolationMode dependency property. + The identifier for the ColorInterpolationMode dependency property. + + + Identifies the GradientStops dependency property. + The identifier for the GradientStops dependency property. + + + Identifies the MappingMode dependency property. + The identifier for the MappingMode dependency property. + + + Identifies the SpreadMethod dependency property. + The identifier for the SpreadMethod dependency property. + + + Describes the location and color of a transition point in a gradient. + + + Initializes a new instance of the GradientStop class. + + + Gets or sets the color of the gradient stop. + The color of the gradient stop. The default is Transparent. + + + Gets the location of the gradient stop within the gradient vector. + The relative location of this gradient stop along the gradient vector. The default is 0. + + + Identifies the Color dependency property. + The identifier for the Color dependency property. + + + Identifies the Offset dependency property. + The identifier for the Offset dependency property. + + + Represents a collection of GradientStop objects that can be individually accessed by index. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator object. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The GradientStop value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the GradientStop value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the GradientStopCollection class. + + + Paints an area with an image. The image source is typically obtained from file formats such as Joint Photographic Experts Group (JPEG). + + + Initializes a new instance of the ImageBrush class. + + + Gets or sets the image displayed by this ImageBrush. + The image displayed by this ImageBrush. + + + Occurs when there is an error associated with image retrieval or format. + + + Occurs when the image source is downloaded and decoded with no failure. You can use this event to determine the size of an image before rendering it. + + + Identifies the ImageSource dependency property. + The identifier for the ImageSource dependency property. + + + Provides an object source type for Source and ImageSource. + + + Paints an area with a linear gradient. + + + Initializes a new instance of the LinearGradientBrush class. + + + Initializes a new instance of the LinearGradientBrush class that has the specified GradientStopCollection and angle. + The GradientStops to set on this brush. + A System.Double that represents the angle, in degrees, of the gradient. A value of 0 creates a horizontal gradient, and a value of 90 creates a vertical gradient. Negative values are permitted, as are values over 360 (which are treated as mod 360). + + + Gets or sets the ending two-dimensional coordinates of the linear gradient. + The ending two-dimensional coordinates of the linear gradient. The default is a Point with value 1,1. + + + Gets or sets the starting two-dimensional coordinates of the linear gradient. + The starting two-dimensional coordinates for the linear gradient. The default is a Point with value 0,0. + + + Identifies the EndPoint dependency property. + The identifier for the EndPoint dependency property. + + + Identifies the StartPoint dependency property. + The identifier for the StartPoint dependency property. + + + Represents the geometry of a line. + + + Initializes a new instance of the LineGeometry class that has no length. + + + Gets or sets the end point of a line. + The end point of the line. The default is a Point with value 0,0. + + + Gets or sets the start point of the line. + The start point of the line. The default is a Point with value 0,0. + + + Identifies the EndPoint dependency property. + The identifier for the EndPoint dependency property. + + + Identifies the StartPoint dependency property. + The identifier for the StartPoint dependency property. + + + Represents a line drawn between two points, which can be part of a PathFigure within Path data. + + + Initializes a new instance of the LineSegment class. + + + Gets or sets the end point of the line segment. + The end point of the line segment. The default is a Point with value 0,0. + + + Identifies the Point dependency property. + The identifier for the Point dependency property. + + + Applies a Matrix3D projection to an object. + + + Initializes a new instance of a Matrix3DProjection class. + + + Gets or sets the Matrix3D that is used for the projection that is applied to the object. + The Matrix3D that is used for the projection that is applied to the object. + + + Identifies the ProjectionMatrix dependency property. + The identifier for the ProjectionMatrix dependency property. + + + Provides static helper methods for processing Matrix values. C# and Microsoft Visual Basic code should use members of Matrix instead. + + + Creates a new Matrix based on provided initial Matrix data values. C# and Microsoft Visual Basic code should use Matrix constructor instead. + The created Matrix. + The initial value of M11 for the created Matrix. + The initial value of M12 for the created Matrix. + The initial value of M21 for the created Matrix. + The initial value of M22 for the created Matrix. + The initial value of OffsetX for the created Matrix. + The initial value of OffsetY for the created Matrix. + + + Returns whether the provided Matrix represents an Identity transform. C# and Microsoft Visual Basic code should use IsIdentity instead. + true if the Matrix represents an Identity transform; otherwise, false. + The target Matrix to evaluate. + + + Gets a static constructed Matrix where the values established are representative of an Identity transform. C# and Microsoft Visual Basic code should use Identity instead. + A static constructed Matrix where the values established are representative of an Identity transform. + + + Transforms a provided Matrix using a Point input, and returns a Point result. C# and Microsoft Visual Basic code should use Transform instead. + The Point result of the transform. + The target Matrix to evaluate. + The Point input for the transform operation. + + + Creates an arbitrary affine matrix transformation that is used to manipulate objects or coordinate systems in a two-dimensional plane. + + + Initializes a new instance of the MatrixTransform class. + + + Gets or sets the Matrix that defines this transformation. + The Matrix structure that defines this transformation. The default is an identity Matrix. An identity matrix has a value of 1 in coefficients [1,1], [2,2], and [3,3]; and a value of 0 in the rest of the coefficients. + + + Identifies the Matrix dependency property. + The identifier for the Matrix dependency property. + + + Represents a subsection of a geometry, a single connected series of two-dimensional geometric segments. + + + Initializes a new instance of the PathFigure class. + + + Gets or sets a value that indicates whether this figure's first and last segments are connected. + true if the first and last segments of the figure are connected; otherwise, false. + + + Gets or sets a value that indicates whether the contained area of this PathFigure is to be used for hit-testing, rendering, and clipping. + true if the contained area of this PathFigure is to be used for hit-testing, rendering, and clipping; otherwise, false. The default is true. + + + Gets or sets the collection of segments that define the shape of this PathFigure object. + The collection of segments that define the shape of this PathFigure object. The default is an empty collection. + + + Gets or sets the Point where the PathFigure begins. + The Point where the PathFigure begins. The default is a Point with value 0,0. + + + Identifies the IsClosed dependency property. + The identifier for the IsClosed dependency property. + + + Identifies the IsFilled dependency property. + The identifier for the IsFilled dependency property. + + + Identifies the Segments dependency property. + The identifier for the Segments dependency property. + + + Identifies the StartPoint dependency property. + The identifier for the StartPoint dependency property. + + + Represents a collection of PathFigure objects that collectively make up the geometry of a PathGeometry. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The PathFigure value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the PathFigure value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the PathFigureCollection class. + + + Represents a complex shape that may be composed of arcs, curves, ellipses, lines, and rectangles. + + + Initializes a new instance of the PathGeometry class. + + + Gets or sets the collection of PathFigure objects that describe the contents of a path. + A collection of PathFigure objects that describe the contents of a path. Each individual PathFigure describes a shape. + + + Gets or sets a value that determines how the intersecting areas contained in the PathGeometry are combined. + A FillRule enumeration value that indicates how the intersecting areas of the PathGeometry are combined. The default is EvenOdd. + + + Identifies the Figures dependency property. + The identifier for the Figures dependency property. + + + Identifies the FillRule dependency property. + The identifier for the FillRule dependency property. + + + Represents a segment of a PathFigure object. + + + Represents a collection of PathSegment objects that can be individually accessed by index. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The PathSegment value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the PathSegment value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the PathSegmentCollection class. + + + Represents a perspective transform (a 3-D-like effect) on an object. + + + Initializes a new instance of the PlaneProjection class. + + + Gets or sets the x-coordinate of the center of rotation of the object that you rotate. + The x-coordinate of the center of rotation of the object that you rotate. Typical values are between 0 and 1 with a value of 0 corresponding to one edge of the object and 1 to the opposite edge. Values outside this range are allowed and move the center of rotation accordingly. The default is 0.5 (the center of object). + + + Gets or sets the y-coordinate of the center of rotation of the object that you rotate. + The y-coordinate of the center of rotation of the object that you rotate. Typical values are between 0 and 1 with a value of 0 corresponding to one edge of the object and 1 to the opposite edge. Values outside this range are allowed and move the center of rotation accordingly. The default is 0.5 (the center of object). + + + Gets or sets the z-coordinate of the center of rotation of the object that you rotate. + The z-coordinate of the center of rotation of the object that you rotate. The default is 0. Values greater than 0 correspond to coordinates in front of the plane of the object, and negative values correspond to coordinates behind the plane of the object. + + + Gets or sets the distance that the object is translated along the x-axis of the screen. + The distance that the object is translated along the x-axis of the screen. + + + Gets or sets the distance that the object is translated along the y-axis of the screen. + The distance that the object is translated along the y-axis of the screen. + + + Gets or sets the distance that the object is translated along the z-axis of the screen. + The distance that the object is translated along the z-axis of the screen. + + + Gets or sets the distance that the object is translated along the x-axis of the plane of the object. + The distance that the object is translated along the x-axis of the plane of the object. + + + Gets or sets the distance that the object is translated along the y-axis of the plane of the object. + The distance that the object is translated along the y-axis of the plane of the object. + + + Gets or sets the distance that the object is translated along the z-axis of the plane of the object. + The distance that the object is translated along the z-axis of the plane of the object. + + + Gets the projection matrix of the PlaneProjection. + The projection matrix of the PlaneProjection. The default value is null. + + + Gets or sets the number of degrees to rotate the object around the x-axis of rotation. + The number of degrees to rotate the object around the x-axis of rotation. The default is 0. + + + Gets or sets the number of degrees to rotate the object around the y-axis of rotation. + The number of degrees to rotate the object around the y-axis of rotation. The default is 0. + + + Gets or sets the number of degrees to rotate the object around the z-axis of rotation. + The number of degrees to rotate the object around the z-axis of rotation. The default is 0. + + + Identifies the CenterOfRotationX dependency property. + The identifier for the CenterOfRotationX dependency property. + + + Identifies the CenterOfRotationY dependency property. + The identifier for the CenterOfRotationY dependency property. + + + Identifies the CenterOfRotationZ dependency property. + The identifier for the CenterOfRotationZ dependency property. + + + Identifies the GlobalOffsetX dependency property. + The identifier for the GlobalOffsetX dependency property. + + + Identifies the GlobalOffsetY dependency property. + The identifier for the GlobalOffsetY dependency property. + + + Identifies the GlobalOffsetZ dependency property. + The identifier for the GlobalOffsetZ dependency property. + + + Identifies the LocalOffsetX dependency property. + The identifier for the LocalOffsetX dependency property. + + + Identifies the LocalOffsetY dependency property. + The identifier for the LocalOffsetY dependency property. + + + Identifies the LocalOffsetZ dependency property. + The identifier for the LocalOffsetZ dependency property. + + + Identifies the ProjectionMatrix dependency property. + The identifier for the ProjectionMatrix dependency property. + + + Identifies the RotationX dependency property. + The identifier for the RotationX dependency property. + + + Identifies the RotationY dependency property. + The identifier for the RotationY dependency property. + + + Identifies the RotationZ dependency property. + The identifier for the RotationZ dependency property. + + + Represents a collection of Point values that can be individually accessed by index. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + Adds a new item to the collection. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator object. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Point value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Point value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the PointCollection class. + + + Represents one or more cubic Bezier curves. + + + Initializes a new instance of the PolyBezierSegment class. + + + Gets or sets the Point collection that defines this PolyBezierSegment object. + The collection of points that defines this PolyBezierSegment object. + + + Identifies the Points dependency property. + The identifier for the Points dependency property. + + + Represents a set of line segments defined by a Point collection with each Point specifying the end point of a line segment. + + + Initializes a new instance of the PolyLineSegment class. + + + Gets or sets the collection of Point values that defines this PolyLineSegment object. + The points that define this PolyLineSegment object. + + + Identifies the Points dependency property. + The identifier for the Points dependency property. + + + Represents a set of quadratic Bezier segments. + + + Initializes a new instance of the PolyQuadraticBezierSegment class. + + + Gets or sets the Point collection that defines this PolyQuadraticBezierSegment object. + A collection of points that defines the shape of this PolyQuadraticBezierSegment object. The default value is an empty collection. + + + Identifies the Points dependency property. + The identifier for the Points dependency property. + + + Provides a base class for projections, which describe how to transform an object in 3-D space using perspective transforms. + + + Provides base class initialization behavior for Projection-derived classes. + + + Creates a quadratic Bezier curve between two points in a PathFigure. + + + Initializes a new instance of the QuadraticBezierSegment class. + + + Gets or sets the control point of the curve. + The control point of this QuadraticBezierSegment. The default value is a Point with value 0,0. + + + Gets or sets the end Point of this QuadraticBezierSegment. + The end point of this QuadraticBezierSegment. The default value is a Point with value 0,0. + + + Identifies the Point1 dependency property. + The identifier for the Point1 dependency property. + + + Identifies the Point2 dependency property. + The identifier for the Point2 dependency property. + + + Provides event data for the RateChanged event. + + + Initializes a new instance of the RateChangedRoutedEventArgs class. + + + Describes a two-dimensional rectangular geometry. + + + Initializes a new instance of the RectangleGeometry class and creates a rectangle with zero area. + + + Gets or sets the dimensions of the rectangle. + The Rect structure that describes the position and size of the rectangle. The default is null. + + + Identifies the Rect dependency property. + The identifier for the Rect dependency property. + + + Provides event data for the Rendering event. + + + Gets the time when the frame rendered, for timing purposes + The time when the frame rendered. + + + Rotates an object clockwise about a specified point in a two-dimensional x-y coordinate system. + + + Initializes a new instance of the RotateTransform class. + + + Gets or sets the angle, in degrees, of clockwise rotation. + The angle, in degrees, of clockwise rotation. The default is 0. + + + Gets or sets the x-coordinate of the rotation center point. + The x-coordinate of the center of rotation. The default is 0. + + + Gets or sets the y-coordinate of the rotation center point. + The y-coordinate of the center of rotation. The default is 0. + + + Identifies the Angle dependency property. + The identifier for the Angle dependency property. + + + Identifies the CenterX dependency property. + The identifier for the CenterX dependency property. + + + Identifies the CenterY dependency property. + The identifier for the CenterY dependency property. + + + Scales an object in the two-dimensional x-y coordinate system. + + + Initializes a new instance of the ScaleTransform class. + + + Gets or sets the x-coordinate of the center point of this ScaleTransform. + The x-coordinate of the center point of this ScaleTransform. The default is 0. + + + Gets or sets the y-coordinate of the center point of this ScaleTransform. + The y-coordinate of the center point of this ScaleTransform. The default is 0. + + + Gets or sets the x-axis scale factor. + The scale factor along the x-axis. The default is 1. + + + Gets or sets the y-axis scale factor. + The scale factor along the y-axis. The default is 1. + + + Identifies the CenterX dependency property. + The identifier for the CenterX dependency property. + + + Identifies the CenterY dependency property. + The identifier for the CenterY dependency property. + + + Identifies the ScaleX dependency property. + The identifier for the ScaleX dependency property. + + + Identifies the ScaleY dependency property. + The identifier for the ScaleY dependency property. + + + Represents a two-dimensional skew. + + + Initializes a new instance of the SkewTransform class. + + + Gets or sets the x-axis skew angle, which is measured in degrees counterclockwise from the y-axis. + The skew angle, which is measured in degrees counterclockwise from the y-axis. The default is 0. + + + Gets or sets the y-axis skew angle, which is measured in degrees counterclockwise from the x-axis. + The skew angle, which is measured in degrees counterclockwise from the x-axis. The default is 0. + + + Gets or sets the x-coordinate of the transform center. + The x-coordinate of the transform center. The default is 0. + + + Gets or sets the y-coordinate of the transform center. + The y-coordinate of the transform center. The default is 0. + + + Identifies the AngleX dependency property. + The identifier for the AngleX dependency property. + + + Identifies the AngleY dependency property. + The identifier for the AngleY dependency property. + + + Identifies the CenterX dependency property. + The identifier for the CenterX dependency property. + + + Identifies the CenterY dependency property. + The identifier for the CenterY dependency property. + + + Paints an area with a solid color. + + + Initializes a new instance of the SolidColorBrush class with no color. + + + Initializes a new instance of the SolidColorBrush class with the specified Color. + The color to apply to the brush. + + + Gets or sets the color of this SolidColorBrush. + The brush's color. The default value is Transparent. + + + Identifies the Color dependency property. + The identifier for the Color dependency property. + + + Base class that describes a way to paint a region. + + + Provides base class initialization behavior for TileBrush-derived classes. + + + Gets or sets the horizontal alignment of content in the TileBrush base tile. + A value that specifies the horizontal position of TileBrush content in its base tile. The default value is Center. + + + Gets or sets the vertical alignment of content in the TileBrush base tile. + A value that specifies the vertical position of TileBrush content in its base tile. The default value is Center. + + + Gets or sets a value that specifies how the content of this TileBrush stretches to fit its tiles. + A value that specifies how this TileBrush content is projected onto its base tile. The default value is Fill. + + + Identifies the AlignmentX dependency property. + The identifier for the AlignmentX dependency property. + + + Identifies the AlignmentY dependency property. + The identifier for the AlignmentY dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Represents metadata associated with a specific point in a media file. + + + Initializes a new instance of the TimelineMarker class. + + + Gets or sets the text value of a TimelineMarker. + The text value of the TimelineMarker. The default value is an empty string. + + + Gets or sets the time at which a TimelineMarker is reached. + The time at which the TimelineMarker is reached. The default value is null. + + + Gets or sets the marker type of a TimelineMarker. + A string that describes the type of this TimelineMarker. The default value is an empty string. + + + Identifies the Text dependency property. + The identifier for the Text dependency property. + + + Identifies the Time dependency property. + The identifier for the Time dependency property. + + + Identifies the Type dependency property. + The identifier for the Type dependency property. + + + Represents a collection of TimelineMarker objects that can be individually accessed by index. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The TimelineMarker value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the TimelineMarker value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the TimelineMarkerCollection class. + + + Provides event data for the MarkerReached event. + + + Initializes a new instance of the TimelineMarkerRoutedEventArgs class. + + + Gets the TimelineMarker that triggered this event. + The TimelineMarker that triggered this event. + + + Defines functionality that enables transformations in a two-dimensional plane. + + + Represents a collection of Transform objects that can be individually accessed by index. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns an iterator for the items in the collection. + The iterator. The iterator's current position is the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Transform value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Transform value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the TransformCollection class. + + + Represents a composite Transform composed of other Transform objects. + + + Initializes a new instance of the TransformGroup class. + + + Gets or sets the collection of child Transform objects. + The collection of child Transform objects. The default is an empty collection. + + + Gets the Matrix structure that describes the transformation represented by this TransformGroup. + A composite of the Transform objects in this TransformGroup. + + + Identifies the Children dependency property. + The identifier for the Children dependency property. + + + Translates (moves) an object in the two-dimensional x-y coordinate system. + + + Initializes a new instance of the TranslateTransform class. + + + Gets or sets the distance to translate along the x-axis. + The distance to translate (move) an object along the x-axis, in pixels. This property is read/write. The default is 0. + + + Gets or sets the distance to translate (move) an object along the y-axis. + The distance to translate (move) an object along the y-axis, in pixels. The default is 0. + + + Identifies the X dependency property. + The identifier for the X dependency property. + + + Identifies the Y dependency property. + The identifier for the Y dependency property. + + + Provides utility methods that can used to traverse object relationships (along child object or parent object axes) in the visual tree of your app. + + + Explicitly removes all references from a target UIElement, with the goal of cleaning up reference cycles. + The target object to disconnect children and remove references from. + + + Retrieves a set of objects that are located within a specified point of an object's coordinate space. + An enumerable set of UIElement objects that are determined to be located in the visual tree composition at the specified point and within the specified subtree. + The point to use as the determination point. + The object to search within. + + + Retrieves a set of objects that are located within a specified point of an object's coordinate space. + An enumerable set of UIElement objects that are determined to be located in the visual tree composition at the specified point and within the specified subtree. + The point to use as the determination point. + The object to search within. + true to include all elements that intersect, including those elements considered to be invisible to hit testing. false to find only visible, hit-testable elements. + + + Retrieves a set of objects that are located within a specified Rect of an object's coordinate space. + An enumerable set of UIElement objects that are determined to be located in the visual tree composition at the specified dimensions and within the specified subtree. + The Rect to use as the determination area. + The object to search within. + + + Retrieves a set of objects that are located within a specified Rect of an object's coordinate space. + An enumerable set of UIElement objects that are determined to be located in the visual tree composition at the specified point and within the specified subtree. + The Rect to use as the determination area. + The object to search within. + true to include all elements that intersect, including those elements considered to be invisible to hit testing. false to find only visible, hit-testable elements. + + + Using the provided index, obtains a specific child object of the provided object by examining the visual tree. + The child object as referenced by childIndex. + The object that holds the child collection. + The index of the requested child object in the reference child collection. + + + Returns the number of children that exist in an object's child collection in the visual tree. + The number of visual children for the provided source visual. + The source visual. + + + Retrieves a collection of all open popup controls from the target Window. Popups don't exist in the conventional visual tree that begins from the root visual, so getting them from the window host is the only way to find them using the VisualTreeHelper class. + The list of all open popups. If no popups are open, the list is empty. + The current Window instance to retrieve the popups from. + + + Returns an object's parent object in the visual tree. + The parent object of the reference object in the visual tree. + The object for which to get the parent object. + + + Represents the method that will handle the RateChanged event. This event fires when PlaybackRate or DefaultPlaybackRate change either via user interaction or from code. + The object where the handler is attached. + The event data. + + + Represents methods that will handle various routed events related to timeline markers. + The object where the event handler is attached. + The event data. + + + Describes how content is positioned horizontally in a container. + + + The contents align toward the left of the container. + + + The contents align toward the center of the container. + + + The contents align toward the right of the container. + + + Describes how content is positioned vertically in a container. + + + The contents align toward the upper edge of the container. + + + The contents align toward the center of the container. + + + The contents align toward the lower edge of the container. + + + Describes the purpose of the audio information in an audio stream. Used as a value by AudioCategory. + + + All other streams. + + + Audio is for general media, for example audio for video, or streaming audio, but should not be played as background. + + + Audio is for general media, for example audio for video, or streaming audio, and can be played as background. + + + Audio is for peer-to-peer communications, for example chat or VoIP. + + + Audio is for system or application notifications, for example ring tones. + + + Audio is for sound effects. + + + Audio is for game-specific sound effects. + + + Audio is background (non-event or ambient) audio for games. + + + Describes the primary usage of the device that is being used to play back audio. This value is used by AudioDeviceType. + + + The device is a console and the audio session might support games, notifications, voice commands, and so on. + + + The device is intended for multimedia playback and/or recording. + + + The device is primarily for voice communications. + + + Specifies the coordinate system used by a Brush. + + + The coordinate system is not relative to a bounding box. Values are interpreted directly in local space. + + + The coordinate system is relative to a bounding box: 0 indicates 0 percent of the bounding box, and 1 indicates 100 percent of the bounding box. For example, (0.5, 0.5) describes a point in the middle of the bounding box, and (1, 1) describes a point at the lower right of the bounding box. + + + Determines how the colors in a gradient are interpolated. + + + Colors are interpolated in the scRGB color space. + + + Colors are interpolated in the sRGB color space. + + + Declares alternate composition and blending modes for elements in mixed XAML / Microsoft DirectX UI. + + + Use values from successive parents in the visual tree. This is the default. + + + Use conventional XAML blending logic. + + + Use Direct Composition minBlend behavior. + + + Specifies how the intersecting areas of PathFigure objects contained in a Geometry are combined to form the area of the Geometry. + + + Rule that determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction and counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is inside; if even, the point is outside. + + + Rule that determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left. After counting the crossings, if the result is zero then the point is outside the path. Otherwise, it is inside. + + + Specifies how to draw the gradient outside a gradient brush's gradient vector or space. + + + The color values at the ends of the gradient vector fill the remaining space. + + + The gradient is repeated in the reverse direction until the space is filled. + + + The gradient is repeated in the original direction until the space is filled. + + + Describes the likelihood that the media engine can play a media source based on its file type and characteristics. + + + Media engine cannot support the media source. + + + Media engine might support the media source. + + + Media engine can probably support the media source. + + + Defines the potential states of a MediaElement object. + + + The MediaElement contains no media. The MediaElement displays a transparent frame. + + + The MediaElement is validating and attempting to open the Uniform Resource Identifier (URI) specified by its Source property. While in this state, the MediaElement queues any Play, Pause, or Stop commands that it receives and processes them if the media is successfully opened. + + + The MediaElement is loading the media for playback. Its Position does not advance during this state. If the MediaElement was already playing video, it continues to display the last displayed frame. + + + The MediaElement is playing the media specified by its source property. Its Position advances forward. + + + The MediaElement does not advance its Position. If the MediaElement was playing video, it continues to display the current frame. + + + The MediaElement contains media but is not playing or paused. Its Position is 0 and does not advance. If the loaded media is video, the MediaElement displays the first frame. + + + Describes the shape at the end of a line or segment. + + + A cap that does not extend past the last point of the line. Comparable to no line cap. + + + A rectangle that has a height equal to the line thickness and a length equal to half the line thickness. + + + A semicircle that has a diameter equal to the line thickness. + + + An isosceles right triangle whose base length is equal to the thickness of the line. + + + Describes the shape that joins two lines or segments. + + + Line joins use regular angular vertices. + + + Line joins use beveled vertices. + + + Line joins use rounded vertices. + + + Describes the frame-packing mode for stereo 3-D video content. + + + Regular 2-D video. + + + Stereo 3-D content packing with components side-by-side. + + + Stereo 3-D content packing with components top and bottom. + + + Describes the stereo 3-D video render mode for the current media source. + + + Regular 2-D video. + + + Stereo 3-D video. + + + Describes how content is resized to fill its allocated space. + + + The content preserves its original size. + + + The content is resized to fill the destination dimensions. The aspect ratio is not preserved. + + + The content is resized to fit in the destination dimensions while it preserves its native aspect ratio. + + + The content is resized to fill the destination dimensions while it preserves its native aspect ratio. If the aspect ratio of the destination rectangle differs from the source, the source content is clipped to fit in the destination dimensions. + + + Describes the simulation style of a font. + + + No font style simulation. + + + Bold style simulation. + + + Italic style simulation. + + + Bold and italic style simulation. + + + Specifies the direction in which an elliptical arc is drawn. + + + Arcs are drawn in a counterclockwise (negative-angle) direction. + + + Arcs are drawn in a clockwise (positive-angle) direction. + + + Represents a 3 × 3 affine transformation matrix used for transformations in two-dimensional space. + + + The value of the first row and first column of this Matrix structure. + + + The value of the first row and second column of this Matrix structure. + + + The value of the second row and first column of this Matrix structure. + + + The value of the second row and second column of this Matrix structure. + + + Gets or sets the value of the third row and first column of this Matrix structure. + + + Gets or sets the value of the third row and second column of this Matrix structure. + + + Initializes a Matrix structure. + The Matrix structure's M11 coefficient. + The Matrix structure's M12 coefficient. + The Matrix structure's M21 coefficient. + The Matrix structure's M22 coefficient. + The Matrix structure's OffsetX coefficient. + The Matrix structure's OffsetY coefficient. + + + Gets an identity Matrix. + An identity matrix. + + + Gets a value that indicates whether this Matrix structure is an identity matrix. + true if the Matrix structure is an identity matrix; otherwise, false. The default is true. + + + Gets or sets the value of the first row and first column of this Matrix structure. + The value of the first row and first column of this Matrix. The default value is 1. + + + Gets or sets the value of the first row and second column of this Matrix structure. + The value of the first row and second column of this Matrix. The default value is 0. + + + Gets or sets the value of the second row and first column of this Matrix structure. + The value of the second row and first column of this Matrix. The default value is 0. + + + Gets or sets the value of the second row and second column of this Matrix structure. + The value of the second row and second column of this Matrix structure. The default value is 1. + + + Gets or sets the value of the third row and first column of this Matrix structure. + The value of the third row and first column of this Matrix structure. The default value is 0. + + + Gets or sets the value of the third row and second column of this Matrix structure. + The value of the third row and second column of this Matrix structure. The default value is 0. + + + Transforms the specified point by the Matrix and returns the result. + The result of transforming point by this Matrix. + The point to transform. + + + Determines whether the specified object is equal to a Matrix. + true if o is equal to this Matrix; otherwise, false. + Object to check for equality. + + + Compares two Matrix structures for equality. + true if both Matrix structures contain the same values; otherwise, false. + The Matrix structure to compare to this Matrix . + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a Matrix to a String representation. + A String representation of this Matrix. + + + Creates a String representation of this Matrix . + A string representation of the current Matrix that is determined by the specified format provider. + Culture-specific formatting information. + + + Transforms the specified point by the Matrix and returns the result. + The result of transforming point by this Matrix. + The point to transform. + + + Compares two Matrix structures for equality. + true if all values of matrix1 and matrix2 are equal; otherwise, false. + The first Matrix structure to compare. + The second Matrix structure to compare. + + + Compares two Matrix structures for inequality. + true if matrix1 and matrix2 have different values; false if matrix1 and matrix2 have the same values. + The first Matrix structure to compare. + The second Matrix structure to compare. + + + Provides animation and storyboard API for transition animations, visual states, or animated UI components. + + + Not intended for general use. See also IndependentlyAnimatableAttribute. + + + Initializes a new instance of the ConditionallyIndependentlyAnimatableAttribute class. + + + Not intended for general use. This attribute is used by design tools such as Blend for Microsoft Visual Studio 2012 for Windows 8. Blend for Microsoft Visual Studio 2012 for Windows 8 interprets the attribute and informs app developers how a given animation will work as far as performance and restrictions. + + + Initializes a new instance of the FadeOutThemeAnimation class. + + + Provides the animated transition behavior for when controls add or delete children of a panel. For example, if you have a collection of photos displayed in a Grid, you can associate this animation to the Grid so that when photos are added or deleted, the photos will animate in and out of view. + + + Initializes a new instance of the AddDeleteThemeTransition class. + + + Represents an easing function that changes a value in the opposite direction of the main function during part of a duration, then reverses and finishes the function-over-time behavior in a conventional way. + + + Initializes a new instance of the BackEase class. + + + Gets or sets the amplitude of retraction associated with a BackEase animation. + The amplitude of retraction associated with a BackEase animation. This value must be greater than or equal to 0. The default is 1. + + + Identifies the Amplitude dependency property. + The identifier for the Amplitude dependency property. + + + A trigger action that begins a Storyboard. Not commonly used. + + + Initializes a new instance of the BeginStoryboard class. + + + Gets or sets the Storyboard that this BeginStoryboard starts. + The Storyboard that the BeginStoryboard starts. The default is null. + + + Identifies the BeginStoryboard.Storyboard dependency property. + The identifier for the BeginStoryboard.Storyboard dependency property. + + + Represents an easing function that creates an animated bouncing effect. + + + Initializes a new instance of the BounceEase class. + + + Gets or sets the number of bounces. + The number of bounces. The value must be greater or equal to zero. Negative values will resolve to zero. The default is 3. + + + Gets or sets a value that specifies how bouncy the bounce animation is. Low values of this property result in bounces with little loss of height between bounces (more bouncy) while high values result in dampened bounces (less bouncy). + The value that specifies how bouncy the bounce animation is. This value must be positive. The default value is 2. + + + Identifies the Bounces dependency property. + The identifier for the Bounces dependency property. + + + Identifies the Bounciness dependency property. + The identifier for the Bounciness dependency property. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using a circular function. + + + Initializes a new instance of the CircleEase class. + + + Animates the value of a Color property between two target values using linear interpolation over a specified Duration. + + + Initializes a new instance of the ColorAnimation class. + + + Gets or sets the total amount by which the animation changes its starting value. + The total amount by which the animation changes its starting value. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as Color? (a nullable Color). + + + Gets or sets the easing function applied to this animation. + The easing function applied to this animation. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets or sets the animation's starting value. + The starting value of the animation. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as Color? (a nullable Color). + + + Gets or sets the animation's ending value. + The ending value of the animation. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as Color? (a nullable Color). + + + Identifies the By dependency property. + The identifier for the By dependency property. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Identifies the From dependency property. + The identifier for the From dependency property. + + + Identifies the To dependency property. + The identifier for the To dependency property. + + + Animates the value of a Color property along a set of key frames. + + + Initializes a new instance of the ColorAnimationUsingKeyFrames class. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets the collection of ColorKeyFrame objects that define the animation. + The collection of ColorKeyFrame objects that define the animation. The default is an empty collection. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Provides a base class for specific animation key-frame techniques that define an animation segment with a Color target value. Derived classes each provide a different key-frame interpolation method for a Color value that is provided for a ColorAnimationUsingKeyFrames animation. + + + Provides base class initialization behavior for ColorKeyFrame-derived classes. + + + Gets or sets the time at which the key frame's target Value should be reached. + The time at which the key frame's current value should be equal to its Value property. The default is null. + + + Gets or sets the key frame's target value. + The key frame's target value, which is the value at its specified KeyTime. The default is a Color with an ARGB value of #00000000. + + + Identifies the KeyTime dependency property. + The identifier for the KeyTime dependency property. + + + Identifies the Value dependency property. + The identifier for the Value dependency property. + + + Represents a collection of ColorKeyFrame objects that can be individually accessed by index. ColorKeyFrameCollection is the value of the ColorAnimationUsingKeyFrames.KeyFrames property. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The ColorKeyFrame value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the ColorKeyFrame value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the ColorKeyFrameCollection class. + + + Provides the animated transition behavior for when the content of a control is changing. This might be applied in addition to AddDeleteThemeTransition. + + + Initializes a new instance of the ContentThemeTransition class. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the transition is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the transition is active. + The vertical offset translation, in pixels. + + + Identifies the HorizontalOffset dependency property. + The identifier for the HorizontalOffset dependency property. + + + Identifies the VerticalOffset dependency property. + The identifier for the VerticalOffset dependency property. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using the formula f(t) = t3. + + + Initializes a new instance of the CubicEase class. + + + Animates from the Color value of the previous key frame to its own Value using discrete values. + + + Initializes a new instance of the DiscreteColorKeyFrame class. + + + Animates from the Double value of the previous key frame to its own Value using discrete values. + + + Initializes a new instance of the DiscreteDoubleKeyFrame class. + + + Animates from the Object value of the previous key frame to its own Value using discrete values. + + + Initializes a new instance of the DiscreteObjectKeyFrame class. + + + Animates from the Point value of the previous key frame to its own Value using discrete frames. + + + Initializes a new instance of the DiscretePointKeyFrame class. + + + Animates the value of a Double property between two target values using linear interpolation over a specified Duration. + + + Initializes a new instance of the DoubleAnimation class. + + + Gets or sets the total amount by which the animation changes its starting value. + The total amount by which the animation changes its starting value. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as double? (a nullable double). + + + Gets or sets the easing function applied to this animation. + The easing function applied to this animation. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets or sets the animation's starting value. + The starting value of the animation. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as double? (a nullable double). + + + Gets or sets the animation's ending value. + The ending value of the animation. The default is null. If you are programming using C# or Visual Basic, the type of this property is projected as double? (a nullable double). + + + Identifies the By dependency property. + The identifier for the By dependency property. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Identifies the From dependency property. + The identifier for the From dependency property. + + + Identifies the To dependency property. + The identifier for the To dependency property. + + + Animates the value of a Double property along a set of key frames. + + + Initializes a new instance of the DoubleAnimationUsingKeyFrames class. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets the collection of DoubleKeyFrame objects that define the animation. + The collection of DoubleKeyFrame objects that define the animation. The default is an empty collection. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + An abstract class that defines an animation segment with its own target value and interpolation method for a DoubleAnimationUsingKeyFrames. + + + Provides base class initialization behavior for DoubleKeyFrame-derived classes. + + + Gets or sets the time at which the key frame's target Value should be reached. + The time at which the key frame's current value should be equal to its Value property. The default is null. + + + Gets or sets the key frame's target value. + The key frame's target value, which is the value of this key frame at its specified KeyTime. The default is 0. + + + Identifies the KeyTime dependency property. + The identifier for the KeyTime dependency property. + + + Identifies the Value dependency property. + The identifier for the Value dependency property. + + + Represents a collection of DoubleKeyFrame objects that can be individually accessed by index. DoubleKeyFrameCollection is the value of the DoubleAnimationUsingKeyFrames.KeyFrames property. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the DoubleKeyFrame located at the specified index. + The DoubleKeyFrame value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the DoubleKeyFrame value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the DoubleKeyFrameCollection class. + + + Represents the preconfigured animation that applies to item elements being dragged. + + + Initializes a new instance of the DragItemThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Represents the preconfigured animation that applies to the elements underneath an element being dragged. + + + Initializes a new instance of the DragOverThemeAnimation class. + + + Gets or sets the direction that the target should translate, when the animation is active. + A value of the enumeration. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Gets or sets the distance by which the target is translated when the animation is active. + The offset, in pixels. + + + Identifies the Direction dependency property. + The identifier for the Direction dependency property. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Identifies the ToOffset dependency property. + The identifier for the ToOffset dependency property. + + + Represents the preconfigured animation that applies to potential drop target elements. + + + Initializes a new instance of the DropTargetItemThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Associates easing functions with a ColorAnimationUsingKeyFrames key-frame animation. + + + Initializes a new instance of the EasingColorKeyFrame class. + + + Gets or sets the easing function that is applied to the key frame. + The easing function that is applied to the key frame. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Associates an easing function with a DoubleAnimationUsingKeyFrames key-frame animation. + + + Initializes a new instance of the EasingDoubleKeyFrame class. + + + Gets or sets the easing function that is applied to the key frame. + The easing function that is applied to the key frame. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Provides the base class for all the easing functions. + + + Gets or sets a value that specifies how the animation interpolates. + One of the enumeration values that specifies how the animation interpolates. The default is EaseOut. + + + Transforms normalized time to control the pace of an animation. + A double that represents the transformed progress. + Normalized time (progress) of the animation. + + + Identifies the EasingMode dependency property. + The identifier for the EasingMode dependency property. + + + Associates an easing function with a PointAnimationUsingKeyFrames key-frame animation. + + + Initializes a new instance of the EasingPointKeyFrame class. + + + Gets or sets the easing function that is applied to the key frame. + The easing function that is applied to the key frame. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Provides the animated transition behavior for an edge UI transition. + + + Initializes a new instance of the EdgeUIThemeTransition class. + + + Gets or sets the edge position to use for the transition. + A value of the enumeration. + + + Identifies the Edge dependency property. + The identifier for the Edge dependency property. + + + Represents an easing function that creates an animation that resembles a spring oscillating back and forth until it comes to rest. + + + Initializes a new instance of the ElasticEase class. + + + Gets or sets the number of times the target slides back and forth over the animation destination. + The number of times the target slides back and forth over the animation destination. This value must be greater than or equal to 0. The default is 3. + + + Gets or sets the stiffness of the spring. The smaller the Springiness value is, the stiffer the spring and the faster the elasticity decreases in intensity over each oscillation. + A positive number that specifies the stiffness of the spring. The default value is 3. + + + Identifies the Oscillations dependency property. + The identifier for the Oscillations dependency property. + + + Identifies the Springiness dependency property. + The identifier for the Springiness dependency property. + + + Provides the animated transition behavior on controls when they first appear. You can use this on individual objects or on containers of objects. In the latter case, child elements will animate into view in sequence rather than all at the same time. + + + Initializes a new instance of the EntranceThemeTransition class. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset translation, in pixels. + + + Gets or sets a value that determines whether the transition staggers rendering of multiple items, or renders all items at once. + true if the animation staggers rendering of multiple items. false if the animation renders all items at once. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the FromVerticalOffset dependency property. + The identifier for the FromVerticalOffset dependency property. + + + Identifies the IsStaggeringEnabled dependency property. + The identifier for the IsStaggeringEnabled dependency property. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using an exponential formula. + + + Initializes a new instance of the ExponentialEase class. + + + Gets or sets the exponent used to determine the interpolation of the animation. + The exponent used to determine the interpolation of the animation. The default is 2. + + + Identifies the Exponent dependency property. + The identifier for the Exponent dependency property. + + + Represents the preconfigured opacity animation that applies to controls when they are first shown. + + + Initializes a new instance of the FadeInThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Represents the preconfigured opacity animation that applies to controls when they are removed from the UI or hidden. + + + Initializes a new instance of the FadeOutThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Represents a spline key frame to define animation progress. + + + Initializes a new instance of the KeySpline class. + + + Gets or sets the first control point used to define a Bezier curve that describes a KeySpline. + The first control point used to define a Bezier curve that describes a KeySpline. + + + Gets or sets the second control point used to define a Bezier curve that describes a KeySpline. + The second control point used to define a Bezier curve that describes a KeySpline. + + + Provides utility methods for working with KeyTime values. C# and Microsoft Visual Basic code should use members of KeyTime instead. + + + Generates a new KeyTime with initial data based on the specified TimeSpan. C# and Microsoft Visual Basic code should use FromTimeSpan instead. + The generated KeyTime value. + The TimeSpan data value to establish. + + + Animates from the Color value of the previous key frame to its own Value using linear interpolation. + + + Initializes a new instance of the LinearColorKeyFrame class. + + + Animates from the Double value of the previous key frame to its own Value using linear interpolation. + + + Initializes a new instance of the LinearDoubleKeyFrame class. + + + Animates from the Point value of the previous key frame to its own Value, using linear interpolation. + + + Initializes a new instance of the LinearPointKeyFrame class. + + + Animates the value of an Object property along a set of KeyFrames over a specified Duration. + + + Initializes a new instance of the ObjectAnimationUsingKeyFrames class. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets the collection of ObjectKeyFrame objects that define the animation. + The collection of ObjectKeyFrame objects that define the animation. The default is an empty collection. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Defines an animation segment with its own target value and interpolation method for an ObjectAnimationUsingKeyFrames. + + + Provides base class initialization behavior for ObjectKeyFrame-derived classes. + + + Gets or sets the time at which the key frame's target Value should be reached. + The time at which the key frame's current value should be equal to its Value property. The default is null. + + + Gets or sets the key frame's target value. + The key frame's target value, which is the value of this key frame at its specified KeyTime. The default is null. + + + Identifies the KeyTime dependency property. + The identifier for the KeyTime dependency property. + + + Identifies the Value dependency property. + The identifier for the Value dependency property. + + + Represents a collection of ObjectKeyFrame objects that can be individually accessed by index. ObjectKeyFrameCollection is the value of the ObjectAnimationUsingKeyFrames.KeyFrames property. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The ObjectKeyFrame value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the ObjectKeyFrame value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the ObjectKeyFrameCollection class. + + + Provides parameter info for the Frame.Navigate method. Controls how the transition animation runs during the navigation action. + + + When implemented in a derived class, gets the navigation state string that is reported for navigation actions through Frame.Navigate and similar API. + The string to use for navigation state info. + + + When implemented in a derived class, sets the navigation state string that is passed for navigation actions through Frame.Navigate and similar API. + The string to use for navigation state info. + + + Initializes a new instance of the NavigationTransitionInfo class. + + + Provides the animated transition behavior for a panning UI transition. + + + Gets or sets the edge position to use for the transition. + A value of the enumeration. + + + Identifies the Edge dependency property. + The identifier for the Edge dependency property. + + + Initializes a new instance of the PaneThemeTransition class. + + + Animates the value of a Point property between two target values using linear interpolation over a specified Duration. + + + Initializes a new instance of the PointAnimation class. + + + Gets or sets the total amount by which the animation changes its starting value. + The total amount by which the animation changes its starting value. The default is null. If you are programming using C# or Microsoft Visual Basic, the type of this property is projected as Point? (a nullable Point). + + + Gets or sets the easing function you are applying to the animation. + The easing function you are applying to the animation. The default is null. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets or sets the animation's starting value. + The starting value of the animation. The default is null. If you are programming using C# or Microsoft Visual Basic, the type of this property is projected as Point? (a nullable Point). + + + Gets or sets the animation's ending value. + The ending value of the animation. The default is null. If you are programming using C# or Microsoft Visual Basic, the type of this property is projected as Point? (a nullable Point). + + + Identifies the By dependency property. + The identifier for the By dependency property. + + + Identifies the EasingFunction dependency property. + The identifier for the EasingFunction dependency property. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Identifies the From dependency property. + The identifier for the From dependency property. + + + Identifies the To dependency property. + The identifier for the To dependency property. + + + Animates the value of a Point property along a set of KeyFrames. + + + Initializes a new instance of the PointAnimationUsingKeyFrames class. + + + Gets or sets a value that declares whether animated properties that are considered dependent animations should be permitted to use this animation declaration. + true if the animation can be used for a dependent animation case. false if the animation cannot be used for a dependent animation case. The default is false. + + + Gets the collection of PointKeyFrame objects that define the animation. + The collection of PointKeyFrame objects that define the animation. The default is an empty collection. + + + Identifies the EnableDependentAnimation dependency property. + The identifier for the EnableDependentAnimation dependency property. + + + Represents a preconfigured animation that runs when a user taps down on an item or element. + + + Gets or sets the reference name of the control element being targeted. + The name of the control element being targeted. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Initializes a new instance of the PointerDownThemeAnimation class. + + + Represents a preconfigured animation that runs after a user taps down on an item or element and the tap action is released. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Initializes a new instance of the PointerDownThemeAnimation class. + + + Defines an animation segment with its own target value and interpolation method for a PointAnimationUsingKeyFrames. + + + Provides base class initialization behavior for PointKeyFrame-derived classes. + + + Gets or sets the time at which the key frame's target Value should be reached. + The time at which the key frame's current value should be equal to its Value property. The default is null. + + + Gets or sets the key frame's target value. + The key frame's target value, which is the value of this key frame at its specified KeyTime. The default is 0. + + + Identifies the KeyTime dependency property. + The identifier for the KeyTime dependency property. + + + Identifies the Value dependency property. + The identifier for the Value dependency property. + + + Represents a collection of PointKeyFrame objects that can be individually accessed by index. PointKeyFrameCollection is the value of the PointAnimation.KeyFrames property. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The PointKeyFrame value at the specified index. + The integer index of the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to insert the value. + The value to insert. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the PointKeyFrame value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the PointKeyFrameCollection class. + + + Represents the preconfigured animation that applies to pop-in components of controls (for example, tooltip-like UI on an object) as they appear. This animation combines opacity and translation. + + + Initializes a new instance of the PopInThemeAnimation class. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset translation, in pixels. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the FromVerticalOffset dependency property. + The identifier for the FromVerticalOffset dependency property. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Represents the preconfigured animation that applies to pop-in components of controls (for example, tooltip-like UI on an object) as they are closed/removed. This animation combines opacity and translation. + + + Initializes a new instance of the PopOutThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Provides the animated transition behavior that applies to pop-in components of controls (for example, tooltip-like UI on an object) as they appear. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset translation, in pixels. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the FromVerticalOffset dependency property. + The identifier for the FromVerticalOffset dependency property. + + + Initializes a new instance of the PopUpThemeTransition class. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using the formula f(t) = t p where p is equal to the Power property. + + + Initializes a new instance of the PowerEase class. + + + Gets or sets the exponential power of the animation interpolation. For example, a value of 7 creates an animation interpolation curve that follows the formula f(t) = t 7. + The exponential power of the animation interpolation. This value must be greater or equal to 0. The default is 2. + + + Identifies the Power dependency property. + The identifier for the Power dependency property. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using the formula f(t) = t2 + + + Initializes a new instance of the QuadraticEase class. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using the formula f(t) = t4. + + + Initializes a new instance of the QuarticEase class. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using the formula f(t) = t5. + + + Initializes a new instance of the QuinticEase class. + + + Provides the animated transition behavior for when list-view controls items change order. Typically this is due to a drag-drop operation. Different controls and themes potentially have varying characteristics for the animations involved. + + + Initializes a new instance of the ReorderThemeTransition class. + + + Provides basic utility methods for processing RepeatBehavior values. C# and Microsoft Visual Basic code should use members of RepeatBehavior instead. + + + Gets a static RepeatBehavior that represents the special Forever value. C# and Microsoft Visual Basic code should use Forever instead. + A static RepeatBehavior that represents the special Forever value. + + + Determines whether two RepeatBehavior values have equivalent values. C# and Microsoft Visual Basic code should use the equality operator instead. + true if target and value hold equivalent values; otherwise, false. + The first RepeatBehavior to compare. + The second RepeatBehavior to compare. + + + Creates a new RepeatBehavior based on a repeat count. This corresponds to the intx form when provided as XAML attribute value. C# and Microsoft Visual Basic code should use RepeatBehavior(Double) instead. + The created RepeatBehavior, which has a RepeatBehaviorType of Count. + The number of times that the target animation should repeat. + + + Creates a new RepeatBehavior based on a timespan. C# and Microsoft Visual Basic code should use RepeatBehavior(TimeSpan) instead. + The created RepeatBehavior, which has a RepeatBehaviorType value of Duration. + The time span that declares the desired repeat behavior. + + + Returns whether a specified RepeatBehavior has a RepeatBehaviorType of Count and a nonzero Count value. C# and Microsoft Visual Basic code should use HasCount instead. + true if target has a RepeatBehaviorType of Count and a nonzero Count value. Otherwise, false. + The RepeatBehavior to evaluate. + + + Returns whether a specified RepeatBehavior has a RepeatBehaviorType of Duration and a nonzero Duration value. C# and Microsoft Visual Basic code should use HasDuration instead. + true if target has a RepeatBehaviorType of Duration and a nonzero Duration value. Otherwise, false. + The RepeatBehavior to evaluate. + + + Use to animate an object that is being repositioned. + + + Initializes a new instance of the RepositionThemeAnimation class. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset translation, in pixels. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the FromVerticalOffset dependency property. + The identifier for the FromVerticalOffset dependency property. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Reacts to layout moves when no context is set and a trigger of move is passed. + + + Initializes a new instance of the RepositionThemeTransition class. + + + Represents an easing function that creates an animation that accelerates and/or decelerates using a sine formula. + + + Initializes a new instance of the SineEase class. + + + Animates from the Color value of the previous key frame to its own Value using splined interpolation. + + + Initializes a new instance of the SplineColorKeyFrame class. + + + Gets or sets the two control points that define animation progress for this key frame. + The two control points that specify the cubic Bezier curve that defines the progress of the key frame. + + + Identifies the KeySpline dependency property. + The identifier for the KeySpline dependency property. + + + Animates from the Double value of the previous key frame to its own Value using splined interpolation. + + + Initializes a new instance of the SplineDoubleKeyFrame class. + + + Gets or sets the two control points that define animation progress for this key frame. + The two control points that specify the cubic Bezier curve that defines the progress of the key frame. + + + Identifies the KeySpline dependency property. + The identifier for the KeySpline dependency property. + + + Animates from the Point value of the previous key frame to its own Value using splined interpolation. + + + Initializes a new instance of the SplinePointKeyFrame class. + + + Gets or sets the two control points that define animation progress for this key frame. + The two control points that specify the cubic Bezier curve that defines the progress of the key frame. + + + Identifies the KeySpline dependency property. + The identifier for the KeySpline dependency property. + + + Represents the preconfigured animation that reveals a target UI using a split animation. + + + Gets or sets the initial size of the target element in the animation direction. + The initial size of the target in pixels. + + + Gets or sets the UI element that specifies the initial clip size. + The the UI element that specifies the initial clip size. + + + Gets or sets the identifying name of the UI element that specifies the initial clip size. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Gets or sets the UI element that will be translated. Typically this is a child/part of the element identified by OpenedTargetName or OpenedTarget. + The UI element that will be translated. + + + Gets or sets the identifying name of the UI element that will be translated. Typically this is a child/part of the element identified by OpenedTargetName. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Gets or sets a value that determines which direction the content should translate when the animation runs. + A value of the enumeration. + + + Gets or sets the pixels to translate by when the animation runs. + A distance in pixels. + + + Gets or sets an offset from the center of the opened target. + An offset in pixels. The default is 0. + + + Gets or sets the final size of the target UI element. + The final size. If left unset, the value defaults to the size of the opened target. + + + Gets or sets the UI element that will be clipped. + The UI element that will be clipped. + + + Gets or sets the identifying name of the UI element that will be clipped. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the ClosedLength dependency property. + The identifier for the ClosedLength dependency property. + + + Identifies the ClosedTargetName dependency property. + The identifier for the ClosedTargetName dependency property. + + + Identifies the ClosedTarget dependency property. + The identifier for the ClosedTarget dependency property. + + + Identifies the ContentTargetName dependency property. + The identifier for the ContentTargetName dependency property. + + + Identifies the ContentTarget dependency property. + The identifier for the ContentTarget dependency property. + + + Identifies the ContentTranslationDirection dependency property. + The identifier for the ContentTranslationDirection dependency property. + + + Identifies the ContentTranslationOffset dependency property. + The identifier for the ContentTranslationOffset dependency property. + + + Identifies the OffsetFromCenter dependency property. + The identifier for the OffsetFromCenter dependency property. + + + Identifies the OpenedLength dependency property. + The identifier for the OpenedLength dependency property. + + + Identifies the OpenedTargetName dependency property. + The identifier for the OpenedTargetName dependency property. + + + Identifies the OpenedTarget dependency property. + The identifier for the OpenedTarget dependency property. + + + Initializes a new instance of the SplitOpenThemeAnimation class. + + + Represents the preconfigured animation that conceals a target UI using a split animation. + + + Gets or sets the initial size of the target element in the animation direction. + The initial size of the target in pixels. + + + Gets or sets the UI element that specifies the initial clip size. + The UI element that specifies the initial clip size. + + + Gets or sets the identifying name of the UI element that specifies the initial clip size. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Gets or sets the UI element that will be translated. Typically this is a child/part of the element identified by OpenedTargetName or OpenedTarget. + The UI element that will be translated. + + + Gets or sets the identifying name of the UI element that will be translated. Typically this is a child/part of the element identified by OpenedTargetName. + The name of the UI element that will be translated. + + + Gets or sets a value that determines which direction the content should translate when the animation runs. + A value of the enumeration. + + + Gets or sets the pixels to translate by when the animation runs. + A distance in pixels. + + + Gets or sets an offset from the center of the opened target. + An offset in pixels. The default is 0. + + + Gets or sets the final size of the target UI element. + The final size. If left unset, the value defaults to the size of the opened target. + + + Gets or sets the UI element that will be clipped. + The UI element that will be clipped. + + + Gets or sets the identifying name of the UI element that will be clipped. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the ClosedLength dependency property. + The identifier for the ClosedLength dependency property. + + + Identifies the ClosedTargetName dependency property. + The identifier for the ClosedTargetName dependency property. + + + Identifies the ClosedTarget dependency property. + The identifier for the ClosedTarget dependency property. + + + Identifies the ContentTargetName dependency property. + The identifier for the ContentTargetName dependency property. + + + Identifies the ContentTarget dependency property. + The identifier for the ContentTarget dependency property. + + + Identifies the ContentTranslationDirection dependency property. + The identifier for the ContentTranslationDirection dependency property. + + + Identifies the ContentTranslationOffset dependency property. + The identifier for the ContentTranslationOffset dependency property. + + + Identifies the OffsetFromCenter dependency property. + The identifier for the OffsetFromCenter dependency property. + + + Identifies the OpenedLength dependency property. + The identifier for the OpenedLength dependency property. + + + Identifies the OpenedTargetName dependency property. + The identifier for the OpenedTargetName dependency property. + + + Identifies the OpenedTarget dependency property. + The identifier for the OpenedTarget dependency property. + + + Initializes a new instance of the SplitCloseThemeAnimation class. + + + Controls animations with a timeline, and provides object and property targeting information for its child animations. + + + Initializes a new instance of the Storyboard class. + + + Gets or sets the name of the object to animate. + + + Gets or sets the property that should be animated. + + + Gets the collection of child Timeline objects. + The collection of child Timeline objects. The default is an empty collection. + + + Initiates the set of animations associated with the storyboard. + + + Gets the clock state of the Storyboard. + One of the enumeration values. Can be: Active, Filling, or Stopped. + + + Gets the current animation clock time of the Storyboard. + The current animation time of the Storyboard per the running animation clock, or null if the animation clock is Stopped. + + + Gets the value of the Storyboard.TargetName XAML attached property from a target element. + The Storyboard.TargetName value of the target element. + The target element from which to get the value. + + + Gets the value of the Storyboard.TargetProperty XAML attached property from a target element. + The Storyboard.TargetProperty value of the target element. + The target element from which to get the value. + + + Pauses the animation clock associated with the storyboard. + + + Resumes the animation clock, or run-time state, associated with the storyboard. + + + Moves the storyboard to the specified animation position. The storyboard performs the requested seek when the next clock tick occurs. + A positive or negative time value that describes the amount by which the timeline should move forward or backward from the beginning of the animation. + + + Moves the storyboard to the specified animation position immediately (synchronously). + A positive or negative time value that describes the amount by which the timeline should move forward or backward from the beginning of the animation. + + + Causes the specified Timeline to target the specified object. + The timeline that targets the specified dependency object. + The actual instance of the object to target. + + + Sets the value of the Storyboard.TargetName XAML attached property for a target element. + The target element to set the value for. + The Storyboard.TargetName value of the target element to set. This should correspond to an existing Name or x:Name value on the UI element that the animation targets. + + + Sets the value of the Storyboard.TargetProperty XAML attached property for a target element. + The target element for which to set the value. + The Storyboard.TargetProperty value of the target element to set. This specifies a qualification path that is used by an internal type conversion in order to target the dependency property where the animation applies. See Remarks. + + + Advances the current time of the storyboard's clock to the end of its active period. + + + Stops the storyboard. + + + Identifies the Storyboard.TargetName XAML attached property. + The identifier for the Storyboard.TargetName XAML attached property. + + + Identifies the Storyboard.TargetProperty XAML attached property. + The identifier for the Storyboard.TargetProperty XAML attached property. + + + Represents the preconfigured animation that applies to controls when an element slides back into its layout slot after a Swipe interaction. + + + Initializes a new instance of the SwipeBackThemeAnimation class. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset translation, in pixels. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the FromHorizontalOffset dependency property. + The identifier for the FromHorizontalOffset dependency property. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Represents the preconfigured animation that indicates that a Swipe gesture is now possible. + + + Initializes a new instance of the SwipeHintThemeAnimation class. + + + Gets or sets the reference name of the control element being targeted. + The reference name. This is typically the x:Name of the relevant element as declared in XAML. + + + Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active. + The horizontal offset translation, in pixels. + + + Gets or sets the distance by which the target is translated in the vertical direction when the animation is active. + The vertical offset, in pixels. + + + Identifies the TargetName dependency property. + The identifier for the TargetName dependency property. + + + Identifies the ToHorizontalOffset dependency property. + The identifier for the ToHorizontalOffset dependency property. + + + Identifies the ToVerticalOffset dependency property. + The identifier for the ToVerticalOffset dependency property. + + + Defines a duration and other behavior properties for a Windows Runtime animation. Timeline is the base class for Storyboard and all the Windows Runtime animation types, including those from the animation library and those used for custom animations in visual states or page-level XAML. + + + Provides base class initialization behavior for Timeline-derived classes. + + + Gets or sets a value that determines whether dependent animations should be permitted to run, throughout the app. + true if animations can run in the app for dependent animation cases. Otherwise, false. The default is true. + + + Gets or sets a value that indicates whether the timeline plays in reverse after it completes a forward iteration. + true if the timeline plays in reverse at the end of each iteration; otherwise, false. The default value is false. + + + Gets or sets the time at which this Timeline should begin. + The start time of the time line. The default value is zero. If you are programming using C# or Visual Basic, the parameter type of this parameter is projected as System.TimeSpan? (a nullable System.TimeSpan). + + + Gets or sets the length of time for which this timeline plays, not counting repetitions. + The timeline's simple duration: the amount of time this timeline takes to complete a single forward iteration. The default value is a Duration that evaluates as Automatic. + + + Gets or sets a value that specifies how the animation behaves after it reaches the end of its active period. + A value that specifies how the timeline behaves after it reaches the end of its active period but its parent is inside its active or fill period. The default value is HoldEnd. + + + Gets or sets the repeating behavior of this timeline. + An iteration Count that specifies the number of times the timeline should play, a TimeSpan value that specifies the total length of this timeline's active period, or the special value Forever, which specifies that the timeline should repeat indefinitely. The default value is a RepeatBehavior with a Count value of 1, which indicates that the timeline plays once. + + + Gets or sets the rate, relative to its parent, at which time progresses for this Timeline. + A finite value greater than 0 that specifies the rate at which time progresses for this timeline, relative to the speed of the timeline's parent. If this timeline is a root timeline, specifies the default timeline speed. The value is expressed as a factor where 1 represents normal speed, 2 is double speed, 0.5 is half speed, and so on. The default value is 1. + + + Occurs when the Storyboard object has completed playing. + + + Identifies the AutoReverse dependency property. + The identifier for the AutoReverse dependency property. + + + Identifies the BeginTime dependency property. + The identifier for the BeginTime dependency property. + + + Identifies the Duration dependency property. + The identifier for the Duration dependency property. + + + Identifies the FillBehavior dependency property. + The identifier for the FillBehavior dependency property. + + + Identifies the RepeatBehavior dependency property. + The identifier for the RepeatBehavior dependency property. + + + Identifies for the SpeedRatio dependency property. + The identifier for the SpeedRatio dependency property. + + + Represents a collection of Timeline objects (specific type animations). A TimelineCollection is the value of the Storyboard.Children property. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the Timeline located at the specified index. + The Timeline value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Timeline value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the TimelineCollection class. + + + Represents a visual behavior that occurs when a control is affected by a predefined action or state change. These may be applied to individual elements using the Transitions property, or applied to the children of a Panel using the ChildrenTransitions property. + + + Represents a collection of Transition objects. Each Transition object represents a different transition animation, part of the Windows Runtime animation library. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new item to the collection. + The new item to add. + + + Removes all items from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Returns the iterator for iteration over the items in the collection. + The iterator object. The iterator's current position is at the 0-index position, or at the collection end if the collection is empty. + + + Returns the item located at the specified index. + The Transition value at the specified index. + The integer index for the value to retrieve. + + + Retrieves multiple elements in a single pass through the iterator. + The number of items retrieved. + The index from which to start retrieval. + Provides the destination for the result. Size the initial array size as a capacity in order to specify how many results should be retrieved. + + + Gets an immutable view into the collection. + An object representing the immutable collection view. + + + Retrieves the index of the specified item. + true if an item with the specified value was found; otherwise, false. + The value to find in the collection. + The index of the item to find, if found. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts the specified item at the specified index. + The index at which to set the value. + The value to set. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the item at the specified index. + The index position of the item to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last item in the collection. + + + Initially clears the collection, then inserts the provided array as new items. + The new collection items. + + + Sets the value at the specified index to the Transition value specified. + The index at which to set the value. + The value to set. + + + Gets the size (count) of the collection. + The count of items in the collection. + + + Initializes a new instance of the TransitionCollection class. + + + Describes the potential states of an animation. + + + The current animation changes in direct relation to the animation of its parent. + + + The animation continues and does not change in relation to the animation of its parent. + + + The animation is stopped. + + + Specifies how the animation associated with an easing function interpolates. + + + Interpolation follows 100% interpolation minus the output of the formula associated with the easing function. + + + Interpolation follows the mathematical formula associated with the easing function. + + + Interpolation uses EaseIn for the first half of the animation and EaseOut for the second half. + + + Specifies how a Timeline behaves when it is outside its active period but its parent is inside its active or hold period. + + + After it reaches the end of its active period, the timeline holds its progress until the end of its parent's active and hold periods. + + + The timeline stops if it is outside its active period while its parent is inside its active period. + + + Specifies the repeat mode that a RepeatBehavior raw value represents. + + + The RepeatBehavior represents a case where the timeline should repeat for a fixed number of complete runs. + + + The RepeatBehavior represents a case where the timeline should repeat for a time duration, which might result in an animation terminating part way through. + + + The RepeatBehavior represents a case where the timeline should repeat indefinitely. + + + Specifies when a particular key frame should take place during an animation. + + + The time component of this KeyTime. + + + Gets the time when the key frame ends, expressed as a time relative to the beginning of the animation. + The time when the key frame ends, expressed as a time relative to the beginning of the animation. + + + Determines whether the specified object is equal to a KeyTime. + true if value is equal to this KeyTime; otherwise, false. + Object to check for equality. + + + Compares two KeyTime structures for equality. + true if both KeyTime structures contain the same values; otherwise, false. + The KeyTime structure to compare to this KeyTime. + + + Compares two KeyTime structures for equality, as a static helper method. + true if both KeyTime structures contain the same values; otherwise, false. + The first KeyTime structure to compare. + The first KeyTime structure to compare. + + + Creates a new KeyTime, using the supplied TimeSpan. + A new KeyTime, initialized to the value of timeSpan. + The value of the new KeyTime. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a KeyTime to a String representation. + A String representation of this KeyTime. + + + Compares two KeyTime structures for equality. + true if all values of keyTime1 and keyTime2 are equal; otherwise, false. + The first KeyTime structure to compare. + The second KeyTime structure to compare. + + + Implicitly converts a TimeSpan to a KeyTime. + The created KeyTime. + The TimeSpan vale to convert. + + + Compares two KeyTime structures for inequality. + true if keyTime1 and keyTime2 have different values; false if keyTime1 and keyTime2 have the same values. + The first KeyTime structure to compare. + The second KeyTime structure to compare. + + + Describes how a Timeline repeats its simple duration. + + + The number of times a Timeline should repeat. + + + The time span for which a Timeline should repeat. + + + The mode or type of repeat behavior that this instance represents, as a value of the enumeration. + + + Initializes a new instance of the RepeatBehavior structure with the specified iteration count. + A number greater than or equal to 0 that specifies the number of iterations for an animation. + + + Initializes a new instance of the RepeatBehavior structure with the specified repeat duration. + The total length of time that the Timeline should play (its active duration). + + + Gets or sets the number of times that a Timeline should repeat. + The number of iterations to repeat. + + + Gets or sets the total length of time that a Timeline should play. + The total length of time that a Timeline should play. + + + Gets a RepeatBehavior that specifies an infinite number of repetitions. + A RepeatBehavior that specifies an infinite number of repetitions. + + + Gets a value that indicates whether the repeat behavior has a specified iteration count. + true if the instance represents an iteration count; otherwise, false. + + + Gets a value that indicates whether the repeat behavior has a specified repeat duration. + true if the instance represents a repeat duration; otherwise, false. + + + Gets or sets one of the RepeatBehaviorType values that describes the way behavior repeats. + The type of repeat behavior. + + + Determines whether the specified object is equal to a RepeatBehavior. + true if value is equal to this RepeatBehavior; otherwise, false. + Object to check for equality. + + + Compares two RepeatBehavior structures for equality. + true if both RepeatBehavior structures contain the same values; otherwise, false. + The RepeatBehavior structure to compare to this RepeatBehavior. + + + Compares two RepeatBehavior structures for equality, as a static helper method. + true if both RepeatBehavior structures contain the same values; otherwise, false. + The first RepeatBehavior structure to compare. + The first RepeatBehavior structure to compare. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a RepeatBehavior to a String representation. + A String representation of this RepeatBehavior. + + + Creates a String representation of this RepeatBehavior. + A string representation of the current RepeatBehavior that is determined by the specified format provider. + Culture-specific formatting information. + + + Compares two RepeatBehavior structures for equality. + true if all values of repeatBehavior1 and repeatBehavior2 are equal; otherwise, false. + The first RepeatBehavior structure to compare. + The second RepeatBehavior structure to compare. + + + Compares two RepeatBehavior structures for inequality. + true if repeatBehavior1 and repeatBehavior2 have different values; false if repeatBehavior1 and repeatBehavior2 have the same values. + The first RepeatBehavior structure to compare. + The second RepeatBehavior structure to compare. + + + Provides types related to imaging and obtaining resources and source files for bitmap images. + + + Provides the practical object source type for the Image.Source and ImageBrush.ImageSource properties. You can define a BitmapImage by using a Uniform Resource Identifier (URI) that references an image source file, or by calling SetSourceAsync and supplying a stream. + + + Initializes a new instance of the BitmapImage class. + + + Initializes a new instance of the BitmapImage class, using the supplied Uniform Resource Identifier (URI). + A reference to the image source file. + + + Gets or sets the BitmapCreateOptions for a BitmapImage. + The BitmapCreateOptions used for this BitmapImage. The default is None. With this default, a BitmapImage uses cached content when it is available. For a BitmapImage that is created by referencing an image source file by Uniform Resource Identifier (URI), the Uniform Resource Identifier (URI) controls the internal caching scheme. + + + Gets or sets the height to use for image decoding operations. + The height (in pixels) to use for image decoding operations. + + + Gets or sets a value that determines how DecodePixelWidth and DecodePixelHeight values are interpreted for decoding operations. + A value of the enumeration. The default is Physical. + + + Gets or sets the width to use for image decoding operations. + The width (in pixels) to use for image decoding operations. + + + Gets or sets the Uniform Resource Identifier (URI) of the graphics source file that generated this BitmapImage. + An object describing the Uniform Resource Identifier (URI) of the graphics source file that generated this BitmapImage. + + + Occurs when a significant change has occurred in the download progress of the BitmapImage content. + + + Occurs when there is an error associated with image retrieval or format. + + + Occurs when the image source is downloaded and decoded with no failure. You can use this event to determine the size of an image before rendering it. + + + Identifies the CreateOptions dependency property. + The identifier for the CreateOptions dependency property. + + + Identifies the DecodePixelHeight dependency property. + The identifier for the DecodePixelHeight dependency property. + + + Identifies the DecodePixelType dependency property. + The identifier for the DecodePixelType dependency property. + + + Identifies the DecodePixelWidth dependency property. + The identifier for the DecodePixelWidth dependency property. + + + Identifies the UriSource dependency property. + The identifier for the UriSource dependency property. + + + Provides a source object for properties that use a bitmap. + + + Provides base class initialization behavior for BitmapSource-derived classes. + + + Gets the height of the bitmap in pixels. + The height of the bitmap in pixels. + + + Gets the width of the bitmap in pixels. + The width of the bitmap in pixels. + + + Sets the source image for a BitmapSource by accessing a stream. Most callers should use SetSourceAsync instead. + The stream source that sets the image source value. + + + Sets the source image for a BitmapSource by accessing a stream and processing the result asynchronously. + An asynchronous handler called when the operation is complete. + The stream source that sets the image source value. + + + Identifies the PixelHeight dependency property. + The identifier for the PixelHeight dependency property. + + + Identifies the PixelWidth dependency property. + The identifier for the PixelWidth dependency property. + + + Provides event data for the DownloadProgress event. + + + Gets download progress as a value that is between 0 and 100. + The download progress. A value of 0 indicates no progress; 100 indicates that the download is complete. + + + Represents an image source that can be populated with the combined contents of a XAML visual tree. + + + Retrieves the previously rendered RenderTargetBitmap image as a buffered stream of bytes in BGRA8 format. + When this method returns, an IBuffer stream that contains bytes. This is the binary data for the image and can be converted to a byte array in BGRA8 format + + + Gets the height of the rendered bitmap in pixels. + The height of the rendered bitmap in pixels. + + + Gets the width of the rendered bitmap in pixels. + The width of the rendered bitmap in pixels. + + + Renders a snapshot of a UIElement visual tree to an image source. + When this method returns, an IAsyncAction object that can be used to control the asynchronous operation. + A UIElement that represents the visual tree fragment to render. + + + Renders a snapshot of a UIElement visual tree to an image source. Specify values for scaledWidth and scaledHeight to alter the original source's rendering dimension. + When this method returns, an IAsyncAction object that can be used to control the asynchronous operation. + A UIElement that represents the visual tree fragment to render. + Specifies the target width at which to render. The default is 0. scaledWidth and/or scaledHeight can be optional; see Remarks. + Specifies the target height at which to render. The default is 0. scaledWidth and/or scaledHeight can be optional; see Remarks. + + + Identifies the PixelHeight dependency property. + The identifier for the PixelHeight dependency property. + + + Identifies the PixelWidth dependency property. + The identifier for the PixelWidth dependency property. + + + Initializes a new instance of the RenderTargetBitmap class. + + + Provides Microsoft DirectX shared surfaces to draw into and then composes the bits into app content. + + + Initializes a new instance of the SurfaceImageSource class, specifying the size of the drawing area. + Width of the drawing area in pixels. + Height of the drawing area in pixels. + + + Initializes a new instance of the SurfaceImageSource class, specifying the size of the drawing area, and whether opacity is expected to be always full opacity. Use this with isOpaque=true if SurfaceImageSource should not support transparency; this can increase performance. + Width of the drawing area in pixels. + Height of the drawing area in pixels. + true if the area should render opaque. false to render with possible alpha transparency. A value of true can provide a performance benefit if the content is not transparent. + + + Extends SurfaceImageSource to support scenarios when the content is potentially larger than what can fit on screen and the content must be virtualized to render optimally. + + + Initializes a new instance of the VirtualSurfaceImageSource class, specifying the size of the drawing area. + Width of the drawing area in pixels. + Height of the drawing area in pixels. + + + Initializes a new instance of the VirtualSurfaceImageSource class, specifying the size of the drawing area. + Width of the drawing area in pixels. + Height of the drawing area in pixels. + true if the area should render opaque. false to render with possible alpha transparency. + + + Provides a BitmapSource that can be written to and updated. + + + Initializes a new instance of the WriteableBitmap class. + The width of the bitmap in pixels. + The height of the bitmap in pixels. + + + Gets an access for the direct buffer where each pixel of the WriteableBitmap is written to. + A reference to the pixel buffer. + + + Requests a draw or redraw of the entire bitmap. + + + Represents the method that will handle the DownloadProgress event. + The object where the handler is attached. + Event data for the event. + + + Specifies initialization options for a bitmap image. + + + No options are specified. + + + Loads images without using an existing image cache. This option should be selected only when images in a cache need to be refreshed. + + + Provides values that can be used for decoding operations to optimize for logical versus physical pixels in the source image file. + + + Use a physical pixel value. + + + Use a logical pixel value. + + + Contains types that support matrix/perspective transformation. + + + Provides static utilities for Matrix3D. C# and Microsoft Visual Basic code should use members of Matrix3D instead. + + + Gets a static constructed Matrix3D where the values established are representative of an Identity transform. C# and Microsoft Visual Basic code should use Identity instead. + A static constructed Matrix3D where the values established are representative of an Identity transform. + + + Defines a new Matrix3D value, using element values for each of the possible values of a Matrix3D structure. C# and Microsoft Visual Basic code should use Matrix3D constructor instead. + The created Matrix3D. + The value to set for M11 of the Matrix3D. + The value to set for M12 of the Matrix3D.. + The value to set for M13 of the Matrix3D. + The value to set for M14 of the Matrix3D. + The value to set for M21 of the Matrix3D. + The value to set for M22 of the Matrix3D. + The value to set for M23 of the Matrix3D. + The value to set for M24 of the Matrix3D. + The value to set for M31 of the Matrix3D. + The value to set for M32 of the Matrix3D. + The value to set for M33 of the Matrix3D. + The value to set for M34 of the Matrix3D. + The value to set for OffsetX (row 4, column 1) of the Matrix3D. + The value to set for OffsetY (row 4, column 2) of the Matrix3D. + The value to set for OffsetZ (row 4, column 3) of the Matrix3D. + The value to set for M44 of the Matrix3D. + + + Returns whether the provided Matrix3D is invertible. C# and Microsoft Visual Basic code should use HasInverse instead. + true if the Matrix3D has an inverse; otherwise, false. + The target Matrix3D to evaluate. + + + Returns whether the provided Matrix3D represents an Identity transform. C# and Microsoft Visual Basic code should use IsIdentity instead. + true if the Matrix3D represents an Identity transform; otherwise, false. + The target Matrix3D to evaluate. + + + Returns a potentially new Matrix3D value that represents the inversion of the provided Matrix3D. C# and Microsoft Visual Basic code should use Invert instead. + The inversion result Matrix3D. + The target Matrix3D to evaluate. + + + Multiplies the specified matrices. C# and Microsoft Visual Basic code should use the multiplication operator instead. + A new Matrix3D that is the result of multiplication. + The first matrix to multiply. + The second matrix to multiply. + + + Represents a 4 × 4 matrix that is used for transformations in a 3-D space. + + + The value of the first row and first column of this Matrix3D. + + + The value of the first row and second column of this Matrix3D. + + + The value of the first row and third column of this Matrix3D. + + + The value of the first row and fourth column of this Matrix3D. + + + The value of the second row and first column of this Matrix3D. + + + The value of the second row and second column of this Matrix3D. + + + The value of the second row and third column of this Matrix3D. + + + The value of the second row and fourth column of this Matrix3D. + + + The value of the third row and first column of this Matrix3D. + + + The value of the third row and second column of this Matrix3D. + + + The value of the third row and third column of this Matrix3D. + + + The value of the third row and fourth column of this Matrix3D. + + + The value of the fourth row and first column of this Matrix3D. + + + The value of the fourth row and second column of this Matrix3D. + + + The value of the fourth row and third column of this Matrix3D. + + + The value of the fourth row and fourth column of this Matrix3D. + + + Initializes a new instance of the Matrix3D class. + The value of the (1,1) field of the new matrix. + The value of the (1,2) field of the new matrix. + The value of the (1,3) field of the new matrix. + The value of the (1,4) field of the new matrix. + The value of the (2,1) field of the new matrix. + The value of the (2,2) field of the new matrix. + The value of the (2,3) field of the new matrix. + The value of the (2,4) field of the new matrix. + The value of the (3,1) field of the new matrix. + The value of the (3,2) field of the new matrix. + The value of the (3,3) field of the new matrix. + The value of the (3,4) field of the new matrix. + The value of the X offset field of the new matrix. + The value of the Y offset field of the new matrix. + The value of the Z offset field of the new matrix. + The value of the (4,4) field of the new matrix. + + + Gets a value that indicates whether this Matrix3D is invertible. + true if the Matrix3D has an inverse; otherwise, false. The default value is true. + + + Changes a Matrix3D structure into an identity Matrix3D. + The identity Matrix3D. + + + Determines whether this Matrix3D structure is an identity Matrix3D. + true if the Matrix3D is an identity Matrix3D; otherwise, false. The default value is true. + + + Gets or sets the value of the first row and first column of this Matrix3D. + The value of the first row and first column of this Matrix3D structure. + + + Gets or sets the value of the first row and second column of this Matrix3D. + The value of the first row and second column of this Matrix3D. + + + Gets or sets the value of the first row and third column of this Matrix3D. + The value of the first row and third column of this Matrix3D. + + + Gets or sets the value of the first row and fourth column of this Matrix3D. + The value of the first row and fourth column of this Matrix3D. + + + Gets or sets the value of the second row and first column of this Matrix3D. + The value of the second row and first column of this Matrix3D. + + + Gets or sets the value of the second row and second column of this Matrix3D. + The value of the second row and second column of this Matrix3D. + + + Gets or sets the value of the second row and third column of this Matrix3D. + The value of the second row and third column of this Matrix3D. + + + Gets or sets the value of the second row and fourth column of this Matrix3D. + The value of the second row and fourth column of this Matrix3D. + + + Gets or sets the value of the third row and first column of this Matrix3D. + The value of the third row and first column of this Matrix3D. + + + Gets or sets the value of the third row and second column of this Matrix3D. + The value of the third row and second column of this Matrix3D. + + + Gets or sets the value of the third row and third column of this Matrix3D. + The value of the third row and third column of this Matrix3D. + + + Gets or sets the value of the third row and fourth column of this Matrix3D. + The value of the third row and fourth column of this Matrix3D. + + + Gets or sets the value of the fourth row and fourth column of this Matrix3D. + The value of the fourth row and fourth column of this Matrix3D. + + + Gets or sets the value of the fourth row and first column of this Matrix3D. + The value of the fourth row and first column of this Matrix3D. + + + Gets or sets the value of the fourth row and second column of this Matrix3D. + The value of the fourth row and second column of this Matrix3D. + + + Gets or sets the value of the fourth row and third column of this Matrix3D. + The value of the fourth row and third column of this Matrix3D. + + + Inverts this Matrix3D structure. + + + Determines whether the specified object is equal to a Matrix3D. + true if o is equal to this Matrix3D; otherwise, false. + Object to check for equality. + + + Compares two Matrix3D structures for equality. + true if both Matrix3D structures contain the same values; otherwise, false. + The Matrix3D structure to compare to this Matrix3D. + + + Gets a hash code for this object. + The hash code identifier. + + + Converts a Matrix3D to a String representation. + A String representation of this Matrix3D. + + + Creates a String representation of this Matrix3D. + A string representation of the current Matrix3D that is determined by the specified format provider. + Culture-specific formatting information. + + + Compares two Matrix3D structures for equality. + true if all values of matrix1 and matrix2 are equal; otherwise, false. + The first Matrix3D structure to compare. + The second Matrix3D structure to compare. + + + Compares two Matrix3D structures for inequality. + true if matrix1 and matrix2 have different values; false if matrix1 and matrix2 have the same values. + The first Matrix3D structure to compare. + The second Matrix3D structure to compare. + + + Multiplies the specified matrices. + The Matrix3D that is the result of the operation. + The first Matrix3D structure. + The second Matrix3D structure. + + + Provides types that support navigation events as initiated by the Page and Frame classes. + + + Provides data for the OnNavigatingFrom callback that can be used to cancel a navigation request from origination. + + + Specifies whether a pending navigation should be canceled. + true to cancel the pending cancelable navigation; false to continue with navigation. + + + Gets the value of the mode parameter from the originating Navigate call. + The value of the mode parameter from the originating Navigate call. + + + Gets a value that indicates the animated transition associated with the navigation. + Info about the animated transition. + + + Gets the navigation parameter associated with this navigation. + The navigation parameter. + + + Gets the value of the SourcePageType parameter from the originating Navigate call. + The value of the SourcePageType parameter from the originating Navigate call. + + + Provides data for navigation methods and event handlers that cannot cancel the navigation request. + + + Gets the root node of the target page's content. + The root node of the target page's content. + + + Gets a value that indicates the direction of movement during navigation + A value of the enumeration. + + + Gets a value that indicates the animated transition associated with the navigation. + Info about the animated transition. + + + Gets any Parameter object passed to the target page for the navigation. + An object that potentially passes parameters to the navigation target. May be null. + + + Gets the data type of the source page. + The data type of the source page, represented as namespace.type or simply type. + + + Gets the Uniform Resource Identifier (URI) of the target. + A value that represents the Uniform Resource Identifier (URI). + + + Provides event data for the WebView.NavigationFailed and Frame.NavigationFailed events. + + + Gets the result code for the exception that is associated with the failed navigation. + A system exception result code. + + + Gets or sets a value that indicates whether the failure event has been handled. + true if the failure event is handled; false if the failure event is not yet handled. + + + Gets the data type of the target page. + The data type of the target page, represented as namespace.type or simply type. + + + Represents the method that will handle the LoadCompleted event. + The source of the event. + The event data. + + + Represents the method that will handle the Navigated event. + The object where the handler is attached. + Event data for the event. + + + Represents the method to use as the OnNavigatingFrom callback override. + The object where the method is implemented. + Event data that is passed through the callback. + + + Represents a method that will handle the WebView.NavigationFailed and Frame.NavigationFailed events. + The object where the handler is attached. + Event data for the event. + + + Provides event data for the NavigationStopped event. + The object where the handler is attached. + Event data for the event. + + + Specifies caching characteristics for a page involved in a navigation. + + + The page is never cached and a new instance of the page is created on each visit. + + + The page is cached and the cached instance is reused for every visit regardless of the cache size for the frame. + + + The page is cached, but the cached instance is discarded when the size of the cache for the frame is exceeded. + + + Specifies the navigation stack characteristics of a navigation. + + + Navigation is to a new instance of a page (not going forward or backward in the stack). + + + Navigation is going backward in the stack. + + + Navigation is going forward in the stack. + + + Navigation is to the current page (perhaps with different data). + + + Represents an entry in the BackStack or ForwardStack of a Frame. + + + Initializes a new instance of the PageStackEntry class. + The type of page associated with the navigation entry. + The navigation parameter associated with the navigation entry. + Info about the animated transition associated with the navigation entry. + + + Gets a value that indicates the animated transition associated with the navigation entry. + Info about the animated transition. + + + Gets the navigation parameter associated with this navigation entry. + The navigation parameter. + + + Gets the type of page associated with this navigation entry. + The page type of the navigation entry. + + + Identifies the SourcePageType dependency property. + The identifier for the SourcePageType dependency property. + + + Provides a basic printing support framework for applications. + + + Provides event data for the AddPages event. + + + Gets the PrintTaskOptions for the pages added. + An object that manages the options for print tasks. + + + Initializes a new instance of the AddPagesEventArgs class. + + + Provides event data for the GetPreviewPage event. + + + Gets the page number of the potentially repaginated page involved in the preview. + The page number of the potentially repaginated page. + + + Initializes a new instance of the GetPreviewPageEventArgs class. + + + Provides event data for the Paginate event. + + + Gets the 1-based page number of the current preview page. + The page number. + + + Gets the PrintTaskOptions for the pages involved in the event occurrence. + An object that manages the options for print tasks. + + + Initializes a new instance of the PaginateEventArgs class. + + + Defines a reusable object that sends output to a printer. + + + Gets a document source reference for this PrintDocument. + An object representing the document source. + + + Identifies the DocumentSource dependency property. + The identifier for the DocumentSource dependency property. + + + Adds a XAML root visual element to the print list. + The root visual element of the page to add to the print list. + + + Indicates that the application will not add more pages to the print list, and that the print list is ready to be released. + + + Sets the number of pages prepared for print preview and added to the print list. + The number of pages included in the preview. + A value of the enumeration that specifies how to determine the page count. + + + Sets the specified print page as the current print preview page. + The sequence number of the page to preview. + The root visual object for the requested print page. + + + References the low-level print preview dialog API and invalidates the current print preview. + + + Initializes a new instance of the PrintDocument class. + + + Occurs when the PrintManager requests the final collection of pages to send to the printer. + + + Occurs when the PrintManager requests a particular print page to be shown in the preview window. + + + Occurs when the PrintManager requests the collection of print pages to be shown in the preview window. + + + Represents the method that will handle the AddPages event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the GetPreviewPage event. + The object where the handler is attached. + Event data for the event. + + + Represents the method that will handle the Paginate event. + The object where the handler is attached. + Event data for the event. + + + Describes the basis of the page count. + + + Page count is based on final print job total. + + + Page count is based on an intermediate total. + + + Contains CustomXamlResourceLoader, which enables loading of custom resource dictionaries as sources. + + + Enables loading of custom resource dictionaries as sources. Override GetResource to provide the logic that a XAML parser can use to look up the necessary resources at load time. + + + Initializes a new instance of the CustomXamlResourceLoader class. + + + Returns the active CustomXamlResourceLoader instance. + The active CustomXamlResourceLoader instance. + + + When overridden in a derived class, specifies the logic of resource lookup for this CustomXamlResourceLoader. Given a resource ID and some type information about the expected result, returns the requested resource. + The retrieved resource. + The string-form key of the resource to get. + The expected type of the resource. + The name of the property that serves as the key in the custom resource lookup logic. + The type of the property that serves as the key, with type represented as a string. + + + Defines basic shapes that are intended for decorative rendering or for compositing non-interactive parts of controls. + + + Draws an ellipse. + + + Initializes a new instance of the Ellipse class. + + + Draws a straight line between two points. + + + Initializes a new instance of the Line class. + + + Gets or sets the x-coordinate of the Line start point. + The x-coordinate for the start point of the line, in pixels. The default is 0. + + + Gets or sets the x-coordinate of the Line end point. + The x-coordinate for the end point of the line, in pixels. The default is 0. + + + Gets or sets the y-coordinate of the Line start point. + The y-coordinate for the start point of the line, in pixels. The default is 0. + + + Gets or sets the y-coordinate of the Line end point. + The y-coordinate for the end point of the line, in pixels. The default is 0. + + + Identifies the X1 dependency property. + The identifier for the X1 dependency property. + + + Identifies the X2 dependency property. + The identifier for the X2 dependency property. + + + Identifies the Y1 dependency property. + The identifier for the Y1 dependency property. + + + Identifies the Y2 dependency property. + The identifier for the Y2 dependency property. + + + Draws a series of connected lines and curves. The line and curve dimensions are declared through the Data property, and can be specified either with a path-specific mini-language, or with an object model. + + + Initializes a new instance of the Path class. + + + Gets or sets a Geometry that specifies the shape to be drawn. + A description of the shape to be drawn. + + + Identifies the Data dependency property. + The identifier for the Data dependency property. + + + Draws a polygon, which is a connected series of lines that form a closed shape. + + + Initializes a new instance of the Polygon class. + + + Gets or sets a value that specifies how the interior fill of the shape is determined. + A value of the enumeration. The default is EvenOdd. + + + Gets or sets a collection that contains the vertex points of the polygon. + A collection of Point structures that describes the vertex points of the polygon. The default is null. The value can be expressed as a string for XAML or type conversion. + + + Identifies the FillRule dependency property. + The identifier for the FillRule dependency property. + + + Identifies the Points dependency property. + The identifier for the Points dependency property. + + + Draws a series of connected straight lines. + + + Initializes a new instance of the Polyline class. + + + Gets or sets a value that specifies how the interior fill of the shape is determined. + A value of the enumeration that specifies the fill behavior. The default is EvenOdd. + + + Gets or sets a collection that contains the vertex points of the Polyline. + A collection of Point structures that describes the vertex points of the Polyline. The default is null. + + + Identifies the FillRule dependency property. + The identifier for the FillRule dependency property. + + + Identifies the Points dependency property. + The identifier for the Points dependency property. + + + Draws a rectangle shape, which can have a stroke and a fill. + + + Initializes a new instance of the Rectangle class. + + + Gets or sets the x-axis radius of the ellipse that is used to round the corners of the rectangle. + The x-axis radius of the ellipse that is used to round the corners of the rectangle. + + + Gets or sets the y-axis radius of the ellipse that is used to round the corners of the rectangle. + The y-axis radius of the ellipse that is used to round the corners of the rectangle. The default is 0. + + + Identifies the RadiusX dependency property. + The identifier for the RadiusX dependency property. + + + Identifies the RadiusY dependency property. + The identifier for the RadiusY dependency property. + + + Provides a base class for shape elements, such as Ellipse, Polygon, and Rectangle. + + + Provides base class initialization behavior for Shape derived classes. + + + Gets or sets the Brush that specifies how to paint the interior of the shape. + A Brush that describes how the shape's interior is painted. The default is null. + + + Gets a value that represents a Transform that is applied to the geometry of a Shape before it is drawn. + A Transform that is applied to the geometry of a Shape before it is drawn. + + + Gets or sets a Stretch enumeration value that describes how the shape fills its allocated space. + One of the Stretch enumeration values. The default value at run time depends on the type of Shape. + + + Gets or sets the Brush that specifies how the Shape outline is painted. + A Brush that specifies how the Shape outline is painted. The default is null. + + + Gets or sets a collection of Double values that indicates the pattern of dashes and gaps that is used to outline shapes. + A collection of Double values that specifies the pattern of dashes and gaps. + + + Gets or sets a PenLineCap enumeration value that specifies how the ends of a dash are drawn. + One of the enumeration values for PenLineCap. The default is Flat. + + + Gets or sets a value that specifies the distance within the dash pattern where a dash begins. + A value that represents the distance within the dash pattern where a dash begins. The default value is 0. + + + Gets or sets a PenLineCap enumeration value that describes the Shape at the end of a line. + One of the enumeration values for PenLineCap. The default is Flat. + + + Gets or sets a PenLineJoin enumeration value that specifies the type of join that is used at the vertices of a Shape. + A value of the PenLineJoin enumeration that specifies the join appearance. The default value is Miter. + + + Gets or sets a limit on the ratio of the miter length to half the StrokeThickness of a Shape element. + The limit on the ratio of the miter length to the StrokeThickness of a Shape element. This value is always a positive number that is greater than or equal to 1. + + + Gets or sets a PenLineCap enumeration value that describes the Shape at the start of a Stroke. + A value of the PenLineCap enumeration that specifies the shape at the start of a Stroke. The default is Flat. + + + Gets or sets the width of the Shape stroke outline. + The width of the Shape outline, in pixels. The default value is 0. + + + Identifies the Fill dependency property. + The identifier for the Fill dependency property. + + + Identifies the Stretch dependency property. + The identifier for the Stretch dependency property. + + + Identifies the StrokeDashArray dependency property. + The identifier for the StrokeDashArray dependency property. + + + Identifies the StrokeDashCap dependency property. + The identifier for the StrokeDashCap dependency property. + + + Identifies the StrokeDashOffset dependency property. + The identifier for the StrokeDashOffset dependency property. + + + Identifies the StrokeEndLineCap dependency property. + The identifier for the StrokeEndLineCap dependency property. + + + Identifies the StrokeLineJoin dependency property. + The identifier for the StrokeLineJoin dependency property. + + + Identifies the StrokeMiterLimit dependency property. + The identifier for the StrokeMiterLimit dependency property. + + + Identifies the Stroke dependency property. + The identifier for the Stroke dependency property. + + + Identifies the StrokeStartLineCap dependency property. + The identifier for the StrokeStartLineCap dependency property. + + + Identifies the StrokeThickness dependency property. + The identifier for the StrokeThickness dependency property. + + + Provides information on errors resulting from web service operations. + + + Provides a method to translate a URI to a content stream for use by the WebView.NavigateToLocalStreamUri method. + + + Translates a URI to a content stream for use by the WebView.NavigateToLocalStreamUri method. + When this method returns, the content stream. + The URI to translate. + + + Provides error status resulting from a web service operation. + + + Gets a WebErrorStatus value based on an error encountered by a web service operation. + The error status value for a web service operation. + The error encountered by a web service operation represented as an hResult. + + + Defines errors encountered during operations involving web services, such as authentication, proxy configuration, and destination URIs. + + + An unknown error has occurred. + + + The SSL certificate common name does not match the web address. + + + The SSL certificate has expired. + + + The SSL certificate contains errors. + + + The SSL certificate has been revoked. + + + The SSL certificate is invalid. + + + The server is not responding. + + + The connection has timed out. + + + The server returned an invalid or unrecognized response. + + + The connection was aborted. + + + The connection was reset. + + + The connection was ended. + + + Redirected from a location to a secure location. + + + Redirected from a secure location to an unsecure location. + + + Cannot connect to destination. + + + Could not resolve provided host name. + + + The operation was canceled. + + + The request redirect failed. + + + An unexpected status code indicating a failure was received. + + + A request was unexpectedly redirected. + + + An unexpected client-side error has occurred. + + + An unexpected server-side error has occurred. + + + The requested URL represents a high level grouping of which lower level selections need to be made. + + + This and all future requests should be directed to the given URI. + + + The resource was found but is available in a location different from the one included in the request. + + + The response to the request can be found under another URI using a GET method. + + + Indicates the resource has not been modified since last requested. + + + The requested resource must be accessed through the proxy given by the Location field. + + + The requested resource resides temporarily under a different URI. + + + The request cannot be fulfilled due to bad syntax. + + + Authentication has failed or credentials have not yet been provided. + + + Reserved. + + + The server has refused the request. + + + The requested resource could not be found but may be available again in the future. + + + A request was made of a resource using a request method not supported by that resource. + + + The requested resource is only capable of generating content not acceptable according to the Accept headers sent in the request. + + + The client must first authenticate itself with the proxy. + + + The server timed out waiting for the request. + + + Indicates that the request could not be processed because of conflict in the request. + + + Indicates that the resource requested is no longer available and will not be available again. + + + The request did not specify the length of its content, which is required by the requested resource. + + + The server does not meet one of the preconditions that the requester put on the request. + + + The request is larger than the server is willing or able to process. + + + Provided URI length exceeds the maximum length the server can process. + + + The request entity has a media type which the server or resource does not support. + + + The client has asked for a portion of the file, but the server cannot supply that portion. + + + The server cannot meet the requirements of the Expect request-header field. + + + A generic error message, given when no more specific message is suitable. + + + The server either does not recognize the request method, or it lacks the ability to fulfill the request. + + + The server was acting as a gateway or proxy and received an invalid response from the upstream server. + + + The server is currently unavailable. + + + The server was acting as a gateway or proxy and did not receive a timely response from the upstream server. + + + The server does not support the HTTP protocol version used in the request. + + + Enables HTTP CRUD access to Web resources using the AtomPub protocol. The AtomPub sample demonstrates this implementation. + + + Encapsulates the methods needed to implement the AtomPub protocol which enables HTTP CRUD access to Web resources using the Atom 1.0 wire format. + Required to access the Internet. + Required to access home and work networks (Intranet). + + + Creates a new AtomPubClient object. + + + Creates a new AtomPubClient object with the credential to use when making requests to the server. Initially, a 'username/password' tuple. However, for domain credentials, the username must be in 'domain\user form'. + The specified security credentials. + + + Gets or sets a Boolean value that specifies whether to bypass the cache when retrieving the feed. + TRUE if the cache should be bypassed; otherwise FALSE. + + + Cancels any in-progress asynchronous operations, causing them to fail (asynchronously) with an error code indicating cancellation. + + + Creates a new media resource in the specified collection. + The object that is used to create the resource asynchronously and to report the progress and completion status of the operation. + The Uniform Resource Identifier (URI) of the specified collection in which the new resource should be created. + The type for the media resource. + The description of the new resource that is turned into the Slug: header of the POST request. + Specifies the IInputStream to use as the media resource. + + + Creates a new Entry resource in the specified collection. + The object that is used to create the resource asynchronously and to report the progress and completion status of the operation. + The Uri of the specified collection in which the new resource should be created. + The description of the new resource that is turned into the Slug: header of the POST request. + The new resource to be created. + + + Deletes an existing Entry or Media Link resource. + The object that is used to delete the resource asynchronously and to report the progress and completion status of the operation. + The Uri of the resource to be deleted. + + + Deletes an existing Entry or Media Link resource. This differs from the DeleteResourceAsync method in that the SyndicationItem object that represents the resource to be deleted is specified instead of the Uri. + The object that is used to delete the resource asynchronously and to report the progress and completion status of the operation. + The resource to be deleted. + + + Gets or sets the maximum number of bytes to buffer when receiving a response from a server. + Maximum size and default is UInt32.MaxValue. + + + Gets or sets the credentials to use when making requests via a proxy. + The PasswordCredential to use. + + + Starts an asynchronous operation to download the syndication feed from the given URI. This method instantiates a SyndicationFeed object from the feed string, which can be in one of the formats specified in SyndicationFormat. + Contains the results of the operation. + The URI from which the feed is downloaded. + + + Retrieves a media link resource from the specified Uniform Resource Identifier (URI). + The object used to retrieve the media resource and report the progress and completion status of the operation. + The Uniform Resource Identifier (URI) for the media resource. + + + Retrieves an Entry resource or Media Link resource from the specified Uniform Resource Identifier (URI). + The object that is used to retrieve the resource asynchronously and to report the progress and completion status of the operation. + The specified Uniform Resource Identifier (URI). + + + Retrieves a service document from the specified Uri. + The object that is used to retrieve the service document asynchronously and to report the progress and completion status of the operation. + The specified Uri. + + + Gets or sets the credentials to use when making requests to the server. + Initially, this value is a username/password tuple. For domain credentials, the username is in domain\user form. + + + Sets an HTTP header for the request. This method can be called multiple times to set multiple headers. When the same header is set multiple times, the values will be concatenated and separated by ,. + The name of the header. + The value of the header. + + + Gets or sets the maximum amount of time, in milliseconds, to wait for any of the asynchronous operations to complete. If the operation is not complete within this amount of time, it will fail with a status code indicating that it timed out. + Default value is 30000 (30 seconds). A value of UInt32.MaxValue indicates that the syndication client will wait indefinitely for a response. + + + Updates a media link resource from the specified Uniform Resource Identifier (URI). + Completion status or error codes. + The Uniform Resource Identifier (URI) of the resource to be updated. + The media type of the resource. + The IInputStream of the media that is updating the media resource. + + + Updates an existing Entry or Media Link resource. + The object that is used to update the resource asynchronously and to report the progress and completion status of the operation. + The Uniform Resource Identifier (URI) of the resource to be updated. + The resource to be updated. + + + Updates an existing Entry or Media Link resource. This differs from the UpdateResourceAsync method in that the EditUri property of the specified SyndicationItem object is used as the Uri of the resource to be updated. + The object that is used to update the resource asynchronously and to report the progress and completion status of the operation. + The resource to be updated. + + + Encapsulates one or more collections within a workspace. + + + Gets or sets the collection of app:accept elements. + The collection of accept elements. + + + Gets the list of attributes of the element. + The list of attributes. + + + Gets or sets the Uniform Resource Identifier (URI) for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The Uniform Resource Identifier (URI) for the element. + + + Gets the collection of atom:category elements within the app:categories element. + The collection of categories. + + + Gets the list of child elements within the element. + The list of child elements. + + + Generates the DOM object that represents this element, and all the attributes and child elements including foreign markups. + The XML document. + The format of the element. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The language of the element. + + + Gets or sets the local name of the element. It must be valid according to XML 1.0. + The name of the element. + + + Gets or sets the namespace of the element. + The namespace name. + + + Gets or sets the text content of the element. If the element contains only child elements, this attribute is NULL. + The node value. + + + Gets the atom:title element under the app:collection element. + The collection of title elements. + + + Gets the Uniform Resource Identifier (URI) representing the href attribute of the app:collection element. This is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute when it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be Null. + The Uniform Resource Identifier (URI) of the resource collection. + + + Encapsulates a service document. + + + Gets the list of attributes of the element. + A list of attributes of the element. + + + Gets or sets the Uniform Resource Identifier (URI) for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The base Uniform Resource Identifier (URI) for the element. + + + Gets the list of child elements within the element. + The list of child elements. + + + Generates the DOM object that represents this element, and all the attributes and child elements including foreign markups. + The XML document. + The format of the element. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The language of the element. + + + Gets or sets the local name of the element. It must be valid according to XML 1.0. + The local name of the element. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this attribute is NULL. + The text for the element. + + + Gets the collection of app:workspace elements in the service document. + The collection of workspace elements. + + + Encapsulates a workspace in a service document. + + + Gets the list of attributes of the element. + The list of attributes. + + + Gets or sets the Uniform Resource Identifier (URI) for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The base Uniform Resource Identifier (URI) for the element. + + + Gets the read-only collection of app:collection elements within the app:workspace element. + The collection of collection elements. + + + Gets the list of child elements within the element. + The list of child elements. + + + Generates the DOM object that represents this element, and all the attributes and child elements including foreign markups. + The XML document. + The format for the element. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The language of the element. + + + Gets or sets the local name of the element. It must be valid according to XML 1.0. + The name of the element. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this attribute is NULL. + The text of the element. + + + Gets the atom:title element under the app:workspace element. + The text of the title. + + + Provides a modern HTTP client API for Windows Store app. + + + Provides HTTP content that uses a buffer. + + + Closes the HttpBufferContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Serialize the HttpBufferContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Get a collection of content headers set on the HttpBufferContent. + A collection of content headers set on the HttpBufferContent. + + + Serialize the HttpBufferContent to a buffer as an asynchronous operation. + The object that represents the asynchronous operation. + + + Serialize the HttpBufferContent and return an input stream that represents the content as an asynchronous operation. + The object that represents the asynchronous operation. + + + Serialize the HttpBufferContent to a String as an asynchronous operation. + The object that represents the asynchronous operation. + + + Returns a string that represents the current HttpBufferContent object. + A string that represents the current object. + + + Computes the HttpBufferContent length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HttpBufferContent. + + + Write the HttpBufferContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpBufferContent class with the specified buffer. + The content used to initialize the HttpBufferContent. + + + Initializes a new instance of the HttpBufferContent class with an offset and count of bytes from the specified buffer. + The content used to initialize the HttpBufferContent. + The offset in bytes from the beginning of the content buffer to initialize the HttpBufferContent. + The count of bytes in the content buffer to initialize the HttpBufferContent. + + + Sends HTTP requests and receives HTTP responses from a resource identified by a URI. + + + Closes the HttpClient instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets a collection of headers that should be sent with each request. + The headers that should be sent with each request. + + + Send a DELETE request to the specified Uri as an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + + + Send a GET request to the specified Uri as an asynchronous operation. + The object representing the asynchronous operation. + The Uri to which the request is to be sent. + + + Send a GET request to the specified Uri with an HTTP completion option as an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + An HTTP completion option value that indicates when the operation should be considered completed. + + + Send a GET request to the specified Uri and return the response body as a buffer in an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + + + Send a GET request to the specified Uri and return the response body as a stream in an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + + + Send a GET request to the specified Uri and return the response body as a string in an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + + + Send a POST request to the specified Uri as an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + The HTTP request content to send to the server. + + + Send a PUT request to the specified Uri as an asynchronous operation. + The object representing the asynchronous operation. + The Uri the request is sent to. + The HTTP request content to send to the server. + + + Send an HTTP request as an asynchronous operation. + The object representing the asynchronous operation. + The HTTP request message to send. + + + Send an HTTP request with an HTTP completion option as an asynchronous operation. + The object representing the asynchronous operation. + The HTTP request message to send. + A value that indicates whether the HttpClient operation is considered completed when all of the response is read, or when just the headers are read. + + + Returns a string that represents the current HttpClient object. + A string that represents the current object. + + + Initializes a new instance of the HttpClient class with a specific filter for handling HTTP response messages. + The HTTP filter to use for handling response messages. + + + Initializes a new instance of the HttpClient class. + + + Indicates whether asynchronous HttpClient operations are considered completed when all of the response is read, or when just the headers are read. + + + The operation should complete after reading the entire response including the content.This is the default value. + + + The operation should complete as soon as a response is available and headers are read. The content is not read yet. + + + Provides a set of properties and methods to manage an HTTP cookie. + + + Get the domain for which the HttpCookie is valid. + The domain for which the HttpCookie is valid. + + + Get or set the expiration date and time for the HttpCookie. + The expiration date and time for the HttpCookie. + + + Get the token that represents the HttpCookie name. + The token that represents the HttpCookie name. + + + Get or set a value that controls whether a script or other active content can access this HttpCookie. + Whether a script or other active content can access this HttpCookie.true if a script or other active content cannot access this HTTP cookie; otherwise, false. The default is false. + + + Get the URI path component to which the HttpCookie applies. + The URI path component to which the HttpCookie applies. + + + Get or set the security level for the HttpCookie. + The security level for the HttpCookie.true if the client is only to return the cookie in subsequent requests if those requests use HTTPS; otherwise, false. The default is false. + + + Returns a string that represents the current HttpCookie object. + A string that represents the current object. + + + Get or set the value for the HttpCookie. + The value for the HttpCookie. + + + Initializes a new instance of the HttpCookie class with a specified name, domain, and path. + The name for the HttpCookie + The domain for which the HttpCookie is valid. + The URIs to which the HttpCookie applies. + + + Provides a collection container for instances of the HttpCookie class. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpCookie item in the HttpCookieCollection. + An iterator to the first HttpCookie item in the HttpCookieCollection. + + + Returns the HttpCookie at the specified index from the HttpCookieCollection. + The HTTP cookie at the specified index from the HttpCookieCollection. + The zero-based index of a specified item in the HttpCookieCollection. + + + Retrieves the HttpCookie items that start at the specified index in the HttpCookieCollection. + The number of HttpCookie items retrieved. + The zero-based index of the start of the HttpCookie items in the HttpCookieCollection. + The HttpCookie items that start at startIndex in the HttpCookieCollection. + + + Retrieves the index of an HttpCookie in the HttpCookieCollection. + Indicates whether the item is found.true if the HttpCookie item is found; otherwise, false. + The HttpCookie to find in the HttpCookieCollection. + The index of the HttpCookie in the HttpCookieCollection.If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Gets the element at the specified index. + The element at the specified index. + + + Gets the number of cookies in the HttpCookieCollection. + The number of cookies in the HttpCookieCollection. + + + Add or delete an HttpCookie or view the cookies associated with an app. + + + Delete an HttpCookie from the cookies associated with an app. + The HttpCookie to delete. + + + Gets an HttpCookieCollection that contains the HttpCookie instances that are associated with a specific URI. + The HttpCookieCollection that contains the HttpCookie instances that are associated with a specific URI. + The URI of the HttpCookie instances desired. + + + Add or change an HttpCookie in the cookies associated with an app that is sent on future requests. + true if the HttpCookie replaced an existing cookie; otherwise false. + The HttpCookie to change or add. + + + Add or change an HttpCookie in the cookies associated with an app. + true if the HttpCookie replaced an existing cookie; otherwise false. + The HttpCookie to change or add. + A value that indicates whether the HttpCookie is a third party HTTP cookie. + + + Provides HTTP content that uses name/value data encoded with the application/x-www-form-urlencoded MIME type. + + + Serialize the HttpFormUrlEncodedContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Closes the HttpFormUrlEncodedContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Get a collection of content headers set on the HttpFormUrlEncodedContent. + A collection of content headers set on the HttpFormUrlEncodedContent. + + + Serialize the HttpFormUrlEncodedContent to a buffer as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpFormUrlEncodedContent and return an input stream that represents the content as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpFormUrlEncodedContent to a String as an asynchronous operation. + The object representing the asynchronous operation. + + + Returns a string that represents the current HttpFormUrlEncodedContent object. + A string that represents the current object. + + + Computes the HttpFormUrlEncodedContent length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HttpFormUrlEncodedContent. + + + Write the HttpFormUrlEncodedContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpFormUrlEncodedContent class with the specified content. + The content used to initialize the HttpFormUrlEncodedContent. + + + Retrieves standard HTTP methods such as GET and POST and creates new HTTP methods. + + + Gets the HTTP DELETE method. + The HTTP DELETE method. + + + Gets the HTTP GET method. + The HTTP GET method. + + + Gets the HTTP HEAD method. + The HTTP HEAD method. + + + Gets the HTTP method. + An HTTP method represented as a String. + + + Gets the HTTP OPTIONS method. + The HTTP OPTIONS method. + + + Gets the HTTP PATCH method, + The HTTP PATCH method. + + + Gets the HTTP POST method. + The HTTP POST method. + + + Gets the HTTP PUT method. + The HTTP PUT method. + + + Returns a string that represents the current HttpMethod object. + A string that represents the current object. + + + Initializes a new instance of the HttpMethod class with a specific HTTP method. + The HTTP method. + + + Provides HTTP content that uses the multipart/* MIME type. + + + Add HTTP content to the HttpMultipartContent instance. + The HTTP content to add to HttpMultipartContent. + + + Serialize the HttpMultipartContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Closes the HttpMultipartContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets an object that can be used to enumerate the contents in the HttpMultipartContent object. + An object that can be used to enumerate the contents in the HttpMultipartContent object. + + + Get a collection of content headers set on the HttpMultipartContent. + A collection of content headers set on the HttpMultipartContent. + + + Serialize the HttpMultipartContent to a buffer as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpMultipartContent and return an input stream that represents the content as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpMultipartContent to a String as an asynchronous operation. + The object representing the asynchronous operation. + + + Returns a string that represents the current HttpMultipartContent object. + A string that represents the current object. + + + Determines whether the HttpMultipartContent has a valid length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HttpMultipartContent. + + + Write the HttpMultipartContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpMultipartContent class with the specified MIME subtype. + The MIME subtype of the multipart content. + + + Initializes a new instance of the HttpMultipartContent class with the specified MIME subtype and boundary string. + The MIME subtype of the multipart content. + The boundary string for the multipart content. + + + Initializes a new instance of the HttpMultipartContent class. + + + Provides HTTP content that uses the multipart/form-data MIME type. + + + Add HTTP content to the HttpMultipartFormDataContent instance. + The HTTP content to add to HttpMultipartFormDataContent. + + + Add HTTP content with a specified name to the HttpMultipartFormDataContent instance. + The HTTP content to add to HttpMultipartFormDataContent. + The name for the HTTP content to add to HttpMultipartFormDataContent. + + + Add HTTP content with a specified name from a file to the HttpMultipartFormDataContent instance. + The HTTP content to add to HttpMultipartFormDataContent. + The name for the HTTP content to add to HttpMultipartFormDataContent. + The file name for the HTTP content to add to HttpMultipartFormDataContent. + + + Serialize the HttpMultipartFormDataContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Closes the HttpMultipartFormDataContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets an object that can be used to enumerate the contents in the HttpMultipartFormDataContent object. + An object that can be used to enumerate the contents in the HttpMultipartFormDataContent object. + + + Get a collection of content headers set on the HttpMultipartFormDataContent. + A collection of content headers set on the HttpMultipartFormDataContent. + + + Serialize the HttpMultipartFormDataContent to a buffer as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpMultipartFormDataContent and return an input stream that represents the content as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpMultipartFormDataContent to a String as an asynchronous operation. + The object representing the asynchronous operation. + + + Returns a string that represents the current HttpMultipartFormDataContent object. + A string that represents the current object. + + + Determines whether the HttpMultipartFormDataContent has a valid length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HttpMultipartFormDataContent. + + + Write the HttpMultipartFormDataContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpMultipartFormDataContent class with the specified boundary string. + The boundary string for the multipart content. + + + Initializes a new instance of the HttpMultipartFormDataContent class. + + + Contains status information on the progress of an HttpClient operation. + + + The step in the progress of an HTTP connection. + + + The total number of bytes sent. This value includes bytes sent as request headers. If the operation was restarted, this value may be smaller than in the previous progress report. + + + The total number of data bytes to send.If the number is unknown, this value is 0. + + + The total number of bytes received. This value includes bytes received as response headers. If the operation was restarted, this value may be smaller than in the previous progress report. + + + The total number of data bytes to receive.If the number is unknown, this value is 0. + + + The number of retries. + + + Indicates the step in the progress for an HTTP connection. + + + A default value that should not be encountered. + + + The system starts to detect a proxy. This step may not occur depending on the system configuration. + + + The system is resolving the hostname for the HTTP connection.This step may not occur if the hostname doesn't need to be resolved. + + + The socket used for the HTTP connection is connecting to the server. + + + The HTTP connection to the server is negotiating SSL.If the SSL negotiation fails, then this will be the last step that occurs on the HTTP connection. + + + HTTP headers are being sent to the server. + + + HTTP content is being sent to the server. This step may not occur if there is no content to send. + + + The HTTP client is waiting for a response from the server. + + + The HTTP client is receiving headers from the server. + + + The HTTP client is receiving content from the server. + + + Represents an HTTP request message including headers. + + + Closes the HttpRequestMessage instance and releases allocated resources. + + + Gets or sets the HTTP content to send to the server on the HttpRequestMessage object. + The HTTP content to send to the server on the HttpRequestMessage object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Gets the collection of the HTTP request headers associated with the HttpRequestMessage. + The collection of HTTP request headers associated with the HttpRequestMessage. + + + Gets or sets the HTTP method to be performed on the request URI. + The HTTP method to be performed on the request URI. + + + Gets a set of properties on the HttpRequestMessage instance that are for use by the developer. + A set of properties on the HttpRequestMessage instance that are for use by the developer. + + + Gets or sets the Uri used for the HttpRequestMessage object. + The Uri used for the HTTP request. + + + Returns a string that represents the current HttpRequestMessage object. + A string that represents the current object. + + + Get information about the underlying transport socket used by an HTTP connection. + Information about the underlying transport socket used by an HTTP connection. + + + Initializes a new instance of the HttpRequestMessage class with an HTTP method and a request Uri. + The HTTP method to perform + The Uri to request. + + + Initializes a new instance of the HttpRequestMessage class. + + + Represents an HTTP response message including headers, the status code, and data. + + + Closes the HttpResponseMessage instance and releases allocated resources. + + + Gets or sets the content of the HTTP response message on the HttpResponseMessage object. + The content of the HTTP response message on the HttpResponseMessage object. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Throws an exception if the IsSuccessStatusCode property for the HTTP response is false. + The HTTP response if the request was successful. + + + Gets the collection of HTTP response headers associated with the HttpResponseMessage that were sent by the server. + The collection of HTTP response headers. + + + Gets a value that indicates whether the HTTP response was successful. + A value that indicates if the HTTP response was successful. true if HttpStatusCode was in the Successful range (200-299); otherwise false. + + + Gets or sets the reason phrase which typically is sent by servers together with the status code. + The reason phrase sent by the server. + + + Gets or sets the request message which led to this response message. + The request message which led to this response message. + + + Gets the source of the data received in the HttpResponseMessage. + The source of the data received in the HttpResponseMessage. + + + Gets or sets the status code of the HTTP response. + The status code of the HTTP response. + + + Returns a string that represents the current HttpResponseMessage object. + A string that represents the current object. + + + Gets or sets the HTTP protocol version used on the HttpResponseMessage object. + The HTTP protocol version. The default is 1.1. + + + Initializes a new instance of the HttpResponseMessage class with a specific HttpStatusCode. + The status code of the HTTP response. + + + Initializes a new instance of the HttpResponseMessage class. + + + Indicates the source of the data received in the HttpResponseMessage. + + + A default value that should not be returned under normal circumstances. + + + The data was from the local cache. + + + The data was received over the network. + + + Contains the values of status codes defined for HTTP in the response to an HTTP request. + + + The client request was successful. + + + The client should continue with its request. + + + The HTTP protocol version or protocol is being changed. + + + The server has received a Web Distributed Authoring and Versioning (WebDAV) request and is processing the request.This status code is an HTTP extension used with WebDAV. It can only be returned if the client HTTP request included the DAV header in the request. This status code is documented in IETF RFC 2518. + + + The request succeeded and that the requested information is in the response. This is the most common status code to receive. + + + The request resulted in a new resource created before the response was sent. + + + The request has been accepted for further processing. + + + The returned meta-information is from a cached copy instead of the origin server and therefore may be incorrect. + + + The request has been successfully processed and that the response is intentionally blank. + + + The client should reset (not reload) the current resource. + + + The response is a partial response as requested by a GET request that includes a byte range. + + + The response provides status for multiple independent operations. Specific error messages appear in the body of the multi- status response. This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). This status code is documented in IETF RFC 4918. + + + Some of the results of the requested operation were already reported.This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). It can only be returned if the client HTTP request included the DAV header in the request. This status code is documented in IETF RFC 5842. + + + The server has fulfilled a GET request for the resource and the response is the result of one or more actions applied to the current instance. This status code is documented in IETF RFC 3229. + + + The requested information has multiple representations. The default action is to treat this status as a redirect and follow the contents of the Location header associated with this response. + + + The requested information has been moved to the URI specified in the Location header. The default action when this status is received is to follow the Location header associated with the response. + + + The requested information is located at the URI specified in the Location header. The default action when this status is received is to follow the Location header associated with the response. When the original request method was POST, the redirected request will use the GET method. + + + Automatically redirects the client to the URI specified in the Location header as the result of a POST. The request to the resource specified by the Location header will be made with the GET method. + + + The client's cached copy is up to date. The contents of the resource are not transferred. + + + The request should use the proxy server at the URI specified in the Location header. + + + The request information is located at the URI specified in the Location header. The default action when this status is received is to follow the Location header associated with the response. When the original request method was POST, the redirected request will also use the POST method. + + + The target resource has been assigned a new permanent URI and any future references to this resource should use one of the returned URIs specified in the Location header. This status code is documented in IETF draft draft-reschke-http-status-308. + + + The request could not be understood by the server. This status code is sent when no other error is applicable, or if the exact error is unknown or does not have its own error code. + + + The requested resource requires authentication. The WWW-Authenticate header contains the details of how to perform the authentication. + + + This code is reserved for future use. + + + The server refuses to fulfill the request. + + + The requested resource does not exist on the server. + + + The HTTP method in the request is not allowed on the requested resource. + + + The client has indicated with Accept headers that it will not accept any of the available representations of the resource. + + + The requested proxy requires authentication. The Proxy-Authenticate header contains the details of how to perform the authentication. + + + The client did not send a request within the time the server was expecting the request. + + + The request could not be carried out because of a conflict on the server. + + + The requested resource is no longer available. + + + The required Content-Length header is missing. + + + A condition set for this request failed, and the request cannot be carried out. Conditions are set with conditional request headers like If-Match, If-None-Match, or If-Unmodified-Since. + + + The request is too large for the server to process. + + + The URI is too long. + + + The request is an unsupported type. + + + The range of data requested from the resource cannot be returned, either because the beginning of the range is before the beginning of the resource, or the end of the range is after the end of the resource. + + + An expectation given in an Expect header could not be met by the server. + + + The server understands the content type of the request entity and the syntax of the request entity is correct, but the server was unable to process the contained instructions. This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). This status code is documented in IETF RFC 4918. + + + The source or destination resource of a method is locked. This response should contain an appropriate precondition or post-condition code.This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). This status code is documented in IETF RFC 4918. + + + The method could not be performed on the resource because the requested action depended on another action and that action failed.This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). This status code is documented in IETF RFC 4918. + + + The client should switch to a different protocol such as TLS/1.0.This status code is documented in IETF RFC 2917. + + + The origin server requires the request to be conditional. This status code is documented in IETF RFC 6585. + + + The user has sent too many requests in a given amount of time. The response should include details explaining the condition, and may include a Retry-After header indicating how long to wait before making a new request. This status code is documented in IETF RFC 6585. + + + A generic error has occurred on the server. + + + The server does not support the requested function. + + + An intermediate proxy server received a bad response from another proxy or the origin server. + + + The server is temporarily unavailable, usually due to high load or maintenance. + + + An intermediate proxy server timed out while waiting for a response from another proxy or the origin server. + + + The requested HTTP version is not supported by the server. + + + The server has an internal configuration error. The chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process. This status code is documented in IETF RFC 2295. + + + The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request. This condition is considered to be temporary. This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). This status code is documented in IETF RFC 4918. + + + The server terminated an operation because it encountered an infinite loop while processing a request. This status indicates that the entire operation failed. This status code is an HTTP extension used with Web Distributed Authoring and Versioning (WebDAV). It can only be returned if the client HTTP request included the DAV header in the request. This status code is documented in IETF RFC 5842. + + + The policy for accessing the resource has not been met in the request.This status code is documented in IETF RFC 2774. + + + The server indicates that the client needs to authenticate to gain network access. +The response should contain a link to a resource that allows the user to submit credentials. This status code is documented in IETF RFC 6585. + + + Provides HTTP content that uses a stream. + + + Serialize the HttpStreamContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Closes the HttpStreamContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Get a collection of content headers set on the HttpStreamContent. + A collection of content headers set on the HttpStreamContent. + + + Serialize the HttpStreamContent to a buffer as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpStreamContent and return an input stream that represents the content as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HttpStreamContent to a String as an asynchronous operation. + The object representing the asynchronous operation. + + + Returns a string that represents the current HttpStreamContent object. + A string that represents the current object. + + + Determines whether the HttpStreamContent has a valid length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HttpStreamContent. + + + Write the HttpStreamContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpStreamContent class with the specified content. + The content used to initialize the HttpStreamContent. + + + Provides HTTP content that uses a string. + + + Closes the HttpStringContent instance and releases allocated resources. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Serialize the HttpStringContent into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Get a collection of content headers set on the HttpStringContent. + A collection of content headers set on the HttpStringContent. + + + Serialize the HttpStringContent to a buffer as an asynchronous operation. + The object that represents the asynchronous operation. + + + Serialize the HttpStringContent and return an input stream that represents the content as an asynchronous operation. + The object that represents the asynchronous operation. + + + Serialize the HttpStringContent to a String as an asynchronous operation. + The object that represents the asynchronous operation. + + + Returns a string that represents the current HttpStringContent object. + A string that represents the current object. + + + Compute the HttpStringContent length in bytes. + true if length is a valid length; otherwise, false. +The return value should never be false. + The length in bytes of the HttpStringContent. + + + Write the HttpStringContent to an output stream as an asynchronous operation. + The object that represents the asynchronous operation. + The output stream to write to. + + + Initializes a new instance of the HttpStringContent class with the specified content. + The content used to initialize the HttpStringContent. + + + Initializes a new instance of the HttpStringContent class with the specified content and encoding. + The content used to initialize the HttpStringContent. + The encoding to use for the content. + + + Initializes a new instance of the HttpStringContent class with the specified content, encoding, and media type. + The content used to initialize the HttpStringContent. + The encoding to use for the content. + The media type to use for the content. + + + Provides information about the underlying transport used by the HTTP connection. + + + Gets the certificate from the server with the SSL information. + The certificate from the server with the SSL information. + + + Gets the category of an error on an SSL connection. + The category of error on an SSL connection. + + + Gets the list of errors that occurred making an SSL connection. + The list of errors that occurred making an SSL connection. + + + Gets the intermediate certificates sent by the server during SSL negotiation on this HttpTransportInformation object. + The set of certificates sent by the server during SSL negotiation on this HttpTransportInformation object. + + + Returns a string that represents the current HttpTransportInformation object. + A string that represents the current object. + + + Represents the HTTP protocol version. + + + This value may be returned by third party filters. + + + HTTP 1.0. + + + HTTP 1.1. + + + Provides a base interface for an HTTP entity body and content headers. + + + Serialize the HTTP content into memory as an asynchronous operation. + The object that represents the asynchronous operation. + + + Get a collection of content headers set on the IHttpContent. + A collection of content headers set on the IHttpContent. + + + Serialize the HTTP content to a buffer as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HTTP content and return an input stream that represents the content as an asynchronous operation. + The object representing the asynchronous operation. + + + Serialize the HTTP content to a String as an asynchronous operation. + The object representing the asynchronous operation. + + + Determines whether the HTTP content has a valid length in bytes. + true if length is a valid length; otherwise, false. + The length in bytes of the HTTP content. + + + Write the HTTP content to an output stream as an asynchronous operation. + The object representing the asynchronous operation. + The output stream to write to. + + + Provides classes to send HTTP requests and an interface to create filters to target HTTP and REST services in Windows Store app. + + + The base protocol filter for an HttpClient instance. + + + Get or set a value that indicates whether the HttpBaseProtocolFilter should follow redirection responses. + A value that indicates whether the HttpBaseProtocolFilter should follow redirection responses.This value is true if the if HttpBaseProtocolFilter should follow redirection responses; otherwise false. The default value is true. + + + Get or set a value that indicates whether the HttpBaseProtocolFilter can prompt for user credentials when requested by the server. + A value that indicates whether HttpBaseProtocolFilter can prompt for user credentials when requested by the server.This value is true if HttpBaseProtocolFilter can prompt for user credentials when requested; otherwise false. The default value is true. + + + Gets or sets a value that indicates whether the HttpBaseProtocolFilter can automatically decompress the HTTP content response. + A value that indicates whether HttpBaseProtocolFilter can automatically decompress the HTTP content response. This value is true if the if HttpBaseProtocolFilter can automatically decompress the HTTP content response; otherwise false. The default value is true. + + + Get or set the read and write cache control behavior to be used on the HttpBaseProtocolFilter object. + The cache control behavior to be used on the HttpBaseProtocolFilter object. + + + Get or set the client SSL certificate that will be sent to the server if the server requests a client certificate. + The client SSl certificate. + + + Closes the HttpBaseProtocolFilter instance and releases allocated resources. + + + Get the HttpCookieManager with the cookies associated with an app. + The HttpCookieManager object that contains the cookies associated with an app. + + + Performs tasks associated with freeing, releasing, or resetting unmanaged resources. + + + Get a vector of SSL server certificate errors that the app might subsequently choose to ignore. + A vector of SSL server certificate errors that the app might subsequently choose to ignore. + + + Get or set the maximum number of TCP connections allowed per HTTP server by the HttpBaseProtocolFilter object. + The maximum number of connections allowed per HTTP server. + + + Get or set the credentials to be used to negotiate with an HTTP proxy. + The credentials to be used to negotiate with an HTTP proxy. + + + Send an HTTP request using the HttpBaseProtocolFilter as an asynchronous operation. + The object representing the asynchronous operation. + The HTTP request message to send. + + + Get or set the credentials to be used to authenticate with an HTTP server. + The credentials to be used to authenticate with an HTTP server. + + + Get or set a value that indicates whether the HttpBaseProtocolFilter can use a proxy for sending HTTP requests. + A value that indicates whether HttpBaseProtocolFilter can use a proxy to send HTTP requests.This value is true if HttpBaseProtocolFilter can use a proxy to send requests; otherwise false. The default value is true to allow proxies to be used. + + + Initializes a new instance of the HttpBaseProtocolFilter class. + + + Provides control of the local HTTP cache for responses to HTTP requests by methods in the Windows.Web.Http and Windows.Web.Http.Filters namespaces. + + + Get or set the read behavior to use for cache control on the HttpCacheControl object. + The read behavior to use for cache control. + + + Get or set the write behavior to use for cache control on the HttpCacheControl object. + The read behavior to use for cache control. + + + Indicates if read requests by class methods in the Windows.Web.Http and Windows.Web.Http.Filters namespaces use the local HTTP cache for the response. + + + Always use the cache algorithm specified in RFC 2616 by the IETF to optimize network bandwidth. + + + Use the local HTTP cache if possible but always ask the server if more recent content is available. The server returns an HTTP status code of 200 (OK) or 304 (Not Modified) when the local content is the most recent. + + + Only use data from the local HTTP cache. This is the offline behavior. + + + Indicates if content returned by requests used by class methods in the Windows.Web.Http and Windows.Web.Http.Filters namespaces is written to the local HTTP cache. + + + Use the default behavior of WinInet. This usually results in writing the response to the local HTTP cache. + + + Never write the response to the local HTTP cache. + + + An interface used to implement custom filters for an HttpClient instance. + + + Send an HTTP request on the IHttpFilter instance as an asynchronous operation. + The object representing the asynchronous operation. + The HTTP request message to send. + + + Provides support for HTTP headers used by the Windows.Web.Http namespace for Windows Store app that target HTTP services. + + + Represents the value of the Cache-Control HTTP header on HTTP content associated with an HTTP request or response. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpNameValueHeaderValue item to the end of the collection. + The HttpNameValueHeaderValue object to append. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpNameValueHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpNameValueHeaderValue item in the collection. + An object that can be used to enumerate the HttpNameValueHeaderValue items in the collection. The iterator points to the first HttpNameValueHeaderValue item in the HttpCacheDirectiveHeaderValueCollection. + + + Returns the HttpNameValueHeaderValue at the specified index in the collection. + The HttpNameValueHeaderValue at the specified index in the HttpCacheDirectiveHeaderValueCollection. + The zero-based index of a specified item in the HttpCacheDirectiveHeaderValueCollection. + + + Retrieves the HttpNameValueHeaderValue items that start at the specified index in the collection. + The number of HttpNameValueHeaderValue items retrieved. + The zero-based index of the start of the HttpNameValueHeaderValue items in the HttpCacheDirectiveHeaderValueCollection. + An array of HttpNameValueHeaderValue items that start at startIndex in the HttpCacheDirectiveHeaderValueCollection. + + + Returns an immutable view of the HttpCacheDirectiveHeaderValueCollection. + The view of the HttpCacheDirectiveHeaderValueCollection. + + + Retrieves the index of an HttpNameValueHeaderValue in the collection. + Indicates whether the item is found. true if the HttpNameValueHeaderValue item is found; otherwise, false. + The HttpNameValueHeaderValue to find in the HttpCacheDirectiveHeaderValueCollection. + The index of the HttpNameValueHeaderValue in the HttpCacheDirectiveHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpNameValueHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Gets or sets the value of the max-age directive in the Cache-Control HTTP header. + The value of the max-age directive in the Cache-Control HTTP header. + + + Gets or sets the value of the max-stale directive in the Cache-Control HTTP header. + the value of the max-stale directive in the Cache-Control HTTP header. + + + Gets or sets the value of the min-fresh directive in the Cache-Control HTTP header. + The value of the min-fresh directive in the Cache-Control HTTP header. + + + Parses and adds an entry to the HttpCacheDirectiveHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpCacheDirectiveHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpNameValueHeaderValue item from the collection. + + + Replaces all the HttpNameValueHeaderValue items in the collection with the specified HttpNameValueHeaderValue items. + The collection of HttpNameValueHeaderValue items to add to the collection. + + + Sets the HttpNameValueHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpNameValueHeaderValue. + The item to set. + + + Gets or sets the value of the s-maxage directive in the Cache-Control HTTP header. + The value of the s-maxage directive in the Cache-Control HTTP header. + + + Gets the number of HttpNameValueHeaderValue objects in the collection. + The number of HttpNameValueHeaderValue objects in the HttpCacheDirectiveHeaderValueCollection. + + + Returns a string that represents the current HttpCacheDirectiveHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpCacheDirectiveHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents authentication information used in the Proxy-Authenticate and WWW-Authenticate HTTP header values. + + + Gets the credentials that contain the authentication information of the user agent for the resource being requested. + The credentials that contain the authentication information. + + + Converts a string to an HttpChallengeHeaderValue instance. + An HttpChallengeHeaderValue instance. + A string that represents authentication header value information. + + + Gets the scheme to use for authentication. + The scheme to use for authentication. + + + The SPNEGO token to use with the Negotiate protocol scheme. + The SPNEGO token. + + + Returns a string that represents the current HttpChallengeHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpChallengeHeaderValue information. + true if input is valid HttpChallengeHeaderValue information; otherwise, false. + The string to validate. + The HttpChallengeHeaderValue version of the string. + + + Initializes a new instance of the HttpChallengeHeaderValue class with the scheme to use for authorization. + The scheme to use for authorization. + + + Initializes a new instance of the HttpChallengeHeaderValue class with the scheme to use for authorization and the SPNEGO token. + The scheme to use for authorization. + The SPNEGO token to use with the Negotiate protocol scheme. + + + Represents the value of the Proxy-Authenticate or WWW-Authenticate HTTP header on an HTTP response. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpChallengeHeaderValue item to the end of the collection. + The HttpChallengeHeaderValue object to append. + + + Removes all HttpChallengeHeaderValue objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpChallengeHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpChallengeHeaderValue item in the collection. + An object that can be used to enumerate the HttpChallengeHeaderValue items in the collection. The iterator points to the first HttpChallengeHeaderValue item in the HttpChallengeHeaderValueCollection. + + + Returns the HttpChallengeHeaderValue at the specified index in the collection. + The HttpChallengeHeaderValue at the specified index in the HttpChallengeHeaderValueCollection + The zero-based index of a specified item in the HttpChallengeHeaderValueCollection. + + + Retrieves the HttpChallengeHeaderValue items that start at the specified index in the collection. + The number of HttpChallengeHeaderValue items retrieved. + The zero-based index of the start of the HttpChallengeHeaderValue items in the HttpChallengeHeaderValueCollection. + An array of HttpChallengeHeaderValue items that start at startIndex in the HttpChallengeHeaderValueCollection. + + + Returns an immutable view of the HttpChallengeHeaderValueCollection. + The view of the HttpChallengeHeaderValueCollection. + + + Retrieves the index of an HttpChallengeHeaderValue in the collection. + Indicates whether the item is found. true if the HttpChallengeHeaderValue item is found; otherwise, false. + The HttpChallengeHeaderValue to find in the HttpChallengeHeaderValueCollection. + The index of the HttpChallengeHeaderValue in the HttpChallengeHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpChallengeHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpChallengeHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpChallengeHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpChallengeHeaderValue item from the collection. + + + Replaces all the HttpChallengeHeaderValue items in the collection with the specified HttpChallengeHeaderValue items. + The collection of HttpChallengeHeaderValue items to add to the collection. + + + Sets the HttpChallengeHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpChallengeHeaderValue. + The item to set. + + + Gets the number of HttpChallengeHeaderValue objects in the collection. + The number of HttpChallengeHeaderValue objects in the HttpChallengeHeaderValueCollection. + + + Returns a string that represents the current HttpChallengeHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpChallengeHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents connection information used in the Connection HTTP header on an HTTP request. + + + Converts a string to an HttpConnectionOptionHeaderValue instance. + An HttpConnectionOptionHeaderValue instance. + A string that represents the connection information in the Connection HTTP header. + + + Gets the value of the connection-token in the Connection HTTP header. + The value of the connection-token in the Connection HTTP header. + + + Returns a string that represents the current HttpConnectionOptionHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpConnectionOptionHeaderValue information. + true if input is valid HttpConnectionOptionHeaderValue information; otherwise, false. + The string to validate. + The HttpConnectionOptionHeaderValue version of the string. + + + Initializes a new instance of the HttpConnectionOptionHeaderValue class. + The value of the connection-token to use. + + + Represents the value of the Connection HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpConnectionOptionHeaderValue item to the end of the collection. + The HttpConnectionOptionHeaderValue object to append. + + + Removes all HttpConnectionOptionHeaderValue objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpConnectionOptionHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpConnectionOptionHeaderValue item in the collection. + An object that can be used to enumerate the HttpConnectionOptionHeaderValue items in the collection. The iterator points to the first HttpConnectionOptionHeaderValue item in the HttpConnectionOptionHeaderValueCollection. + + + Returns the HttpConnectionOptionHeaderValue at the specified index in the collection. + The HttpConnectionOptionHeaderValue at the specified index in the HttpConnectionOptionHeaderValueCollection. + The zero-based index of a specified item in the HttpConnectionOptionHeaderValueCollection. + + + Retrieves the HttpConnectionOptionHeaderValue items that start at the specified index in the collection. + The number of HttpConnectionOptionHeaderValue items retrieved. + The zero-based index of the start of the HttpConnectionOptionHeaderValue items in the HttpConnectionOptionHeaderValueCollection. + An array of HttpConnectionOptionHeaderValue items that start at startIndex in the HttpConnectionOptionHeaderValueCollection. + + + Returns an immutable view of the HttpConnectionOptionHeaderValueCollection. + The view of the HttpConnectionOptionHeaderValueCollection. + + + Retrieves the index of an HttpConnectionOptionHeaderValue in the collection. + Indicates whether the item is found. true if the HttpConnectionOptionHeaderValue item is found; otherwise, false. + The HttpConnectionOptionHeaderValue to find in the HttpConnectionOptionHeaderValueCollection. + The index of the HttpConnectionOptionHeaderValue in the HttpConnectionOptionHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpConnectionOptionHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpConnectionOptionHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpConnectionOptionHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpConnectionOptionHeaderValue item from the collection. + + + Replaces all the HttpConnectionOptionHeaderValue items in the collection with the specified HttpConnectionOptionHeaderValue items. + The collection of HttpConnectionOptionHeaderValue items to add to the collection. + + + Sets the HttpConnectionOptionHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpConnectionOptionHeaderValue. + The item to set. + + + Gets the number of HttpConnectionOptionHeaderValue objects in the collection. + The number of HttpConnectionOptionHeaderValue objects in the HttpConnectionOptionHeaderValueCollection. + + + Returns a string that represents the current HttpConnectionOptionHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpConnectionOptionHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents content encoding information used in the Content-Encoding HTTP header on HTTP content in a request or a response. + + + Gets the value of the content-coding information used in the Content-Encoding HTTP header. + The value of the content-coding characteristic in the Content-Encoding HTTP header. + + + Converts a string to an HttpContentCodingHeaderValue instance. + An HttpContentCodingHeaderValue instance. + A string that represents the content coding information in the Content-Encoding HTTP header. + + + Returns a string that represents the current HttpContentCodingHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpContentCodingHeaderValue information. + true if input is valid HttpContentCodingHeaderValue information; otherwise, false. + The string to validate. + The HttpContentCodingHeaderValue version of the string. + + + Initializes a new instance of the HttpContentCodingHeaderValue class. + The value of the content-coding to use. + + + Represents the value of the Content-Encoding HTTP header on HTTP content in a request or a response. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpContentCodingHeaderValue item to the end of the collection. + The HttpContentCodingHeaderValue object to append. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpContentCodingHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpContentCodingHeaderValue item in the collection. + An object that can be used to enumerate the HttpContentCodingHeaderValue items in the collection. The iterator points to the first HttpContentCodingHeaderValue item in the HttpContentCodingHeaderValueCollection. + + + Returns the HttpContentCodingHeaderValue at the specified index in the collection. + The HttpContentCodingHeaderValue at the specified index in the HttpContentCodingHeaderValueCollection. + The zero-based index of a specified item in the HttpContentCodingHeaderValueCollection. + + + Retrieves the HttpContentCodingHeaderValue items that start at the specified index in the collection. + The number of HttpContentCodingHeaderValue items retrieved. + The zero-based index of the start of the HttpContentCodingHeaderValue items in the HttpContentCodingHeaderValueCollection. + An array of HttpContentCodingHeaderValue items that start at startIndex in the HttpContentCodingHeaderValueCollection. + + + Returns an immutable view of the HttpContentCodingHeaderValueCollection. + The view of the HttpContentCodingHeaderValueCollection. + + + Retrieves the index of an HttpContentCodingHeaderValue in the collection. + Indicates whether the item is found. true if the HttpContentCodingHeaderValue item is found; otherwise, false. + The HttpContentCodingHeaderValue to find in the HttpContentCodingHeaderValueCollection. + The index of the HttpContentCodingHeaderValue in the HttpContentCodingHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpContentCodingHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpContentCodingHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpContentCodingHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpContentCodingHeaderValue item from the collection. + + + Replaces all the HttpContentCodingHeaderValue items in the collection with the specified HttpContentCodingHeaderValue items. + The HttpContentCodingHeaderValue items to add to the collection. + + + Sets the HttpContentCodingHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpContentCodingHeaderValue. + The item to set. + + + Gets the number of HttpContentCodingHeaderValue objects in the collection. + The number of HttpContentCodingHeaderValue objects in the HttpContentCodingHeaderValueCollection. + + + Returns a string that represents the current HttpContentCodingHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpContentCodingHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents accept encoding information used in the Accept-Encoding HTTP header on an HTTP request. + + + Gets the value of the content-coding characteristic in the Accept-Encoding HTTP header. + The value of the content-coding characteristic in the Accept-Encoding HTTP header. + + + Gets the value of the qvalue attribute in the Accept-Encoding HTTP header. + The value of the qvalue attribute in the Accept-Encoding HTTP header. + + + Converts a string to an HttpContentCodingWithQualityHeaderValue instance. + An HttpContentCodingWithQualityHeaderValue instance. + A string that represents the content coding information in the Accept-Encoding HTTP header. + + + Returns a string that represents the current HttpContentCodingHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpContentCodingWithQualityHeaderValue information. + true if input is valid HttpContentCodingWithQualityHeaderValue information; otherwise, false. + The string to validate. + The HttpContentCodingWithQualityHeaderValue version of the string. + + + Initializes a new instance of the HttpContentCodingHeaderValue class with content-coding information. + The value of the content-coding to use. + + + Initializes a new instance of the HttpContentCodingHeaderValue class with content-coding information and a qvalue. + The value of the content-coding information to use. + The value of the qvalue to use. + + + Represents the value of the Accept-Encoding HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpContentCodingWithQualityHeaderValue item to the end of the collection. + The HttpContentCodingWithQualityHeaderValue object to append. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpContentCodingWithQualityHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpContentCodingWithQualityHeaderValue item in the collection. + An object that can be used to enumerate the HttpContentCodingWithQualityHeaderValue items in the collection. The iterator points to the first HttpContentCodingWithQualityHeaderValue item in the HttpContentCodingWithQualityHeaderValueCollection. + + + Returns the HttpContentCodingWithQualityHeaderValue at the specified index in the collection. + The HttpContentCodingWithQualityHeaderValue at the specified index in the HttpContentCodingWithQualityHeaderValueCollection . + The zero-based index of a specified item in the collection. + + + Retrieves the HttpContentCodingWithQualityHeaderValue items that start at the specified index in the collection. + The number of HttpContentCodingWithQualityHeaderValue items retrieved. + The zero-based index of the start of the HttpContentCodingWithQualityHeaderValue items in the HttpContentCodingWithQualityHeaderValueCollection. + An array of HttpContentCodingWithQualityHeaderValue items that start at startIndex in the HttpContentCodingWithQualityHeaderValueCollection. + + + Returns an immutable view of the HttpContentCodingWithQualityHeaderValueCollection. + The view of the HttpContentCodingWithQualityHeaderValueCollection. + + + Retrieves the index of an HttpContentCodingWithQualityHeaderValue in the collection. + Indicates whether the item is found. true if the HttpContentCodingWithQualityHeaderValue item is found; otherwise, false. + The HttpContentCodingWithQualityHeaderValue to find in the HttpContentCodingWithQualityHeaderValueCollection. + The index of the HttpContentCodingWithQualityHeaderValue in the HttpContentCodingWithQualityHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpContentCodingWithQualityHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpContentCodingWithQualityHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpContentCodingWithQualityHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpContentCodingWithQualityHeaderValue item from the collection. + + + Replaces all the HttpContentCodingWithQualityHeaderValue items in the collection with the specified HttpContentCodingWithQualityHeaderValue items. + The HttpContentCodingWithQualityHeaderValue items to add to the collection. + + + Sets the HttpContentCodingWithQualityHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpContentCodingWithQualityHeaderValue. + The item to set. + + + Gets the number of HttpContentCodingWithQualityHeaderValue objects in the collection. + The number of HttpContentCodingWithQualityHeaderValue objects in the HttpContentCodingWithQualityHeaderValueCollection. + + + Returns a string that represents the current HttpContentCodingWithQualityHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpContentCodingWithQualityHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents the value of the Content-Disposition HTTP header on HTTP content in a request or a response. + + + Gets or sets the value of the disposition-type information in the Content-Disposition HTTP header. + The value of the disposition-type characteristic in the Content-Disposition HTTP header. + + + Gets or sets the value of the filename-parm information in the Content-Disposition HTTP header for a single file. + A suggested filename. + + + Gets or sets the value of the filename-parm characteristic in the Content-Disposition HTTP header for multiple files. + A suggested filename of the form filename*. + + + Gets or sets the name for a content body part in the Content-Disposition HTTP header. + The name for the content body part. + + + Gets a set of parameters included in the Content-Disposition HTTP header. + A set of parameters. + + + Converts a string to an HttpContentDispositionHeaderValue instance. + An HttpContentDispositionHeaderValue instance. + A string that represents the content disposition information in the Content-Disposition HTTP header. + + + Gets or sets the approximate size, in bytes, of the file used in the Content-Disposition HTTP header. + The approximate size, in bytes. + + + Returns a string that represents the current HttpContentDispositionHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpContentDispositionHeaderValue information. + true if input is valid HttpContentDispositionHeaderValue information; otherwise, false. + The string to validate. + The HttpContentDispositionHeaderValue version of the string. + + + Initializes a new instance of the HttpContentDispositionHeaderValue class with content-coding information for use in the Content-Disposition HTTP header. + The value of the disposition-type information to be used in the Content-Disposition HTTP header. + + + Provides a collection of the HTTP headers associated with content on an HTTP request or response. + + + Adds a new key-value pair to the HttpContentHeaderCollection. + The key-value pair to add. + + + Adds an item to the HttpContentHeaderCollection. + The key of the item to add. + The item value to add. + + + Adds a new item to the end of the HttpContentHeaderCollection. + The name of the value to add. + The item value to add. + + + Removes all objects from the HttpContentHeaderCollection. + + + Returns a value that indicates whether a specified key-value pair exists in the HttpContentHeaderCollection. + true if an item with that key exists in the HttpContentHeaderCollection; otherwise, false. + The key-value pair to check for in the HttpContentHeaderCollection. + + + Returns a value that indicates whether a specified key exists in the HttpContentHeaderCollection. + true if an item with that key exists in the HttpContentHeaderCollection; otherwise, false. + The key to check for in the HttpContentHeaderCollection. + + + Gets or sets the HttpContentDispositionHeaderValue object that represents the value of an HTTP Content-Disposition header on the HTTP content. + The object that represent the value of HTTP Content-Disposition header on the HTTP content. A null value means that the header is absent. + + + Gets the HttpContentCodingHeaderValueCollection of HttpContentCodingHeaderValue objects that represent the value of an HTTP Content-Encoding header on the HTTP content. + The collection of HttpContentCodingHeaderValue objects that represent the value of an HTTP Content-Encoding header on the HTTP content. An empty collection means that the header is absent. + + + Gets the HttpLanguageHeaderValueCollection of objects that represent the value of an HTTP Content-Language header on the HTTP content. + The collection of objects that represent the value of an HTTP Content-Language header on the HTTP content. An empty collection means that the header is absent + + + Gets or sets the value of the HTTP Content-Length header on the HTTP content. + The value of the HTTP Content-Length header value on the HTTP content. A null value means that the header is absent. + + + Gets or sets the value of the HTTP Content-Location header on the HTTP content. + The value of the HTTP Content-Location header on the HTTP content. A null value means that the header is absent. + + + Gets or sets the value of an HTTP Content-MD5 header on the HTTP content. + The value of the HTTP Content-MD5 header on the HTTP content. A null value means that the header is absent. + + + Gets or sets the HttpContentRangeHeaderValue object that represent the value of an HTTP Content-Range header on the HTTP content. + The object that represent the value of the HTTP Content-Range header on the HTTP content. A null value means that the header is absent. + + + Gets or sets the HttpMediaTypeHeaderValue object that represent the value of an HTTP Content-Type header on the HTTP content. + The object that represent the value of an HTTP Content-Type header on the HTTP content. A null value means that the header is absent. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the DateTime object that represents the value of an HTTP Expires header on the HTTP content. + The object that represents the value of an HTTP Expires header on the HTTP content. A null value means that the header is absent. + + + Retrieves an iterator to the first item in the HttpContentHeaderCollection. + An object that can be used to enumerate the items in the collection. The iterator points to the first item in the HttpContentHeaderCollection. + + + Returns an immutable view of the HttpContentHeaderCollection. + The view of the HttpContentHeaderCollection. + + + Determines whether the HttpContentHeaderCollection contains the specified key. + true if the key is found; otherwise, false. + The key associated with the item to locate. + + + Inserts or replaces an item in the HttpContentHeaderCollection with the specified key and value. + true if an item with the specified key is an existing item that was replaced; otherwise false. + The key of the item to be inserted. + The value of the item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the HttpContentHeaderCollection. + The ICollection of all keys in this HttpContentHeaderCollection. + + + Gets or sets the DateTime object that represents the value of an HTTP Last-Modified header on the HTTP content. + The object that represents the value of an HTTP Last-Modified header on the HTTP content. A null value means that the header is absent. + + + Lookup an item in the HttpContentHeaderCollection. + The value of the item if found. + The key of the item to lookup. + + + Removes a specific object from the HttpContentHeaderCollection . + The key of the item to remove. + + + Removes a specific key-value pair from the HttpContentHeaderCollection. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Removes a specific item from the HttpContentHeaderCollection. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Gets the number of objects in the HttpContentHeaderCollection. + The number of objects in the HttpContentHeaderCollection. + + + Returns a string that represents the current HttpContentHeaderCollection object. + A string that represents the current object. + + + Try to append the specified item to the HttpContentHeaderCollection without validation. + true if the item was appended; otherwise false. + The name of the item to append. + The value of the item to append. + + + Returns a value that indicates whether a specified key exists in the HttpContentHeaderCollection. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the HttpContentHeaderCollection; otherwise, false. + The key to check for in the HttpContentHeaderCollection. + The item, if it exists. Contains null if the item does not exist in the HttpContentHeaderCollection. + + + Gets an ICollection object containing the values of the HttpContentHeaderCollection . + The ICollection of all values in this HttpContentHeaderCollection. + + + Initializes a new instance of the HttpContentHeaderCollection class. + + + Represents the value of the Content-Range HTTP header on HTTP content in a request or a response. + + + Gets or sets the value of the range units used in the Content-Range HTTP header. + The range units used. + + + Gets the position at which to start sending data in the Content-Range HTTP header. + The position, in bytes, at which to start sending data. + + + Gets the position at which to stop sending data in the Content-Range HTTP header. + The position at which to stop sending data. + + + Gets the length of the full content entity body in the Content-Range HTTP header. + The length of the full content entity body. + + + Converts a string to an HttpContentRangeHeaderValue instance. + An HttpContentRangeHeaderValue instance. + A string that represents the content range information in the Content-Range HTTP header. + + + Returns a string that represents the current HttpContentRangeHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpContentRangeHeaderValue information. + true if input is valid HttpContentRangeHeaderValue information; otherwise, false. + The string to validate. + The HttpContentRangeHeaderValue version of the string. + + + Gets or sets the value of the range units used in the Content-Range HTTP header. + The range units used. + + + Initializes a new instance of the HttpContentRangeHeaderValue class with a content length. + The length, in bytes, of the full content entity body. + + + Initializes a new instance of the HttpContentRangeHeaderValue class with a start and stop position. + The position, in bytes, at which to start sending data. + The position, in bytes, at which to stop sending data. + + + Initializes a new instance of the HttpContentRangeHeaderValue class with a start and stop position and a content length. + The position, in bytes, at which to start sending data. + The position, in bytes, at which to stop sending data. + The length, in bytes, of the full content entity body. + + + Represents cookie information used in the Cookie HTTP header on an HTTP request. + + + Gets a token that represents the cookie name used in the Cookie HTTP header. + A token that represents the cookie name. + + + Converts a string to an HttpCookiePairHeaderValue instance. + An HttpCookiePairHeaderValue instance. + A string that represents the cookie name and value in the Cookie HTTP header. + + + Returns a string that represents the current HttpCookiePairHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpCookiePairHeaderValue information. + true if input is valid HttpCookiePairHeaderValue information; otherwise, false. + The string to validate. + The HttpCookiePairHeaderValue version of the string. + + + Gets or sets a value for the cookie used in the Cookie HTTP header. + A value for the cookie. + + + Initializes a new instance of the HttpCookiePairHeaderValue class. with a cookie name. + A token that represents the cookie name. + + + Initializes a new instance of the HttpCookiePairHeaderValue class. with a cookie name and a value for the cookie. + A token that represents the cookie name. + A value for the cookie. + + + Represents the value of the Cookie HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpCookiePairHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpCookiePairHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpCookiePairHeaderValue item in the collection. + An object that can be used to enumerate the HttpCookiePairHeaderValue items in the collection. The iterator points to the first HttpCookiePairHeaderValue item in the HttpCookiePairHeaderValueCollection. + + + Returns the HttpCookiePairHeaderValue at the specified index in the collection. + The HttpCookiePairHeaderValue at the specified index in the HttpCookiePairHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpCookiePairHeaderValue items that start at the specified index in the collection. + The number of HttpCookiePairHeaderValue items retrieved. + The zero-based index of the start of the HttpCookiePairHeaderValue items in the HttpCookiePairHeaderValueCollection. + An array of HttpCookiePairHeaderValue items that start at startIndex in the HttpCookiePairHeaderValueCollection. + + + Returns an immutable view of the HttpCookiePairHeaderValueCollection. + The view of the HttpCookiePairHeaderValueCollection. + + + Retrieves the index of an HttpCookiePairHeaderValue in the collection. + Indicates whether the item is found. true if the HttpCookiePairHeaderValue item is found; otherwise, false. + The HttpCookiePairHeaderValue to find in the HttpCookiePairHeaderValueCollection. + The index of the HttpCookiePairHeaderValue in the HttpCookiePairHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpCookiePairHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpCookiePairHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpCookiePairHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpCookiePairHeaderValue item from the collection. + + + Replaces all the HttpCookiePairHeaderValue items in the collection with the specified HttpCookiePairHeaderValue items. + The HttpCookiePairHeaderValue items to add to the collection. + + + Sets the HttpCookiePairHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpCookiePairHeaderValue. + The item to set. + + + Gets the number of HttpCookiePairHeaderValue objects in the collection. + The number of HttpCookiePairHeaderValue objects in the HttpCookiePairHeaderValueCollection. + + + Returns a string that represents the current HttpCookiePairHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpCookiePairHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents the value of the Authorization or Proxy-Authorization HTTP header on an HTTP request. + + + Gets a set of name/value pairs included in the Authorization or Proxy-Authorization HTTP header. + A set of name/value pairs. + + + Converts a string to an HttpCredentialsHeaderValue instance. + An HttpCredentialsHeaderValue instance. + A string that represents the credential information in the Authorization or Proxy-Authorization HTTP header. + + + Gets the scheme to use for authentication. + The scheme to use for authentication. + + + Gets the user token information used in the Authorization or Proxy-Authorization HTTP header. + The user token information in the Authorization or Proxy-Authorization HTTP header. + + + Returns a string that represents the current HttpCredentialsHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpCredentialsHeaderValue information. + true if input is valid HttpCredentialsHeaderValue information; otherwise, false. + The string to validate. + The HttpCredentialsHeaderValue version of the string. + + + Initializes a new instance of the HttpCredentialsHeaderValue class with the scheme to use for authentication. + The scheme to use for authentication. + + + Initializes a new instance of the HttpCredentialsHeaderValue class with the scheme and user token information to use for authentication. + The scheme to use for authentication. + The user token information to use for authentication. + + + Represents the value of the Retry-After HTTP header on an HTTP response. + + + Gets the value of the HTTP-date information used in the Retry-After HTTP header. + The value of the HTTP-date information. + + + Gets the value of the delta-seconds information used in the Retry-After HTTP header. + The value of the delta-seconds information. + + + Converts a string to an HttpDateOrDeltaHeaderValue instance. + An HttpDateOrDeltaHeaderValue instance. + A string that represents the HTTP-date or delta-seconds information in the Retry-After HTTP header. + + + Returns a string that represents the current HttpDateOrDeltaHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpDateOrDeltaHeaderValue information. + true if input is valid HttpDateOrDeltaHeaderValue information; otherwise, false. + The string to validate. + The HttpDateOrDeltaHeaderValue version of the string. + + + Represents a token for a particular server behavior required by the client that is used in the Expect HTTP header on an HTTP request. + + + Gets or sets a token that represents a name for a server behavior used in the Expect HTTP header. + A token that represents the name for a server behavior. + + + Gets a set of parameters for a server behavior included in the Expect HTTP header. + A set of parameters for a server behavior. + + + Converts a string to an HttpExpectationHeaderValue instance. + An HttpExpectationHeaderValue instance. + A string that represents the information in the Expect HTTP header. + + + Returns a string that represents the current HttpExpectationHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpCredentialsHeaderValue information. + true if input is valid HttpExpectationHeaderValue information; otherwise, false. + The string to validate. + The HttpExpectationHeaderValue version of the string. + + + Gets or sets a value for a server behavior used in the Expect HTTP header. + A value for a server behavior used in the Expect HTTP header. + + + Initializes a new instance of the HttpExpectationHeaderValue class with a name. + A token that represents a name used in the Expect HTTP header. + + + Initializes a new instance of the HttpExpectationHeaderValue class with a name and value for the name. + A token that represents a name used in the Expect HTTP header. + A value for the name used in the Expect HTTP header. + + + Represents the value of the Expect HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpExpectationHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpExpectationHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpExpectationHeaderValue item in the collection. + An object that can be used to enumerate the HttpExpectationHeaderValue items in the collection. The iterator points to the first HttpExpectationHeaderValue item in the HttpExpectationHeaderValueCollection. + + + Returns the HttpExpectationHeaderValue at the specified index in the collection. + The HttpExpectationHeaderValue at the specified index in the HttpExpectationHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpExpectationHeaderValue items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpExpectationHeaderValue items in the HttpExpectationHeaderValueCollection. + An array of HttpExpectationHeaderValue items that start at startIndex in the HttpExpectationHeaderValueCollection. + + + Returns an immutable view of the HttpExpectationHeaderValueCollection. + The view of the HttpExpectationHeaderValueCollection. + + + Retrieves the index of an HttpExpectationHeaderValue in the collection. + Indicates whether the item is found. true if the HttpExpectationHeaderValue item is found; otherwise, false. + The HttpExpectationHeaderValue to find in the HttpExpectationHeaderValueCollection. + The index of the HttpExpectationHeaderValue in the HttpExpectationHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpExpectationHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpExpectationHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpExpectationHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpExpectationHeaderValue item from the collection. + + + Replaces all the HttpExpectationHeaderValue items in the collection with the specified HttpExpectationHeaderValue items. + The HttpExpectationHeaderValue items to add to the collection. + + + Sets the HttpExpectationHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpExpectationHeaderValue. + The item to set. + + + Gets the number of HttpExpectationHeaderValue objects in the collection. + The number of HttpExpectationHeaderValue objects in the HttpExpectationHeaderValueCollection. + + + Returns a string that represents the current HttpExpectationHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpExpectationHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents the value of the Content-Language HTTP header on HTTP content in a request or a response. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new Language item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of Language items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first Language item in the collection. + An object that can be used to enumerate the Language items in the collection. The iterator points to the first Language item in the HttpLanguageHeaderValueCollection. + + + Returns the Language item at the specified index in the collection. + The Language item at the specified index in the HttpLanguageHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the Language items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the Language items in the HttpLanguageHeaderValueCollection. + An array of Language items that start at startIndex in the HttpLanguageHeaderValueCollection. + + + Returns an immutable view of the HttpLanguageHeaderValueCollection. + The view of the HttpLanguageHeaderValueCollection. + + + Retrieves the index of a Language in the collection. + Indicates whether the item is found. true if the Language item is found; otherwise, false. + The item to find in the HttpLanguageHeaderValueCollection. + The index of the Language item in the HttpLanguageHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts a Language into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpLanguageHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpLanguageHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last Language item from the collection. + + + Replaces all the Language items in the collection with the specified Language items. + The Language items to add to the collection. + + + Sets the Language at the specified index in the collection. + The zero-based index at which to set the Language. + The item to set. + + + Gets the number of Language objects in the collection. + the number of Language objects in the HttpLanguageHeaderValueCollection. + + + Returns a string that represents the current HttpLanguageHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpLanguageHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents accept language information used in the Accept-Language HTTP header on an HTTP request. + + + Gets the value of the language-range information from the HttpLanguageRangeWithQualityHeaderValue used in the Accept-Language HTTP header. + The value of the language-range information. + + + Gets the value of the qvalue or quality factor from the HttpLanguageRangeWithQualityHeaderValue used in the Accept-Language HTTP header. + The value of the qvalue or quality factor. + + + Converts a string to an HttpLanguageRangeWithQualityHeaderValue instance. + An HttpLanguageRangeWithQualityHeaderValue instance. + A string that represents the language-range and quality factor information used in the Accept-Encoding HTTP header. + + + Returns a string that represents the current HttpLanguageRangeWithQualityHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpLanguageRangeWithQualityHeaderValue information. + true if input is valid HttpLanguageRangeWithQualityHeaderValue information; otherwise, false. + The string to validate. + The HttpLanguageRangeWithQualityHeaderValue version of the string. + + + Initializes a new instance of the HttpLanguageRangeWithQualityHeaderValue class with language-range information. + The value of the language-range information used in the Accept-Language HTTP header. + + + Initializes a new instance of the HttpLanguageRangeWithQualityHeaderValue class with language-range and quality information. + The value of the language-range information used in the Accept-Language HTTP header. + The value of the qvalue or quality factor used in the Accept-Language HTTP header. + + + Represents the value of the Accept-Language HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpLanguageRangeWithQualityHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpLanguageRangeWithQualityHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpLanguageRangeWithQualityHeaderValue item in the collection. + An object that can be used to enumerate the HttpLanguageRangeWithQualityHeaderValue items in the collection. The iterator points to the first HttpLanguageRangeWithQualityHeaderValue item in the HttpLanguageRangeWithQualityHeaderValueCollection. + + + Returns the HttpLanguageRangeWithQualityHeaderValue at the specified index in the collection. + The HttpLanguageRangeWithQualityHeaderValue at the specified index in the HttpLanguageRangeWithQualityHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpLanguageRangeWithQualityHeaderValue items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpLanguageRangeWithQualityHeaderValue items in the HttpLanguageRangeWithQualityHeaderValueCollection. + An array of HttpLanguageRangeWithQualityHeaderValue items that start at startIndex in the HttpLanguageRangeWithQualityHeaderValueCollection. + + + Returns an immutable view of the HttpLanguageRangeWithQualityHeaderValueCollection. + The view of the HttpLanguageRangeWithQualityHeaderValueCollection. + + + Retrieves the index of an HttpLanguageRangeWithQualityHeaderValue in the collection. + Indicates whether the item is found. true if the HttpLanguageRangeWithQualityHeaderValue item is found; otherwise, false. + The HttpLanguageRangeWithQualityHeaderValue to find in the HttpLanguageRangeWithQualityHeaderValueCollection. + The index of the HttpLanguageRangeWithQualityHeaderValue in the HttpLanguageRangeWithQualityHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpLanguageRangeWithQualityHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpLanguageRangeWithQualityHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpLanguageRangeWithQualityHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpLanguageRangeWithQualityHeaderValue item from the collection. + + + Replaces all the HttpLanguageRangeWithQualityHeaderValue items in the collection with the specified HttpLanguageRangeWithQualityHeaderValue items. + The HttpLanguageRangeWithQualityHeaderValue items to add to the collection. + + + Sets the HttpLanguageRangeWithQualityHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpLanguageRangeWithQualityHeaderValue. + The item to set. + + + Gets the number of HttpLanguageRangeWithQualityHeaderValue objects in the collection. + The number of HttpLanguageRangeWithQualityHeaderValue objects in the HttpLanguageRangeWithQualityHeaderValueCollection. + + + Returns a string that represents the current HttpLanguageRangeWithQualityHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpLanguageRangeWithQualityHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents the value of the Content-Type HTTP header on the HTTP content in a request or a response. + + + Gets or sets the media-type of the entity-body used in the Content-Type HTTP header. + The media-type of the entity-body. + + + Gets or sets the character set of the entity-body used in the Content-Type HTTP header. + The character set of the entity-body. + + + Gets a set of parameters included in the Content-Type HTTP header. + A set of parameters. + + + Converts a string to an HttpMediaTypeHeaderValue instance. + An HttpMediaTypeHeaderValue instance. + A string that represents the media-type and character set information used in the Content-Type HTTP header. + + + Returns a string that represents the current HttpMediaTypeHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpMediaTypeHeaderValue information. + true if input is valid HttpMediaTypeHeaderValue information; otherwise, false. + The string to validate. + The HttpMediaTypeHeaderValue version of the string. + + + Initializes a new instance of the HttpMediaTypeHeaderValue class. + The media-type of the entity-body used in the Content-Type HTTP header. + + + Represents accept information used in the Accept HTTP header on an HTTP request. + + + Gets or sets the character set of the content to accept that is used in the Accept HTTP header. + The character set of the entity-body. + + + Gets or sets the media-type of the content to accept that is used in the Accept HTTP header. + The media-type of the entity-body. + + + Gets a set of parameters included in the Accept HTTP header. + A set of parameters. + + + Converts a string to an HttpMediaTypeWithQualityHeaderValue instance. + An HttpMediaTypeWithQualityHeaderValue instance. + A string that represents the media-type, character set, and quality information used in the Accept HTTP header. + + + Get or set the qvalue or quality used in the Accept HTTP header. + The qvalue or quality. + + + Returns a string that represents the current HttpMediaTypeWithQualityHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpMediaTypeWithQualityHeaderValue information. + true if input is valid HttpMediaTypeWithQualityHeaderValue information; otherwise, false. + The string to validate. + The HttpMediaTypeWithQualityHeaderValue version of the string. + + + Initializes a new instance of the HttpMediaTypeHeaderValue class with a media type. + The media-type of the entity-body to accept that is used in the Accept HTTP header. + + + Initializes a new instance of the HttpMediaTypeHeaderValue class with a media type and quality. + The media-type of the entity-body to accept that is used in the Accept HTTP header. + The qvalue or quality. + + + Represents the value of the Accept HTTP header on an HTTP request. + + + Adds a new item to the end of the collection. + The new item to add. + + + Adds a new HttpMediaTypeWithQualityHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index in the destination array. + The one-dimensional Array of HttpMediaTypeWithQualityHeaderValue items that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements that are contained in the collection. + The number of elements that are contained in the collection. + + + Retrieves an iterator to the first HttpMediaTypeWithQualityHeaderValue item in the collection. + An object that can be used to enumerate the HttpMediaTypeWithQualityHeaderValue items in the collection. The iterator points to the first HttpMediaTypeWithQualityHeaderValue item in the HttpMediaTypeWithQualityHeaderValueCollection. + + + Returns the HttpMediaTypeWithQualityHeaderValue at the specified index in the collection. + The HttpMediaTypeWithQualityHeaderValue at the specified index in the HttpMediaTypeWithQualityHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpMediaTypeWithQualityHeaderValue items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpMediaTypeWithQualityHeaderValue items in the HttpMediaTypeWithQualityHeaderValueCollection. + An array of HttpMediaTypeWithQualityHeaderValue items that start at startIndex in the HttpMediaTypeWithQualityHeaderValueCollection. + + + Returns an immutable view of the HttpMediaTypeWithQualityHeaderValueCollection. + The view of the HttpMediaTypeWithQualityHeaderValueCollection. + + + Retrieves the index of an HttpMediaTypeWithQualityHeaderValue in the collection. + Indicates whether the item is found. true if the HttpMediaTypeWithQualityHeaderValue item is found; otherwise, false. + The HttpMediaTypeWithQualityHeaderValue to find in the HttpMediaTypeWithQualityHeaderValueCollection. + The index of the HttpMediaTypeWithQualityHeaderValue in the HttpMediaTypeWithQualityHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpMediaTypeWithQualityHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element +at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpMediaTypeWithQualityHeaderValueCollection. + The entry to add. + + + Removes a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpMediaTypeWithQualityHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpMediaTypeWithQualityHeaderValue item from the collection. + + + Replaces all the HttpMediaTypeWithQualityHeaderValue items in the collection with the specified HttpMediaTypeWithQualityHeaderValue items. + The HttpMediaTypeWithQualityHeaderValue items to add to the collection. + + + Sets the HttpMediaTypeWithQualityHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpMediaTypeWithQualityHeaderValue. + The item to set. + + + Gets the number of HttpMediaTypeWithQualityHeaderValue objects in the collection. + The number of HttpMediaTypeWithQualityHeaderValue objects in the HttpMediaTypeWithQualityHeaderValueCollection. + + + Returns a string that represents the current HttpMediaTypeWithQualityHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpMediaTypeWithQualityHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents the value of the Allow HTTP header on an HTTP response. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new HttpMethod item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator to the first HttpMethod item in the collection. + An object that can be used to enumerate the HttpMethod items in the collection. The iterator points to the first HttpMethod item in the HttpMethodHeaderValueCollection. + + + Returns the HttpMethod at the specified index in the collection. + The HttpMethod at the specified index in the HttpMethodHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpMethod items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpMethod items in the HttpMethodHeaderValueCollection. + An array of HttpMethod items that start at startIndex in the HttpMethodHeaderValueCollection. + + + Returns an immutable view of the HttpMethodHeaderValueCollection. + The view of the HttpMethodHeaderValueCollection. + + + Retrieves the index of an HttpMethod in the collection. + Indicates whether the item is found. true if the HttpMethod item is found; otherwise, false. + The HttpMethod to find in the HttpMethodHeaderValueCollection. + The index of the HttpMethod in the HttpMethodHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpMethod into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpMethodHeaderValueCollection. + The entry to add. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpMethodHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpMethod item from the collection. + + + Replaces all the HttpMethod items in the collection with the specified HttpMethod items. + The HttpMethod items to add to the collection. + + + Sets the HttpMethod at the specified index in the collection. + The zero-based index at which to set the HttpMethod. + The item to set. + + + Gets the number of HttpMethod objects in the collection. + The number of HttpMethod objects in the HttpMethodHeaderValueCollection. + + + Returns a string that represents the current HttpMethodHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpMethodHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Represents name and value information used in a number of HTTP headers. + + + Gets the name used in the HttpNameValueHeaderValue object. + The name used in the HttpNameValueHeaderValue object. + + + Converts a string to an HttpNameValueHeaderValue instance. + An HttpNameValueHeaderValue instance. + A string that represents the name and value. + + + Returns a string that represents the current HttpNameValueHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpNameValueHeaderValue information. + true if input is valid HttpNameValueHeaderValue information; otherwise, false. + The string to validate. + The HttpNameValueHeaderValue version of the string. + + + Gets or sets the value associated with a name used in the HttpNameValueHeaderValue object. + The value associated with a name used in the HttpNameValueHeaderValue object. + + + Initializes a new instance of the HttpNameValueHeaderValue class. with a name. + The name to be used. + + + Initializes a new instance of the HttpNameValueHeaderValue class. with a name and value. + The name to be used. + The value to associate with the name. + + + Represents product information used by the HttpProductHeaderValue and HttpProductInfoHeaderValueCollection classes in the User-Agent HTTP header. + + + Gets a token that represents the name of the product to be used in the User-Agent HTTP header. + The name of the product token + + + Gets a token that represents the version of the product to be used in the User-Agent HTTP header. + The version of the product token. + + + Converts a string to an HttpProductHeaderValue instance. + An HttpProductHeaderValue instance. + A string that represents the product name and version. + + + Returns a string that represents the current HttpProductHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpProductHeaderValue information. + true if input is valid HttpProductHeaderValue information; otherwise, false. + The string to validate. + The HttpProductHeaderValue version of the string. + + + Initializes a new instance of the HttpProductHeaderValue class with a product name. + The name of the product token used in the User-Agent HTTP header. + + + Initializes a new instance of the HttpProductHeaderValue class with a product name and a product version. + The name of the product token used in the User-Agent HTTP header. + The version of the product token used in the User-Agent HTTP header. + + + Represents product information used in the User-Agent HTTP header on an HTTP request. + + + Gets the product comment from the HttpProductInfoHeaderValue used in the User-Agent HTTP header. + The product comment used in the User-Agent HTTP header. + + + Gets the product from the HttpProductInfoHeaderValue used in the User-Agent HTTP header. + The product name and version used in the User-Agent HTTP header. + + + Converts a string to an HttpProductInfoHeaderValue instance. + An HttpProductInfoHeaderValue instance. + A string that represents the product information. + + + Returns a string that represents the current HttpProductInfoHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpProductInfoHeaderValue information. + true if input is valid HttpProductInfoHeaderValue information; otherwise, false. + The string to validate. + The HttpProductInfoHeaderValue version of the string. + + + Initializes a new instance of the HttpProductInfoHeaderValue class with a product comment. + The product comment used in the User-Agent HTTP header. + + + Initializes a new instance of the HttpProductInfoHeaderValue class with a product name and version. + The name of the product token used in the User-Agent HTTP header. + The version of the product token used in the User-Agent HTTP header. + + + Represents the value of the User-Agent HTTP header on an HTTP request. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new HttpProductInfoHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator to the first HttpProductInfoHeaderValue item in the collection. + An object that can be used to enumerate the HttpProductInfoHeaderValue items in the collection. The iterator points to the first HttpProductInfoHeaderValue item in the HttpProductInfoHeaderValueCollection. + + + Returns the HttpProductInfoHeaderValue at the specified index in the collection. + The HttpProductInfoHeaderValue at the specified index in the HttpProductInfoHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpProductInfoHeaderValue items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpProductInfoHeaderValue items in the HttpProductInfoHeaderValueCollection. + An array of HttpProductInfoHeaderValue items that start at startIndex in the HttpProductInfoHeaderValueCollection. + + + Returns an immutable view of the HttpProductInfoHeaderValueCollection. + The view of the HttpProductInfoHeaderValueCollection. + + + Retrieves the index of an HttpProductInfoHeaderValue in the collection. + Indicates whether the item is found. true if the HttpProductInfoHeaderValue item is found; otherwise, false. + The HttpProductInfoHeaderValue to find in the HttpProductInfoHeaderValueCollection. + The index of the HttpProductInfoHeaderValue in the HttpProductInfoHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpProductInfoHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpProductInfoHeaderValueCollection. + The entry to add. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpMethodHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpProductInfoHeaderValue item from the collection. + + + Replaces all the HttpProductInfoHeaderValue items in the collection with the specified HttpProductInfoHeaderValue items. + The HttpProductInfoHeaderValue items to add to the collection. + + + Sets the HttpProductInfoHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpProductInfoHeaderValue. + The item to set. + + + Gets the number of HttpProductInfoHeaderValue objects in the collection. + The number of HttpProductInfoHeaderValue objects in the HttpProductInfoHeaderValueCollection. + + + Returns a string that represents the current HttpProductInfoHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpProductInfoHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Provides a collection of the HTTP headers associated with an HTTP request. + + + Gets the HttpMediaTypeWithQualityHeaderValueCollection of HttpMediaTypeWithQualityHeaderValue objects that represent the value of an Accept HTTP header on an HTTP request. + The collection of HttpMediaTypeWithQualityHeaderValue objects that represent the value of an Accept HTTP header. An empty collection means that the header is absent. + + + Gets the HttpContentCodingWithQualityHeaderValueCollection of HttpContentCodingWithQualityHeaderValue objects that represent the value of an Accept-Encoding HTTP header on an HTTP request. + The collection of HttpContentCodingWithQualityHeaderValue objects that represent the value of an Accept-Encoding HTTP header. An empty collection means that the header is absent. + + + Gets the HttpLanguageRangeWithQualityHeaderValueCollection of HttpLanguageRangeWithQualityHeaderValue objects that represent the value of an Accept-Language HTTP header on an HTTP request. + The collection of HttpLanguageRangeWithQualityHeaderValue objects that represent the value of an Accept-Language HTTP header. An empty collection means that the header is absent. + + + Adds an item to the HttpRequestHeaderCollection. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the HttpRequestHeaderCollection. + The key-value pair to add. + + + Adds a new item to the end of the HttpRequestHeaderCollection. + The name of the value to add. + The item value to add. + + + Gets or sets the HttpCredentialsHeaderValue object that represents the value of an Authorization HTTP header on an HTTP request. + The value of an Authorization HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets the HttpCacheDirectiveHeaderValueCollection that represents the value of a Cache-Control HTTP header on an HTTP request. + The object that represents the value of a Cache-Control HTTP header. An empty collection means that the header is absent. + + + Removes all objects from the HttpRequestHeaderCollection. + + + Gets the HttpConnectionOptionHeaderValueCollection of HttpConnectionOptionHeaderValue objects that represent the value of a Connection HTTP header on an HTTP request. + The collection of HttpConnectionOptionHeaderValue objects that represent the HTTP Connection header. An empty collection means that the header is absent. + + + Returns a value that indicates whether a specified key-value pair exists in the HttpRequestHeaderCollection. + true if an item with that key exists in the HttpRequestHeaderCollection; otherwise, false. + The key-value pair to check for in the HttpRequestHeaderCollection. + + + Returns a value that indicates whether a specified key exists in the HttpRequestHeaderCollection. + true if an item with that key exists in the HttpRequestHeaderCollection; otherwise, false. + The key to check for in the HttpRequestHeaderCollection. + + + Gets the HttpCookiePairHeaderValueCollection of HttpCookiePairHeaderValue objects that represent the value of an Cookie HTTP header sent on an HTTP request. + The collection of HttpCookiePairHeaderValue objects that represent the HTTP cookies in a Cookie HTTP header. An empty collection means that the header is absent. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the DateTime object that represents the value of a Date HTTP header on an HTTP request. + The object that represents the value of a Date HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets the HttpExpectationHeaderValueCollection of HttpExpectationHeaderValue objects that represent the value of an Expect HTTP header on an HTTP request. + The collection of HttpExpectationHeaderValue objects that represent the value of an Expect HTTP header on an HTTP request. An empty collection means that the header is absent. + + + Retrieves an iterator to the first item in the HttpRequestHeaderCollection. + An object that can be used to enumerate the items in the collection. The iterator points to the first item in the HttpRequestHeaderCollection. + + + Gets or sets the String that represents the value of a From HTTP header on an HTTP request. + The value of a From HTTP header on an HTTP request. An empty string means that the header is absent. + + + Returns an immutable view of the HttpRequestHeaderCollection. + The view of the HttpRequestHeaderCollection. + + + Determines whether the HttpRequestHeaderCollection contains the specified key. + true if the key is found; otherwise, false. + The key associated with the item to locate. + + + Gets or sets the HostName that represents the value of a Host HTTP header on an HTTP request. + The HostName that represents the value of a Host HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets or sets the DateTime object that represents the value of an If-Modified-Since HTTP header on an HTTP request. + The DateTime object that represents the value of an If-Modified-Since HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets or sets the DateTime object that represents the value of an If-Unmodified-Since HTTP header on an HTTP request. + The DateTime object that represents the value of an If-Unmodified-Since HTTP header on an HTTP request. A null value means that the header is absent. + + + Inserts or replaces an item in the HttpRequestHeaderCollection with the specified key and value. + true if an item with the specified key is an existing item that was replaced; otherwise false. + The key of the item to be inserted. + The value of the item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the HttpRequestHeaderCollection. + The ICollection of all keys in this HttpRequestHeaderCollection. + + + Lookup an item in the HttpRequestHeaderCollection. + The value of the item if found. + The key of the item to lookup. + + + Gets or sets an integer value that represents the value of a Max-Forwards HTTP header on an HTTP request. + An integer value that represents the value of a Max-Forwards HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets or sets the HttpCredentialsHeaderValue object that represent the value of a Proxy-Authorization HTTP header on an HTTP request. + The object that represent the value of a Proxy-Authorization HTTP header on an HTTP request. A null value means that the header is absent. + + + Gets or sets the Uri that represents the value of a Referer HTTP header on an HTTP request. + The object that represents the value of a Referer HTTP header on an HTTP request. A null value means that the header is absent. + + + Removes a specific object from the HttpRequestHeaderCollection. + The key of the item to remove. + + + Removes a specific item from the HttpRequestHeaderCollection. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the HttpRequestHeaderCollection. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets the number of objects in the HttpRequestHeaderCollection. + The number of objects in the HttpRequestHeaderCollection. + + + Returns a string that represents the current HttpRequestHeaderCollection object. + A string that represents the current object. + + + Gets the HttpTransferCodingHeaderValueCollection of HttpTransferCodingHeaderValue objects that represent the value of a Transfer-Encoding HTTP header on an HTTP request. + The collection of HttpTransferCodingHeaderValue objects that represent the value of a Transfer-Encoding HTTP header on an HTTP request. An empty collection means that the header is absent. + + + Try to append the specified item to the HttpRequestHeaderCollection without validation. + true if the item was appended; otherwise false. + The name of the item to append. + The value of the item to append. + + + Returns a value that indicates whether a specified key exists in the HttpRequestHeaderCollection. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the HttpRequestHeaderCollection; otherwise, false. + The key to check for in the HttpRequestHeaderCollection. + The item, if it exists. Contains null if the item does not exist in the HttpRequestHeaderCollection. + + + Gets the HttpProductInfoHeaderValueCollection of HttpProductInfoHeaderValue objects that represent the value of a User-Agent HTTP header on an HTTP request. + The collection of HttpProductInfoHeaderValue objects that represent the value of a User-Agent HTTP header on an HTTP request. An empty collection means that the header is absent. + + + Gets an ICollection object containing the values of the HttpRequestHeaderCollection . + The ICollection of all values in this HttpRequestHeaderCollection. + + + Provides a collection of the HTTP headers associated with an HTTP response. + + + Adds an item to the HttpResponseHeaderCollection. + The key of the item to add. + The item value to add. + + + Adds a new key-value pair to the HttpResponseHeaderCollection. + The key-value pair to add. + + + Gets or sets the TimeSpan object that represents the value of an Age HTTP header on an HTTP response. + The object that represents the value of an Age HTTP header on an HTTP response. A null value means that the header is absent. + + + Gets the HttpMethodHeaderValueCollection of HttpMethod objects that represent the value of an Allow HTTP header on an HTTP response. + The collection of HttpMethod objects that represent the value of an Allow HTTP header on an HTTP response. An empty collection means that the header is absent. + + + Adds a new item to the end of the HttpResponseHeaderCollection. + The name of the value to add. + The item value to add. + + + Gets the HttpCacheDirectiveHeaderValueCollection of objects that represent the value of a Cache-Control HTTP header on an HTTP response. + The collection of objects that represent the value of a Cache-Control HTTP header on an HTTP response. An empty collection means that the header is absent. + + + Removes all objects from the collection. + + + Gets the HttpConnectionOptionHeaderValueCollection of HttpConnectionOptionHeaderValue objects that represent the value of a Connection HTTP header on an HTTP response. + The collection of HttpConnectionOptionHeaderValue objects that represent the value of a Connection HTTP header. An empty collection means that the header is absent. + + + Returns a value that indicates whether a specified key-value pair exists in the HttpResponseHeaderCollection. + true if an item with that key exists in the HttpResponseHeaderCollection; otherwise, false. + The key-value pair to check for in the HttpResponseHeaderCollection. + + + Returns a value that indicates whether a specified key exists in the HttpResponseHeaderCollection. + true if an item with that key exists in the HttpResponseHeaderCollection; otherwise, false. + The key to check for in the HttpResponseHeaderCollection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Gets or sets the DateTime object that represents the value of a Date HTTP header on an HTTP response. + The object that represents the value of a Date HTTP header on an HTTP request. A null value means that the header is absent. + + + Retrieves an iterator to the first item in the HttpResponseHeaderCollection. + An object that can be used to enumerate the items in the collection. The iterator points to the first item in the HttpResponseHeaderCollection. + + + Returns an immutable view of the HttpResponseHeaderCollection. + The view of the HttpResponseHeaderCollection. + + + Determines whether the HttpResponseHeaderCollection contains the specified key. + true if the key is found; otherwise, false. + The key associated with the item to locate. + + + Inserts or replaces an item in the HttpResponseHeaderCollection with the specified key and value. + true if an item with the specified key is an existing item that was replaced; otherwise false. + The key of the item to be inserted. + The value of the item to insert. + + + Gets a value indicating whether the dictionary is read-only. + true if the dictionary is read-only; otherwise, false. + + + Gets or sets the element value at the +specified key index. + The element value +at the specified key index. + + + Gets an ICollection object containing the keys of the HttpResponseHeaderCollection. + The ICollection of all keys in this HttpResponseHeaderCollection. + + + Gets or sets the Uri that represents the value or a Location HTTP header on an HTTP response. + The object that represents the value of a Location HTTP header on an HTTP response. A null value means that the header is absent. + + + Lookup an item in the HttpResponseHeaderCollection. + The value of the item if found. + The key of the item to lookup. + + + Gets the HttpChallengeHeaderValueCollection of HttpChallengeHeaderValue objects that represent the value of a Proxy-Authenticate HTTP header on an HTTP response. + The collection of HttpChallengeHeaderValue objects that represent the value of a Proxy-Authenticate HTTP header on an HTTP response. An empty collection means that the header is absent. + + + Removes a specific object from the HttpResponseHeaderCollection. + The key of the item to remove. + + + Removes a specific item from the HttpResponseHeaderCollection. + true if the item was removed, otherwise false. + The key of the item to remove. + + + Removes a specific key-value pair from the HttpResponseHeaderCollection. + true if the item was removed, otherwise false. + The key-value pair to remove. + + + Gets or sets the HttpDateOrDeltaHeaderValue object that represent the value of a Retry-After HTTP header on an HTTP response. + The object that represents the value of a Retry-After HTTP header on an HTTP response. A null value means that the header is absent. + + + Gets the number of objects in the HttpResponseHeaderCollection. + The number of objects in the HttpResponseHeaderCollection. + + + Returns a string that represents the current HttpResponseHeaderCollection object. + A string that represents the current object. + + + Gets the HttpTransferCodingHeaderValueCollection of HttpTransferCodingHeaderValue objects that represent the value of a Transfer-Encoding HTTP header on an HTTP response. + The collection of HttpTransferCodingHeaderValue objects that represent the value of a Transfer-Encoding HTTP header on an HTTP response. An empty collection means that the header is absent. + + + Try to append the specified item to the HttpResponseHeaderCollection without validation. + true if the item was appended; otherwise false. + The name of the item to append. + The value of the item to append. + + + Returns a value that indicates whether a specified key exists in the HttpResponseHeaderCollection. If an item with that key exists, the item is retrieved as an out parameter. + true if an item with that key exists in the HttpResponseHeaderCollection; otherwise, false. + The key to check for in the HttpResponseHeaderCollection. + The item, if it exists. Contains null if the item does not exist in the HttpResponseHeaderCollection. + + + Gets an ICollection object containing the values of the HttpResponseHeaderCollection . + The ICollection of all values in this HttpResponseHeaderCollection. + + + Gets the HttpChallengeHeaderValueCollection of HttpChallengeHeaderValue objects that represent the value of a WWW-Authenticate HTTP header on an HTTP response. + The collection of HttpChallengeHeaderValue objects that represent the value of a WWW-Authenticate HTTP header on an HTTP response. An empty collection means that the header is absent. + + + Represents transfer coding information used in the Transfer-Encoding HTTP header on an HTTP request. + + + Gets a set of parameters used in the Transfer-Encoding HTTP header. + A set of name/value parameters used in the Transfer-Encoding HTTP header. + + + Converts a string to an HttpTransferCodingHeaderValue instance. + An HttpProductInfoHeaderValue instance. + A string that represents the transfer-coding information. + + + Returns a string that represents the current HttpTransferCodingHeaderValue object. + A string that represents the current object. + + + Determines whether a string is valid HttpTransferCodingHeaderValue information. + true if input is valid HttpTransferCodingHeaderValue information; otherwise, false. + The string to validate. + The HttpTransferCodingHeaderValue version of the string. + + + Gets the transfer-coding +value used in the Transfer-Encoding HTTP header. + The transfer-coding +value (transfer-coding name) used in the Transfer-Encoding HTTP header. + + + Initializes a new instance of the HttpProductInfoHeaderValue class. + The transfer-coding information to initialize the HttpProductInfoHeaderValue object. + + + Represents the value of the Transfer-Encoding HTTP header on an HTTP request. + + + Adds a new item to the collection. + The new item to add. + + + Adds a new HttpTransferCodingHeaderValue item to the end of the collection. + The new item to add. + + + Removes all objects from the collection. + + + Determines whether an element is in the collection. + true if the item was found in the collection; otherwise, false. + The item to find in the collection. + + + Copies the elements of the collection to an array, starting at a particular array index. + The one-dimensional Array that is the destination of the elements copied from the collection. The Array must have zero-based indexing. + The zero-based index in array at which copying begins. + + + Gets the number of elements contained in the collection. + The number of elements contained in the collection. + + + Retrieves an iterator to the first HttpTransferCodingHeaderValue item in the collection. + An object that can be used to enumerate the HttpTransferCodingHeaderValue items in the collection. The iterator points to the first HttpTransferCodingHeaderValue item in the HttpTransferCodingHeaderValueCollection. + + + Returns the HttpTransferCodingHeaderValue at the specified index in the collection. + The HttpTransferCodingHeaderValue at the specified index in the HttpTransferCodingHeaderValueCollection. + The zero-based index of a specified item in the collection. + + + Retrieves the HttpTransferCodingHeaderValue items that start at the specified index in the collection. + The number of items retrieved. + The zero-based index of the start of the HttpTransferCodingHeaderValue items in the HttpTransferCodingHeaderValueCollection. + An array of HttpTransferCodingHeaderValue items that start at startIndex in the HttpTransferCodingHeaderValueCollection. + + + Returns an immutable view of the HttpTransferCodingHeaderValueCollection. + The view of the HttpTransferCodingHeaderValueCollection. + + + Retrieves the index of an HttpTransferCodingHeaderValue in the collection. + Indicates whether the item is found. true if the HttpTransferCodingHeaderValue item is found; otherwise, false. + The HttpTransferCodingHeaderValue to find in the HttpTransferCodingHeaderValueCollection. + The index of the HttpTransferCodingHeaderValue in the HttpTransferCodingHeaderValueCollection. If the item is found, this is the zero-based index of the item; otherwise, this parameter is 0. + + + Determines the index of a specific item in the collection. + The index of item if found in the collection; otherwise, -1. + The object to locate in the collection. + + + Inserts an item into the collection at the specified index. + The zero-based index at which item should be inserted. + The object to insert into the collection. + + + Inserts an HttpTransferCodingHeaderValue into the collection at the specified index. + The zero-based index at which value should be inserted. + The object to insert into the collection. + + + Gets a value indicating whether the collection is read-only. + true if the collection is read-only; otherwise, false. + + + Gets or sets the element at the specified index. + The element at the specified index. + + + Parses and adds an entry to the HttpTransferCodingHeaderValueCollection. + The entry to add. + + + Removes the first occurrence of a specific object from the collection. + true if item is successfully removed; otherwise, false. This method also returns false if item was not found in the collection. + The object to remove from the collection. + + + Removes the entry at the specified index from the HttpTransferCodingHeaderValueCollection. + The index of the entry to remove. + + + Removes the element at the specified index of the collection. + The zero-based index of the element to remove. + + + Removes the last HttpTransferCodingHeaderValue item from the collection. + + + Replaces all the HttpTransferCodingHeaderValue items in the collection with the specified HttpTransferCodingHeaderValue items. + The HttpTransferCodingHeaderValue items to add to the collection. + + + Sets the HttpTransferCodingHeaderValue at the specified index in the collection. + The zero-based index at which to set the HttpTransferCodingHeaderValue. + The item to set. + + + Gets the number of HttpTransferCodingHeaderValue objects in the collection. + The number of HttpTransferCodingHeaderValue objects in the HttpTransferCodingHeaderValueCollection. + + + Returns a string that represents the current HttpTransferCodingHeaderValueCollection object. + A string that represents the current object. + + + Tries to parse and add the specified item to the HttpTransferCodingHeaderValueCollection. + true if the item successfully parsed and was added; otherwise false. + The item to parse and add. + + + Manages syndication feeds. + + + Represents a custom attribute not defined in the specification. + + + Gets the name of the syndication attribute. + The atom:name element. + + + Gets the namespace of the attribute. + The namespace of the attribute. + + + Gets or sets the value of the attribute. + The value of the attribute. + + + Creates a new SyndicationAttribute object. + + + Creates a new SyndicationAttribute object with the specified Name, Namespace, and Value property values. + The name of the attribute. + The namespace of the attribute. + The value of the attribute. + + + Represents the category of a feed or an item. This class encapsulates information in the /rss/channel/item/category element in RSS 2.0 or the atom:category element in Atom 1.0. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the label for the category. This property represents the label attribute on atom:category. It provides a label for display in end-user applications. + The label attribute on atom:category. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Gets or sets the scheme of the category. This property represents the scheme attribute on atom:category or the domain attribute on the category element in RSS 2.0. + The scheme attribute on atom:category or the domain attribute on the category element in RSS 2.0. + + + Gets or sets a string that identifies the category. This property represents the required term attribute on atom:category or the text content of the category element in RSS 2.0. + The required term attribute on atom:category or the text content of the category element in RSS 2.0. + + + Creates a SyndicationCategory object. + + + Creates a SyndicationCategory object with the specified term property. + A string that identifies the category. This parameter represents the required term attribute on atom:category or the text content of the category element in RSS 2.0. + + + Creates SyndicationCategory object with the specified property values. + A string that identifies the category. + The scheme of the category. + A label for display in end-user applications. + + + Implements the ISyndicationClient interface which retrieves feeds from a URI asynchronously. + + + Gets or sets a Boolean value that specifies whether to bypass the cache when retrieving the feed. + TRUE if the cache should be bypassed; otherwise FALSE. + + + Gets or sets the maximum number of bytes to buffer when receiving a response from a server. + Maximum size and default is UInt32.MaxValue. + + + Gets or sets the credentials to use when making requests via a proxy. + The PasswordCredential to use. + + + Starts an asynchronous operation to download the syndication feed from the given URI. This method instantiates a SyndicationFeed object from the feed string, which can be in one of the formats specified in SyndicationFormat. + Contains the results of the operation. + The URI from which the feed is downloaded. + + + Gets or sets the credentials to use when making requests to the server. + Initally, this value is a username/password tuple. For domain credentials, the username is in domain\user form. + + + Sets an HTTP header for the request. This method can be called multiple times to set multiple headers. When the same header is set multiple times, the values will be concatenated and separated by ,. + The name of the header. + The value of the header. + + + Creates a new SyndicationClient object. + + + Creates a new SyndicationClient object with authentication credentials. + Credentials for user authentication. + + + Gets or sets the maximum amount of time, in milliseconds, to wait for any of the asynchronous operations to complete. If the operation is not complete within this amount of time, it will fail with a status code indicating that it timed out. + Default value is 30000 (30 seconds). A value of UInt32.MaxValue indicates that the syndication client will wait indefinitely for a response. + + + Represents feed content including Text, HTML, XHTML, URL, and XML. This object encapsulates the atom:content element in Atom 1.0 and can contain a link to external content. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Gets or sets the URI to the content. This property represents the src attribute on atom:content. + The src attribute on atom:content. + + + Gets the syndication content. + The text of the syndication content. + + + Gets or sets the type of the content. + This value can be text, html, xhtml or other media types. + + + Gets or sets the XML content. + The XML content within the atom:content element. + + + Creates a new SyndicationContent object. + + + Creates a new SyndicationContent object with the specified Text and Type property values. + The text of the content. + The type of the content. + + + Creates a new SyndicationContent object with the specified Uri property value. + The Uri value. + + + Represents an error encountered during a Syndication operation + + + Gets the specific error using the returned HRESULT value. Possible values are defined by SyndicationErrorStatus. + The error encountered. + An HRESULT returned during the operation. + + + Contains information about a feed. This class encapsulates the information in the /rss/channel element in RSS 2.0 or the atom:feed element in Atom 1.0. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets the authors of an item. This property represents the collection of all the atom:author elements under atom:entry. + The collection of all the atom:author elements under atom:entry. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets a collection of categories of the feed. This property represents the collection of all the atom:category elements under atom:feed. + The collection of all atom:category elements under atom:feed. + + + Gets a collection of the contributors of the feed. This property represents the collection of all the atom:contributor elements under atom:feed. + The collection of all atom:contributor elements under atom:feed. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Gets the first Uniform Resource Identifier (URI) in a sequence. This property represents the atom:link element with attribute rel="first". + The atom:link element with attribute rel="first". This property is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be null because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + + + Gets or sets the generator of the feed. This property represents the atom:generator element or the generator element in RSS 2.0. + The atom:generator element or the generator element in RSS 2.0. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the Uniform Resource Identifier (URI) for the image for the feed. This property represents the atom:icon element. + The atom:icon element. It is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be null because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + + + Gets or sets the identifier for the syndication feed. + The atom:Id element or the guid element in RSS 2.0. + + + Gets or sets the Uniform Resource Identifier (URI) of the logo for the feed. This property represents the atom:logo element or image/uri element in RSS 2.0. + The atom:logo element or image/uri element in RSS 2.0. + + + Gets the collection of items in the feed. This property represents the collection of atom:entry elements or a collection of item elements in RSS 2.0. + The collection of atom:entry elements or a collection of item elements in RSS 2.0. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the time the feed was last modified. This property represents the /rss/channel/lastBuildDate or atom:updated element. + The /rss/channel/lastBuildDate or atom:updated element. + + + Gets the last Uniform Resource Identifier (URI) in the sequence. This property represents the atom:link element with attribute rel="last". + The atom:link element with attribute rel="last". It is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be null because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + + + Gets the links associated with the feed. This property represents a collection of the atom:link elements under atom:feed. In RSS 2.0, this maps to the link element. + A collection of the atom:link elements under atom:feed. In RSS 2.0 this maps to the link element. + + + Initializes the object from the given feed string, which can be in either RSS 2.0 or Atom 1.0 format. + The feed string, which can be in either RSS 2.0 or Atom 1.0 format. + + + Initializes the SyndicationFeed object from the given DOM object, which can contain XML content in either RSS 2.0 or Atom 1.0 format. + The DOM object which contains XML content in either RSS 2.0 or Atom 1.0 format. + + + Gets the next Uniform Resource Identifier (URI) in the sequence. This property represents the atom:link element with attribute rel="next". + The atom:link element with attribute rel="next". It is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be null because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Gets the previous Uniform Resource Identifier (URI) in the sequence. This property represents the atom:link element with attribute rel="previous". + The atom:link element with attribute rel="previous". It is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property will be null because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + + + Gets or sets information about the rights for the feed. This property represents the atom:rights element or the copyright element in RSS 2.0. + The atom:rights element or the copyright element in RSS 2.0. + + + Gets the format of the source document. If the object is not loaded from a document, this property will return SyndicationFormat_Atom10. + The format of the source document or SyndicationFormat_Atom10. + + + Gets or sets the subtitle of the feed. This property represents the atom:subtitle element or the description element in RSS 2.0. + The atom:subtitle element or the description element in RSS 2.0. + + + Gets or sets the title of the syndication feed. + The atom:title element. + + + Creates a new SyndicationFeed object. + + + Creates a new SyndicationFeed object with a Title, Subtitle, and Uri. + The Title of the syndication feed. + The Subtitle of the syndication feed. + The Uri value. + + + Describes the agent or the tool used to generate the feed. This class encapsulates information in the /rss/channel/generator element in RSS 2.0 or the /atom:feed/atom:generator element in Atom 1.0. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Creates a new SyndicationGenerator object. + + + Creates a new SyndicationGenerator object with the specified Text property value. + Identifies the generator. This parameter represents the text content in the atom:generator element or the generator element in RSS 2.0. + + + Gets or sets the text that identifies the generator. + The text content in the atom:generator element or the generator element in RSS 2.0. + + + Gets or sets the Uniform Resource Identifier (URI) of the syndication generator. + The href attribute on atom:link. + + + Gets or sets the version of the generator. + The version attribute on atom:generator. + + + Represents an item in the feed. This class encapsulates information in the /rss/channel/item element in RSS 2.0 or the atom:entry element in Atom 1.0. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets the authors of an item. This property represents the collection of all the atom:author elements under atom:entry. + The collection of all the atom:author elements under atom:entry. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets a collection of categories of the feed. This property represents the collection of all the atom:category elements under atom:feed. + The collection of all atom:category elements under atom:feed. + + + Gets or sets the Uniform Resource Identifier (URI) of the comments for the item. This property represents the /rss/channel/item/comments element. + The /rss/channel/item/comments element. + + + Gets or sets the content of the item. + The content of the item. + + + Gets a collection of the contributors of the feed. This property represents the collection of all the atom:contributor elements under atom:feed. + The collection of all atom:contributor elements under atom:feed. + + + Gets the Uniform Resource Identifier (URI) of an editable media resource. + The atom:link element with the attribute rel="edit-media". + + + Gets the Uniform Resource Identifier (URI) of an editable resource. + The atom:linkelement with rel="edit". + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Gets an ETag HTTP header. + An Etag HTTP header. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the identifier for the syndication feed. + The atom:Id element or the guid element in RSS 2.0. + + + Gets the Uniform Resource Identifier (URI) of this item. AtomPubClient creates this property after new resource is created. + The Uniform Resource Identifier (URI) of the item. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the most recent time the item was modified. This property represents the atom:updated element. + The atom:updated element. + + + Gets the links contained in the item. + The collection of all the atom:link elements under atom:entry. + + + Initializes the object from the given feed string, which can be in either RSS 2.0 or Atom 1.0 format. + The feed string, which can be in either RSS 2.0 or Atom 1.0 format. + + + Initializes the object from the given DOM object, which can contain XML content in either RSS 2.0 or Atom 1.0 format. + The DOM object, which can contain XML content in either RSS 2.0 or Atom 1.0 format. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Gets or sets the date the item was published. + The atom:published element under atom:entry or the pubDate element under item element in RSS 2.0. + + + Gets or sets information about the rights of an item. This property represents the atom:rights element. + The atom:rights element. + + + Gets or sets the source feed of the item. This property represents the atom:source element or the source element in RSS 2.0. + The atom:source element or the source element in RSS 2.0. + + + Gets or sets a summary of the item. + The atom:summary element or the description element in RSS 2.0. + + + Creates a new SyndicationItem object. + + + Creates a new SyndicationItem object with a title, content, and URI. + Title of the new item. + The content for this feed item. + The URI associated with this item. + + + Gets or sets the title of the item. + The atom:title element. + + + Represents a link within a syndication feed or item. This class encapsulates information in the /rss/channel/link or /rss/channel/item/link element in RSS 2.0 or the atom:link element in Atom 1.0. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the length of the linked resource, in bytes. + The length attribute on atom:length. + + + Gets or sets the media type of the linked resource. The string must have the pattern .+/.+. + The type attribute on atom:link. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Gets or sets the relationship type of the link. + The rel attribute on atom:link. + + + Gets or sets the language of the resource pointed to by the Uri property. This property represents the hreflang attribute on atom:link. It must adhere to the pattern defined by RFC 3066. + The language of the resource. + + + Creates a new SyndicationLink object. + + + Creates a new SyndicationLink with a Uri. + The Uri value. + + + Creates a new SyndicationLink object with a Uri, Relationship, Title, MediaType, and Length. + The Uri value. + The relationship type. + The title of the syndication link. + The MediaType of the syndication link. + The length, in bytes, of the syndication link. + + + Gets or sets the title of the syndication link. + The atom:title element. + + + Gets or sets the URI of the linked resource. + The href attribute on atom:link. + + + Implements the ISyndicationNode interface which represents a generic XML syndication element. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Creates a new SyndicationNode object. + + + Creates a new SyndicationNode object with the specified NodeName, NodeNamespace, and NodeValue property values. + The local name of the element. It must be valid according to XML 1.0. + The namespace of the element. + The text content of the element. If the element contains only child elements, this parameter is NULL. + + + Represents an author or contributor of syndication content. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Gets or sets the email address of the person. + The atom:email element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets the name of the syndication person. + The atom:name element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Creates a SyndicationPerson object. + + + Creates a SyndicationPerson object with the specified Name property value. + The name of the SyndicationPerson. This parameter represents the atom:name element. + + + Creates a SyndicationPerson object with the specified Name, Email, and Uri property values. + The name of the SyndicationPerson. This parameter represents the atom:name element. + Gets or sets the email address of the person. This property represents the atom:email element. + Gets or sets the Uniform Resource Identifier (URI) of the person. This property represents the atom:uri element. It is the absolute URI resolved against the xml:base attribute, if it is present. If the href attribute is a relative URI string and there is no xml:base attribute, this property is NULL because relative URI is not supported by the runtime URI class. + + + Gets or sets the Uniform Resource Identifier (URI) of the person. This property represents the atom:uri element. It is the absolute Uniform Resource Identifier (URI) resolved against the xml:base attribute, if it is present. If the href attribute is a relative Uniform Resource Identifier (URI) string and there is no xml:base attribute, this property is NULL because the relative Uniform Resource Identifier (URI) is not supported by the runtime Uniform Resource Identifier (URI) class. + The Uniform Resource Identifier (URI) of the person. + + + Implements the ISyndicationText interface that encapsulates elements in RSS 2.0 or Atom 1.0 that can have either text, HTML, or XHTML. In Atom 1.0, this object maps to an atomTextConstruct in the schema, which can be atom:title, atom:subtitle, atom:rights, or atom:summary elements. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Creates a new SyndicationText object. + + + Creates a new SyndicationText object with the specified Text property value. + The content of a text content construct like atom:title. + + + Creates a new SyndicationText object with the specified Text and Type property values. + The content of a text content construct like atom:title. + The type of the content. This value can be text, html, and xhtml. + + + Gets the content of a text content construct like atom:title. + The text content. + + + Gets or sets the type of the content. + This value can be text, html, xhtml or other media types. + + + Gets or sets the XML content. + The XML content within the atom:content element. + + + Contains progress information for a data retrieval operation. + + + The number of bytes that have been received in this data retrieval operation. + + + The total number of bytes to be received during this data retrieval operation. + + + Contains progress information for a data transfer operation. + + + The number of bytes sent. + + + The total number of bytes that will be sent during the transfer operation. + + + The number of bytes received. + + + The total number of bytes that will be received during the transfer operation. + + + Defines errors encountered during a Syndication operation. + + + An unknown error has occurred. + + + A required element is missing. + + + A required attribute is missing. + + + The provided XML is not valid. + + + An unexpected error was encountered with the content. + + + The content is not presented in a supported format. + + + Specifies the syndication formats supported by the API. + + + The API supports the Atom 1.0 format. + + + The API supports the RSS 2.0 format. + + + The API supports the RSS 1.0 format. + + + The API supports the RSS 0.92 format. + + + The API supports the RSS 0.91 format. + + + The API supports the Atom 0.3 format. + + + Specifies the text types supported for syndication content. + + + Plain text + + + HTML (escaped markup) + + + XML (not escaped) + + + Encapsulates the data and methods needed to retrieve feeds from a URI asynchronously. It supports authentication. + + + Gets or sets a Boolean that indicates whether cache will be bypassed when retrieving the feed. + TRUE if the cache should be bypassed; otherwise FALSE. + + + Gets or sets the maximum number of bytes to buffer when receiving a response from a server. + Maximum size and default is UInt32.MaxValue. + + + Gets or sets the credentials to use when making requests using a proxy. + Initially, this value is a username/password tuple. For domain credentials, the username is in domain\user form. + + + Initiates an asynchronous operation to download the syndication feed from the given URI. This method instantiates a SyndicationFeed object from the feed string, which can be in one of the formats specified in SyndicationFormat. + Contains the results of the operation. + The URI from which the feed is downloaded. + + + Gets or sets the credentials to use when making requests to the server. + Initally, this value is a username/password tuple. For domain credentials, the username is in domain\user form. + + + Sets an HTTP header for the request. This method can be called multiple times to set multiple headers. When the same header is set multiple times, the values will be concatenated and separated by ,. + The name of the header. + The value of the header. + + + Gets or sets the maximum amount of time, in milliseconds, to wait for any of the asynchronous operations to complete. If the operation is not complete within this amount of time, it will fail with a status code indicating that it timed out. + Default value is 30000 (30 seconds). A value of UInt32.MaxValue indicates that the syndication client will wait indefinitely for a response. + + + Represents a generic syndication XML element extension. + + + Gets the list of custom attributes of the element. + A list of attributes of the element. + + + Gets or sets the base URI for the element. This property represents the xml:base attribute on the element. It may be inherited from an ancestor element. + The xml:base attribute on the element. + + + Gets the list of child elements within the element. + The list of child elements within the element. + + + Generates the DOM object that represents this element, all the attributes and child elements including foreign markups. The only formats accepted by this method are Atom 1.0 and RSS 2.0. + The DOM object that represents this element, and all the attributes and child elements, including foreign markups. + The format of the data. + + + Gets or sets the language of the element. This property represents the xml:lang attribute on the element. It may be inherited from an ancestor element. It must be valid according to XML 1.0. + The xml:lang attribute on the element. + + + Gets or sets the local name of the element. + The local name of the element. Must be valid according to XML 1.0. + + + Gets or sets the namespace of the element. + The namespace of the element. + + + Gets or sets the text content of the element. If the element contains only child elements, this property is NULL. + The text content of the element. + + + Represents text, HTML, or XHTML content. This interface encapsulates elements in RSS 2.0 or Atom 1.0 that can have either text, HTML, or XHTML content. In Atom 1.0 this interface maps to an atomTextConstruct in the schema, which can be element atom:title, atom:subtitle, atom:rights or atom:summary. + + + Gets or sets the content of a text content construct like atom:title. + The text content. + + + Gets or sets the type of the content. + This value can be text, html, xhtml or other media types. + + + Gets or sets the XML content. + The XML content within the atom:content element. + + + \ No newline at end of file diff --git a/ModernKeePassLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ModernKeePassLib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..663d6fc62a98daaf709ea9d19598b90131a5d271 GIT binary patch literal 22948 zcmeI4dvF}ZoyXOZyw;2XS-flmwndD2ip8=m{K6Pn4_g60A_*Jt3Nc!Zucy+(N|yJ+pxr0=FC9Il|>@0&v~g{#A{1uT|YCl-FJqDTtD9K z_-*N-TsD|Th37e`RA$8OZ43f;uqQRzvODXhQLErkQa5GNeO`a7mvWCzI_X}o*U7q4 z32$(0UoMqu^_@X?B;yarQ=Lu^ojcMv*P2Q7()BKYv(xeW-K;9sk?RTE>}G-lCwTqo zjPEwPeGWB6TRO;6{R*|qgHJ6j%H#6VIbJkk{y4v0sy0Q}8Dz&)v)S|AWH#e_ZZLbO zH|zKvuHz?nZgsLdgW3IK9J7Y}OdqunuIg~#?e~JLKUyeY(S>DQG~qD>(i=mIa`c!} zn=)x{!1a%hb~k&$P|6uaz_A6x2kqE=!L5EK=>|c@Z=~9LS-K{AG7odo6O>Yi*In#uJ0w|=TT!_QomzI2?>28wmGSsyVddhOO`5WN7nb!{dKj2 zK{Df~yq>~$Y~o+B6)T*EWW$;DtClTym#kdXRadGWpU|ovjCSan+GhQPxm8PTM`|a zoS$?P?e0(}NNmbb5}!WTrNk>3W1Z*qBr-j_63uQ;uAhzpW$B%iNw&K|CN-?44TZEZ zo^+BsU8@?kpG}8(Mg`^M2o;Uh(CH&_x>jC5Z9Wr?9ZqK|S#tzF4F+DyLW5XG(Lq>8 z)3F9EihpBsaEOn1>A~LET>4xY?@gs*m-fFoOvt>P+kF8A%#{on(R5r>6^lTvJrzmFWXDY0Jv**ynKgfE?AfE3)irih* z+T%)az(ofVurrfM1^d0ddO$A00Z*WSnUbvHw}+p)Vppf`prPjLI*9_g6A9F|g?k*ImNDr0E*44k z1g4xrolK$3zIbeJ7hY4_mST8yA%sUWokGaZOr-YbdFe~{3x$ZWrxLdG%?@kIC0ce5 zg{`vxCwgoF4tE-b8!UMhQ}%3acC#F^jzV5oGGus#D6lb`9pc7YTB7ThLdKs?_z68# zD7Dr12ED8|Ov7D~9!Nb^rkq2?DO5jQ39W|p)1qiCuaVZCynE%Dr%(bFu9ww@X&0>{ z7KYS>S`Fnq4WnyfczL{m#!>C!+uciZv@jWPurnx_U$WVz?oQ&_=wjj2 z2pO(cGyF_~m+rabBa??u>Sm5B!XZ~s$dO50Pdwa;>2UpFk5v>=pAIsRnQ!Xo83cq0YhF`;YU>ATLv8dxehzt@EqDm7o}rzsE?g%8HGhU+$%l2;dgSFQ(gaD(tb#;-K|cT5O3u%xG@J7;(%rm0ip_zU`2CvH%eV6B8Joi(5^QZWAfgN2{Rn~db z>&d?w>@4C1!q_G{v=`}ZRp&a9Wh=QKl)#Q$q6WK`9AGnjsBEP-{{(h0d0SJjiNKcT zIByO1IPq75eNI$1wv`TZ_cleoinuTK89ICT-i=;5iM_r==Df6U&_==bbK z_r*Hs{1j}Rb`s{$z3t8jR{iiA-oDuR? zMV>76!i0{Qer1B+f9~qq(S>DjYdak-#D@!TE4XjL*9CtSk4%q~`+Kc?dYn|R`*v00 zSt{}c#WOXlJOBE5lM}dQLd?Vy$9*#%#EQqKzrmCG1p{@S57JL3rkibYKm5qQD^@Y! zj?Ngyd+?(2oWf#*@q3e^zXFllk;s*hC*kF@*hO@xl5go)JMd(Gi*65YQLKxs`4Ll& z!Yet}#VBx}EN}@~hmS8{IZ%B=s*+?aR;p63u~@w*_;p#ZkE~g$pzm7!IQ=zw+9PXj zcv^pvf?qGOc0v0UsZABp@_QcEAhfqiZHBC4BDmp89o7)kUzBQ}tXN)c1vqn)Jd-2q z$dF^a3SkXHcfHi@ChMqBXTHc_jY9Z&DcnnzrG(aJaq@HWZ#=?S`bvaI7Ax~dP z)|{~H*w+HAt03JcrB{<>hf>-Cx30n2J@V|eWK|c=@^-y-9V8=CasyfNg3LX1>qZE( zQg}02M`$d$`)z#zvP-4x7P3^xaQn#m5+rFUxs5FOBx*a&)|a6gkgD6sstMy2Hc_pw zLbOwg?jY;9aUyLm(Yh0QSL*MI))#hWt-GP`k@|bcs#W|Vo2k~lDAO&=+)vhFvP^!b z()uP838{F1ta+wFukyDczEFxEB5T1I@tFNS>pLj1O_q3=toqU=;^Fp|w%KTX7myAK zd6X>q49cxBxw~gQ2I*EQeS$1?6T+=oxq`@xe%6!FZ<6}&ktMq>i4K#rc&AZ6btOIBHz#c5N@dKS`VDSeJC`E@rohOEDVu2JfKNY=uzDGi-| zzn({tvt^MN$ddP~$mWgpB1){0C4NNKY#Bsuj97mU%}S|xi7c50Y5N)2Y_VR3vOy|; z60O9}hxLz8E|tnx$dV6g*#6c}p*TY-UL{NRF0?dk{S(gC$+NGKCBN!eIOd-0=a8Ht zC9jhuZwVy&I=}S>q$f)0FUXQ31f=E@^e@mZlG-=PlD7|9wLosY1zoMw{gN!5Nm_}e z*7y~)^QHD3vS!L=_%#_bFyKzfKtAs*thQiiKYO6Ndp*6uOM9KIo}22Of0lgf8%q>p z&x#89AQd{mxLyERf;At9_vj!n;G@#k0v!GgE{yK%S_s!~;KI1gu3EU>hYMphyN-wJ zKj6ZU%&t$t^`CHIy5pe}W6cBD+q3>m#_XlCD$X5`tV9^H_BnTorI(jAK_FT=-$Gz-Y#<)8U#4 z7e+3)VpU{)TyKh57D8i0{h$L zUFX1cI$Y>8xnLt)XTXKdkzMQIs)q}`AiJ92S_T)oJ$5z2)c_azI(D_dwE`~mZR~1= zYZYAR!`QU}t~GF>t76wixYok;mUOkjwGOUdg|65+WPPmLc~&FhqlZH+W9!K}sGECM z6GfwRGrG|c+TH4>_SJ=t{Hyyzy2GF4BXzO5o9GSu^)&ad>JC@@4(rBB zUt_ADej1+LIXKreTQfdQkg|Rzb$B=JI%LxQ2uEvq`04Udl41OQBG%oSa{7a61{KPS znKR4EEBJ3_d3lu_N5fh)gu}V9_bIz>deu~Z95pI?V5JtxR8PHo86S6PXHB#|Vf~F3 zhzOt$Lfky%);L`eqXWAtDqS{{XVcx?WmRNQ=Rq(4Vc3<= z(5FA^vdjpuDxW6iM6T8>%JmT#Zt;*?U39Rm^GK6#h)wiKJgL=PJfRu3c$_R;44~pM z`hZ%{=Q3Mhyk_PlFs%;7>;&^+(#iG^f1w$+_zqc$`4AZeCI)Y#e%gkF9^ENP38b%CghAnpKOwVBA>%`2@=82ewleKGapsV$H3gGVZ;{Au*GJbxyfK6duHYh%zR2Qp9Zr{!-$QV zVT%nqv(;cCEoSD;%>033J_qJ{4I>&g!xrc0%ykA6c{MX{Vde{p`68HWG>llS8MauZ zGglf+B<9S#jhQbi=8wT#u3^M7&9KE%omp=%k=Zlzc4q!eF<%AqbPXfwG{Y9B>C96N zCZ-0=yn~sqE9M(uo~U8OV$HC{2|9C;!NlBxnRhYsEya8r%!L|8EYJ*F%-5O68B9!0 zn0XH~-&M@_z?`dL#2n4A#nC$RD1(XF4Kwd&=KG5ITQF-hjF_z%wy4&bhZ#&vkC^!Y zGk>p`AAo6V7-4CKEvj_pOoNH}6*C`V=7);;M=&cij40O(TL_(5W-u{9W9GxmEH9UN zNCkZofBch{GkmBSw)h{iRL<}RG732ZW_ZlRs-SIIifM!Sfrb&k*9=?yPG|m?!8~3v zpJ3)}#jFAIw;D#guNk)Zcb)kggNZpN*Aq*OwlzmF=Ysj3h7s>-hAn=rGv6_on4~iE z8D=g}%!OdStzpDlnqiAKb>_bs%#$P&OP02^STRoo^9>CnUe^p;{IkydxxvIVnd|u+ zGwT%dbTD7lFyd#LVT+&Y%vTI1=Gn~rAv2dL=5jE9tYO5selBw{nD=QIaj$0B;vSv(4TFj05@x=}_3Twl z7tA{~jJQKHZ1FXn`Bj67^%iDgo!Pbq6f*_pZ5l@0su{NUlFq!vU}C|BnZIDBub2Ut zH)$Agqh{FR2Az4m!NiIWGv8$9sABE`^BN5!uGS1&d`@RxWiT5h^OwxLLNTud^D+%1 z_GyMKKC3hL8ceLza6R8)=Cz7>9hf5;Mht6)Epj?DE16WtuEvT0=I`at>`82!xBTtv zE3q;#X1%161hMW-&aRA4|MBSmIvDHby>hF&-5vJuyK+*LRnZ@$`d>9>+8p5Vb={ZO zyk@T!m~r#+gRY~`)tEq=QcR>HrI;79wEk~bZhPd+%?$$c<4CC^rSb{|roE9;%wo+7 zU^W{m#pKkKVv-su#hlZWV(zI+?XV@PF_mPgsw<|Hx>UAVHD-t=6*I+1DJFg<6%)Wn zDduw~74y1CDW++r6w|dxDP~`$6tl2MDJE5>6qBn+DdtM16mzCXDW*WC6jPx{DP}gN z6f>MiDJCo|Rd)*$mq;n*Atn{`kw__~7p4@`j7TYF4W<;che#Y)X+H>rzz# zWVma6Uzsb{1VnIub9|B8$BBwH?$gLu!NR?QsZY)x! zNGUQPQ;JL|Qi{aJtN;?6NGb9alZw10Qi?Rhq#_-Olp?z@rN}ZOrAQj^S1yn=K!Vjb I{oh&t2XXc!qW}N^ literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/obj/Debug/KeePassLib.csproj.FileListAbsolute.txt b/ModernKeePassLib/obj/Debug/KeePassLib.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..b9390e8 --- /dev/null +++ b/ModernKeePassLib/obj/Debug/KeePassLib.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\obj\Debug\KeePassLib.csprojResolveAssemblyReference.cache +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\KeePassLib.dll +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\KeePassLib.pdb +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\System.Net.Requests.dll +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\System.Xml.XmlSerializer.dll +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\Windows.winmd +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\System.Net.Requests.xml +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\System.Xml.XmlSerializer.xml +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\bin\Debug\Windows.xml +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\obj\Debug\KeePassLib.dll +C:\Users\GBE\Source\Repos\pass-jeeves\KeePassLib\obj\Debug\KeePassLib.pdb diff --git a/ModernKeePassLib/obj/Debug/KeePassLib.csprojResolveAssemblyReference.cache b/ModernKeePassLib/obj/Debug/KeePassLib.csprojResolveAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..0efc83400e144c0886383a585a4f91e508450191 GIT binary patch literal 204824 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 literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/obj/Debug/ModernKeePassLib.dll b/ModernKeePassLib/obj/Debug/ModernKeePassLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..5f258ec32328dd0391e13af6b0199f1becdfda61 GIT binary patch literal 212480 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 literal 0 HcmV?d00001 diff --git a/ModernKeePassLib/obj/Debug/ModernKeePassLib.pdb b/ModernKeePassLib/obj/Debug/ModernKeePassLib.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a1b69bef79eeb1dc3d1c416e9fcdd4f41661578b GIT binary patch literal 593408 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≶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

    ><8I4V5A3#%r|i8l+S`$o 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 1.0.1", + "NETStandard.Library >= 2.0.0", + "System.Runtime.WindowsRuntime >= 4.3.0" + ], + ".NETStandard,Version=v1.2": [] + } +} \ No newline at end of file

    +46}Bi!ffPjkRmOtW8j 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�e*=w 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